{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "245d99ab",
   "metadata": {},
   "source": [
    "# Exercise: Find the anagrams for all words in a list"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "id": "d1e46c4a",
   "metadata": {},
   "source": [
    "* You are given an English dictionary containing M words (“the dictionary”), and a separate list of N words (“the input”, saved in the file `words_to_search.txt`)\n",
    "* For each word in the input, find all the anagrams in the dictionary (e.g., for input 'acme' the anagrams are `['acme', 'came', 'mace']`)\n",
    "\n",
    "How to proceed?\n",
    "1. Write an algorithm to find all anagrams for one input word first\n",
    "2. What is the Big-O class of this algorithm when executed the full N-words input?\n",
    "3. Is there a way to pre-process the dictionary to improve the Big-O performance?"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9b9cecd",
   "metadata": {},
   "source": [
    "# 1. Load the system dictionary and the input words"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "24070a26",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the system dictionary\n",
    "with open('/usr/share/dict/words', 'r') as f:\n",
    "    dict_words = [w.strip() for w in f.readlines()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4002fcdd",
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['A',\n",
       " 'a',\n",
       " 'aa',\n",
       " 'aal',\n",
       " 'aalii',\n",
       " '...',\n",
       " 'zythem',\n",
       " 'Zythia',\n",
       " 'zythum',\n",
       " 'Zyzomys',\n",
       " 'Zyzzogeton']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Print the start and end of the dictionary\n",
    "dict_words[:5] + ['...'] + dict_words[-5:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "823537ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Load the input words\n",
    "with open('words_to_search.txt', 'r') as f:\n",
    "    words = [w.strip() for w in f.readlines()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "4ccec6a3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['acer',\n",
       " 'acers',\n",
       " 'aces',\n",
       " 'aches',\n",
       " 'acme',\n",
       " '...',\n",
       " 'yap',\n",
       " 'yaw',\n",
       " 'yea',\n",
       " 'zendo',\n",
       " 'zoned']"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Print the start and end of the input list\n",
    "words[:5] + ['...'] + words[-5:]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "14d91685",
   "metadata": {},
   "source": [
    "# 2. Look for the anagrams of one input word, e.g. \"organ\"\n",
    "\n",
    "* There are several anagrams, including \"groan\" and \"argon\".\n",
    "\n",
    "* What is the Big-O performance oh your algorithm? In terms of M, the number of words in the dictionary, and K, the number of letters in a word"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "badf44c1",
   "metadata": {},
   "outputs": [],
   "source": [
    "word = 'organ'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "551e6b54",
   "metadata": {},
   "outputs": [],
   "source": [
    "anagrams = []\n",
    "for dict_word in dict_words:  # O(M)\n",
    "    if sorted(word) == sorted(dict_word):  # 2 * O(K log K) ~ O(K log K)\n",
    "        anagrams.append(dict_word)  # O(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "84294a2f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['angor',\n",
       " 'argon',\n",
       " 'goran',\n",
       " 'grano',\n",
       " 'groan',\n",
       " 'nagor',\n",
       " 'orang',\n",
       " 'organ',\n",
       " 'rogan']"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "anagrams"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cd1196c",
   "metadata": {},
   "source": [
    "The performance of this implementation is O(M * K log K).\n",
    "\n",
    "Note that instead of sorting , we could use a dictionary mapping letters to letter counts. This would make the performance even better, O(M * K)! However, in practice it would make little difference and would make the code more complicated, so we'll leave it like this."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "115c3219",
   "metadata": {},
   "source": [
    "# 3. Look for the anagrams of the words in the input list\n",
    "\n",
    "* How does the Big-O performance of your one-word implementation scale to an input list of M words?\n",
    "* Is there a way to pre-process the dictionary words in a data structure that is better suited for this task?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "e00054ff",
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[18], line 12\u001b[0m\n\u001b[1;32m     10\u001b[0m words_anagrams \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m     11\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m word \u001b[38;5;129;01min\u001b[39;00m words:  \u001b[38;5;66;03m# O(M)\u001b[39;00m\n\u001b[0;32m---> 12\u001b[0m     anagrams \u001b[38;5;241m=\u001b[39m find_anagrams(word, dict_words)\n\u001b[1;32m     13\u001b[0m     words_anagrams\u001b[38;5;241m.\u001b[39mappend((word, anagrams))\n",
      "Cell \u001b[0;32mIn[18], line 6\u001b[0m, in \u001b[0;36mfind_anagrams\u001b[0;34m(word, dict_words)\u001b[0m\n\u001b[1;32m      4\u001b[0m anagrams \u001b[38;5;241m=\u001b[39m []\n\u001b[1;32m      5\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m dict_word \u001b[38;5;129;01min\u001b[39;00m dict_words:   \u001b[38;5;66;03m# O(N)\u001b[39;00m\n\u001b[0;32m----> 6\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28msorted\u001b[39m(word) \u001b[38;5;241m==\u001b[39m \u001b[38;5;28msorted\u001b[39m(dict_word):  \u001b[38;5;66;03m# O(K log K)\u001b[39;00m\n\u001b[1;32m      7\u001b[0m         anagrams\u001b[38;5;241m.\u001b[39mappend(dict_word)  \u001b[38;5;66;03m# O(1)\u001b[39;00m\n\u001b[1;32m      8\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m anagrams\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# Naive implementation, it takes a long time\n",
    "\n",
    "def find_anagrams(word, dict_words):\n",
    "    anagrams = []\n",
    "    for dict_word in dict_words:   # O(N)\n",
    "        if sorted(word) == sorted(dict_word):  # O(K log K)\n",
    "            anagrams.append(dict_word)  # O(1)\n",
    "    return anagrams\n",
    "\n",
    "words_anagrams = []\n",
    "for word in words:  # O(M)\n",
    "    anagrams = find_anagrams(word, dict_words)\n",
    "    words_anagrams.append((word, anagrams))  # O(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "297fdc78",
   "metadata": {},
   "source": [
    "The complexity of this algorithm is O(M * N * KlogK), where M is the length of the list of words to search, N is the length of words in the dictionary, and K is the length of words."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "48947a28",
   "metadata": {},
   "source": [
    "# What if we pre-process the dictionary in a data structure that is better suited for this task?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "3ad5dccd",
   "metadata": {},
   "outputs": [],
   "source": [
    "anagrams_map = {}\n",
    "for dict_word in dict_words:  # O(N)\n",
    "    letters = tuple(sorted(dict_word))  # O(K log K)\n",
    "    if letters not in anagrams_map:  # O(1)\n",
    "        anagrams_map[letters] = []  # O(1)\n",
    "    anagrams_map[letters].append(dict_word)  # O(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "786fec1b",
   "metadata": {},
   "outputs": [],
   "source": [
    "words_anagrams = []\n",
    "final_words = []\n",
    "for word in words:  # O(M)\n",
    "    letters = tuple(sorted(word))  # O(K log K)\n",
    "    if letters not in anagrams_map:  # O(1)\n",
    "        print('This word is not in the system dictionary -- skipping', word)\n",
    "        continue\n",
    "    else:\n",
    "        final_words.append(word)\n",
    "    words_anagrams.append((word, anagrams_map[letters]))  # O(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "dda842a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[('acer', ['acre', 'care', 'crea', 'race']),\n",
       " ('acers', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('aces', ['case', 'esca']),\n",
       " ('aches', ['chase']),\n",
       " ('acme', ['acme', 'came', 'mace']),\n",
       " ('acned', ['dance', 'decan']),\n",
       " ('acre', ['acre', 'care', 'crea', 'race']),\n",
       " ('acres', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('act', ['act', 'cat']),\n",
       " ('acts', ['cast', 'scat']),\n",
       " ('acyl', ['acyl', 'clay', 'lacy']),\n",
       " ('add', ['add', 'dad']),\n",
       " ('adverb', ['adverb']),\n",
       " ('aesc', ['case', 'esca']),\n",
       " ('aether', ['heater', 'hereat', 'reheat']),\n",
       " ('aethers', ['thereas']),\n",
       " ('afield', ['afield', 'defial']),\n",
       " ('aft', ['aft', 'fat']),\n",
       " ('agree', ['agree', 'eager', 'eagre']),\n",
       " ('agrees', ['grease']),\n",
       " ('ags', ['gas', 'sag']),\n",
       " ('ah', ['ah', 'ha']),\n",
       " ('ahs', ['ash', 'sah', 'sha']),\n",
       " ('aide', ['aide', 'idea']),\n",
       " ('aides', ['aside']),\n",
       " ('airings', ['raising']),\n",
       " ('airmen', ['marine', 'remain']),\n",
       " ('alloy', ['alloy', 'loyal']),\n",
       " ('almes', ['amsel', 'mesal', 'samel']),\n",
       " ('alp', ['alp', 'lap', 'pal']),\n",
       " ('alps', ['salp', 'slap']),\n",
       " ('altern', ['altern', 'antler', 'learnt', 'rental', 'ternal']),\n",
       " ('altrices', ['altrices', 'selictar']),\n",
       " ('alts', ['last', 'salt', 'slat']),\n",
       " ('am', ['am', 'ma']),\n",
       " ('amen', ['amen', 'enam', 'mane', 'mean', 'name', 'nema']),\n",
       " ('amp', ['amp', 'map', 'pam']),\n",
       " ('amps', ['samp', 'spam']),\n",
       " ('anglist', ['lasting', 'salting', 'slating', 'staling']),\n",
       " ('anils', ['sinal', 'slain', 'snail']),\n",
       " ('ant', ['ant', 'nat', 'tan']),\n",
       " ('antis', ['saint', 'satin', 'stain']),\n",
       " ('antler', ['altern', 'antler', 'learnt', 'rental', 'ternal']),\n",
       " ('antlers', ['saltern', 'starnel', 'sternal']),\n",
       " ('any', ['any', 'nay', 'yan']),\n",
       " ('ape', ['ape', 'pea']),\n",
       " ('aper', ['aper', 'pare', 'pear', 'rape', 'reap']),\n",
       " ('apt', ['apt', 'pat', 'tap']),\n",
       " ('arb', ['bar', 'bra', 'rab']),\n",
       " ('arc', ['arc', 'car']),\n",
       " ('arcs', ['scar']),\n",
       " ('are', ['aer', 'are', 'ear', 'era', 'rea']),\n",
       " ('ared', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('ares', ['arse', 'rase', 'sare', 'sear', 'sera']),\n",
       " ('argle', ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal']),\n",
       " ('aril', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('arising', ['raising']),\n",
       " ('arm', ['arm', 'mar', 'ram']),\n",
       " ('armpit', ['armpit', 'impart']),\n",
       " ('arms', ['arms']),\n",
       " ('arse', ['arse', 'rase', 'sare', 'sear', 'sera']),\n",
       " ('art', ['art', 'rat', 'tar', 'tra']),\n",
       " ('article', ['article', 'recital']),\n",
       " ('articles', ['altrices', 'selictar']),\n",
       " ('arts', ['sart', 'star', 'stra', 'tars', 'tsar']),\n",
       " ('arty', ['arty', 'atry', 'tray']),\n",
       " ('ash', ['ash', 'sah', 'sha']),\n",
       " ('aside', ['aside']),\n",
       " ('aspired', ['despair', 'pardesi']),\n",
       " ('asps', ['pass']),\n",
       " ('ate', ['ate', 'eat', 'eta', 'tae', 'tea']),\n",
       " ('ates', ['ates', 'east', 'eats', 'sate', 'seat', 'seta']),\n",
       " ('atoners', ['noreast', 'rosetan', 'seatron', 'senator', 'treason']),\n",
       " ('attic', ['attic', 'tacit']),\n",
       " ('aves', ['save', 'vase']),\n",
       " ('aye', ['aye', 'yea']),\n",
       " ('backward', ['backward', 'drawback']),\n",
       " ('bad', ['bad', 'dab']),\n",
       " ('bag', ['bag', 'gab']),\n",
       " ('bake', ['bake', 'beak']),\n",
       " ('baker', ['baker', 'brake', 'break']),\n",
       " ('balm', ['balm', 'lamb']),\n",
       " ('bar', ['bar', 'bra', 'rab']),\n",
       " ('bare', ['bare', 'bear', 'brae']),\n",
       " ('bast', ['bast', 'bats', 'stab']),\n",
       " ('bat', ['bat', 'tab']),\n",
       " ('batlet', ['battel', 'battle', 'tablet']),\n",
       " ('bats', ['bast', 'bats', 'stab']),\n",
       " ('battel', ['battel', 'battle', 'tablet']),\n",
       " ('battle', ['battel', 'battle', 'tablet']),\n",
       " ('beak', ['bake', 'beak']),\n",
       " ('bear', ['bare', 'bear', 'brae']),\n",
       " ('begin', ['begin', 'being', 'binge']),\n",
       " ('being', ['begin', 'being', 'binge']),\n",
       " ('below', ['below', 'bowel', 'elbow']),\n",
       " ('best', ['best']),\n",
       " ('bets', ['best']),\n",
       " ('binge', ['begin', 'being', 'binge']),\n",
       " ('blam', ['balm', 'lamb']),\n",
       " ('blot', ['blot', 'bolt']),\n",
       " ('blow', ['blow', 'bowl']),\n",
       " ('bludier', ['builder', 'rebuild']),\n",
       " ('bluest', ['bustle', 'sublet', 'subtle']),\n",
       " ('bluets', ['bustle', 'sublet', 'subtle']),\n",
       " ('bolt', ['blot', 'bolt']),\n",
       " ('bombed', ['bombed']),\n",
       " ('borde', ['boder', 'orbed']),\n",
       " ('bored', ['boder', 'orbed']),\n",
       " ('bores', ['boser', 'brose', 'sober']),\n",
       " ('boss', ['boss']),\n",
       " ('bourne', ['unrobe']),\n",
       " ('bowel', ['below', 'bowel', 'elbow']),\n",
       " ('bowl', ['blow', 'bowl']),\n",
       " ('bra', ['bar', 'bra', 'rab']),\n",
       " ('brae', ['bare', 'bear', 'brae']),\n",
       " ('brag', ['brag', 'garb', 'grab']),\n",
       " ('brake', ['baker', 'brake', 'break']),\n",
       " ('braved', ['adverb']),\n",
       " ('break', ['baker', 'brake', 'break']),\n",
       " ('brief', ['bifer', 'brief', 'fiber']),\n",
       " ('brose', ['boser', 'brose', 'sober']),\n",
       " ('brush', ['brush', 'shrub']),\n",
       " ('buhrs', ['brush', 'shrub']),\n",
       " ('builder', ['builder', 'rebuild']),\n",
       " ('burden', ['bunder', 'burden', 'burned', 'unbred']),\n",
       " ('burned', ['bunder', 'burden', 'burned', 'unbred']),\n",
       " ('bury', ['bury', 'ruby']),\n",
       " ('bush', ['bush']),\n",
       " ('bust', ['bust', 'stub']),\n",
       " ('bustle', ['bustle', 'sublet', 'subtle']),\n",
       " ('but', ['but', 'tub']),\n",
       " ('butles', ['bustle', 'sublet', 'subtle']),\n",
       " ('buts', ['bust', 'stub']),\n",
       " ('cab', ['bac', 'cab']),\n",
       " ('cabs', ['scab']),\n",
       " ('cadres', ['sacred']),\n",
       " ('cafe', ['face']),\n",
       " ('caller', ['caller', 'cellar', 'recall']),\n",
       " ('calm', ['calm', 'clam']),\n",
       " ('calo', ['alco', 'coal', 'cola', 'loca']),\n",
       " ('came', ['acme', 'came', 'mace']),\n",
       " ('caned', ['dance', 'decan']),\n",
       " ('canoe', ['acone', 'canoe', 'ocean']),\n",
       " ('cans', ['scan']),\n",
       " ('cape', ['cape', 'cepa', 'pace']),\n",
       " ('car', ['arc', 'car']),\n",
       " ('care', ['acre', 'care', 'crea', 'race']),\n",
       " ('cares', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('caret',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('carol', ['calor', 'carol', 'claro', 'coral']),\n",
       " ('carp', ['carp', 'crap']),\n",
       " ('cars', ['scar']),\n",
       " ('carse', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('carte',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('case', ['case', 'esca']),\n",
       " ('cask', ['cask', 'sack']),\n",
       " ('cast', ['cast', 'scat']),\n",
       " ('cat', ['act', 'cat']),\n",
       " ('cater',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('cats', ['cast', 'scat']),\n",
       " ('cause', ['cause', 'sauce']),\n",
       " ('causes', ['causse']),\n",
       " ('ceas', ['case', 'esca']),\n",
       " ('cedars', ['sacred']),\n",
       " ('cedi', ['dice', 'iced']),\n",
       " ('cellar', ['caller', 'cellar', 'recall']),\n",
       " ('cents', ['scent']),\n",
       " ('cereus', ['ceruse', 'recuse', 'rescue', 'secure']),\n",
       " ('ceruse', ['ceruse', 'recuse', 'rescue', 'secure']),\n",
       " ('cesure', ['ceruse', 'recuse', 'rescue', 'secure']),\n",
       " ('charm', ['charm', 'march']),\n",
       " ('charmer', ['charmer', 'marcher', 'remarch']),\n",
       " ('charming', ['charming']),\n",
       " ('chase', ['chase']),\n",
       " ('cheating', ['cheating', 'teaching']),\n",
       " ('chetnik', ['kitchen', 'thicken']),\n",
       " ('chin', ['chin', 'inch']),\n",
       " ('chit', ['chit', 'itch']),\n",
       " ('chum', ['chum', 'much']),\n",
       " ('cion', ['cion', 'coin', 'icon']),\n",
       " ('citrus', ['citrus', 'rictus', 'rustic']),\n",
       " ('clam', ['calm', 'clam']),\n",
       " ('claro', ['calor', 'carol', 'claro', 'coral']),\n",
       " ('clay', ['acyl', 'clay', 'lacy']),\n",
       " ('cloud', ['cloud', 'could']),\n",
       " ('coal', ['alco', 'coal', 'cola', 'loca']),\n",
       " ('cocaine', ['cocaine', 'oceanic']),\n",
       " ('cod', ['cod', 'doc']),\n",
       " ('coin', ['cion', 'coin', 'icon']),\n",
       " ('cola', ['alco', 'coal', 'cola', 'loca']),\n",
       " ('comics', ['cosmic']),\n",
       " ('cone', ['cone', 'once']),\n",
       " ('coni', ['cion', 'coin', 'icon']),\n",
       " ('cool', ['cool', 'loco']),\n",
       " ('coral', ['calor', 'carol', 'claro', 'coral']),\n",
       " ('cork', ['cork', 'rock']),\n",
       " ('corset', ['corset', 'coster', 'escort', 'scoter', 'sector']),\n",
       " ('corvet', ['covert', 'vector']),\n",
       " ('cosmic', ['cosmic']),\n",
       " ('coster', ['corset', 'coster', 'escort', 'scoter', 'sector']),\n",
       " ('could', ['cloud', 'could']),\n",
       " ('covert', ['covert', 'vector']),\n",
       " ('crap', ['carp', 'crap']),\n",
       " ('crate',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('crews', ['screw']),\n",
       " ('dab', ['bad', 'dab']),\n",
       " ('dad', ['add', 'dad']),\n",
       " ('dah', ['dah', 'dha', 'had']),\n",
       " ('dairy', ['dairy', 'diary', 'yaird']),\n",
       " ('dale', ['dale', 'deal', 'lade', 'lead']),\n",
       " ('dalets', ['desalt', 'salted']),\n",
       " ('dali', ['dali', 'dial', 'laid']),\n",
       " ('dam', ['dam', 'mad']),\n",
       " ('dance', ['dance', 'decan']),\n",
       " ('dare', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('dashed', ['dashed', 'shaded']),\n",
       " ('dawn', ['dawn', 'wand']),\n",
       " ('deaf', ['deaf', 'fade']),\n",
       " ('deal', ['dale', 'deal', 'lade', 'lead']),\n",
       " ('dealer', ['dealer', 'leader', 'redeal', 'relade', 'relead']),\n",
       " ('dear', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('dearer', ['reader', 'redare', 'reread']),\n",
       " ('death', ['death']),\n",
       " ('deaws', ['sawed']),\n",
       " ('declines', ['licensed', 'silenced']),\n",
       " ('decree', ['decree', 'recede']),\n",
       " ('deens', ['dense', 'needs']),\n",
       " ('defer', ['defer', 'freed']),\n",
       " ('deil', ['idle', 'lied']),\n",
       " ('delayer', ['delayer', 'layered', 'redelay']),\n",
       " ('deli', ['idle', 'lied']),\n",
       " ('deltas', ['desalt', 'salted']),\n",
       " ('denes', ['dense', 'needs']),\n",
       " ('dense', ['dense', 'needs']),\n",
       " ('denser', ['resend', 'sender']),\n",
       " ('desalt', ['desalt', 'salted']),\n",
       " ('deserver', ['deserver', 'reserved', 'reversed']),\n",
       " ('despair', ['despair', 'pardesi']),\n",
       " ('devote', ['devote']),\n",
       " ('dew', ['dew', 'wed']),\n",
       " ('dial', ['dali', 'dial', 'laid']),\n",
       " ('diaper', ['diaper', 'paired']),\n",
       " ('diapers', ['despair', 'pardesi']),\n",
       " ('diary', ['dairy', 'diary', 'yaird']),\n",
       " ('dice', ['dice', 'iced']),\n",
       " ('diel', ['idle', 'lied']),\n",
       " ('diet', ['diet', 'dite', 'edit', 'tide', 'tied']),\n",
       " ('dikes', ['skied']),\n",
       " ('dimple', ['dimple']),\n",
       " ('direr', ['drier', 'rider']),\n",
       " ('disease', ['disease', 'seaside']),\n",
       " ('disk', ['disk', 'skid']),\n",
       " ('dite', ['diet', 'dite', 'edit', 'tide', 'tied']),\n",
       " ('doc', ['cod', 'doc']),\n",
       " ('doen', ['done', 'node']),\n",
       " ('dog', ['dog', 'god']),\n",
       " ('dogs', ['dogs']),\n",
       " ('don', ['don', 'nod']),\n",
       " ('done', ['done', 'node']),\n",
       " ('doom', ['doom', 'mood']),\n",
       " ('dozen', ['dozen', 'zoned']),\n",
       " ('draw', ['draw', 'ward']),\n",
       " ('drawback', ['backward', 'drawback']),\n",
       " ('dreare', ['reader', 'redare', 'reread']),\n",
       " ('drier', ['drier', 'rider']),\n",
       " ('dune', ['dune', 'nude', 'unde']),\n",
       " ('dunite', ['dunite', 'united', 'untied']),\n",
       " ('dusty', ['dusty', 'study']),\n",
       " ('eager', ['agree', 'eager', 'eagre']),\n",
       " ('eagers', ['grease']),\n",
       " ('eagre', ['agree', 'eager', 'eagre']),\n",
       " ('eagres', ['grease']),\n",
       " ('ear', ['aer', 'are', 'ear', 'era', 'rea']),\n",
       " ('eard', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('early', ['early', 'layer', 'relay']),\n",
       " ('earn', ['earn', 'near', 'rane']),\n",
       " ('earner', ['earner']),\n",
       " ('ears', ['arse', 'rase', 'sare', 'sear', 'sera']),\n",
       " ('earthy', ['earthy', 'hearty', 'yearth']),\n",
       " ('east', ['ates', 'east', 'eats', 'sate', 'seat', 'seta']),\n",
       " ('eastling', ['genitals', 'stealing']),\n",
       " ('eat', ['ate', 'eat', 'eta', 'tae', 'tea']),\n",
       " ('eath', ['haet', 'hate', 'heat']),\n",
       " ('eats', ['ates', 'east', 'eats', 'sate', 'seat', 'seta']),\n",
       " ('edit', ['diet', 'dite', 'edit', 'tide', 'tied']),\n",
       " ('eel', ['eel', 'lee']),\n",
       " ('egos', ['goes', 'sego']),\n",
       " ('eh', ['eh', 'he']),\n",
       " ('eild', ['idle', 'lied']),\n",
       " ('elbow', ['below', 'bowel', 'elbow']),\n",
       " ('elints', ['enlist', 'listen', 'silent', 'tinsel']),\n",
       " ('emit', ['emit', 'item', 'mite', 'time']),\n",
       " ('emits', ['metis', 'smite', 'stime', 'times']),\n",
       " ('emoter', ['meteor', 'remote']),\n",
       " ('enders', ['resend', 'sender']),\n",
       " ('enfiring', ['infringe', 'refining']),\n",
       " ('enlist', ['enlist', 'listen', 'silent', 'tinsel']),\n",
       " ('enlisted', ['enlisted', 'lintseed']),\n",
       " ('era', ['aer', 'are', 'ear', 'era', 'rea']),\n",
       " ('eras', ['arse', 'rase', 'sare', 'sear', 'sera']),\n",
       " ('eros', ['eros', 'rose', 'sero', 'sore']),\n",
       " ('escar', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('escort', ['corset', 'coster', 'escort', 'scoter', 'sector']),\n",
       " ('ester',\n",
       "  ['ester',\n",
       "   'estre',\n",
       "   'reest',\n",
       "   'reset',\n",
       "   'steer',\n",
       "   'stere',\n",
       "   'stree',\n",
       "   'terse',\n",
       "   'tsere']),\n",
       " ('eta', ['ate', 'eat', 'eta', 'tae', 'tea']),\n",
       " ('etas', ['ates', 'east', 'eats', 'sate', 'seat', 'seta']),\n",
       " ('ether', ['ether', 'rethe', 'theer', 'there', 'three']),\n",
       " ('evil', ['evil', 'live', 'veil', 'vile', 'vlei']),\n",
       " ('evils', ['slive']),\n",
       " ('ewts', ['stew', 'west']),\n",
       " ('except', ['except', 'expect']),\n",
       " ('exist', ['exist', 'sixte']),\n",
       " ('exits', ['exist', 'sixte']),\n",
       " ('expect', ['except', 'expect']),\n",
       " ('face', ['face']),\n",
       " ('fade', ['deaf', 'fade']),\n",
       " ('failed', ['afield', 'defial']),\n",
       " ('faker', ['faker', 'freak']),\n",
       " ('fare', ['fare', 'fear', 'frae']),\n",
       " ('farmed', ['framed']),\n",
       " ('farming', ['farming', 'framing']),\n",
       " ('fast', ['fast', 'saft']),\n",
       " ('fat', ['aft', 'fat']),\n",
       " ('fate', ['atef', 'fate', 'feat']),\n",
       " ('fats', ['fast', 'saft']),\n",
       " ('fear', ['fare', 'fear', 'frae']),\n",
       " ('feat', ['atef', 'fate', 'feat']),\n",
       " ('feel', ['feel', 'flee']),\n",
       " ('feer', ['feer', 'free', 'reef']),\n",
       " ('felid', ['felid', 'field']),\n",
       " ('felt', ['felt', 'flet', 'left']),\n",
       " ('fere', ['feer', 'free', 'reef']),\n",
       " ('feta', ['atef', 'fate', 'feat']),\n",
       " ('fiber', ['bifer', 'brief', 'fiber']),\n",
       " ('fibre', ['bifer', 'brief', 'fiber']),\n",
       " ('field', ['felid', 'field']),\n",
       " ('filed', ['felid', 'field']),\n",
       " ('filer', ['filer', 'flier', 'lifer', 'rifle']),\n",
       " ('filets', ['itself', 'stifle']),\n",
       " ('filler', ['filler', 'refill']),\n",
       " ('finder', ['finder', 'friend', 'redfin', 'refind']),\n",
       " ('finer', ['finer', 'infer']),\n",
       " ('finger', ['finger', 'fringe']),\n",
       " ('fired', ['fired', 'fried']),\n",
       " ('fires', ['serif']),\n",
       " ('fist', ['fist', 'sift']),\n",
       " ('fitness', ['fitness']),\n",
       " ('fits', ['fist', 'sift']),\n",
       " ('flee', ['feel', 'flee']),\n",
       " ('flesh', ['flesh', 'shelf']),\n",
       " ('flied', ['felid', 'field']),\n",
       " ('flier', ['filer', 'flier', 'lifer', 'rifle']),\n",
       " ('fliest', ['itself', 'stifle']),\n",
       " ('flites', ['itself', 'stifle']),\n",
       " ('flog', ['flog', 'golf']),\n",
       " ('flow', ['flow', 'fowl', 'wolf']),\n",
       " ('flue', ['flue', 'fuel']),\n",
       " ('form', ['form', 'from']),\n",
       " ('former', ['former', 'reform']),\n",
       " ('forth', ['forth', 'froth']),\n",
       " ('fowl', ['flow', 'fowl', 'wolf']),\n",
       " ('frae', ['fare', 'fear', 'frae']),\n",
       " ('framed', ['framed']),\n",
       " ('framing', ['farming', 'framing']),\n",
       " ('freak', ['faker', 'freak']),\n",
       " ('free', ['feer', 'free', 'reef']),\n",
       " ('freed', ['defer', 'freed']),\n",
       " ('fried', ['fired', 'fried']),\n",
       " ('friend', ['finder', 'friend', 'redfin', 'refind']),\n",
       " ('fries', ['serif']),\n",
       " ('fringe', ['finger', 'fringe']),\n",
       " ('frise', ['serif']),\n",
       " ('from', ['form', 'from']),\n",
       " ('froth', ['forth', 'froth']),\n",
       " ('fuel', ['flue', 'fuel']),\n",
       " ('furs', ['surf']),\n",
       " ('gab', ['bag', 'gab']),\n",
       " ('gals', ['slag']),\n",
       " ('gaps', ['gasp']),\n",
       " ('garb', ['brag', 'garb', 'grab']),\n",
       " ('gas', ['gas', 'sag']),\n",
       " ('gasp', ['gasp']),\n",
       " ('gater', ['gater', 'grate', 'great', 'retag', 'targe']),\n",
       " ('geare', ['agree', 'eager', 'eagre']),\n",
       " ('geares', ['grease']),\n",
       " ('gel', ['gel', 'leg']),\n",
       " ('gelatins', ['genitals', 'stealing']),\n",
       " ('genitals', ['genitals', 'stealing']),\n",
       " ('geos', ['goes', 'sego']),\n",
       " ('girn', ['girn', 'grin', 'ring']),\n",
       " ('glare', ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal']),\n",
       " ('god', ['dog', 'god']),\n",
       " ('gods', ['dogs']),\n",
       " ('goes', ['goes', 'sego']),\n",
       " ('golf', ['flog', 'golf']),\n",
       " ('grab', ['brag', 'garb', 'grab']),\n",
       " ('grate', ['gater', 'grate', 'great', 'retag', 'targe']),\n",
       " ('grease', ['grease']),\n",
       " ('great', ['gater', 'grate', 'great', 'retag', 'targe']),\n",
       " ('grin', ['girn', 'grin', 'ring']),\n",
       " ('grues', ['surge']),\n",
       " ('gulp', ['gulp', 'plug']),\n",
       " ('gum', ['gum', 'mug']),\n",
       " ('gunshot', ['gunshot', 'shotgun', 'uhtsong']),\n",
       " ('gust', ['gust', 'stug']),\n",
       " ('guts', ['gust', 'stug']),\n",
       " ('ha', ['ah', 'ha']),\n",
       " ('had', ['dah', 'dha', 'had']),\n",
       " ('haet', ['haet', 'hate', 'heat']),\n",
       " ('halls', ['shall']),\n",
       " ('halses', ['hassel', 'hassle']),\n",
       " ('hams', ['mash', 'samh', 'sham']),\n",
       " ('hangover', ['overhang']),\n",
       " ('harps', ['sharp', 'shrap']),\n",
       " ('has', ['ash', 'sah', 'sha']),\n",
       " ('hassel', ['hassel', 'hassle']),\n",
       " ('hassle', ['hassel', 'hassle']),\n",
       " ('hate', ['haet', 'hate', 'heat']),\n",
       " ('hated', ['death']),\n",
       " ('hay', ['hay', 'yah']),\n",
       " ('he', ['eh', 'he']),\n",
       " ('hearty', ['earthy', 'hearty', 'yearth']),\n",
       " ('heat', ['haet', 'hate', 'heat']),\n",
       " ('heater', ['heater', 'hereat', 'reheat']),\n",
       " ('heaters', ['thereas']),\n",
       " ('heir', ['heir', 'hire']),\n",
       " ('heirs', ['hirse', 'shier', 'shire']),\n",
       " ('hereat', ['heater', 'hereat', 'reheat']),\n",
       " ('hewn', ['hewn', 'when']),\n",
       " ('hikes', ['sheik']),\n",
       " ('hire', ['heir', 'hire']),\n",
       " ('hires', ['hirse', 'shier', 'shire']),\n",
       " ('ho', ['ho', 'oh']),\n",
       " ('hocks', ['shock']),\n",
       " ('hoes', ['hose', 'shoe']),\n",
       " ('hognuts', ['gunshot', 'shotgun', 'uhtsong']),\n",
       " ('hooks', ['shook']),\n",
       " ('hose', ['hose', 'shoe']),\n",
       " ('host', ['host', 'shot', 'tosh']),\n",
       " ('hots', ['host', 'shot', 'tosh']),\n",
       " ('houts', ['shout', 'south']),\n",
       " ('how', ['how', 'who']),\n",
       " ('howres', ['shower']),\n",
       " ('hubs', ['bush']),\n",
       " ('hug', ['hug', 'ugh']),\n",
       " ('hums', ['mush']),\n",
       " ('hustle', ['hustle', 'sleuth']),\n",
       " ('hustling', ['sunlight']),\n",
       " ('huts', ['shut', 'thus', 'tush']),\n",
       " ('iced', ['dice', 'iced']),\n",
       " ('icon', ['cion', 'coin', 'icon']),\n",
       " ('idea', ['aide', 'idea']),\n",
       " ('ideas', ['aside']),\n",
       " ('idle', ['idle', 'lied']),\n",
       " ('impart', ['armpit', 'impart']),\n",
       " ('impled', ['dimple']),\n",
       " ('imprints', ['misprint']),\n",
       " ('incest', ['encist', 'incest', 'insect', 'scient']),\n",
       " ('inch', ['chin', 'inch']),\n",
       " ('infer', ['finer', 'infer']),\n",
       " ('infests', ['fitness']),\n",
       " ('infringe', ['infringe', 'refining']),\n",
       " ('ink', ['ink', 'kin']),\n",
       " ('inks', ['inks', 'sink', 'skin']),\n",
       " ('inlets', ['enlist', 'listen', 'silent', 'tinsel']),\n",
       " ('ins', ['sin']),\n",
       " ('insect', ['encist', 'incest', 'insect', 'scient']),\n",
       " ('instar', ['instar', 'santir', 'strain']),\n",
       " ('insult', ['insult', 'sunlit', 'unlist', 'unslit']),\n",
       " ('itch', ['chit', 'itch']),\n",
       " ('item', ['emit', 'item', 'mite', 'time']),\n",
       " ('items', ['metis', 'smite', 'stime', 'times']),\n",
       " ('its', ['ist', 'its', 'sit']),\n",
       " ('itself', ['itself', 'stifle']),\n",
       " ('jest', ['jest']),\n",
       " ('jets', ['jest']),\n",
       " ('joiner', ['joiner', 'rejoin']),\n",
       " ('just', ['just']),\n",
       " ('juts', ['just']),\n",
       " ('kale', ['kale', 'lake', 'leak']),\n",
       " ('kebar', ['baker', 'brake', 'break']),\n",
       " ('keel', ['keel', 'kele', 'leek']),\n",
       " ('keels', ['skeel', 'sleek']),\n",
       " ('keen', ['keen', 'knee']),\n",
       " ('kids', ['disk', 'skid']),\n",
       " ('kills', ['skill']),\n",
       " ('kiln', ['kiln', 'link']),\n",
       " ('kin', ['ink', 'kin']),\n",
       " ('kins', ['inks', 'sink', 'skin']),\n",
       " ('kiss', ['kiss']),\n",
       " ('kisser', ['kisser', 'rekiss']),\n",
       " ('kitchen', ['kitchen', 'thicken']),\n",
       " ('knee', ['keen', 'knee']),\n",
       " ('koas', ['asok', 'soak', 'soka']),\n",
       " ('krises', ['kisser', 'rekiss']),\n",
       " ('lacy', ['acyl', 'clay', 'lacy']),\n",
       " ('lade', ['dale', 'deal', 'lade', 'lead']),\n",
       " ('laered', ['dealer', 'leader', 'redeal', 'relade', 'relead']),\n",
       " ('lager', ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal']),\n",
       " ('lags', ['slag']),\n",
       " ('laid', ['dali', 'dial', 'laid']),\n",
       " ('lair', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('lake', ['kale', 'lake', 'leak']),\n",
       " ('lamb', ['balm', 'lamb']),\n",
       " ('lameness', ['lameness', 'maleness', 'maneless', 'nameless']),\n",
       " ('lames', ['amsel', 'mesal', 'samel']),\n",
       " ('lamp', ['lamp', 'palm']),\n",
       " ('lap', ['alp', 'lap', 'pal']),\n",
       " ('lapins', ['spinal']),\n",
       " ('laps', ['salp', 'slap']),\n",
       " ('lapse', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('large', ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal']),\n",
       " ('lari', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('lases', ['salse']),\n",
       " ('lashes', ['hassel', 'hassle']),\n",
       " ('last', ['last', 'salt', 'slat']),\n",
       " ('lasted', ['desalt', 'salted']),\n",
       " ('lasting', ['lasting', 'salting', 'slating', 'staling']),\n",
       " ('late', ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal']),\n",
       " ('lats', ['last', 'salt', 'slat']),\n",
       " ('layer', ['early', 'layer', 'relay']),\n",
       " ('layered', ['delayer', 'layered', 'redelay']),\n",
       " ('layers', ['reslay', 'slayer']),\n",
       " ('laymen', ['meanly', 'namely']),\n",
       " ('layover', ['layover', 'overlay']),\n",
       " ('lays', ['slay']),\n",
       " ('lead', ['dale', 'deal', 'lade', 'lead']),\n",
       " ('leader', ['dealer', 'leader', 'redeal', 'relade', 'relead']),\n",
       " ('leak', ['kale', 'lake', 'leak']),\n",
       " ('leams', ['amsel', 'mesal', 'samel']),\n",
       " ('leap', ['leap', 'lepa', 'pale', 'peal', 'plea']),\n",
       " ('leaps', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('leared', ['dealer', 'leader', 'redeal', 'relade', 'relead']),\n",
       " ('learnt', ['altern', 'antler', 'learnt', 'rental', 'ternal']),\n",
       " ('leary', ['early', 'layer', 'relay']),\n",
       " ('leat', ['atle', 'laet', 'late', 'leat', 'tael', 'tale', 'teal']),\n",
       " ('lee', ['eel', 'lee']),\n",
       " ('leek', ['keel', 'kele', 'leek']),\n",
       " ('leeks', ['skeel', 'sleek']),\n",
       " ('left', ['felt', 'flet', 'left']),\n",
       " ('leg', ['gel', 'leg']),\n",
       " ('leke', ['keel', 'kele', 'leek']),\n",
       " ('lemon', ['lemon', 'melon', 'monel']),\n",
       " ('leper', ['leper', 'perle', 'repel']),\n",
       " ('lessened', ['needless', 'seldseen']),\n",
       " ('lessons', ['sonless']),\n",
       " ('levis', ['slive']),\n",
       " ('liar', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('license', ['license', 'selenic', 'silence']),\n",
       " ('licensed', ['licensed', 'silenced']),\n",
       " ('licks', ['slick']),\n",
       " ('lied', ['idle', 'lied']),\n",
       " ('lifer', ['filer', 'flier', 'lifer', 'rifle']),\n",
       " ('lime', ['lime', 'mile']),\n",
       " ('limes', ['limes', 'slime', 'smile']),\n",
       " ('limped', ['dimple']),\n",
       " ('link', ['kiln', 'link']),\n",
       " ('lino', ['lino', 'lion', 'loin', 'noil']),\n",
       " ('lintseed', ['enlisted', 'lintseed']),\n",
       " ('lion', ['lino', 'lion', 'loin', 'noil']),\n",
       " ('lippers', ['slipper']),\n",
       " ('lips', ['lisp', 'slip']),\n",
       " ('lira', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('lisp', ['lisp', 'slip']),\n",
       " ('list', ['list', 'silt', 'slit']),\n",
       " ('listen', ['enlist', 'listen', 'silent', 'tinsel']),\n",
       " ('listened', ['enlisted', 'lintseed']),\n",
       " ('listing', ['listing', 'silting']),\n",
       " ('lits', ['list', 'silt', 'slit']),\n",
       " ('live', ['evil', 'live', 'veil', 'vile', 'vlei']),\n",
       " ('lives', ['slive']),\n",
       " ('loca', ['alco', 'coal', 'cola', 'loca']),\n",
       " ('loco', ['cool', 'loco']),\n",
       " ('loin', ['lino', 'lion', 'loin', 'noil']),\n",
       " ('lookout', ['lookout', 'outlook']),\n",
       " ('looped', ['poodle']),\n",
       " ('loops', ['polos', 'sloop', 'spool']),\n",
       " ('loot', ['loot', 'tool']),\n",
       " ('lose', ['lose', 'sloe', 'sole']),\n",
       " ('lost', ['lost', 'lots', 'slot']),\n",
       " ('loto', ['loot', 'tool']),\n",
       " ('lots', ['lost', 'lots', 'slot']),\n",
       " ('loyal', ['alloy', 'loyal']),\n",
       " ('lump', ['lump', 'plum']),\n",
       " ('lure', ['lure', 'rule']),\n",
       " ('lured', ['duler', 'urled']),\n",
       " ('lures', ['sluer']),\n",
       " ('luring', ['ruling', 'urling']),\n",
       " ('ma', ['am', 'ma']),\n",
       " ('mace', ['acme', 'came', 'mace']),\n",
       " ('mad', ['dam', 'mad']),\n",
       " ('mainer', ['marine', 'remain']),\n",
       " ('maleness', ['lameness', 'maleness', 'maneless', 'nameless']),\n",
       " ('males', ['amsel', 'mesal', 'samel']),\n",
       " ('mane', ['amen', 'enam', 'mane', 'mean', 'name', 'nema']),\n",
       " ('maneless', ['lameness', 'maleness', 'maneless', 'nameless']),\n",
       " ('manors', ['ramson', 'ransom']),\n",
       " ('manures', ['surname']),\n",
       " ('map', ['amp', 'map', 'pam']),\n",
       " ('maples', ['sample']),\n",
       " ('maps', ['samp', 'spam']),\n",
       " ('mar', ['arm', 'mar', 'ram']),\n",
       " ('march', ['charm', 'march']),\n",
       " ('marcher', ['charmer', 'marcher', 'remarch']),\n",
       " ('marching', ['charming']),\n",
       " ('mare', ['mare', 'rame', 'ream']),\n",
       " ('marine', ['marine', 'remain']),\n",
       " ('marital', ['marital', 'martial']),\n",
       " ('marons', ['ramson', 'ransom']),\n",
       " ('mars', ['arms']),\n",
       " ('martial', ['marital', 'martial']),\n",
       " ('marts', ['smart', 'stram']),\n",
       " ('mash', ['mash', 'samh', 'sham']),\n",
       " ('mast', ['mast', 'stam']),\n",
       " ('mate', ['mate', 'meat', 'meta', 'tame', 'team']),\n",
       " ('mated', ['metad']),\n",
       " ('mates', ['steam', 'stema']),\n",
       " ('mating', ['mating']),\n",
       " ('mats', ['mast', 'stam']),\n",
       " ('meals', ['amsel', 'mesal', 'samel']),\n",
       " ('mean', ['amen', 'enam', 'mane', 'mean', 'name', 'nema']),\n",
       " ('meanly', ['meanly', 'namely']),\n",
       " ('meat', ['mate', 'meat', 'meta', 'tame', 'team']),\n",
       " ('meats', ['steam', 'stema']),\n",
       " ('melas', ['amsel', 'mesal', 'samel']),\n",
       " ('melon', ['lemon', 'melon', 'monel']),\n",
       " ('melts', ['smelt']),\n",
       " ('mesal', ['amsel', 'mesal', 'samel']),\n",
       " ('meta', ['mate', 'meat', 'meta', 'tame', 'team']),\n",
       " ('meteor', ['meteor', 'remote']),\n",
       " ('metis', ['metis', 'smite', 'stime', 'times']),\n",
       " ('metols', ['molest']),\n",
       " ('mile', ['lime', 'mile']),\n",
       " ('miles', ['limes', 'slime', 'smile']),\n",
       " ('misprint', ['misprint']),\n",
       " ('mite', ['emit', 'item', 'mite', 'time']),\n",
       " ('mites', ['metis', 'smite', 'stime', 'times']),\n",
       " ('mobbed', ['bombed']),\n",
       " ('moist', ['moist']),\n",
       " ('moits', ['moist']),\n",
       " ('molest', ['molest']),\n",
       " ('mono', ['mono', 'moon']),\n",
       " ('mood', ['doom', 'mood']),\n",
       " ('moon', ['mono', 'moon']),\n",
       " ('moor', ['moor', 'moro', 'room']),\n",
       " ('motels', ['molest']),\n",
       " ('much', ['chum', 'much']),\n",
       " ('mug', ['gum', 'mug']),\n",
       " ('murenas', ['surname']),\n",
       " ('mush', ['mush']),\n",
       " ('mutilate', ['mutilate', 'ultimate']),\n",
       " ('nags', ['sang', 'snag']),\n",
       " ('nails', ['sinal', 'slain', 'snail']),\n",
       " ('name', ['amen', 'enam', 'mane', 'mean', 'name', 'nema']),\n",
       " ('nameless', ['lameness', 'maleness', 'maneless', 'nameless']),\n",
       " ('namely', ['meanly', 'namely']),\n",
       " ('nap', ['nap', 'pan']),\n",
       " ('nare', ['earn', 'near', 'rane']),\n",
       " ('nat', ['ant', 'nat', 'tan']),\n",
       " ('nay', ['any', 'nay', 'yan']),\n",
       " ('near', ['earn', 'near', 'rane']),\n",
       " ('nearer', ['earner']),\n",
       " ('needless', ['needless', 'seldseen']),\n",
       " ('needs', ['dense', 'needs']),\n",
       " ('nema', ['amen', 'enam', 'mane', 'mean', 'name', 'nema']),\n",
       " ('neon', ['neon', 'none']),\n",
       " ('nest', ['nest', 'sent', 'sten']),\n",
       " ('net', ['net', 'ten']),\n",
       " ('nets', ['nest', 'sent', 'sten']),\n",
       " ('nevi', ['vein', 'vine']),\n",
       " ('nicest', ['encist', 'incest', 'insect', 'scient']),\n",
       " ('night', ['night', 'thing']),\n",
       " ('nights', ['nights']),\n",
       " ('nip', ['nip', 'pin']),\n",
       " ('nips', ['snip', 'spin']),\n",
       " ('nis', ['sin']),\n",
       " ('no', ['no', 'on']),\n",
       " ('nod', ['don', 'nod']),\n",
       " ('node', ['done', 'node']),\n",
       " ('noil', ['lino', 'lion', 'loin', 'noil']),\n",
       " ('none', ['neon', 'none']),\n",
       " ('normas', ['ramson', 'ransom']),\n",
       " ('not', ['not', 'ton']),\n",
       " ('note', ['note', 'tone']),\n",
       " ('noted', ['noted', 'toned']),\n",
       " ('noteless', ['noteless', 'toneless']),\n",
       " ('notices', ['contise', 'noetics', 'section']),\n",
       " ('noughts', ['gunshot', 'shotgun', 'uhtsong']),\n",
       " ('now', ['now', 'own', 'won']),\n",
       " ('nows', ['snow', 'sown']),\n",
       " ('nude', ['dune', 'nude', 'unde']),\n",
       " ('nudity', ['nudity', 'untidy']),\n",
       " ('nur', ['run', 'urn']),\n",
       " ('nurs', ['snur']),\n",
       " ('oaks', ['asok', 'soak', 'soka']),\n",
       " ('ocean', ['acone', 'canoe', 'ocean']),\n",
       " ('oceanic', ['cocaine', 'oceanic']),\n",
       " ('oh', ['ho', 'oh']),\n",
       " ('oils', ['silo', 'siol', 'soil', 'soli']),\n",
       " ('okas', ['asok', 'soak', 'soka']),\n",
       " ('oles', ['lose', 'sloe', 'sole']),\n",
       " ('omits', ['moist']),\n",
       " ('on', ['no', 'on']),\n",
       " ('once', ['cone', 'once']),\n",
       " ('opener', ['opener', 'reopen', 'repone']),\n",
       " ('opt', ['opt', 'pot', 'top']),\n",
       " ('option', ['option', 'potion']),\n",
       " ('opts', ['post', 'spot', 'stop', 'tops']),\n",
       " ('orbed', ['boder', 'orbed']),\n",
       " ('ores', ['eros', 'rose', 'sero', 'sore']),\n",
       " ('organist', ['orangist', 'organist', 'roasting', 'signator']),\n",
       " ('oriental', ['oriental', 'relation']),\n",
       " ('ought', ['ought', 'tough']),\n",
       " ('oughts', ['sought']),\n",
       " ('ours', ['ours', 'sour']),\n",
       " ('outlook', ['lookout', 'outlook']),\n",
       " ('overhang', ['overhang']),\n",
       " ('overlay', ['layover', 'overlay']),\n",
       " ('own', ['now', 'own', 'won']),\n",
       " ('owns', ['snow', 'sown']),\n",
       " ('owt', ['tow', 'two', 'wot']),\n",
       " ('pace', ['cape', 'cepa', 'pace']),\n",
       " ('packer', ['packer', 'repack']),\n",
       " ('padle', ['padle', 'paled', 'pedal', 'plead']),\n",
       " ('painter', ['painter', 'pertain', 'repaint']),\n",
       " ('paired', ['diaper', 'paired']),\n",
       " ('pal', ['alp', 'lap', 'pal']),\n",
       " ('pale', ['leap', 'lepa', 'pale', 'peal', 'plea']),\n",
       " ('paled', ['padle', 'paled', 'pedal', 'plead']),\n",
       " ('pales', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('palest', ['pastel', 'septal', 'staple']),\n",
       " ('palets', ['pastel', 'septal', 'staple']),\n",
       " ('palm', ['lamp', 'palm']),\n",
       " ('pals', ['salp', 'slap']),\n",
       " ('pam', ['amp', 'map', 'pam']),\n",
       " ('pams', ['samp', 'spam']),\n",
       " ('pan', ['nap', 'pan']),\n",
       " ('panel', ['panel', 'penal', 'plane']),\n",
       " ('pardie', ['diaper', 'paired']),\n",
       " ('pare', ['aper', 'pare', 'pear', 'rape', 'reap']),\n",
       " ('parks', ['spark']),\n",
       " ('partim', ['armpit', 'impart']),\n",
       " ('parts', ['spart', 'sprat', 'strap', 'traps']),\n",
       " ('pass', ['pass']),\n",
       " ('pastel', ['pastel', 'septal', 'staple']),\n",
       " ('pat', ['apt', 'pat', 'tap']),\n",
       " ('pate', ['pate', 'peat', 'tape', 'teap']),\n",
       " ('pay', ['pay', 'pya', 'yap']),\n",
       " ('pea', ['ape', 'pea']),\n",
       " ('peaks', ['sapek', 'speak']),\n",
       " ('peal', ['leap', 'lepa', 'pale', 'peal', 'plea']),\n",
       " ('peals', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('pear', ['aper', 'pare', 'pear', 'rape', 'reap']),\n",
       " ('peat', ['pate', 'peat', 'tape', 'teap']),\n",
       " ('pedal', ['padle', 'paled', 'pedal', 'plead']),\n",
       " ('pela', ['leap', 'lepa', 'pale', 'peal', 'plea']),\n",
       " ('pelas', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('pelmas', ['sample']),\n",
       " ('peltas', ['pastel', 'septal', 'staple']),\n",
       " ('pelts', ['slept', 'spelt', 'splet']),\n",
       " ('penal', ['panel', 'penal', 'plane']),\n",
       " ('penster', ['penster', 'present', 'serpent', 'strepen']),\n",
       " ('per', ['per', 'rep']),\n",
       " ('pereon', ['opener', 'reopen', 'repone']),\n",
       " ('peri', ['peri', 'pier', 'ripe']),\n",
       " ('perone', ['opener', 'reopen', 'repone']),\n",
       " ('pertain', ['painter', 'pertain', 'repaint']),\n",
       " ('pest', ['pest', 'sept', 'spet', 'step']),\n",
       " ('petals', ['pastel', 'septal', 'staple']),\n",
       " ('pets', ['pest', 'sept', 'spet', 'step']),\n",
       " ('pier', ['peri', 'pier', 'ripe']),\n",
       " ('pills', ['spill']),\n",
       " ('pin', ['nip', 'pin']),\n",
       " ('pinots', ['piston']),\n",
       " ('pins', ['snip', 'spin']),\n",
       " ('pintos', ['piston']),\n",
       " ('piston', ['piston']),\n",
       " ('pit', ['pit', 'tip']),\n",
       " ('pitons', ['piston']),\n",
       " ('pits', ['pist', 'spit']),\n",
       " ('plains', ['spinal']),\n",
       " ('plane', ['panel', 'penal', 'plane']),\n",
       " ('plaste', ['pastel', 'septal', 'staple']),\n",
       " ('plates', ['pastel', 'septal', 'staple']),\n",
       " ('plea', ['leap', 'lepa', 'pale', 'peal', 'plea']),\n",
       " ('plead', ['padle', 'paled', 'pedal', 'plead']),\n",
       " ('pleas', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('pleats', ['pastel', 'septal', 'staple']),\n",
       " ('plena', ['panel', 'penal', 'plane']),\n",
       " ('plug', ['gulp', 'plug']),\n",
       " ('plum', ['lump', 'plum']),\n",
       " ('points', ['piston']),\n",
       " ('polos', ['polos', 'sloop', 'spool']),\n",
       " ('poodle', ['poodle']),\n",
       " ('pooled', ['poodle']),\n",
       " ('pools', ['polos', 'sloop', 'spool']),\n",
       " ('pore', ['pore', 'rope']),\n",
       " ('pores', ['poser', 'prose', 'ropes', 'spore']),\n",
       " ('ports', ['sport', 'strop']),\n",
       " ('poser', ['poser', 'prose', 'ropes', 'spore']),\n",
       " ('post', ['post', 'spot', 'stop', 'tops']),\n",
       " ('postin', ['piston']),\n",
       " ('postman', ['postman', 'topsman']),\n",
       " ('pot', ['opt', 'pot', 'top']),\n",
       " ('potins', ['piston']),\n",
       " ('potion', ['option', 'potion']),\n",
       " ('pots', ['post', 'spot', 'stop', 'tops']),\n",
       " ('praised', ['despair', 'pardesi']),\n",
       " ('prats', ['spart', 'sprat', 'strap', 'traps']),\n",
       " ('prays', ['raspy', 'spary', 'spray']),\n",
       " ('pre', ['per', 'rep']),\n",
       " ('present', ['penster', 'present', 'serpent', 'strepen']),\n",
       " ('printer', ['printer', 'reprint']),\n",
       " ('pronto', ['pronto', 'proton']),\n",
       " ('prose', ['poser', 'prose', 'ropes', 'spore']),\n",
       " ('prost', ['sport', 'strop']),\n",
       " ('proton', ['pronto', 'proton']),\n",
       " ('pya', ['pay', 'pya', 'yap']),\n",
       " ('quiet', ['quiet', 'quite']),\n",
       " ('quite', ['quiet', 'quite']),\n",
       " ('race', ['acre', 'care', 'crea', 'race']),\n",
       " ('races', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('racket', ['racket', 'retack', 'tacker']),\n",
       " ('rade', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('ragee', ['agree', 'eager', 'eagre']),\n",
       " ('ragees', ['grease']),\n",
       " ('raginis', ['raising']),\n",
       " ('rail', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('raising', ['raising']),\n",
       " ('ram', ['arm', 'mar', 'ram']),\n",
       " ('rams', ['arms']),\n",
       " ('ramson', ['ramson', 'ransom']),\n",
       " ('ransom', ['ramson', 'ransom']),\n",
       " ('rape', ['aper', 'pare', 'pear', 'rape', 'reap']),\n",
       " ('rare', ['rare', 'rear']),\n",
       " ('rase', ['arse', 'rase', 'sare', 'sear', 'sera']),\n",
       " ('raspy', ['raspy', 'spary', 'spray']),\n",
       " ('rast', ['sart', 'star', 'stra', 'tars', 'tsar']),\n",
       " ('rat', ['art', 'rat', 'tar', 'tra']),\n",
       " ('rats', ['sart', 'star', 'stra', 'tars', 'tsar']),\n",
       " ('raw', ['raw', 'war']),\n",
       " ('rayle', ['early', 'layer', 'relay']),\n",
       " ('rayles', ['reslay', 'slayer']),\n",
       " ('react',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('read', ['ared', 'daer', 'dare', 'dear', 'read']),\n",
       " ('reader', ['reader', 'redare', 'reread']),\n",
       " ('realist', ['realist', 'saltier']),\n",
       " ('ream', ['mare', 'rame', 'ream']),\n",
       " ('rean', ['earn', 'near', 'rane']),\n",
       " ('reap', ['aper', 'pare', 'pear', 'rape', 'reap']),\n",
       " ('rear', ['rare', 'rear']),\n",
       " ('reared', ['reader', 'redare', 'reread']),\n",
       " ('rebuild', ['builder', 'rebuild']),\n",
       " ('recall', ['caller', 'cellar', 'recall']),\n",
       " ('recede', ['decree', 'recede']),\n",
       " ('recital', ['article', 'recital']),\n",
       " ('recitals', ['altrices', 'selictar']),\n",
       " ('recta',\n",
       "  ['caret',\n",
       "   'carte',\n",
       "   'cater',\n",
       "   'crate',\n",
       "   'creat',\n",
       "   'creta',\n",
       "   'react',\n",
       "   'recta',\n",
       "   'trace']),\n",
       " ('rectos', ['corset', 'coster', 'escort', 'scoter', 'sector']),\n",
       " ('recuse', ['ceruse', 'recuse', 'rescue', 'secure']),\n",
       " ('recused', ['seducer']),\n",
       " ('redeal', ['dealer', 'leader', 'redeal', 'relade', 'relead']),\n",
       " ('redear', ['reader', 'redare', 'reread']),\n",
       " ('redfin', ['finder', 'friend', 'redfin', 'refind']),\n",
       " ('reduces', ['seducer']),\n",
       " ('reearn', ['earner']),\n",
       " ('reef', ['feer', 'free', 'reef']),\n",
       " ('reest',\n",
       "  ['ester',\n",
       "   'estre',\n",
       "   'reest',\n",
       "   'reset',\n",
       "   'steer',\n",
       "   'stere',\n",
       "   'stree',\n",
       "   'terse',\n",
       "   'tsere']),\n",
       " ('refed', ['defer', 'freed']),\n",
       " ('refill', ['filler', 'refill']),\n",
       " ('refind', ['finder', 'friend', 'redfin', 'refind']),\n",
       " ('refining', ['infringe', 'refining']),\n",
       " ('reform', ['former', 'reform']),\n",
       " ('regal', ['argel', 'ergal', 'garle', 'glare', 'lager', 'large', 'regal']),\n",
       " ('reheat', ['heater', 'hereat', 'reheat']),\n",
       " ('reheats', ['thereas']),\n",
       " ('reifs', ['serif']),\n",
       " ('reins', ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren']),\n",
       " ('reird', ['drier', 'rider']),\n",
       " ('reists', ['resist', 'restis', 'sister']),\n",
       " ('rejoin', ['joiner', 'rejoin']),\n",
       " ('relation', ['oriental', 'relation']),\n",
       " ('relay', ['early', 'layer', 'relay']),\n",
       " ('relayed', ['delayer', 'layered', 'redelay']),\n",
       " ('relays', ['reslay', 'slayer']),\n",
       " ('remain', ['marine', 'remain']),\n",
       " ('remote', ['meteor', 'remote']),\n",
       " ('rental', ['altern', 'antler', 'learnt', 'rental', 'ternal']),\n",
       " ('rentals', ['saltern', 'starnel', 'sternal']),\n",
       " ('reopen', ['opener', 'reopen', 'repone']),\n",
       " ('rep', ['per', 'rep']),\n",
       " ('repack', ['packer', 'repack']),\n",
       " ('repaid', ['diaper', 'paired']),\n",
       " ('repaint', ['painter', 'pertain', 'repaint']),\n",
       " ('repel', ['leper', 'perle', 'repel']),\n",
       " ('repents', ['penster', 'present', 'serpent', 'strepen']),\n",
       " ('repins', ['respin', 'sniper']),\n",
       " ('repo', ['pore', 'rope']),\n",
       " ('repone', ['opener', 'reopen', 'repone']),\n",
       " ('repos', ['poser', 'prose', 'ropes', 'spore']),\n",
       " ('reprint', ['printer', 'reprint']),\n",
       " ('reread', ['reader', 'redare', 'reread']),\n",
       " ('rescue', ['ceruse', 'recuse', 'rescue', 'secure']),\n",
       " ('rescued', ['seducer']),\n",
       " ('resell', ['resell', 'seller']),\n",
       " ('resend', ['resend', 'sender']),\n",
       " ('reserve', ['reserve', 'resever', 'reverse', 'severer']),\n",
       " ('reserved', ['deserver', 'reserved', 'reversed']),\n",
       " ('reset',\n",
       "  ['ester',\n",
       "   'estre',\n",
       "   'reest',\n",
       "   'reset',\n",
       "   'steer',\n",
       "   'stere',\n",
       "   'stree',\n",
       "   'terse',\n",
       "   'tsere']),\n",
       " ('reshow', ['shower']),\n",
       " ('resin', ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren']),\n",
       " ('resist', ['resist', 'restis', 'sister']),\n",
       " ('resits', ['resist', 'restis', 'sister']),\n",
       " ('retack', ['racket', 'retack', 'tacker']),\n",
       " ('retag', ['gater', 'grate', 'great', 'retag', 'targe']),\n",
       " ('retails', ['realist', 'saltier']),\n",
       " ('retes',\n",
       "  ['ester',\n",
       "   'estre',\n",
       "   'reest',\n",
       "   'reset',\n",
       "   'steer',\n",
       "   'stere',\n",
       "   'stree',\n",
       "   'terse',\n",
       "   'tsere']),\n",
       " ('rethink', ['rethink', 'thinker']),\n",
       " ('retrain', ['arterin', 'retrain', 'terrain', 'trainer']),\n",
       " ('retund', ['runted', 'tunder', 'turned']),\n",
       " ('reveres', ['reserve', 'resever', 'reverse', 'severer']),\n",
       " ('reverse', ['reserve', 'resever', 'reverse', 'severer']),\n",
       " ('reversed', ['deserver', 'reserved', 'reversed']),\n",
       " ('review', ['review', 'viewer']),\n",
       " ('rhies', ['hirse', 'shier', 'shire']),\n",
       " ('rial', ['aril', 'lair', 'lari', 'liar', 'lira', 'rail', 'rial']),\n",
       " ('rictus', ['citrus', 'rictus', 'rustic']),\n",
       " ('rider', ['drier', 'rider']),\n",
       " ('rifle', ['filer', 'flier', 'lifer', 'rifle']),\n",
       " ('rines', ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren']),\n",
       " ('ring', ['girn', 'grin', 'ring']),\n",
       " ('rinse', ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren']),\n",
       " ('ripe', ['peri', 'pier', 'ripe']),\n",
       " ('ripens', ['respin', 'sniper']),\n",
       " ('ripples', ['slipper']),\n",
       " ('risen', ['reins', 'resin', 'rinse', 'risen', 'serin', 'siren']),\n",
       " ('rite', ['iter', 'reit', 'rite', 'tier', 'tire']),\n",
       " ('rival', ['rival', 'viral']),\n",
       " ('roasting', ['orangist', 'organist', 'roasting', 'signator']),\n",
       " ('robed', ['boder', 'orbed']),\n",
       " ('robes', ['boser', 'brose', 'sober']),\n",
       " ('rock', ['cork', 'rock']),\n",
       " ('roes', ['eros', 'rose', 'sero', 'sore']),\n",
       " ('romans', ['ramson', 'ransom']),\n",
       " ('room', ['moor', 'moro', 'room']),\n",
       " ('rope', ['pore', 'rope']),\n",
       " ('ropes', ['poser', 'prose', 'ropes', 'spore']),\n",
       " ('rose', ['eros', 'rose', 'sero', 'sore']),\n",
       " ('rout', ['rout', 'toru', 'tour']),\n",
       " ('rowdier', ['worried']),\n",
       " ('ruby', ['bury', 'ruby']),\n",
       " ('rule', ['lure', 'rule']),\n",
       " ('ruled', ['duler', 'urled']),\n",
       " ('rules', ['sluer']),\n",
       " ('ruling', ['ruling', 'urling']),\n",
       " ('run', ['run', 'urn']),\n",
       " ('runs', ['snur']),\n",
       " ('runted', ['runted', 'tunder', 'turned']),\n",
       " ('runts', ['snurt', 'turns']),\n",
       " ('rust', ['rust']),\n",
       " ('rustic', ['citrus', 'rictus', 'rustic']),\n",
       " ('rusts', ['truss']),\n",
       " ('ruts', ['rust']),\n",
       " ('sack', ['cask', 'sack']),\n",
       " ('sacred', ['sacred']),\n",
       " ('sag', ['gas', 'sag']),\n",
       " ('saint', ['saint', 'satin', 'stain']),\n",
       " ('sairing', ['raising']),\n",
       " ('salep', ['lapse', 'salep', 'saple', 'sepal', 'slape', 'spale', 'speal']),\n",
       " ('sales', ['salse']),\n",
       " ('salesmen', ['lameness', 'maleness', 'maneless', 'nameless']),\n",
       " ('salp', ['salp', 'slap']),\n",
       " ('salse', ['salse']),\n",
       " ('salt', ['last', 'salt', 'slat']),\n",
       " ('salted', ['desalt', 'salted']),\n",
       " ('saltern', ['saltern', 'starnel', 'sternal']),\n",
       " ('saltier', ['realist', 'saltier']),\n",
       " ('salting', ['lasting', 'salting', 'slating', 'staling']),\n",
       " ('saltire', ['realist', 'saltier']),\n",
       " ('samel', ['amsel', 'mesal', 'samel']),\n",
       " ('samp', ['samp', 'spam']),\n",
       " ('sample', ['sample']),\n",
       " ('sang', ['sang', 'snag']),\n",
       " ('santir', ['instar', 'santir', 'strain']),\n",
       " ('saps', ['pass']),\n",
       " ('sate', ['ates', 'east', 'eats', 'sate', 'seat', 'seta']),\n",
       " ('satem', ['steam', 'stema']),\n",
       " ('satin', ['saint', 'satin', 'stain']),\n",
       " ('sauce', ['cause', 'sauce']),\n",
       " ('sauces', ['causse']),\n",
       " ('save', ['save', 'vase']),\n",
       " ('saw', ['saw', 'swa', 'was']),\n",
       " ('sawed', ['sawed']),\n",
       " ('scab', ['scab']),\n",
       " ('scan', ['scan']),\n",
       " ('scar', ['scar']),\n",
       " ('scare', ['carse', 'caser', 'ceras', 'scare', 'scrae']),\n",
       " ('scared', ['sacred']),\n",
       " ('scat', ['cast', 'scat']),\n",
       " ('scent', ['scent']),\n",
       " ...]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "words_anagrams"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d91434bc",
   "metadata": {},
   "source": [
    "The complexity of this algorithm is O(M * KlogK + N), much much faster!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "03ce3e28",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "a2fc5ec4",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
