Removing files from data analysis directory
[ou-summer-of-code-2017.git] / 08-word-chains / explore-word-chain7.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": true
8 },
9 "outputs": [],
10 "source": [
11 "import string\n",
12 "import heapq\n",
13 "import collections\n",
14 "import random"
15 ]
16 },
17 {
18 "cell_type": "code",
19 "execution_count": 2,
20 "metadata": {},
21 "outputs": [
22 {
23 "data": {
24 "text/plain": [
25 "9815"
26 ]
27 },
28 "execution_count": 2,
29 "metadata": {},
30 "output_type": "execute_result"
31 }
32 ],
33 "source": [
34 "words = [w.strip() for w in open('words7.txt').readlines()]\n",
35 "len(words)"
36 ]
37 },
38 {
39 "cell_type": "code",
40 "execution_count": 3,
41 "metadata": {},
42 "outputs": [
43 {
44 "data": {
45 "text/plain": [
46 "['abalone',\n",
47 " 'abandon',\n",
48 " 'abashed',\n",
49 " 'abashes',\n",
50 " 'abasing',\n",
51 " 'abating',\n",
52 " 'abdomen',\n",
53 " 'abducts',\n",
54 " 'abetted',\n",
55 " 'abetter']"
56 ]
57 },
58 "execution_count": 3,
59 "metadata": {},
60 "output_type": "execute_result"
61 }
62 ],
63 "source": [
64 "words[:10]"
65 ]
66 },
67 {
68 "cell_type": "code",
69 "execution_count": 4,
70 "metadata": {
71 "collapsed": true
72 },
73 "outputs": [],
74 "source": [
75 "def adjacents_explicit(word):\n",
76 " neighbours = []\n",
77 " for i in range(len(word)):\n",
78 " for l in string.ascii_lowercase:\n",
79 " if l != word[i]:\n",
80 " neighbours.append(word[0:i] + l + word[i+1:])\n",
81 " return neighbours"
82 ]
83 },
84 {
85 "cell_type": "code",
86 "execution_count": 5,
87 "metadata": {
88 "collapsed": true
89 },
90 "outputs": [],
91 "source": [
92 "def adjacents(word):\n",
93 " return [word[0:i] + l + word[i+1:]\n",
94 " for i in range(len(word))\n",
95 " for l in string.ascii_lowercase\n",
96 " if l != word[i]]"
97 ]
98 },
99 {
100 "cell_type": "code",
101 "execution_count": 10,
102 "metadata": {
103 "collapsed": true
104 },
105 "outputs": [],
106 "source": [
107 "# neighbours = {w: [n for n in adjacents(w) if n in words]\n",
108 "# for w in words}"
109 ]
110 },
111 {
112 "cell_type": "code",
113 "execution_count": 17,
114 "metadata": {
115 "collapsed": true
116 },
117 "outputs": [],
118 "source": [
119 "worddict = {w: True for w in words}\n",
120 "neighbours = {w: [n for n in adjacents(w) if n in worddict]\n",
121 " for w in words}"
122 ]
123 },
124 {
125 "cell_type": "code",
126 "execution_count": 12,
127 "metadata": {},
128 "outputs": [
129 {
130 "data": {
131 "text/plain": [
132 "[]"
133 ]
134 },
135 "execution_count": 12,
136 "metadata": {},
137 "output_type": "execute_result"
138 }
139 ],
140 "source": [
141 "# [w for w in words if sorted(neighbours[w]) != sorted(neighbours2[w])]"
142 ]
143 },
144 {
145 "cell_type": "code",
146 "execution_count": 7,
147 "metadata": {},
148 "outputs": [
149 {
150 "name": "stdout",
151 "output_type": "stream",
152 "text": [
153 "1 loop, best of 3: 4min 2s per loop\n"
154 ]
155 }
156 ],
157 "source": [
158 "# %%timeit\n",
159 "# neighbours = {w: [n for n in adjacents(w) if n in words]\n",
160 "# for w in words}"
161 ]
162 },
163 {
164 "cell_type": "code",
165 "execution_count": 8,
166 "metadata": {},
167 "outputs": [
168 {
169 "name": "stdout",
170 "output_type": "stream",
171 "text": [
172 "1 loop, best of 3: 655 ms per loop\n"
173 ]
174 }
175 ],
176 "source": [
177 "%%timeit\n",
178 "worddict = {w: True for w in words}\n",
179 "neighbours2 = {w: [n for n in adjacents(w) if n in worddict]\n",
180 " for w in words}"
181 ]
182 },
183 {
184 "cell_type": "code",
185 "execution_count": 13,
186 "metadata": {},
187 "outputs": [
188 {
189 "name": "stdout",
190 "output_type": "stream",
191 "text": [
192 "1 loop, best of 3: 629 ms per loop\n"
193 ]
194 }
195 ],
196 "source": [
197 "%%timeit\n",
198 "wordset = set(words)\n",
199 "neighbours3 = {w: [n for n in adjacents(w) if n in wordset]\n",
200 " for w in words}"
201 ]
202 },
203 {
204 "cell_type": "code",
205 "execution_count": 18,
206 "metadata": {},
207 "outputs": [
208 {
209 "data": {
210 "text/plain": [
211 "[]"
212 ]
213 },
214 "execution_count": 18,
215 "metadata": {},
216 "output_type": "execute_result"
217 }
218 ],
219 "source": [
220 "neighbours['abalone']"
221 ]
222 },
223 {
224 "cell_type": "code",
225 "execution_count": 20,
226 "metadata": {},
227 "outputs": [
228 {
229 "data": {
230 "text/plain": [
231 "['abashes']"
232 ]
233 },
234 "execution_count": 20,
235 "metadata": {},
236 "output_type": "execute_result"
237 }
238 ],
239 "source": [
240 "neighbours['abashed']"
241 ]
242 },
243 {
244 "cell_type": "code",
245 "execution_count": 21,
246 "metadata": {},
247 "outputs": [
248 {
249 "data": {
250 "text/plain": [
251 "['abusing', 'abating']"
252 ]
253 },
254 "execution_count": 21,
255 "metadata": {},
256 "output_type": "execute_result"
257 }
258 ],
259 "source": [
260 "neighbours['abasing']"
261 ]
262 },
263 {
264 "cell_type": "code",
265 "execution_count": 22,
266 "metadata": {},
267 "outputs": [
268 {
269 "data": {
270 "text/plain": [
271 "[('abalone', []),\n",
272 " ('abandon', []),\n",
273 " ('abashed', ['abashes']),\n",
274 " ('abashes', ['abashed']),\n",
275 " ('abasing', ['abusing', 'abating']),\n",
276 " ('abating', ['abasing']),\n",
277 " ('abdomen', []),\n",
278 " ('abducts', []),\n",
279 " ('abetted', ['abutted', 'abetter']),\n",
280 " ('abetter', ['abettor', 'abetted'])]"
281 ]
282 },
283 "execution_count": 22,
284 "metadata": {},
285 "output_type": "execute_result"
286 }
287 ],
288 "source": [
289 "[(w, neighbours[w]) for w in words[:10]]"
290 ]
291 },
292 {
293 "cell_type": "code",
294 "execution_count": 37,
295 "metadata": {},
296 "outputs": [
297 {
298 "data": {
299 "text/plain": [
300 "[('brewery', ['brewers']),\n",
301 " ('brewing', ['crewing']),\n",
302 " ('bribery', []),\n",
303 " ('bribing', []),\n",
304 " ('bricked', ['cricked', 'pricked', 'tricked', 'brisked']),\n",
305 " ('bridals', []),\n",
306 " ('bridged', ['bridled', 'bridges']),\n",
307 " ('bridges', ['fridges', 'bridles', 'bridged']),\n",
308 " ('bridled', ['bridged', 'bridles']),\n",
309 " ('bridles', ['bridges', 'bridled'])]"
310 ]
311 },
312 "execution_count": 37,
313 "metadata": {},
314 "output_type": "execute_result"
315 }
316 ],
317 "source": [
318 "[(w, neighbours[w]) for w in words[1000:1010]]"
319 ]
320 },
321 {
322 "cell_type": "code",
323 "execution_count": 23,
324 "metadata": {
325 "collapsed": true
326 },
327 "outputs": [],
328 "source": [
329 "def distance(w1, w2):\n",
330 " return sum(1 for i in range(len(w1))\n",
331 " if w1[i] != w2[i])"
332 ]
333 },
334 {
335 "cell_type": "code",
336 "execution_count": 24,
337 "metadata": {},
338 "outputs": [
339 {
340 "data": {
341 "text/plain": [
342 "0"
343 ]
344 },
345 "execution_count": 24,
346 "metadata": {},
347 "output_type": "execute_result"
348 }
349 ],
350 "source": [
351 "distance('abating', 'abating')"
352 ]
353 },
354 {
355 "cell_type": "code",
356 "execution_count": 25,
357 "metadata": {},
358 "outputs": [
359 {
360 "data": {
361 "text/plain": [
362 "4"
363 ]
364 },
365 "execution_count": 25,
366 "metadata": {},
367 "output_type": "execute_result"
368 }
369 ],
370 "source": [
371 "distance('abating', 'abetter')"
372 ]
373 },
374 {
375 "cell_type": "code",
376 "execution_count": 26,
377 "metadata": {
378 "collapsed": true
379 },
380 "outputs": [],
381 "source": [
382 "def extend(chain, closed=None):\n",
383 " if closed:\n",
384 " nbrs = set(neighbours[chain[-1]]) - closed\n",
385 " else:\n",
386 " nbrs = neighbours[chain[-1]]\n",
387 " return [chain + [s] for s in nbrs\n",
388 " if s not in chain]"
389 ]
390 },
391 {
392 "cell_type": "code",
393 "execution_count": 38,
394 "metadata": {},
395 "outputs": [
396 {
397 "data": {
398 "text/plain": [
399 "[['bridges', 'fridges'], ['bridges', 'bridles'], ['bridges', 'bridged']]"
400 ]
401 },
402 "execution_count": 38,
403 "metadata": {},
404 "output_type": "execute_result"
405 }
406 ],
407 "source": [
408 "extend(['bridges'])"
409 ]
410 },
411 {
412 "cell_type": "code",
413 "execution_count": 39,
414 "metadata": {},
415 "outputs": [
416 {
417 "data": {
418 "text/plain": [
419 "[['bridges', 'bridles', 'bridled']]"
420 ]
421 },
422 "execution_count": 39,
423 "metadata": {},
424 "output_type": "execute_result"
425 }
426 ],
427 "source": [
428 "extend(['bridges', 'bridles'])"
429 ]
430 },
431 {
432 "cell_type": "code",
433 "execution_count": 40,
434 "metadata": {},
435 "outputs": [
436 {
437 "data": {
438 "text/plain": [
439 "[['bridges', 'bridles', 'bridled', 'bridged']]"
440 ]
441 },
442 "execution_count": 40,
443 "metadata": {},
444 "output_type": "execute_result"
445 }
446 ],
447 "source": [
448 "extend(['bridges', 'bridles', 'bridled'])"
449 ]
450 },
451 {
452 "cell_type": "code",
453 "execution_count": 69,
454 "metadata": {
455 "collapsed": true
456 },
457 "outputs": [],
458 "source": [
459 "def bfs_search(start, goal, debug=False):\n",
460 " agenda = [[start]]\n",
461 " finished = False\n",
462 " while not finished and agenda:\n",
463 " current = agenda[0]\n",
464 " if debug:\n",
465 " print(current)\n",
466 " if current[-1] == goal:\n",
467 " finished = True\n",
468 " else:\n",
469 " successors = extend(current)\n",
470 " agenda = agenda[1:] + successors\n",
471 " if finished:\n",
472 " return current\n",
473 " else:\n",
474 " return None "
475 ]
476 },
477 {
478 "cell_type": "code",
479 "execution_count": 70,
480 "metadata": {
481 "collapsed": true
482 },
483 "outputs": [],
484 "source": [
485 "def bfs_search_closed(start, goal, debug=False):\n",
486 " agenda = [[start]]\n",
487 " closed = set()\n",
488 " finished = False\n",
489 " while not finished and agenda:\n",
490 " current = agenda[0]\n",
491 " if debug:\n",
492 " print(current)\n",
493 " if current[-1] == goal:\n",
494 " finished = True\n",
495 " else:\n",
496 " closed.add(current[-1])\n",
497 " successors = extend(current, closed)\n",
498 " agenda = agenda[1:] + successors\n",
499 " if finished:\n",
500 " return current\n",
501 " else:\n",
502 " return None "
503 ]
504 },
505 {
506 "cell_type": "code",
507 "execution_count": 71,
508 "metadata": {
509 "collapsed": true
510 },
511 "outputs": [],
512 "source": [
513 "def dfs_search(start, goal, debug=False):\n",
514 " agenda = [[start]]\n",
515 " finished = False\n",
516 " while not finished and agenda:\n",
517 " current = agenda[0]\n",
518 " if debug:\n",
519 " print(current)\n",
520 " if current[-1] == goal:\n",
521 " finished = True\n",
522 " else:\n",
523 " successors = extend(current)\n",
524 " agenda = successors + agenda[1:]\n",
525 " if finished:\n",
526 " return current\n",
527 " else:\n",
528 " return None "
529 ]
530 },
531 {
532 "cell_type": "code",
533 "execution_count": 72,
534 "metadata": {
535 "collapsed": true
536 },
537 "outputs": [],
538 "source": [
539 "def astar_search(start, goal, debug=False):\n",
540 " agenda = [(distance(start, goal), [start])]\n",
541 " heapq.heapify(agenda)\n",
542 " finished = False\n",
543 " while not finished and agenda:\n",
544 " _, current = heapq.heappop(agenda)\n",
545 " if debug:\n",
546 " print(current)\n",
547 " if current[-1] == goal:\n",
548 " finished = True\n",
549 " else:\n",
550 " successors = extend(current)\n",
551 " for s in successors:\n",
552 " heapq.heappush(agenda, (len(current) + distance(s[-1], goal) - 1, s))\n",
553 " if finished:\n",
554 " return current\n",
555 " else:\n",
556 " return None "
557 ]
558 },
559 {
560 "cell_type": "code",
561 "execution_count": 73,
562 "metadata": {
563 "collapsed": true
564 },
565 "outputs": [],
566 "source": [
567 "def astar_search_closed(start, goal, debug=False):\n",
568 " agenda = [(distance(start, goal), [start])]\n",
569 " heapq.heapify(agenda)\n",
570 " closed = set()\n",
571 " finished = False\n",
572 " while not finished and agenda:\n",
573 " _, current = heapq.heappop(agenda)\n",
574 " if debug:\n",
575 " print(current)\n",
576 " if current[-1] == goal:\n",
577 " finished = True\n",
578 " else:\n",
579 " closed.add(current[-1])\n",
580 " successors = extend(current, closed)\n",
581 " for s in successors:\n",
582 " heapq.heappush(agenda, (len(current) + distance(s[-1], goal) - 1, s))\n",
583 " if finished:\n",
584 " return current\n",
585 " else:\n",
586 " return None "
587 ]
588 },
589 {
590 "cell_type": "markdown",
591 "metadata": {},
592 "source": [
593 "# Mutually-reachable sets\n",
594 "\n",
595 "Find the transitive closure of the `neighbours` relation, so we can see which words can be transformed into which other words."
596 ]
597 },
598 {
599 "cell_type": "code",
600 "execution_count": 41,
601 "metadata": {},
602 "outputs": [
603 {
604 "data": {
605 "text/plain": [
606 "5109"
607 ]
608 },
609 "execution_count": 41,
610 "metadata": {},
611 "output_type": "execute_result"
612 }
613 ],
614 "source": [
615 "candidates = [set([k] + neighbours[k]) for k in neighbours]\n",
616 "reachables = []\n",
617 "while candidates:\n",
618 " current = set(candidates.pop())\n",
619 " altered = False\n",
620 " for other in candidates:\n",
621 " if current.intersection(other):\n",
622 " altered = True\n",
623 " current.update(other)\n",
624 " candidates.remove(other)\n",
625 " if altered:\n",
626 " candidates.append(current)\n",
627 " else:\n",
628 " reachables.append(current)\n",
629 "\n",
630 "len(reachables)"
631 ]
632 },
633 {
634 "cell_type": "code",
635 "execution_count": 42,
636 "metadata": {},
637 "outputs": [
638 {
639 "data": {
640 "text/plain": [
641 "1400"
642 ]
643 },
644 "execution_count": 42,
645 "metadata": {},
646 "output_type": "execute_result"
647 }
648 ],
649 "source": [
650 "len(max(reachables, key=len))"
651 ]
652 },
653 {
654 "cell_type": "code",
655 "execution_count": 43,
656 "metadata": {},
657 "outputs": [
658 {
659 "data": {
660 "text/plain": [
661 "1"
662 ]
663 },
664 "execution_count": 43,
665 "metadata": {},
666 "output_type": "execute_result"
667 }
668 ],
669 "source": [
670 "len(min(reachables, key=len))"
671 ]
672 },
673 {
674 "cell_type": "code",
675 "execution_count": 44,
676 "metadata": {
677 "scrolled": true
678 },
679 "outputs": [
680 {
681 "data": {
682 "text/plain": [
683 "Counter({1: 4102,\n",
684 " 2: 632,\n",
685 " 3: 183,\n",
686 " 4: 70,\n",
687 " 5: 35,\n",
688 " 6: 24,\n",
689 " 7: 19,\n",
690 " 8: 7,\n",
691 " 9: 11,\n",
692 " 10: 3,\n",
693 " 11: 5,\n",
694 " 12: 1,\n",
695 " 13: 4,\n",
696 " 14: 1,\n",
697 " 15: 1,\n",
698 " 17: 1,\n",
699 " 18: 1,\n",
700 " 19: 2,\n",
701 " 22: 1,\n",
702 " 25: 1,\n",
703 " 48: 1,\n",
704 " 133: 1,\n",
705 " 361: 1,\n",
706 " 773: 1,\n",
707 " 1400: 1})"
708 ]
709 },
710 "execution_count": 44,
711 "metadata": {},
712 "output_type": "execute_result"
713 }
714 ],
715 "source": [
716 "collections.Counter(len(r) for r in reachables)"
717 ]
718 },
719 {
720 "cell_type": "code",
721 "execution_count": 45,
722 "metadata": {
723 "scrolled": true
724 },
725 "outputs": [
726 {
727 "data": {
728 "text/plain": [
729 "[{'nullify', 'nullity'},\n",
730 " {'believe', 'relieve'},\n",
731 " {'wriggle', 'wriggly'},\n",
732 " {'appeals', 'appears'},\n",
733 " {'liaised', 'liaises'},\n",
734 " {'gibbons', 'ribbons'},\n",
735 " {'colonel', 'colones'},\n",
736 " {'vehicle', 'vesicle'},\n",
737 " {'unclean', 'unclear'},\n",
738 " {'yodeled', 'yodeler'},\n",
739 " {'minions', 'pinions'},\n",
740 " {'achiest', 'ashiest'},\n",
741 " {'regimen', 'regimes'},\n",
742 " {'produce', 'product'},\n",
743 " {'choicer', 'choices'},\n",
744 " {'immured', 'immures'},\n",
745 " {'retried', 'retries'},\n",
746 " {'blessed', 'blesses'},\n",
747 " {'herniae', 'hernias'},\n",
748 " {'mealier', 'meatier'},\n",
749 " {'scrubby', 'shrubby'},\n",
750 " {'treacle', 'treadle'},\n",
751 " {'redrawn', 'redraws'},\n",
752 " {'modular', 'nodular'},\n",
753 " {'lacunae', 'lacunas'},\n",
754 " {'martial', 'partial'},\n",
755 " {'jackals', 'jackass'},\n",
756 " {'ploughs', 'sloughs'},\n",
757 " {'salmons', 'saloons'},\n",
758 " {'armored', 'armorer'},\n",
759 " {'ability', 'agility'},\n",
760 " {'draping', 'drawing'},\n",
761 " {'tousled', 'tousles'},\n",
762 " {'coerced', 'coerces'},\n",
763 " {'fiestas', 'siestas'},\n",
764 " {'rankled', 'rankles'},\n",
765 " {'evolved', 'evolves'},\n",
766 " {'maestri', 'maestro'},\n",
767 " {'kennels', 'kernels'},\n",
768 " {'donkeys', 'monkeys'},\n",
769 " {'caftans', 'kaftans'},\n",
770 " {'outfits', 'outwits'},\n",
771 " {'renamed', 'renames'},\n",
772 " {'shadows', 'shadowy'},\n",
773 " {'scorers', 'snorers'},\n",
774 " {'jostled', 'jostles'},\n",
775 " {'overran', 'overrun'},\n",
776 " {'falsify', 'falsity'},\n",
777 " {'gyrated', 'gyrates'},\n",
778 " {'caverns', 'taverns'},\n",
779 " {'shushed', 'shushes'},\n",
780 " {'seventh', 'seventy'},\n",
781 " {'cabbies', 'tabbies'},\n",
782 " {'factors', 'factory'},\n",
783 " {'gnashed', 'gnashes'},\n",
784 " {'launder', 'maunder'},\n",
785 " {'focused', 'focuses'},\n",
786 " {'widened', 'wizened'},\n",
787 " {'hostels', 'hostess'},\n",
788 " {'wigwags', 'wigwams'},\n",
789 " {'postman', 'postmen'},\n",
790 " {'fortify', 'mortify'},\n",
791 " {'disport', 'distort'},\n",
792 " {'aliened', 'aligned'},\n",
793 " {'lechers', 'lechery'},\n",
794 " {'scruffs', 'scruffy'},\n",
795 " {'castled', 'castles'},\n",
796 " {'milkman', 'milkmen'},\n",
797 " {'hoodoos', 'voodoos'},\n",
798 " {'cronies', 'ironies'},\n",
799 " {'aliased', 'aliases'},\n",
800 " {'figured', 'figures'},\n",
801 " {'unnamed', 'untamed'},\n",
802 " {'perused', 'peruses'},\n",
803 " {'beckons', 'reckons'},\n",
804 " {'flakier', 'flukier'},\n",
805 " {'profane', 'propane'},\n",
806 " {'purpler', 'purples'},\n",
807 " {'detours', 'devours'},\n",
808 " {'bonnets', 'sonnets'},\n",
809 " {'clement', 'element'},\n",
810 " {'swerved', 'swerves'},\n",
811 " {'inhabit', 'inhibit'},\n",
812 " {'service', 'servile'},\n",
813 " {'fixture', 'mixture'},\n",
814 " {'fronted', 'frosted'},\n",
815 " {'heppest', 'hippest'},\n",
816 " {'masques', 'mosques'},\n",
817 " {'joyride', 'joyrode'},\n",
818 " {'boatman', 'boatmen'},\n",
819 " {'edified', 'edifies'},\n",
820 " {'copecks', 'kopecks'},\n",
821 " {'cassock', 'hassock'},\n",
822 " {'hansoms', 'ransoms'},\n",
823 " {'lucidly', 'luridly'},\n",
824 " {'tenured', 'tenures'},\n",
825 " {'kinsman', 'kinsmen'},\n",
826 " {'endorse', 'indorse'},\n",
827 " {'lizards', 'wizards'},\n",
828 " {'siphons', 'syphons'},\n",
829 " {'whooped', 'whoopee'},\n",
830 " {'topmast', 'topmost'},\n",
831 " {'equated', 'equates'},\n",
832 " {'cranium', 'uranium'},\n",
833 " {'affects', 'effects'},\n",
834 " {'seminal', 'seminar'},\n",
835 " {'defiant', 'deviant'},\n",
836 " {'roguish', 'voguish'},\n",
837 " {'archers', 'archery'},\n",
838 " {'bummest', 'rummest'},\n",
839 " {'bronchi', 'broncho'},\n",
840 " {'plowman', 'plowmen'},\n",
841 " {'brothel', 'brother'},\n",
842 " {'decline', 'recline'},\n",
843 " {'licence', 'license'},\n",
844 " {'tampons', 'tarpons'},\n",
845 " {'queried', 'queries'},\n",
846 " {'paisley', 'parsley'},\n",
847 " {'conceal', 'congeal'},\n",
848 " {'tumbrel', 'tumbril'},\n",
849 " {'exposed', 'exposes'},\n",
850 " {'gaudier', 'gauzier'},\n",
851 " {'slackly', 'slickly'},\n",
852 " {'caraway', 'faraway'},\n",
853 " {'girdled', 'girdles'},\n",
854 " {'baulked', 'caulked'},\n",
855 " {'declaim', 'reclaim'},\n",
856 " {'probate', 'prorate'},\n",
857 " {'tartans', 'tartars'},\n",
858 " {'voicing', 'voiding'},\n",
859 " {'rewrite', 'rewrote'},\n",
860 " {'pension', 'tension'},\n",
861 " {'enabled', 'enables'},\n",
862 " {'halfway', 'hallway'},\n",
863 " {'clamors', 'glamors'},\n",
864 " {'scuttle', 'shuttle'},\n",
865 " {'deleted', 'deletes'},\n",
866 " {'caveman', 'cavemen'},\n",
867 " {'retread', 'retreat'},\n",
868 " {'parkway', 'partway'},\n",
869 " {'lounged', 'lounges'},\n",
870 " {'centred', 'centres'},\n",
871 " {'sidebar', 'sidecar'},\n",
872 " {'lengths', 'lengthy'},\n",
873 " {'mislead', 'misread'},\n",
874 " {'predate', 'prelate'},\n",
875 " {'submits', 'summits'},\n",
876 " {'granges', 'oranges'},\n",
877 " {'exhaled', 'exhales'},\n",
878 " {'cumquat', 'kumquat'},\n",
879 " {'someday', 'someway'},\n",
880 " {'outgrew', 'outgrow'},\n",
881 " {'snivels', 'swivels'},\n",
882 " {'currant', 'current'},\n",
883 " {'taproom', 'taproot'},\n",
884 " {'incense', 'intense'},\n",
885 " {'showers', 'showery'},\n",
886 " {'lovable', 'movable'},\n",
887 " {'metered', 'petered'},\n",
888 " {'outcast', 'outlast'},\n",
889 " {'gaunter', 'saunter'},\n",
890 " {'spumone', 'spumoni'},\n",
891 " {'photons', 'protons'},\n",
892 " {'revenge', 'revenue'},\n",
893 " {'critter', 'fritter'},\n",
894 " {'culture', 'vulture'},\n",
895 " {'outlaws', 'outlays'},\n",
896 " {'reasons', 'seasons'},\n",
897 " {'mortice', 'mortise'},\n",
898 " {'atheism', 'atheist'},\n",
899 " {'immense', 'immerse'},\n",
900 " {'helices', 'helixes'},\n",
901 " {'gushers', 'pushers'},\n",
902 " {'clobber', 'slobber'},\n",
903 " {'deceive', 'receive'},\n",
904 " {'taxiing', 'taxying'},\n",
905 " {'newsman', 'newsmen'},\n",
906 " {'gloried', 'glories'},\n",
907 " {'deadens', 'deafens'},\n",
908 " {'jigsawn', 'jigsaws'},\n",
909 " {'custard', 'mustard'},\n",
910 " {'carrots', 'parrots'},\n",
911 " {'warship', 'worship'},\n",
912 " {'figment', 'pigment'},\n",
913 " {'amended', 'emended'},\n",
914 " {'sophism', 'sophist'},\n",
915 " {'poisons', 'prisons'},\n",
916 " {'bodices', 'codices'},\n",
917 " {'abraded', 'abrades'},\n",
918 " {'primate', 'private'},\n",
919 " {'stymied', 'stymies'},\n",
920 " {'vantage', 'vintage'},\n",
921 " {'jobless', 'joyless'},\n",
922 " {'sandman', 'sandmen'},\n",
923 " {'adduced', 'adduces'},\n",
924 " {'optical', 'optimal'},\n",
925 " {'whelked', 'whelped'},\n",
926 " {'roundly', 'soundly'},\n",
927 " {'testify', 'testily'},\n",
928 " {'sourced', 'sources'},\n",
929 " {'fearful', 'tearful'},\n",
930 " {'neighed', 'weighed'},\n",
931 " {'outside', 'outsize'},\n",
932 " {'dappled', 'dapples'},\n",
933 " {'scrolls', 'strolls'},\n",
934 " {'secrete', 'secrets'},\n",
935 " {'conveys', 'convoys'},\n",
936 " {'implied', 'implies'},\n",
937 " {'sluiced', 'sluices'},\n",
938 " {'piloted', 'pivoted'},\n",
939 " {'sandals', 'vandals'},\n",
940 " {'thereby', 'whereby'},\n",
941 " {'refrain', 'retrain'},\n",
942 " {'grandma', 'grandpa'},\n",
943 " {'deforms', 'reforms'},\n",
944 " {'foments', 'moments'},\n",
945 " {'beliefs', 'reliefs'},\n",
946 " {'closure', 'cloture'},\n",
947 " {'comings', 'copings'},\n",
948 " {'topsail', 'topsoil'},\n",
949 " {'oration', 'ovation'},\n",
950 " {'abashed', 'abashes'},\n",
951 " {'enrolls', 'unrolls'},\n",
952 " {'hurrahs', 'hurrays'},\n",
953 " {'waltzed', 'waltzes'},\n",
954 " {'dunnest', 'funnest'},\n",
955 " {'scrimps', 'shrimps'},\n",
956 " {'fission', 'mission'},\n",
957 " {'whizzed', 'whizzes'},\n",
958 " {'telexed', 'telexes'},\n",
959 " {'tempted', 'tempter'},\n",
960 " {'damaged', 'damages'},\n",
961 " {'quarter', 'quartet'},\n",
962 " {'phrased', 'phrases'},\n",
963 " {'freeman', 'freemen'},\n",
964 " {'artiste', 'artists'},\n",
965 " {'trebled', 'trebles'},\n",
966 " {'formals', 'formats'},\n",
967 " {'quizzed', 'quizzes'},\n",
968 " {'festive', 'restive'},\n",
969 " {'eclipse', 'ellipse'},\n",
970 " {'tribune', 'tribute'},\n",
971 " {'combats', 'wombats'},\n",
972 " {'freebee', 'freebie'},\n",
973 " {'copulae', 'copulas'},\n",
974 " {'reverie', 'reverse'},\n",
975 " {'employe', 'employs'},\n",
976 " {'alleged', 'alleges'},\n",
977 " {'jazzing', 'razzing'},\n",
978 " {'deplete', 'replete'},\n",
979 " {'pigeons', 'wigeons'},\n",
980 " {'obliged', 'obliges'},\n",
981 " {'magneto', 'magnets'},\n",
982 " {'maydays', 'paydays'},\n",
983 " {'dumbest', 'numbest'},\n",
984 " {'retyped', 'retypes'},\n",
985 " {'angular', 'annular'},\n",
986 " {'display', 'misplay'},\n",
987 " {'bewared', 'bewares'},\n",
988 " {'interne', 'interns'},\n",
989 " {'linings', 'livings'},\n",
990 " {'baseman', 'basemen'},\n",
991 " {'diverge', 'diverse'},\n",
992 " {'assayed', 'essayed'},\n",
993 " {'acceded', 'accedes'},\n",
994 " {'animism', 'animist'},\n",
995 " {'cutback', 'outback'},\n",
996 " {'burgeon', 'surgeon'},\n",
997 " {'accrued', 'accrues'},\n",
998 " {'imputed', 'imputes'},\n",
999 " {'aphasia', 'aphasic'},\n",
1000 " {'kittens', 'mittens'},\n",
1001 " {'glanced', 'glances'},\n",
1002 " {'jimmied', 'jimmies'},\n",
1003 " {'gummier', 'yummier'},\n",
1004 " {'miscued', 'miscues'},\n",
1005 " {'saluted', 'salutes'},\n",
1006 " {'smokers', 'stokers'},\n",
1007 " {'drummed', 'drummer'},\n",
1008 " {'explode', 'explore'},\n",
1009 " {'detoxed', 'detoxes'},\n",
1010 " {'cruelly', 'cruelty'},\n",
1011 " {'calcine', 'calcite'},\n",
1012 " {'hardest', 'harvest'},\n",
1013 " {'hawkish', 'mawkish'},\n",
1014 " {'patinae', 'patinas'},\n",
1015 " {'skulked', 'skunked'},\n",
1016 " {'lawyers', 'sawyers'},\n",
1017 " {'glacier', 'glazier'},\n",
1018 " {'spriest', 'spryest'},\n",
1019 " {'healthy', 'wealthy'},\n",
1020 " {'jurists', 'purists'},\n",
1021 " {'insider', 'insides'},\n",
1022 " {'chooses', 'choosey'},\n",
1023 " {'kneeled', 'knelled'},\n",
1024 " {'anneals', 'annuals'},\n",
1025 " {'aspired', 'aspires'},\n",
1026 " {'parlays', 'parleys'},\n",
1027 " {'cession', 'session'},\n",
1028 " {'egotism', 'egotist'},\n",
1029 " {'spectra', 'spectre'},\n",
1030 " {'privets', 'trivets'},\n",
1031 " {'bleaker', 'breaker'},\n",
1032 " {'fateful', 'hateful'},\n",
1033 " {'reactor', 'realtor'},\n",
1034 " {'liquefy', 'liquify'},\n",
1035 " {'thrifts', 'thrifty'},\n",
1036 " {'huffier', 'puffier'},\n",
1037 " {'adhered', 'adheres'},\n",
1038 " {'roseate', 'rosette'},\n",
1039 " {'audible', 'audibly'},\n",
1040 " {'bronzed', 'bronzes'},\n",
1041 " {'evinced', 'evinces'},\n",
1042 " {'woodman', 'woodmen'},\n",
1043 " {'defence', 'defense'},\n",
1044 " {'defends', 'depends'},\n",
1045 " {'earthed', 'earthen'},\n",
1046 " {'moussed', 'mousses'},\n",
1047 " {'ghastly', 'ghostly'},\n",
1048 " {'thieved', 'thieves'},\n",
1049 " {'sheathe', 'sheaths'},\n",
1050 " {'analyse', 'analyst'},\n",
1051 " {'caddish', 'faddish'},\n",
1052 " {'septets', 'sextets'},\n",
1053 " {'fixated', 'fixates'},\n",
1054 " {'caloric', 'calorie'},\n",
1055 " {'denials', 'menials'},\n",
1056 " {'restful', 'zestful'},\n",
1057 " {'lasagna', 'lasagne'},\n",
1058 " {'dryness', 'wryness'},\n",
1059 " {'leagued', 'leagues'},\n",
1060 " {'journey', 'tourney'},\n",
1061 " {'showier', 'snowier'},\n",
1062 " {'hideous', 'hideout'},\n",
1063 " {'intoned', 'intones'},\n",
1064 " {'imagine', 'imaging'},\n",
1065 " {'perjure', 'perjury'},\n",
1066 " {'albumen', 'albumin'},\n",
1067 " {'legally', 'regally'},\n",
1068 " {'applied', 'applies'},\n",
1069 " {'villain', 'villein'},\n",
1070 " {'arching', 'arcking'},\n",
1071 " {'imbibed', 'imbibes'},\n",
1072 " {'wastage', 'wattage'},\n",
1073 " {'inshore', 'onshore'},\n",
1074 " {'loathed', 'loathes'},\n",
1075 " {'dearths', 'hearths'},\n",
1076 " {'dulness', 'fulness'},\n",
1077 " {'foamier', 'loamier'},\n",
1078 " {'cannier', 'pannier'},\n",
1079 " {'bequest', 'request'},\n",
1080 " {'gossips', 'gossipy'},\n",
1081 " {'droning', 'ironing'},\n",
1082 " {'lineman', 'linemen'},\n",
1083 " {'casings', 'casinos'},\n",
1084 " {'sniping', 'swiping'},\n",
1085 " {'brewers', 'brewery'},\n",
1086 " {'muscled', 'muscles'},\n",
1087 " {'leafier', 'leakier'},\n",
1088 " {'mourned', 'mourner'},\n",
1089 " {'enclave', 'enslave'},\n",
1090 " {'cockier', 'rockier'},\n",
1091 " {'orators', 'oratory'},\n",
1092 " {'cajoled', 'cajoles'},\n",
1093 " {'policed', 'polices'},\n",
1094 " {'annexed', 'annexes'},\n",
1095 " {'racists', 'rapists'},\n",
1096 " {'fiancee', 'fiances'},\n",
1097 " {'aerials', 'serials'},\n",
1098 " {'vacated', 'vacates'},\n",
1099 " {'setback', 'wetback'},\n",
1100 " {'deprave', 'deprive'},\n",
1101 " {'crueler', 'cruller'},\n",
1102 " {'bulimia', 'bulimic'},\n",
1103 " {'unloved', 'unmoved'},\n",
1104 " {'desired', 'desires'},\n",
1105 " {'baloney', 'boloney'},\n",
1106 " {'exhumed', 'exhumes'},\n",
1107 " {'subside', 'subsidy'},\n",
1108 " {'faintly', 'saintly'},\n",
1109 " {'officer', 'offices'},\n",
1110 " {'scrawls', 'sprawls'},\n",
1111 " {'excreta', 'excrete'},\n",
1112 " {'confide', 'confine'},\n",
1113 " {'resells', 'retells'},\n",
1114 " {'inflame', 'inflate'},\n",
1115 " {'dourest', 'sourest'},\n",
1116 " {'probing', 'proving'},\n",
1117 " {'writhed', 'writhes'},\n",
1118 " {'tamable', 'taxable'},\n",
1119 " {'bemused', 'bemuses'},\n",
1120 " {'garoted', 'garotes'},\n",
1121 " {'geegaws', 'gewgaws'},\n",
1122 " {'hearken', 'hearten'},\n",
1123 " {'cowards', 'towards'},\n",
1124 " {'enticed', 'entices'},\n",
1125 " {'scallop', 'scollop'},\n",
1126 " {'donated', 'donates'},\n",
1127 " {'bethink', 'rethink'},\n",
1128 " {'coltish', 'doltish'},\n",
1129 " {'thrones', 'throngs'},\n",
1130 " {'likened', 'livened'},\n",
1131 " {'collide', 'collude'},\n",
1132 " {'entrees', 'entries'},\n",
1133 " {'bromide', 'bromine'},\n",
1134 " {'haggard', 'laggard'},\n",
1135 " {'quicken', 'quicker'},\n",
1136 " {'ignoble', 'ignobly'},\n",
1137 " {'leopard', 'leotard'},\n",
1138 " {'phished', 'phisher'},\n",
1139 " {'gipsies', 'gypsies'},\n",
1140 " {'attuned', 'attunes'},\n",
1141 " {'lividly', 'vividly'},\n",
1142 " {'palaces', 'palates'},\n",
1143 " {'arrived', 'arrives'},\n",
1144 " {'mutated', 'mutates'},\n",
1145 " {'dazzled', 'dazzles'},\n",
1146 " {'tourism', 'tourist'},\n",
1147 " {'cleanly', 'clearly'},\n",
1148 " {'bushman', 'bushmen'},\n",
1149 " {'amiable', 'amiably'},\n",
1150 " {'dissect', 'dissent'},\n",
1151 " {'rotated', 'rotates'},\n",
1152 " {'implode', 'implore'},\n",
1153 " {'footman', 'footmen'},\n",
1154 " {'pirated', 'pirates'},\n",
1155 " {'nuanced', 'nuances'},\n",
1156 " {'solaced', 'solaces'},\n",
1157 " {'parable', 'payable'},\n",
1158 " {'seances', 'stances'},\n",
1159 " {'resumed', 'resumes'},\n",
1160 " {'hammock', 'hummock'},\n",
1161 " {'beacons', 'deacons'},\n",
1162 " {'ickiest', 'inkiest'},\n",
1163 " {'repaint', 'reprint'},\n",
1164 " {'smuggle', 'snuggle'},\n",
1165 " {'analogs', 'analogy'},\n",
1166 " {'peopled', 'peoples'},\n",
1167 " {'limiest', 'limpest'},\n",
1168 " {'subdued', 'subdues'},\n",
1169 " {'eeriest', 'veriest'},\n",
1170 " {'enuring', 'inuring'},\n",
1171 " {'frogman', 'frogmen'},\n",
1172 " {'largess', 'largest'},\n",
1173 " {'affixed', 'affixes'},\n",
1174 " {'whereas', 'whereat'},\n",
1175 " {'elastic', 'plastic'},\n",
1176 " {'babysat', 'babysit'},\n",
1177 " {'amassed', 'amasses'},\n",
1178 " {'carfare', 'warfare'},\n",
1179 " {'oarsman', 'oarsmen'},\n",
1180 " {'parents', 'patents'},\n",
1181 " {'addenda', 'addends'},\n",
1182 " {'victual', 'virtual'},\n",
1183 " {'torment', 'torrent'},\n",
1184 " {'enclose', 'inclose'},\n",
1185 " {'builder', 'guilder'},\n",
1186 " {'thirsts', 'thirsty'},\n",
1187 " {'lineups', 'linkups'},\n",
1188 " {'vibrate', 'vibrato'},\n",
1189 " {'spinals', 'spirals'},\n",
1190 " {'pasture', 'posture'},\n",
1191 " {'enfolds', 'unfolds'},\n",
1192 " {'faggots', 'maggots'},\n",
1193 " {'gooiest', 'goriest'},\n",
1194 " {'baleful', 'baneful'},\n",
1195 " {'chemise', 'chemist'},\n",
1196 " {'indexed', 'indexes'},\n",
1197 " {'layoffs', 'payoffs'},\n",
1198 " {'tannest', 'wannest'},\n",
1199 " {'makings', 'takings'},\n",
1200 " {'gussets', 'russets'},\n",
1201 " {'steeple', 'steeply'},\n",
1202 " {'expanse', 'expense'},\n",
1203 " {'portend', 'portent'},\n",
1204 " {'cursors', 'cursory'},\n",
1205 " {'fibulae', 'fibulas'},\n",
1206 " {'garaged', 'garages'},\n",
1207 " {'fleshly', 'freshly'},\n",
1208 " {'fiercer', 'fierier'},\n",
1209 " {'nostrum', 'rostrum'},\n",
1210 " {'affable', 'affably'},\n",
1211 " {'bandage', 'bondage'},\n",
1212 " {'shyness', 'slyness'},\n",
1213 " {'upstage', 'upstate'},\n",
1214 " {'crewman', 'crewmen'},\n",
1215 " {'leanest', 'meanest'},\n",
1216 " {'unseals', 'unseats'},\n",
1217 " {'inflect', 'inflict'},\n",
1218 " {'tractor', 'traitor'},\n",
1219 " {'blitzed', 'blitzes'},\n",
1220 " {'clamour', 'glamour'},\n",
1221 " {'ineptly', 'inertly'},\n",
1222 " {'trotted', 'trotter'},\n",
1223 " {'utopian', 'utopias'},\n",
1224 " {'fascism', 'fascist'},\n",
1225 " {'firearm', 'forearm'},\n",
1226 " {'cubicle', 'cuticle'},\n",
1227 " {'ukelele', 'ukulele'},\n",
1228 " {'needled', 'needles'},\n",
1229 " {'broiled', 'broiler'},\n",
1230 " {'pommels', 'pummels'},\n",
1231 " {'pomaded', 'pomades'},\n",
1232 " {'humored', 'rumored'},\n",
1233 " {'squashy', 'squishy'},\n",
1234 " {'milieus', 'milieux'},\n",
1235 " {'clubbed', 'flubbed'},\n",
1236 " {'queenly', 'queerly'},\n",
1237 " {'attired', 'attires'},\n",
1238 " {'heedful', 'needful'},\n",
1239 " {'scythed', 'scythes'},\n",
1240 " {'tabular', 'tubular'},\n",
1241 " {'nerving', 'serving'},\n",
1242 " {'rebuild', 'rebuilt'},\n",
1243 " {'tartest', 'tautest'},\n",
1244 " {'protean', 'protein'},\n",
1245 " {'hotshot', 'potshot'},\n",
1246 " {'curious', 'furious'},\n",
1247 " {'tipsier', 'tipster'},\n",
1248 " {'beetled', 'beetles'},\n",
1249 " {'imposed', 'imposes'},\n",
1250 " {'aimless', 'airless'},\n",
1251 " {'sibling', 'sidling'},\n",
1252 " {'topical', 'typical'},\n",
1253 " {'batsman', 'batsmen'},\n",
1254 " {'jujitsu', 'jujutsu'},\n",
1255 " {'coroner', 'coronet'},\n",
1256 " {'capital', 'capitol'},\n",
1257 " {'offence', 'offense'},\n",
1258 " {'briefed', 'briefer'},\n",
1259 " {'central', 'ventral'},\n",
1260 " {'chiding', 'chiming'},\n",
1261 " {'bloused', 'blouses'},\n",
1262 " {'unlaced', 'unlaces'},\n",
1263 " {'replied', 'replies'},\n",
1264 " {'citrons', 'citrous'},\n",
1265 " {'salient', 'sapient'},\n",
1266 " {'hassled', 'hassles'},\n",
1267 " {'schlepp', 'schleps'},\n",
1268 " {'coronae', 'coronas'},\n",
1269 " {'paraded', 'parades'},\n",
1270 " {'outdoes', 'outgoes'},\n",
1271 " {'invoked', 'invokes'},\n",
1272 " {'emerged', 'emerges'},\n",
1273 " {'digress', 'tigress'},\n",
1274 " {'caption', 'caution'},\n",
1275 " {'torqued', 'torques'},\n",
1276 " {'grieved', 'grieves'},\n",
1277 " {'lineage', 'linkage'},\n",
1278 " {'opposed', 'opposes'},\n",
1279 " {'goodbye', 'goodbys'},\n",
1280 " {'goddess', 'godless'},\n",
1281 " {'snifter', 'swifter'},\n",
1282 " {'empanel', 'impanel'},\n",
1283 " {'handout', 'hangout'},\n",
1284 " {'elitism', 'elitist'},\n",
1285 " {'valiant', 'variant'},\n",
1286 " {'workman', 'workmen'},\n",
1287 " {'baronet', 'bayonet'},\n",
1288 " {'oarlock', 'warlock'},\n",
1289 " {'deserve', 'reserve'},\n",
1290 " {'bumpkin', 'pumpkin'},\n",
1291 " {'chamois', 'chamoix'},\n",
1292 " {'devalue', 'revalue'},\n",
1293 " {'paunchy', 'raunchy'},\n",
1294 " {'highest', 'nighest'},\n",
1295 " {'infused', 'infuses'},\n",
1296 " {'louvred', 'louvres'},\n",
1297 " {'bookish', 'boorish'},\n",
1298 " {'elapsed', 'elapses'},\n",
1299 " {'denture', 'venture'},\n",
1300 " {'consuls', 'consult'},\n",
1301 " {'salvage', 'selvage'},\n",
1302 " {'specced', 'specked'},\n",
1303 " {'ferment', 'fervent'},\n",
1304 " {'tussled', 'tussles'},\n",
1305 " {'hermits', 'permits'},\n",
1306 " {'honchos', 'ponchos'},\n",
1307 " {'widowed', 'widower'},\n",
1308 " {'cicadae', 'cicadas'},\n",
1309 " {'aureola', 'aureole'},\n",
1310 " {'inhered', 'inheres'},\n",
1311 " {'legible', 'legibly'},\n",
1312 " {'outline', 'outlive'},\n",
1313 " {'present', 'prevent'},\n",
1314 " {'bureaus', 'bureaux'},\n",
1315 " {'desists', 'resists'},\n",
1316 " {'heavens', 'leavens'},\n",
1317 " {'tongued', 'tongues'},\n",
1318 " {'roughly', 'toughly'},\n",
1319 " {'quashed', 'quashes'},\n",
1320 " {'outwore', 'outworn'},\n",
1321 " {'designs', 'resigns'},\n",
1322 " {'upright', 'uptight'},\n",
1323 " {'revoked', 'revokes'},\n",
1324 " {'skydive', 'skydove'},\n",
1325 " {'consort', 'contort'},\n",
1326 " {'labored', 'laborer'},\n",
1327 " {'dingoes', 'lingoes'},\n",
1328 " {'trestle', 'wrestle'},\n",
1329 " {'favored', 'savored'},\n",
1330 " {'ignored', 'ignores'},\n",
1331 " {'forgave', 'forgive'},\n",
1332 " {'confirm', 'conform'},\n",
1333 " {'effaced', 'effaces'},\n",
1334 " {'hangman', 'hangmen'},\n",
1335 " {'garotte', 'gavotte'},\n",
1336 " {'capable', 'capably'},\n",
1337 " {'pajamas', 'pyjamas'},\n",
1338 " {'opening', 'opining'},\n",
1339 " {'require', 'requite'},\n",
1340 " {'nemeses', 'nemesis'},\n",
1341 " {'stature', 'statute'},\n",
1342 " {'famines', 'gamines'},\n",
1343 " {'datives', 'natives'},\n",
1344 " {'pebbled', 'pebbles'},\n",
1345 " {'anaemia', 'anaemic'},\n",
1346 " {'emitted', 'omitted'},\n",
1347 " {'sobered', 'soberer'},\n",
1348 " {'clovers', 'plovers'},\n",
1349 " {'rampant', 'rampart'},\n",
1350 " {'mailman', 'mailmen'},\n",
1351 " {'novella', 'novelle'},\n",
1352 " {'usurped', 'usurper'},\n",
1353 " {'calyces', 'calyxes'},\n",
1354 " {'pierced', 'pierces'},\n",
1355 " {'kneaded', 'kneader'},\n",
1356 " {'ignited', 'ignites'},\n",
1357 " {'dudgeon', 'dungeon'},\n",
1358 " {'impeded', 'impedes'},\n",
1359 " {'scherzi', 'scherzo'},\n",
1360 " {'generic', 'genetic'},\n",
1361 " {'paroled', 'parolee', 'paroles'},\n",
1362 " {'civvies', 'divvied', 'divvies'},\n",
1363 " {'crackle', 'crackly', 'grackle'},\n",
1364 " {'pinkest', 'puniest', 'punkest'},\n",
1365 " {'nebulae', 'nebular', 'nebulas'},\n",
1366 " {'condoes', 'condoms', 'condors'},\n",
1367 " {'steamed', 'steamer', 'stemmed'},\n",
1368 " {'equable', 'equably', 'equally'},\n",
1369 " {'command', 'commend', 'comment'},\n",
1370 " {'stubble', 'stubbly', 'stumble'},\n",
1371 " {'handbag', 'sandbag', 'sandbar'},\n",
1372 " {'sponged', 'sponger', 'sponges'},\n",
1373 " {'quavers', 'quavery', 'quivers'},\n",
1374 " {'burnous', 'burnout', 'turnout'},\n",
1375 " {'cookout', 'lockout', 'lookout'},\n",
1376 " {'drivels', 'drivers', 'drovers'},\n",
1377 " {'densest', 'tensest', 'tersest'},\n",
1378 " {'minnows', 'windows', 'winnows'},\n",
1379 " {'chequed', 'chequer', 'cheques'},\n",
1380 " {'comical', 'conical', 'cynical'},\n",
1381 " {'crassly', 'crossly', 'grossly'},\n",
1382 " {'soluble', 'voluble', 'volubly'},\n",
1383 " {'schemed', 'schemer', 'schemes'},\n",
1384 " {'fidgets', 'fidgety', 'midgets'},\n",
1385 " {'heights', 'weights', 'weighty'},\n",
1386 " {'knacker', 'knocked', 'knocker'},\n",
1387 " {'favours', 'savours', 'savoury'},\n",
1388 " {'invaded', 'invader', 'invades'},\n",
1389 " {'duality', 'qualify', 'quality'},\n",
1390 " {'lichees', 'lichens', 'lychees'},\n",
1391 " {'spruced', 'sprucer', 'spruces'},\n",
1392 " {'humours', 'rumours', 'tumours'},\n",
1393 " {'confuse', 'confute', 'contuse'},\n",
1394 " {'cutlets', 'outlets', 'outsets'},\n",
1395 " {'fistful', 'wishful', 'wistful'},\n",
1396 " {'coupled', 'couples', 'couplet'},\n",
1397 " {'growled', 'prowled', 'prowler'},\n",
1398 " {'collage', 'collate', 'college'},\n",
1399 " {'shaikhs', 'shaykhs', 'sheikhs'},\n",
1400 " {'cloning', 'closing', 'cloying'},\n",
1401 " {'digests', 'diverts', 'divests'},\n",
1402 " {'massage', 'message', 'passage'},\n",
1403 " {'storied', 'stories', 'stormed'},\n",
1404 " {'fainest', 'fairest', 'vainest'},\n",
1405 " {'soothed', 'soothes', 'toothed'},\n",
1406 " {'deigned', 'feigned', 'reigned'},\n",
1407 " {'grandee', 'grander', 'grinder'},\n",
1408 " {'carbide', 'carbine', 'carmine'},\n",
1409 " {'dignify', 'dignity', 'signify'},\n",
1410 " {'diction', 'faction', 'fiction'},\n",
1411 " {'noticed', 'notices', 'novices'},\n",
1412 " {'plagued', 'plagues', 'plaques'},\n",
1413 " {'scarlet', 'starlet', 'starlit'},\n",
1414 " {'pursued', 'pursuer', 'pursues'},\n",
1415 " {'ranched', 'rancher', 'ranches'},\n",
1416 " {'sidings', 'tidings', 'timings'},\n",
1417 " {'squeaks', 'squeaky', 'squeals'},\n",
1418 " {'ejected', 'elected', 'erected'},\n",
1419 " {'enduing', 'ensuing', 'induing'},\n",
1420 " {'notable', 'notably', 'potable'},\n",
1421 " {'dustman', 'dustmen', 'dustpan'},\n",
1422 " {'pompoms', 'pompons', 'pompous'},\n",
1423 " {'blandly', 'blankly', 'blindly'},\n",
1424 " {'vaginae', 'vaginal', 'vaginas'},\n",
1425 " {'spacial', 'spatial', 'special'},\n",
1426 " {'editing', 'exiling', 'exiting'},\n",
1427 " {'lateral', 'liberal', 'literal'},\n",
1428 " {'pendant', 'pendent', 'pennant'},\n",
1429 " {'purveys', 'surreys', 'surveys'},\n",
1430 " {'sarapes', 'serapes', 'seraphs'},\n",
1431 " {'devolve', 'resolve', 'revolve'},\n",
1432 " {'reneged', 'reneges', 'renewed'},\n",
1433 " {'innards', 'inwards', 'onwards'},\n",
1434 " {'unified', 'unifies', 'unities'},\n",
1435 " {'rescued', 'rescuer', 'rescues'},\n",
1436 " {'cachets', 'sachems', 'sachets'},\n",
1437 " {'condole', 'condone', 'console'},\n",
1438 " {'empress', 'express', 'impress'},\n",
1439 " {'alerted', 'averred', 'averted'},\n",
1440 " {'badness', 'madness', 'sadness'},\n",
1441 " {'swaddle', 'twaddle', 'twiddle'},\n",
1442 " {'cornier', 'hornier', 'horsier'},\n",
1443 " {'burnish', 'furbish', 'furnish'},\n",
1444 " {'jealous', 'zealots', 'zealous'},\n",
1445 " {'sublets', 'subsets', 'sunsets'},\n",
1446 " {'cellars', 'collars', 'dollars'},\n",
1447 " {'voyaged', 'voyager', 'voyages'},\n",
1448 " {'haddock', 'paddock', 'padlock'},\n",
1449 " {'process', 'profess', 'prowess'},\n",
1450 " {'doorman', 'doormat', 'doormen'},\n",
1451 " {'discard', 'discoed', 'discord'},\n",
1452 " {'secured', 'securer', 'secures'},\n",
1453 " {'shallot', 'shallow', 'swallow'},\n",
1454 " {'modules', 'modulus', 'nodules'},\n",
1455 " {'groomed', 'grooved', 'grooves'},\n",
1456 " {'hookahs', 'hoorahs', 'hoorays'},\n",
1457 " {'allayed', 'allowed', 'alloyed'},\n",
1458 " {'advents', 'adverbs', 'adverts'},\n",
1459 " {'tiptoed', 'tiptoes', 'tiptops'},\n",
1460 " {'shadier', 'shakier', 'snakier'},\n",
1461 " {'honeyed', 'moneyed', 'moseyed'},\n",
1462 " {'respect', 'respell', 'respelt'},\n",
1463 " {'recipes', 'recited', 'recites'},\n",
1464 " {'project', 'protect', 'protest'},\n",
1465 " {'dullest', 'fellest', 'fullest'},\n",
1466 " {'thistle', 'whistle', 'whittle'},\n",
1467 " {'regaled', 'regales', 'resales'},\n",
1468 " {'naively', 'naivete', 'naivety'},\n",
1469 " {'primacy', 'primary', 'privacy'},\n",
1470 " {'curable', 'durable', 'durably'},\n",
1471 " {'demount', 'recount', 'remount'},\n",
1472 " {'accused', 'accuser', 'accuses'},\n",
1473 " {'opaqued', 'opaquer', 'opaques'},\n",
1474 " {'deified', 'deifies', 'deities'},\n",
1475 " {'kindled', 'kindles', 'kindred'},\n",
1476 " {'deflect', 'reelect', 'reflect'},\n",
1477 " {'learned', 'learner', 'yearned'},\n",
1478 " {'baptise', 'baptism', 'baptist'},\n",
1479 " {'caromed', 'chromed', 'chromes'},\n",
1480 " {'descant', 'descend', 'descent'},\n",
1481 " {'impalas', 'impaled', 'impales'},\n",
1482 " {'passels', 'pastels', 'tassels'},\n",
1483 " {'inhaled', 'inhaler', 'inhales'},\n",
1484 " {'epoxied', 'epoxies', 'epoxyed'},\n",
1485 " {'capture', 'rapture', 'rupture'},\n",
1486 " {'overlap', 'overlay', 'overpay'},\n",
1487 " {'risible', 'visible', 'visibly'},\n",
1488 " {'unbends', 'unbinds', 'unwinds'},\n",
1489 " {'balance', 'valance', 'valence'},\n",
1490 " {'sneaked', 'sneaker', 'speaker'},\n",
1491 " {'savvied', 'savvier', 'savvies'},\n",
1492 " {'gentled', 'gentler', 'gentles'},\n",
1493 " {'handily', 'hardily', 'tardily'},\n",
1494 " {'sprains', 'strains', 'straits'},\n",
1495 " {'forgers', 'forgery', 'forgets'},\n",
1496 " {'garnish', 'tarnish', 'varnish'},\n",
1497 " {'gnarled', 'snailed', 'snarled'},\n",
1498 " {'galleys', 'valleys', 'volleys'},\n",
1499 " {'loonier', 'loonies', 'loopier'},\n",
1500 " {'conduce', 'conduct', 'conduit'},\n",
1501 " {'cosiest', 'nosiest', 'rosiest'},\n",
1502 " {'gestate', 'restate', 'testate'},\n",
1503 " {'gimpier', 'wimpier', 'wispier'},\n",
1504 " {'marinas', 'mariner', 'marines'},\n",
1505 " {'knitted', 'knitter', 'knotted'},\n",
1506 " {'czarina', 'tsarina', 'tzarina'},\n",
1507 " {'pricier', 'privier', 'privies'},\n",
1508 " {'thither', 'whether', 'whither'},\n",
1509 " {'jerkier', 'perkier', 'peskier'},\n",
1510 " {'geneses', 'genesis', 'genuses'},\n",
1511 " {'queened', 'queered', 'queerer'},\n",
1512 " {'escaped', 'escapee', 'escapes'},\n",
1513 " {'plodded', 'plodder', 'prodded'},\n",
1514 " {'heroics', 'heroine', 'heroins'},\n",
1515 " {'freshen', 'fresher', 'freshet'},\n",
1516 " {'encased', 'encases', 'uncased'},\n",
1517 " {'densely', 'tensely', 'tersely'},\n",
1518 " {'mortals', 'mortars', 'portals'},\n",
1519 " {'stylise', 'stylish', 'stylist'},\n",
1520 " {'impacts', 'imparts', 'imports'},\n",
1521 " {'careens', 'careers', 'carvers'},\n",
1522 " {'chorale', 'chorals', 'chortle'},\n",
1523 " {'gainful', 'pailful', 'painful'},\n",
1524 " {'circled', 'circles', 'circlet'},\n",
1525 " {'etching', 'inching', 'itching'},\n",
1526 " {'sultana', 'sultans', 'suntans'},\n",
1527 " {'futures', 'sutured', 'sutures'},\n",
1528 " {'joshing', 'noshing', 'nothing'},\n",
1529 " {'fondled', 'fondles', 'fondues'},\n",
1530 " {'auction', 'section', 'suction'},\n",
1531 " {'undoing', 'undying', 'untying'},\n",
1532 " {'drinker', 'drunken', 'drunker'},\n",
1533 " {'bluffed', 'bluffer', 'fluffed'},\n",
1534 " {'foisted', 'heisted', 'hoisted'},\n",
1535 " {'rubdown', 'rundown', 'sundown'},\n",
1536 " {'psyched', 'psyches', 'psychos'},\n",
1537 " {'lassies', 'lassoed', 'lassoes'},\n",
1538 " {'baskets', 'caskets', 'gaskets'},\n",
1539 " {'blueing', 'clueing', 'glueing'},\n",
1540 " {'emptied', 'emptier', 'empties'},\n",
1541 " {'locales', 'located', 'locates'},\n",
1542 " {'merging', 'verging', 'versing'},\n",
1543 " {'admired', 'admirer', 'admires'},\n",
1544 " {'greened', 'greener', 'greeted', 'preened'},\n",
1545 " {'dankest', 'darkest', 'lankest', 'rankest'},\n",
1546 " {'abetted', 'abetter', 'abettor', 'abutted'},\n",
1547 " {'threads', 'threats', 'throats', 'throaty'},\n",
1548 " {'pronged', 'wringer', 'wronged', 'wronger'},\n",
1549 " {'gassier', 'sassier', 'sissier', 'sissies'},\n",
1550 " {'crinkle', 'crinkly', 'wrinkle', 'wrinkly'},\n",
1551 " {'pardons', 'parsons', 'persona', 'persons'},\n",
1552 " {'lightly', 'nightly', 'rightly', 'tightly'},\n",
1553 " {'install', 'instals', 'instill', 'instils'},\n",
1554 " {'dwindle', 'spindle', 'spindly', 'swindle'},\n",
1555 " {'acidify', 'acidity', 'aridity', 'avidity'},\n",
1556 " {'shrills', 'shrilly', 'thralls', 'thrills'},\n",
1557 " {'arbours', 'ardours', 'armours', 'armoury'},\n",
1558 " {'decants', 'recants', 'recasts', 'repasts'},\n",
1559 " {'sedated', 'sedater', 'sedates', 'senates'},\n",
1560 " {'bumpier', 'dumpier', 'jumpier', 'lumpier'},\n",
1561 " {'crumble', 'crumbly', 'crumple', 'grumble'},\n",
1562 " {'fastest', 'fattest', 'fittest', 'vastest'},\n",
1563 " {'precise', 'premise', 'premiss', 'promise'},\n",
1564 " {'dilated', 'dilates', 'diluted', 'dilutes'},\n",
1565 " {'expands', 'expends', 'extends', 'extents'},\n",
1566 " {'prickle', 'prickly', 'trickle', 'truckle'},\n",
1567 " {'undated', 'updated', 'updater', 'updates'},\n",
1568 " {'abjured', 'abjures', 'adjured', 'adjures'},\n",
1569 " {'buzzing', 'fizzing', 'futzing', 'fuzzing'},\n",
1570 " {'bravest', 'gravest', 'grayest', 'greyest'},\n",
1571 " {'receded', 'recedes', 'seceded', 'secedes'},\n",
1572 " {'wheeled', 'wheeler', 'wheezed', 'wheezes'},\n",
1573 " {'twisted', 'twister', 'twitted', 'twitter'},\n",
1574 " {'abasing', 'abating', 'abusing', 'amusing'},\n",
1575 " {'realest', 'realise', 'realism', 'realist'},\n",
1576 " {'engaged', 'engages', 'enraged', 'enrages'},\n",
1577 " {'charily', 'charity', 'clarify', 'clarity'},\n",
1578 " {'curfews', 'curlers', 'curlews', 'hurlers'},\n",
1579 " {'avenged', 'avenger', 'avenges', 'avenues'},\n",
1580 " {'distils', 'pistils', 'pistols', 'pistons'},\n",
1581 " {'haziest', 'laciest', 'laziest', 'raciest'},\n",
1582 " {'alluded', 'alludes', 'allured', 'allures'},\n",
1583 " {'inbound', 'unbound', 'unsound', 'unwound'},\n",
1584 " {'advised', 'adviser', 'advises', 'advisor'},\n",
1585 " {'rebound', 'redound', 'resound', 'rewound'},\n",
1586 " {'berthed', 'birched', 'birches', 'birthed'},\n",
1587 " {'teasels', 'teasers', 'teazels', 'weasels'},\n",
1588 " {'encrust', 'entrust', 'incrust', 'intrust'},\n",
1589 " {'certain', 'curtail', 'curtain', 'pertain'},\n",
1590 " {'defaced', 'defaces', 'defamed', 'defames'},\n",
1591 " {'burlier', 'curlier', 'curvier', 'surlier'},\n",
1592 " {'hokiest', 'holiest', 'homiest', 'pokiest'},\n",
1593 " {'fielded', 'fielder', 'wielded', 'yielded'},\n",
1594 " {'adapted', 'adapter', 'adaptor', 'adopted'},\n",
1595 " {'anglers', 'anthems', 'anthers', 'antlers'},\n",
1596 " {'assumed', 'assumes', 'assured', 'assures'},\n",
1597 " {'iodised', 'iodises', 'ionised', 'ionises'},\n",
1598 " {'chamber', 'clamber', 'climbed', 'climber'},\n",
1599 " {'retinae', 'retinal', 'retinas', 'retinue'},\n",
1600 " {'fizzled', 'fizzles', 'sizzled', 'sizzles'},\n",
1601 " {'forties', 'softies', 'sortied', 'sorties'},\n",
1602 " {'seethed', 'seethes', 'teethed', 'teethes'},\n",
1603 " {'showman', 'showmen', 'snowman', 'snowmen'},\n",
1604 " {'detract', 'refract', 'retrace', 'retract'},\n",
1605 " {'screams', 'streaks', 'streaky', 'streams'},\n",
1606 " {'massive', 'missile', 'missive', 'passive'},\n",
1607 " {'foraged', 'forager', 'forages', 'forayed'},\n",
1608 " {'dummies', 'mommies', 'mummies', 'tummies'},\n",
1609 " {'despise', 'despite', 'respire', 'respite'},\n",
1610 " {'deposed', 'deposes', 'reposed', 'reposes'},\n",
1611 " {'fireman', 'firemen', 'foreman', 'foremen'},\n",
1612 " {'boniest', 'tidiest', 'tiniest', 'toniest'},\n",
1613 " {'cattily', 'hastily', 'nastily', 'nattily'},\n",
1614 " {'feather', 'heathen', 'heather', 'leather', 'weather'},\n",
1615 " {'average', 'operate', 'overage', 'overate', 'overawe'},\n",
1616 " {'whimper', 'whisked', 'whisker', 'whiskey', 'whisper'},\n",
1617 " {'enquire', 'enquiry', 'esquire', 'inquire', 'inquiry'},\n",
1618 " {'daftest', 'deftest', 'leftest', 'leftism', 'leftist'},\n",
1619 " {'cottage', 'hostage', 'portage', 'postage', 'pottage'},\n",
1620 " {'haughty', 'naughts', 'naughty', 'nougats', 'noughts'},\n",
1621 " {'brought', 'draught', 'drought', 'fraught', 'wrought'},\n",
1622 " {'legatee', 'legates', 'legatos', 'negated', 'negates'},\n",
1623 " {'smidgen', 'smidges', 'smidgin', 'smudged', 'smudges'},\n",
1624 " {'exhorts', 'expects', 'experts', 'exports', 'extorts'},\n",
1625 " {'jailers', 'jailors', 'mailers', 'sailors', 'tailors'},\n",
1626 " {'departs', 'deports', 'reports', 'resorts', 'retorts'},\n",
1627 " {'margins', 'marlins', 'martens', 'martini', 'martins'},\n",
1628 " {'dimpled', 'dimples', 'pimples', 'wimpled', 'wimples'},\n",
1629 " {'behaved', 'behaves', 'behoved', 'behoves', 'beloved'},\n",
1630 " {'fatness', 'fitness', 'wetness', 'witless', 'witness'},\n",
1631 " {'empires', 'expired', 'expires', 'umpired', 'umpires'},\n",
1632 " {'sampled', 'sampler', 'samples', 'simpler', 'simplex'},\n",
1633 " {'enacted', 'exacted', 'exacter', 'exalted', 'exulted'},\n",
1634 " {'macrons', 'matrons', 'microns', 'patrols', 'patrons'},\n",
1635 " {'besides', 'betided', 'betides', 'resided', 'resides'},\n",
1636 " {'guessed', 'guesser', 'guesses', 'guested', 'quested'},\n",
1637 " {'encoded', 'encoder', 'encodes', 'encored', 'encores'},\n",
1638 " {'mileage', 'millage', 'pillage', 'tillage', 'village'},\n",
1639 " {'breathe', 'breaths', 'breathy', 'wreathe', 'wreaths'},\n",
1640 " {'pranced', 'prancer', 'prances', 'princes', 'trances'},\n",
1641 " {'deadest', 'deafest', 'dearest', 'nearest', 'neatest'},\n",
1642 " {'drizzle', 'drizzly', 'frazzle', 'frizzle', 'grizzly'},\n",
1643 " {'indices', 'indicts', 'induced', 'induces', 'inducts'},\n",
1644 " {'berried', 'berries', 'ferried', 'ferries', 'serried'},\n",
1645 " {'demands', 'rebinds', 'remands', 'reminds', 'rewinds'},\n",
1646 " {'scudded', 'studded', 'studied', 'studies', 'studios'},\n",
1647 " {'decreed', 'decrees', 'decried', 'decries', 'degrees'},\n",
1648 " {'ravaged', 'ravages', 'savaged', 'savager', 'savages'},\n",
1649 " {'deluded', 'deludes', 'deluged', 'deluges', 'denuded', 'denudes'},\n",
1650 " {'buffers', 'buffets', 'differs', 'duffers', 'suffers', 'surfers'},\n",
1651 " {'quieted', 'quieter', 'quilted', 'quilter', 'quitted', 'quitter'},\n",
1652 " {'manured', 'manures', 'matured', 'maturer', 'matures', 'natures'},\n",
1653 " {'billion', 'bullion', 'million', 'mullion', 'pillion', 'zillion'},\n",
1654 " {'defeats', 'defects', 'dejects', 'detects', 'detests', 'rejects'},\n",
1655 " {'fledged', 'pledged', 'pledges', 'sledded', 'sledged', 'sledges'},\n",
1656 " {'locally', 'loyally', 'loyalty', 'royally', 'royalty', 'vocally'},\n",
1657 " {'blither', 'glitter', 'skitter', 'slather', 'slither', 'slitter'},\n",
1658 " {'scuffle', 'shuffle', 'snaffle', 'sniffle', 'snuffle', 'souffle'},\n",
1659 " {'craters', 'graders', 'graters', 'tracers', 'tracery', 'traders'},\n",
1660 " {'incised', 'incises', 'incited', 'incites', 'invited', 'invites'},\n",
1661 " {'dowdier', 'dowdies', 'downier', 'dowries', 'rowdier', 'rowdies'},\n",
1662 " {'doubled', 'doubles', 'doublet', 'doubted', 'doubter', 'roubles'},\n",
1663 " {'betaken', 'betakes', 'betoken', 'remakes', 'retaken', 'retakes'},\n",
1664 " {'dizzied', 'dizzier', 'dizzies', 'fizzier', 'fuzzier', 'tizzies'},\n",
1665 " {'fibbers', 'gibbers', 'gibbets', 'giblets', 'gimlets', 'goblets'},\n",
1666 " {'bearded', 'boarded', 'boarder', 'hoarded', 'hoarder', 'hoarier'},\n",
1667 " {'depress', 'redness', 'redress', 'regress', 'regrets', 'repress'},\n",
1668 " {'excised', 'excises', 'excited', 'excites', 'excused', 'excuses'},\n",
1669 " {'therein', 'thereof', 'thereon', 'wherein', 'whereof', 'whereon'},\n",
1670 " {'baddest', 'baldest', 'boldest', 'coldest', 'maddest', 'saddest'},\n",
1671 " {'corneal', 'corneas', 'corners', 'cornets', 'corsets', 'hornets'},\n",
1672 " {'bravely', 'bravery', 'gravels', 'gravely', 'grovels', 'travels'},\n",
1673 " {'fevered', 'levered', 'revered', 'reveres', 'reverts', 'severed', 'severer'},\n",
1674 " {'managed', 'manager', 'manages', 'menaced', 'menaces', 'menages', 'tanager'},\n",
1675 " {'alights', 'blights', 'flights', 'flighty', 'frights', 'plights', 'slights'},\n",
1676 " {'rehired', 'rehires', 'retired', 'retiree', 'retires', 'rewired', 'rewires'},\n",
1677 " {'divided', 'divider', 'divides', 'divined', 'diviner', 'divines', 'vivider'},\n",
1678 " {'petards', 'records', 'regards', 'retards', 'rewards', 'rewords', 'reworks'},\n",
1679 " {'cations', 'lotions', 'motions', 'nations', 'notions', 'potions', 'rations'},\n",
1680 " {'coffees', 'coffers', 'confers', 'confess', 'taffies', 'toffees', 'toffies'},\n",
1681 " {'derails', 'details', 'detains', 'regains', 'remains', 'retails', 'retains'},\n",
1682 " {'crabbed', 'cribbed', 'drabber', 'drubbed', 'grabbed', 'grabber', 'grubbed'},\n",
1683 " {'breezed', 'breezes', 'freezer', 'freezes', 'friezes', 'frizzed', 'frizzes'},\n",
1684 " {'funnels', 'gunners', 'gunnery', 'nunnery', 'runnels', 'runners', 'tunnels'},\n",
1685 " {'dirtied', 'dirtier', 'dirties', 'ditties', 'dittoed', 'dittoes', 'kitties'},\n",
1686 " {'boodles', 'doodled', 'doodler', 'doodles', 'noodled', 'noodles', 'poodles'},\n",
1687 " {'legions', 'lesions', 'lessees', 'lessens', 'lessons', 'lessors', 'regions'},\n",
1688 " {'briskly', 'bristle', 'bristly', 'brittle', 'bruskly', 'gristle', 'gristly'},\n",
1689 " {'fleeing', 'flexing', 'fluting', 'fluxing', 'freeing', 'treeing', 'trueing'},\n",
1690 " {'blowers', 'flowers', 'flowery', 'glowers', 'grocers', 'grocery', 'growers'},\n",
1691 " {'hectors', 'rectors', 'rectory', 'sectors', 'vectors', 'victors', 'victory'},\n",
1692 " {'pennies',\n",
1693 " 'peonies',\n",
1694 " 'phobias',\n",
1695 " 'phobics',\n",
1696 " 'phonics',\n",
1697 " 'phonied',\n",
1698 " 'phonier',\n",
1699 " 'phonies'},\n",
1700 " {'capered',\n",
1701 " 'catered',\n",
1702 " 'caterer',\n",
1703 " 'papered',\n",
1704 " 'tapered',\n",
1705 " 'wagered',\n",
1706 " 'watered',\n",
1707 " 'wavered'},\n",
1708 " {'dickies',\n",
1709 " 'dingier',\n",
1710 " 'dinkier',\n",
1711 " 'dinkies',\n",
1712 " 'kickier',\n",
1713 " 'kinkier',\n",
1714 " 'pickier',\n",
1715 " 'pinkies'},\n",
1716 " {'nipples',\n",
1717 " 'rippled',\n",
1718 " 'ripples',\n",
1719 " 'tippled',\n",
1720 " 'tippler',\n",
1721 " 'tipples',\n",
1722 " 'toppled',\n",
1723 " 'topples'},\n",
1724 " {'absents',\n",
1725 " 'accents',\n",
1726 " 'accepts',\n",
1727 " 'ascends',\n",
1728 " 'ascents',\n",
1729 " 'assents',\n",
1730 " 'asserts',\n",
1731 " 'assorts'},\n",
1732 " {'regents',\n",
1733 " 'reheats',\n",
1734 " 'relents',\n",
1735 " 'repeals',\n",
1736 " 'repeats',\n",
1737 " 'repents',\n",
1738 " 'resents',\n",
1739 " 'reveals'},\n",
1740 " {'deduced',\n",
1741 " 'deduces',\n",
1742 " 'deducts',\n",
1743 " 'reduced',\n",
1744 " 'reduces',\n",
1745 " 'seduced',\n",
1746 " 'seducer',\n",
1747 " 'seduces'},\n",
1748 " {'fighter',\n",
1749 " 'lighted',\n",
1750 " 'lighten',\n",
1751 " 'lighter',\n",
1752 " 'righted',\n",
1753 " 'righter',\n",
1754 " 'sighted',\n",
1755 " 'tighten',\n",
1756 " 'tighter'},\n",
1757 " {'crafted',\n",
1758 " 'drafted',\n",
1759 " 'draftee',\n",
1760 " 'drifted',\n",
1761 " 'drifter',\n",
1762 " 'grafted',\n",
1763 " 'grafter',\n",
1764 " 'granted',\n",
1765 " 'grunted'},\n",
1766 " {'screwed',\n",
1767 " 'splayed',\n",
1768 " 'sprayed',\n",
1769 " 'sprayer',\n",
1770 " 'strafed',\n",
1771 " 'strafes',\n",
1772 " 'strawed',\n",
1773 " 'strayed',\n",
1774 " 'strewed'},\n",
1775 " {'endured',\n",
1776 " 'endures',\n",
1777 " 'ensured',\n",
1778 " 'ensures',\n",
1779 " 'injured',\n",
1780 " 'injures',\n",
1781 " 'insured',\n",
1782 " 'insurer',\n",
1783 " 'insures'},\n",
1784 " {'comfort',\n",
1785 " 'commune',\n",
1786 " 'commute',\n",
1787 " 'compete',\n",
1788 " 'comport',\n",
1789 " 'compose',\n",
1790 " 'compost',\n",
1791 " 'compote',\n",
1792 " 'compute'},\n",
1793 " {'squared',\n",
1794 " 'squarer',\n",
1795 " 'squares',\n",
1796 " 'squints',\n",
1797 " 'squired',\n",
1798 " 'squires',\n",
1799 " 'squirms',\n",
1800 " 'squirmy',\n",
1801 " 'squirts'},\n",
1802 " {'cleaned',\n",
1803 " 'cleaner',\n",
1804 " 'cleared',\n",
1805 " 'clearer',\n",
1806 " 'cleaved',\n",
1807 " 'cleaver',\n",
1808 " 'cleaves',\n",
1809 " 'gleamed',\n",
1810 " 'gleaned'},\n",
1811 " {'diapers',\n",
1812 " 'dippers',\n",
1813 " 'kippers',\n",
1814 " 'nippers',\n",
1815 " 'rapiers',\n",
1816 " 'rappers',\n",
1817 " 'rippers',\n",
1818 " 'tippers',\n",
1819 " 'zippers'},\n",
1820 " {'scalded',\n",
1821 " 'scalier',\n",
1822 " 'scalped',\n",
1823 " 'scalpel',\n",
1824 " 'scalper',\n",
1825 " 'scamper',\n",
1826 " 'scarcer',\n",
1827 " 'scarier',\n",
1828 " 'scolded'},\n",
1829 " {'happier',\n",
1830 " 'nappier',\n",
1831 " 'nappies',\n",
1832 " 'nippier',\n",
1833 " 'sappier',\n",
1834 " 'soapier',\n",
1835 " 'soppier',\n",
1836 " 'soupier',\n",
1837 " 'zippier'},\n",
1838 " {'bridged',\n",
1839 " 'bridges',\n",
1840 " 'bridled',\n",
1841 " 'bridles',\n",
1842 " 'cringed',\n",
1843 " 'cringes',\n",
1844 " 'fridges',\n",
1845 " 'fringed',\n",
1846 " 'fringes'}]"
1847 ]
1848 },
1849 "execution_count": 45,
1850 "metadata": {},
1851 "output_type": "execute_result"
1852 }
1853 ],
1854 "source": [
1855 "sorted((r for r in reachables if len(r) > 1 if len(r) < 10), key=len)"
1856 ]
1857 },
1858 {
1859 "cell_type": "code",
1860 "execution_count": 46,
1861 "metadata": {},
1862 "outputs": [
1863 {
1864 "data": {
1865 "text/plain": [
1866 "'abalone; abandon; abdomen; abducts; abiding; abolish; aborted; abounds; abreast; abridge; abscess; abscond; absence; absinth; absolve; absorbs; abstain; abusers; abusive; abysmal; abysses; acacias; academy; acanthi; acclaim; accords; accosts; account; accrual; accurst; acerbic; acetate; acetone; achieve; acolyte; aconite; acquire; acquits; acreage; acrider; acrobat; acronym; acrylic; actions; actives; actress; actuary; actuate; acutely; acutest; adagios; adamant; addicts; addling; address; adenoid; adeptly; adipose; adjoins; adjourn; adjudge; adjunct; adjusts; admiral; adoring; adorned; adrenal; adulate; advance; adverse; aerator; aerobic; aerosol; affairs; affirms; afflict; affords; affrays; affront; afghans; against; ageings; ageless; agendas; agilely; agilest; agitate; agonies; agonise; aground; aileron; ailment; airdrop; airfare; airhead; airings; airlift; airline; airmail; airport; airship; airsick; airways; alarmed; albinos; alchemy; alcohol; alcoves; alertly; alfalfa; algebra; alibied; alimony; alining; alkalis; allegro; allergy; allover; alluvia; allying; almanac; almonds; alpacas; already; alright; altered; alumnae; alumnus; amalgam; amateur; amatory; amazing; amazons; ambient; ambling; amenity; ammeter; ammonia; amnesia; amnesty; amoebas; amoebic; amongst; amorous; amounts; amperes; amplest; amplify; ampoule; ampules; amputee; amulets; anagram; anapest; anarchy; anatomy; anchors; anchovy; ancient; andante; andiron; android; anemone; angelic; angered; angling; angoras; angrier; angrily; anguish; animals; animate; aniseed; anklets; annoyed; annuity; anodyne; anoints; anomaly; anoraks; another; answers; antacid; anteing; antenna; anthill; anthrax; antigen; antique; antiwar; antonym; anxiety; anxious; anybody; anymore; anytime; aphelia; aplenty; apogees; apology; apostle; apparel; appease; appends; applaud; appoint; apprise; approve; apricot; apropos; aptness; aquaria; aquatic; aquavit; aqueous; aquifer; arbiter; arbutus; arcades; archaic; archest; archive; archway; arctics; arduous; arguing; argyles; armadas; armband; armfuls; armhole; armlets; armpits; armrest; armsful; arousal; arraign; arrange; arrayed; arrears; arrests; arrival; arroyos; article; artiest; artisan; artless; artsier; artwork; ascetic; ascribe; aseptic; asexual; ashamed; ashcans; ashrams; ashtray; asinine; askance; asocial; aspects; asphalt; aspirin; assails; assault; assigns; assists; assizes; assuage; astound; astride; astuter; asunder; asylums; atavism; atelier; athlete; atlases; atriums; atrophy; attache; attacks; attains; attempt; attends; attests; attract; audited; auditor; augment; augured; aurally; auricle; auspice; austere; authors; autopsy; autumns; availed; avarice; avatars; aviator; avocado; avoided; avowals; avowing; awaited; awakens; awaking; awarded; awesome; awfully; awkward; awnings; azaleas; azimuth; babiest; baboons; babying; babyish; bacilli; backbit; backhoe; backlog; backups; baggage; bagpipe; bailiff; bailout; balcony; ballads; ballast; balloon; balsams; bamboos; bananas; bandana; banjoes; banquet; banshee; bantams; banyans; baobabs; barbell; bargain; barmaid; baroque; barrack; barrage; barrios; barroom; bashful; bassist; bassoon; bastard; bastion; bathmat; bathtub; bauxite; bawdily; bazaars; bazooka; beagles; beanbag; bearish; beastly; beatify; beatnik; becalms; because; becomes; bedbugs; bedecks; bedevil; bedlams; bedpans; bedrock; bedroll; bedroom; bedside; bedsore; bedtime; beefier; beehive; beeline; beeswax; befalls; befouls; beggars; begonia; beguile; beheads; behests; behinds; beholds; belabor; bellboy; bellhop; belongs; beltway; bemoans; beneath; benefit; benumbs; benzene; bereave; berserk; beseech; besiege; bespeak; bespoke; bestial; bestirs; bestows; bestrid; betrays; betroth; between; betwixt; beveled; bewails; bewitch; biasing; biassed; bicycle; bifocal; biggest; bighorn; bigness; bigoted; bigotry; bigwigs; bikinis; bilious; bimboes; biology; bipedal; biplane; bipolar; biretta; biscuit; bisects; bishops; bismuth; bistros; bitumen; bivalve; bivouac; bizarre; blarney; blatant; blazers; blazons; bleakly; bleeped; blemish; blintze; blossom; blotchy; blowgun; blowout; blowups; blubber; bluejay; bluntly; bobcats; bobtail; bodegas; bodkins; bogeyed; boleros; bologna; bombard; bombast; bombers; bonanza; bonbons; boneyer; bonfire; bongoes; bonitos; bonnier; bonuses; bookend; booklet; bootleg; boozers; borders; boredom; borough; borscht; bossily; bottoms; boudoir; bouquet; bourbon; bovines; boxcars; boxwood; boycott; boyhood; braille; bramble; brasher; brashly; bravado; bravura; brazens; breadth; breakup; breasts; brevity; bribery; bribing; bridals; briefly; brigade; brigand; brimful; brinier; briquet; broadly; brocade; brogans; brogues; brokers; broncos; brownie; brunets; brusque; brutish; buckets; buckeye; buckram; bucksaw; bucolic; budgets; buffalo; buffoon; bugaboo; bugbear; buildup; bulbous; bulldog; bullish; bullock; bullpen; bulrush; bulwark; bunions; buoyant; burdens; burdock; burgher; burglar; burials; burrito; bursars; bursted; busbies; busboys; bushels; busiest; buttock; buttons; buyouts; buzzard; buzzers; byelaws; bygones; bylines; bywords; cabanas; cabaret; cabbage; cabinet; caboose; cadaver; cadence; cadenza; cadging; cadmium; caducei; caesium; caesura; cagiest; cahoots; caisson; calcify; calcium; calculi; caldron; calibre; calicos; caliper; caliphs; callers; callous; calmest; calumny; calypso; cambium; cambric; cameras; camphor; campier; canapes; canards; canasta; cancans; candour; canines; cannily; cantata; canteen; canvass; caplets; caprice; capsize; capstan; capsule; captain; captive; caracul; carafes; caramel; caravan; carcass; cardiac; careful; cargoes; caribou; carjack; carnage; carotid; carouse; carport; carrion; carsick; cartoon; cascade; cashews; cassava; cassias; cassino; castoff; casuals; casuist; catalpa; catarrh; catbird; catboat; catcall; catchup; catfish; cathode; catkins; catnaps; cattail; catwalk; caustic; cavalry; caveats; caviare; caviled; cavorts; cayenne; cedilla; celesta; cellist; cements; censure; centaur; centime; century; ceramic; cereals; cerebra; certify; chaffed; chagrin; chaises; chalets; chalice; chalked; chaotic; chapels; chaplet; charade; chariot; chasers; chassis; chateau; cheaply; checkup; cheddar; cheetah; cherish; cheroot; cherubs; chervil; chevron; chewers; chewier; chicest; chichis; chicory; chidden; chiefer; chiefly; chiffon; chigger; chignon; chimera; chimney; chintzy; chirrup; chisels; cholera; chowder; chronic; chuckle; chugged; chummed; churned; chutney; chutzpa; cigaret; cinemas; ciphers; circuit; cistern; citadel; citizen; civilly; clangor; clarets; clarion; classic; clayier; cleanse; cleanup; clerics; clerked; clients; climate; clinics; cliques; closely; closest; closets; coastal; cobwebs; cocaine; cochlea; cockade; cockily; cockney; cockpit; coconut; cocoons; codeine; codfish; codicil; coequal; coevals; coexist; coffins; cogency; cognacs; cognate; cohabit; cohorts; coiffed; coinage; colicky; colitis; collect; colleen; colloid; cologne; colored; colossi; colours; columns; comedic; comfier; commits; commode; commons; compact; company; compare; compass; compels; compile; complex; comrade; concave; concede; concise; concoct; concord; concurs; condemn; confabs; congaed; conifer; conjoin; conjure; connect; connive; connote; conquer; consign; consist; consume; contact; contain; contour; control; convict; convoke; coolant; coolest; copilot; copious; coppice; copycat; cordial; cordite; cordons; corncob; cornice; cornrow; corolla; corpora; corpses; corrals; correct; corrode; corrupt; corsage; corsair; cortege; cosigns; costars; costume; coterie; cottons; cougars; council; counsel; country; coupons; courage; courtly; cousins; coverts; cowbird; cowboys; cowgirl; cowhand; cowhide; cowlick; cowpoke; cowslip; coxcomb; coyness; coyotes; cozened; crackup; cranial; cravats; cravens; crayons; crazily; creator; creches; credits; creeper; cremate; creoles; cretins; crevice; crimson; cripple; crisply; critics; crochet; croquet; crouton; crowbar; crucial; crucify; crudely; crudest; crudity; crumbed; crunchy; crusade; crybaby; cryings; cryptic; crystal; cubical; cubists; cuckold; cuckoos; cudgels; cuisine; culotte; culprit; culvert; cumulus; cupcake; cupfuls; cupolas; cupsful; curates; curator; cursive; curtest; curtsey; cushion; cuspids; custody; customs; cutlass; cutlery; cutoffs; cyanide; cycling; cyclist; cyclone; cygnets; cymbals; cypress; dactyls; daemons; daffier; dahlias; damasks; dampest; damsels; damsons; dashiki; daubers; dauphin; daybeds; daytime; deadpan; deathly; debacle; debarks; debauch; debrief; debtors; debunks; decamps; decease; deceits; decency; decibel; decimal; declare; decorum; deejays; deepens; deepest; default; deficit; deflate; defraud; defrays; defrost; defunct; degrade; deicers; deicing; delight; delimit; deliria; deliver; delving; demagog; demeans; demerit; demesne; demigod; demoing; demonic; demurer; deniers; denizen; density; dentist; depicts; deplane; deplore; deploys; deposit; derange; derbies; derrick; dervish; deserts; desktop; despair; despoil; despots; dessert; destroy; detente; develop; deviate; devilry; devious; dewdrop; dewiest; dewlaps; diadems; diagram; dialect; dialled; dialogs; diamond; diaries; diarist; diatoms; diciest; dictate; dictums; diehard; diesels; dietary; dieters; dieting; diffuse; digital; digraph; dilemma; dimmest; dimness; dimwits; dinette; diocese; diorama; dioxide; dioxins; diploma; directs; disable; disarms; disavow; disband; disbars; discern; discuss; disdain; disease; disgust; dishpan; dishrag; dislike; dismays; dismiss; disobey; disowns; dispels; dispose; dispute; disrobe; disrupt; distaff; distant; distend; disturb; diurnal; divisor; divorce; divulge; dizzily; docents; doctors; doffing; dogfish; doggone; dogmata; dogtrot; dogwood; doleful; dollops; dolmens; dolphin; domains; dominos; doodads; doorway; dopiest; dorkier; dormant; dormers; dormice; dosages; doughty; dowager; dowdily; downers; drachma; dragnet; dragons; dragoon; drapery; drastic; drawers; dribble; driblet; driving; droller; droplet; dropout; drouths; drywall; dualism; dubiety; dubious; duchess; duchies; ductile; dugouts; dukedom; dullard; duodena; dustbin; duteous; dutiful; dwarfed; dwarves; dynamic; dynamos; dynasty; eagerer; eagerly; eaglets; earache; eardrum; earfuls; earldom; earlier; earlobe; earmark; earmuff; earnest; earplug; earshot; earthly; earwigs; easiest; eatable; ebonies; echelon; echoing; eclairs; ecology; economy; ecstasy; eddying; edgiest; edgings; edibles; edifice; edition; editors; educate; efforts; egghead; egoists; eighths; elation; elbowed; elderly; elector; elegant; elegiac; elegies; elevate; elevens; elicits; elision; elixirs; elusive; emailed; emanate; embalms; embargo; embarks; embassy; emblems; embrace; embroil; embryos; emerald; emetics; emigres; eminent; emirate; emoting; emotion; emotive; empathy; emperor; emporia; empower; emptily; emulate; enamels; enamors; enamour; encamps; enchant; encrypt; endears; endemic; endings; endives; endless; endowed; endways; endwise; enemata; enemies; enforce; engines; engorge; engrave; engross; engulfs; enhance; enigmas; enjoins; enjoyed; enlarge; enlists; enliven; ennoble; ensigns; ensnare; entails; entente; entered; enthral; enthuse; entitle; entombs; entrant; entraps; entreat; entropy; entwine; envelop; envious; envying; enzymes; epaulet; epicure; epigram; epilogs; episode; epistle; epitaph; epithet; epitome; epochal; epsilon; equator; equines; equinox; erasers; erasing; erasure; erectly; ermines; eroding; erosion; erosive; erotica; errands; erratas; erratic; erratum; erudite; erupted; eschews; escorts; escrows; espouse; espying; essence; estates; esteems; esthete; estuary; etchers; eternal; ethical; ethnics; eunuchs; euphony; evacuee; evading; evasion; evasive; evenest; evening; evicted; evident; eviller; evoking; exactly; examine; example; exceeds; excepts; excerpt; exclaim; exclude; execute; exempts; exerted; exhaust; exhibit; exigent; existed; exotics; expiate; explain; exploit; expound; expunge; extinct; extolls; extract; extreme; extrude; eyeball; eyebrow; eyefuls; eyelash; eyelets; eyelids; eyesore; fabrics; facades; faceted; facials; facings; factual; faculty; failure; fairway; falcons; fallacy; falloff; fallout; falsely; falsest; fanatic; fancily; fanfare; fantasy; fanzine; fashion; fatally; fathead; fathoms; fatigue; fatuous; faucets; feasted; feature; febrile; federal; fedoras; feebler; feedbag; felines; females; femoral; ferrets; ferrous; ferrule; fertile; fervour; festoon; fetlock; fetuses; fiascos; fibroid; fibrous; fickler; fifteen; fifties; filbert; filmier; finagle; finales; finally; finance; finesse; finicky; finises; firebug; firefly; firmest; firstly; fiscals; fishier; fishnet; fissure; fixable; fixedly; flaccid; flagons; flailed; flambes; flanges; flannel; flatcar; flattop; flaunts; flavors; flavour; floozie; florins; florist; flotsam; flounce; fluency; fluidly; flummox; flunkie; flyleaf; flyover; foghorn; foibles; foliage; fondant; fondest; foolery; foolish; footage; footsie; foppish; forbade; forbear; forbids; forbore; forceps; foreign; foreleg; foresaw; foresee; forests; forever; forfeit; forgoes; forgone; forlorn; formula; forsake; forsook; fortune; forward; forwent; fossils; foulest; foundry; fourths; foxhole; foxiest; foxtrot; fractal; fragile; frailty; framers; frankly; frantic; frappes; freckle; freedom; freeway; freight; frescos; fretful; fretted; friable; friends; frigate; frolics; frontal; frothed; fruited; fuchsia; fulcrum; fulfils; fulsome; funeral; fungous; funnily; furnace; furrier; further; furtive; fusible; fusions; fussily; fustian; fuzzily; gabbier; gadgets; gaffing; gainsay; gallant; galleon; gallery; gallium; gambits; gambols; gametes; gamiest; ganglia; gangway; gantlet; garbage; garland; garment; garrote; gaseous; gasohol; gastric; gateway; gaucher; gauchos; gaudily; gawkier; gawkily; gayness; gazebos; gazelle; gazette; gearbox; geckoes; geekier; geezers; geishas; gelatin; general; genital; genomes; genteel; gentian; gentile; genuine; geology; gerbils; germane; gerunds; gesture; getaway; geysers; gherkin; ghettos; ghosted; giddier; giddily; gigabit; gigolos; gimmick; gingham; gingkos; ginkgos; ginseng; giraffe; girders; girlish; gizzard; glacial; gleeful; glibber; glimpse; glinted; glisten; globule; glorify; glottis; glucose; gluiest; glutted; glutton; gnawing; gnomish; goatees; goblins; goddamn; godhood; godlier; godlike; godsend; godsons; goitres; golfers; gondola; goobers; goofier; gophers; gorilla; gosling; gospels; gougers; goulash; gourmet; goutier; governs; gradual; grammar; granary; grandad; grandly; granite; grannie; granola; granule; graphed; graphic; grapnel; grapple; gratify; gravies; gravity; greater; greatly; gremlin; grenade; greyish; griddle; griffin; grimace; gringos; grinned; gritted; groaned; grommet; grottos; grouchy; grounds; groupie; grownup; growths; groynes; gruffer; gruffly; gryphon; guarded; guffaws; guineas; guitars; gumdrop; gunboat; gunfire; gunshot; gunwale; gurneys; gutless; gutsier; gymnast; gypping; habitat; habitue; hackney; hacksaw; hafnium; haircut; hairdos; hairier; hairnet; hairpin; halberd; halcyon; halibut; halogen; halyard; hamlets; hamster; handcar; handful; handgun; handset; hangdog; hankies; hapless; happens; happily; harbors; harbour; hardtop; harelip; harlots; harmful; harmony; harness; harpist; harpoon; harsher; harshly; hashish; hatreds; haulers; hauteur; haycock; hayloft; haymows; hayseed; haywire; hazards; hazings; headset; headway; hearsay; heavily; hectare; heehaws; heftier; heifers; heinous; heiress; helical; hellion; hellish; helmets; helpers; helpful; hemline; hemlock; hennaed; henpeck; hepatic; heralds; herbage; heretic; heroism; herself; hertzes; hexagon; heydays; hibachi; hiccups; hickory; highboy; highway; hijacks; hillock; hilltop; himself; hippies; hirsute; history; hoagies; hoaxers; hobnail; hobnobs; hoedown; hoggish; hogwash; holdout; holdups; holiday; homages; homburg; homeboy; homonym; honesty; honored; honours; hoodlum; hookups; hopeful; horizon; hormone; horrify; horrors; hosanna; hosiery; hospice; hostile; hotbeds; hotcake; hothead; hotness; hottest; hoummos; howdahs; however; hubbubs; hubcaps; huffily; humaner; humanly; humbugs; humdrum; humerus; humidor; hundred; hurtful; husband; huskily; hussars; hutzpah; hyaenas; hybrids; hydrant; hydrate; hygiene; hymnals; hymning; hyphens; iambics; iceberg; icecaps; icicles; iciness; ideally; idiotic; idolise; idyllic; iffiest; igneous; iguanas; illegal; illicit; illness; imagery; imbuing; imitate; immoral; impairs; impasse; impeach; impends; imperil; impetus; impiety; impinge; impious; implant; impound; imprint; improve; impugns; impulse; impurer; inanely; inanest; inanity; inboard; inbreed; inbuilt; incisor; incline; include; incomes; incubus; indoors; indulge; inertia; inexact; infancy; infants; inferno; infidel; infield; informs; ingenue; ingrain; ingrate; ingress; ingrown; inherit; inhuman; initial; inkblot; inkling; inkwell; inmates; innings; inquest; inroads; insaner; inseams; insight; insigne; insipid; insists; insofar; insoles; inspect; inspire; instant; instead; insteps; insular; insulin; insults; intagli; intakes; integer; interim; intrude; intuits; invalid; inveigh; inverse; invoice; involve; ionizer; ipecacs; irately; iridium; irksome; islands; isobars; isolate; isotope; issuing; isthmus; italics; itchier; itemise; iterate; ivories; jackdaw; jackpot; jaguars; janitor; jasmine; javelin; jawbone; jaywalk; jazzier; jerkily; jerseys; jetties; jewelry; jiffies; jinxing; jitneys; jockeys; jocular; joiners; jointly; jollity; jonquil; journal; jousted; jubilee; jugular; juicers; juicier; juicing; jujubes; jukebox; juncoes; juniors; juniper; justest; justice; justify; karakul; karaoke; katydid; kayaked; keenest; keratin; kerbing; kestrel; ketchup; keyhole; keynote; keyword; kibbutz; kickoff; kidnaps; kidneys; killjoy; kiloton; kimonos; kindest; kinetic; kinfolk; kingdom; kingpin; kinship; kissers; kitchen; kitschy; klutzes; knavery; knavish; kneecap; kneeing; knifing; knights; knuckle; kookier; koshers; kowtows; krypton; labials; labours; lackeys; laconic; lacquer; lactate; lactose; ladings; ladling; ladybug; lagoons; lambast; lambent; lambkin; laments; lampoon; lamprey; languid; languor; lankier; lanolin; lantern; lanyard; laptops; larceny; largely; lariats; latency; latrine; lattice; laughed; laundry; laurels; lawless; lawsuit; laxness; layaway; layered; layette; layouts; layover; lazying; leaflet; leakage; lectern; lecture; leerier; leeward; lefties; legends; leggier; legless; legroom; legumes; legwork; leisure; lenient; lentils; leonine; leprosy; leprous; lesbian; letdown; lettuce; levying; lewdest; lexical; lexicon; liaison; liberty; libidos; library; liefest; liftoff; lignite; likable; limeade; limited; limpets; lindens; lingual; linnets; linseed; lintels; lioness; lionise; lipread; liqueur; liquids; liquors; lissome; listens; litchis; lithest; lithium; littler; liturgy; lockjaw; lockups; locusts; loftier; loftily; logbook; logical; logjams; longish; looneys; loosely; loosens; loosest; lotuses; loudest; loutish; louvers; lowbrow; lowdown; lowland; lowlier; lowness; loyaler; lozenge; luckily; luggage; lullaby; lumbago; lumpish; lunatic; lupines; lushest; lustful; lustily; lyceums; lyrical; macabre; macadam; machete; machine; macrame; madcaps; magenta; magical; magnate; magnify; magnums; magpies; mahatma; mahjong; mailbox; majesty; majored; majorly; makeups; malaise; malaria; maligns; mallard; malteds; mamboed; mammals; mammary; mammoth; manacle; manatee; mandate; manhole; manhood; manhunt; maniacs; manikin; mankind; mannish; mansard; mansion; mantels; mantras; manuals; manumit; marabou; maracas; marauds; marimba; marital; markups; marmots; maroons; marquee; marquis; marshal; martyrs; marvels; mascara; mascots; masonic; masonry; masseur; mastiff; mastoid; matador; matinee; mattock; matzohs; matzoth; maudlin; maxilla; maximal; maximum; mayoral; maypole; mazurka; meadows; meander; measles; measure; medians; mediate; medical; mediums; medleys; medulla; meekest; megaton; melange; melanin; melodic; members; memento; memoirs; menfolk; menorah; menthol; mention; mentors; meowing; mercies; mercury; mergers; merinos; merited; mermaid; merrily; mescals; messiah; messily; mestizo; meteors; methane; methods; metiers; metrics; mewling; miaowed; miasmas; microbe; midland; midmost; midriff; midterm; midtown; midways; midweek; midwife; midyear; migrant; migrate; mildews; militia; milksop; mimetic; mimicry; mimosas; minaret; mindful; mineral; minibus; minicam; minimal; minimum; minivan; minored; minuend; minuets; minutia; miracle; mirages; mirrors; miscall; miscast; misdeal; misdeed; misdoes; misdone; miserly; misfire; misfits; mishaps; mislaid; mislays; misrule; missals; misstep; mistake; mistily; mistime; mistook; mistype; mitosis; mitring; mizzens; moderns; modesty; modicum; moistly; molests; mollify; mollusc; monarch; mongrel; moniker; monitor; monocle; monolog; monsoon; montage; monthly; moodily; moonlit; moppets; moraine; morally; mordant; morgues; morocco; moronic; morsels; mosaics; motleys; motlier; motored; mousers; mouthed; muezzin; mukluks; mulatto; mullahs; mummify; mundane; murders; murkily; murmurs; museums; musical; musings; muskets; muskrat; mussels; mustang; mutable; mutants; muumuus; mynahes; myriads; myrtles; mystics; mystify; naiades; naivest; nakedly; napalms; naphtha; napkins; narrate; narwhal; nasally; nascent; natural; nautili; necktie; neglect; negligs; neither; neonate; nephews; nervous; network; neurons; neuters; neutral; neutron; newbies; newborn; newness; newsboy; newsier; newtons; nexuses; nickels; niftier; niggard; nightie; ninepin; nirvana; nitpick; nitrate; nitwits; noblest; noggins; noisier; noisily; noisome; nomadic; nominal; nominee; noncoms; nonplus; nonskid; nonstop; nonuser; nonzero; noonday; nosegay; nostril; notepad; nourish; novelty; nowhere; noxious; nuclear; nucleic; nucleus; nudists; nuggets; numbing; numeral; numeric; nuncios; nuptial; nursery; nurture; nutmeat; nutmegs; nutrias; oatmeal; obelisk; obesity; obeying; objects; oblique; oblongs; obloquy; oboists; obscene; obscure; obsequy; observe; obtains; obtrude; obtuser; obverse; obviate; obvious; ocarina; occlude; oceanic; ocelots; octagon; octaves; octette; octopus; oculars; oculist; oddball; oddness; odorous; odyssey; offbeat; offends; offered; offhand; offings; offload; offsets; offside; oftener; oilskin; omelets; ominous; omnibus; oneness; onerous; oneself; onetime; ongoing; opacity; openers; openest; operand; opiates; opinion; opossum; oppress; optimum; options; opulent; oracles; orbital; orbited; orchard; orchids; ordains; ordeals; ordered; orderly; ordinal; oregano; organic; orgasms; orients; orifice; origami; origins; orioles; orotund; orphans; osmosis; osmotic; ospreys; ostrich; ottoman; outages; outbids; outcome; outcrop; outdone; outdoor; outings; outlaid; outlook; outplay; outpost; outputs; outrage; outrank; outruns; outsell; outsold; outstay; outtake; outvote; outward; outwear; ovarian; ovaries; overact; overall; overdid; overdue; overeat; overjoy; overlie; oversaw; oversee; overtax; overtly; overuse; oviduct; ovulate; oxfords; oxidise; oxymora; pacific; package; pageant; pagodas; palatal; palaver; palette; palmist; palpate; panacea; panache; pancake; panicky; panoply; panther; papayas; papilla; papoose; paprika; papyrus; paradox; paragon; parapet; parasol; parboil; parcels; parfait; pariahs; parlors; parlour; parquet; parsnip; partake; partner; partook; parvenu; paschal; passion; passkey; pastime; patella; pathway; patient; patriot; paucity; pawpaws; payload; payment; payroll; peacock; peafowl; peahens; peanuts; pearled; peasant; peccary; pedagog; pedants; pedlars; peerage; peevish; peewees; pelagic; pelican; penalty; penance; pencils; penguin; penises; penlite; pennons; pensive; peonage; peppier; peptics; percale; percent; perfect; perfidy; perform; perfume; perhaps; perigee; periods; periwig; permute; perplex; persist; pertest; perturb; perusal; pervade; pervert; pesetas; petiole; petites; petrels; petrify; pettily; petunia; phalanx; phallic; phallus; phantom; pharaoh; pharynx; philtre; phloxes; phoebes; phoenix; phoneme; phoneys; phoning; photoed; phrasal; physics; pianist; piazzas; piccolo; pickaxe; pickups; picnics; picture; pidgins; piebald; piecing; piggish; piglets; pigpens; pigskin; pigtail; pilaffs; pileups; pilfers; pilgrim; pillars; pillbox; pillory; pimento; pinball; pincers; pinhead; pinhole; pinkeye; pinkish; pinnate; pintoes; pioneer; piously; piquant; piquing; piranha; piteous; pitfall; pithier; pithily; pitiful; pivotal; pizzazz; placard; placate; placebo; placket; plainly; plaints; planets; plateau; platens; platoon; platypi; plaudit; playact; playboy; playful; playoff; playpen; plectra; plenary; pliable; pliancy; plinths; plugins; plumage; pluming; plurals; plusses; plywood; podcast; podiums; poetess; pogroms; polecat; polemic; politer; politic; polkaed; pollute; polygon; polymer; poniard; pontiff; pontoon; poorest; popcorn; popguns; poplars; popover; popular; porcine; portico; portion; portray; poseurs; poshest; posited; possess; possums; postbox; postdoc; postwar; potency; potfuls; pothole; pothook; potluck; poultry; poverty; powwows; prairie; praline; prattle; prawned; preachy; precede; precept; predict; preempt; prefabs; preface; prefect; prefers; preheat; prelude; premier; premium; prepaid; prepare; prepays; preppie; prequel; presage; presets; preside; prestos; presume; preteen; pretend; pretext; pretzel; prevail; preview; prevues; priests; primers; prithee; probity; problem; proceed; proctor; procure; prodigy; proffer; profile; profits; profuse; progeny; program; prologs; prolong; promote; prompts; pronoun; proofed; propels; prophet; propose; prosaic; prosody; protege; prouder; proudly; proverb; provide; proviso; provoke; provost; proxies; prudent; prudery; prudish; pruning; psychic; puberty; publish; puckish; pudgier; pueblos; puerile; pullout; pulpier; pulpits; pulsars; pulsate; pumices; pundits; pungent; punster; puppets; puritan; purloin; purport; purpose; pursers; pursuit; purview; pushups; pustule; putrefy; pyramid; pythons; quacked; quaffed; quahaug; quahogs; quailed; quaking; quantum; quarrel; quartos; quasars; queuing; quibble; quiches; quickie; quickly; quietly; quietus; quinces; quinine; quintet; quipped; quirked; quoited; quondam; quorums; quoting; rabbits; raccoon; racemes; raceway; racoons; racquet; radials; radiant; radiate; radical; radioed; raffish; rafters; raggedy; raglans; ragouts; ragtags; ragtime; ragweed; raiders; railway; raiment; rainbow; rainier; rampage; ramrods; rancour; ransack; rapider; rapidly; rapport; rascals; rashest; raspier; rattans; rattrap; raucous; ravened; ravioli; rawhide; rawness; readily; readmit; readout; reagent; realign; reality; reapply; rearmed; rebirth; rebuffs; recalls; receipt; recheck; recital; recluse; recoils; recoups; recruit; rectify; rectums; recycle; redcaps; redcoat; reddens; reddest; reddish; redeems; redhead; redneck; redoing; redoubt; redraft; redskin; redwood; reefers; reenact; reenter; reentry; referee; refocus; refresh; refuels; refunds; refusal; regalia; regatta; regency; regroup; regular; reissue; rejoice; rejoins; relabel; relapse; relearn; release; reliant; reloads; remarks; remarry; rematch; remnant; remodel; remorse; removal; renewal; rentals; reoccur; reopens; reorder; repairs; replace; replays; replica; reprise; reproof; reprove; reptile; repulse; requiem; rereads; reroute; rescind; residue; respond; restart; restock; restore; restudy; results; retools; retouch; retrial; returns; reunify; reunion; reunite; revamps; revelry; reviews; revisit; revival; revolts; rhizome; rhodium; rhombus; rhubarb; rhyming; rhythms; richest; ricksha; ricotta; rigidly; rigours; ringlet; rioters; riotous; ripened; riposte; ripsaws; riskier; rituals; ritzier; rivalry; riveted; rivulet; roadbed; roadway; robotic; rodents; roebuck; rogered; roguery; rollick; romaine; romance; rompers; romping; rooftop; roomful; roomier; rosebud; rosined; rotunda; roundup; rowboat; roweled; rubbish; rubella; rubiest; rubrics; rudders; ruffian; ruinous; rulings; rummage; runaway; runoffs; runways; rustics; sackful; sadists; safaris; saffron; saguaro; salaams; salamis; saltest; saltier; salvoes; sambaed; samovar; sampans; samurai; sanctum; sandbox; sandhog; sandlot; sarcasm; sarcoma; sardine; sarongs; sashays; satanic; satchel; satiate; satiety; satires; satisfy; satraps; saucers; saucier; saucily; saucing; saunaed; sausage; sauteed; savanna; savants; saviors; saviour; sawdust; sawmill; scabies; scalars; scalene; scandal; scapula; scarabs; scarify; scenery; sceptic; sceptre; schisms; schlock; schmalz; schmuck; scholar; schools; schrods; schtick; sciatic; science; scissor; sconces; scorned; scotchs; scourge; scowled; scratch; scrawny; screech; screens; scribes; scripts; scrooge; scrotum; scrunch; scruple; scubaed; sculled; sculpts; scumbag; scupper; seabeds; seabird; seafood; sealant; seamier; seaport; seasick; seaside; seaward; seaways; seaweed; seclude; seconds; secrecy; secular; seeings; seekers; seepage; seesaws; segment; seismic; seizing; seizure; selects; selfish; sellout; seltzer; senator; sensual; septums; sequels; sequins; sequoia; serener; serfdom; serious; sermons; serpent; servant; servers; sesames; several; sexiest; sexists; sexless; sexpots; sextant; sextons; shackle; shakeup; shakily; shamans; shamble; shampoo; shapely; sharply; shebang; shekels; shellac; sherbet; sheriff; shields; shindig; shingle; shlepps; shlocky; shoaled; shodden; shoguns; shortly; shotgun; shovels; showbiz; showily; showoff; shrouds; shticks; shudder; shuteye; shutout; shyster; sickbed; sickens; sickest; sidearm; sierras; sieving; signals; silence; silents; silicon; simians; similar; similes; sincere; sinuous; sirloin; sirocco; sitcoms; situate; sixteen; sixties; sizable; skaters; sketchy; skewers; skidded; skilful; skycaps; skyjack; skylark; skyline; skyward; slaloms; slavish; sleazes; sleekly; sleeves; sleighs; sleuths; slogans; slouchy; slovens; slowest; smaller; smartly; smitten; smokier; smolder; smooths; smother; snidest; snipers; snorkel; soapbox; soberly; socials; society; softens; softest; soggily; soirees; sojourn; solaria; solicit; solider; solidly; soloist; solvent; somehow; someone; sonatas; sonnies; soonest; sootier; soprano; sorbets; sorcery; sorghum; sorrels; sottish; soulful; soupcon; soviets; soybean; spandex; spangle; spaniel; sparely; sparest; sparkle; sparrow; spartan; spastic; spatula; species; specify; speckle; speedup; spheres; spigots; spinach; spinets; spinoff; spiraea; spirits; spittle; splashy; spleens; splodge; splotch; splurge; sponsor; sporran; spouses; spreads; sprites; sprouts; spuming; squalid; squalls; squalor; squawks; squeeze; squelch; stadium; staider; staidly; stained; stalest; stamens; stamina; standby; stanzas; starchy; stardom; starkly; startle; stately; station; statues; staunch; stealth; stellar; stencil; stepson; stereos; sterile; sterner; sternly; sternum; steroid; steward; stickup; stiffly; stigmas; stimuli; stipend; stipple; stirrup; stoical; stomach; stonier; stonily; stooges; stopgap; storage; storeys; stouter; stoutly; strands; strange; stratum; streets; stretch; strophe; strudel; stuccos; student; stupefy; stupids; stupors; styptic; suavely; suavest; suavity; subhead; subject; subjoin; sublime; suborns; subplot; subsist; subsoil; subsume; subteen; subtler; suburbs; subvert; subways; succeed; success; succour; succumb; sucrose; sudsier; suffice; suffuse; sugared; suggest; suicide; suitors; sulfate; sulfide; sulfurs; sulkily; sulphur; summons; sunbeam; sunburn; sundaes; sundial; sunfish; sunlamp; sunless; sunrise; sunroof; sunspot; suppers; suppler; support; suppose; supreme; surface; surfeit; surgery; surmise; surname; surpass; surplus; surreal; survive; suspect; suspend; sustain; swarmed; swarthy; sweetie; sweetly; swiftly; swinish; swollen; syllabi; symbols; symptom; synagog; synapse; syncing; synergy; synonym; syringe; systems; tableau; tablets; tabloid; tabooed; tacitly; tactful; tactics; tactile; tadpole; taffeta; takeoff; takeout; talents; tallest; tallyho; tamales; tandems; tangelo; tangent; tankard; tankful; tantrum; tapioca; targets; tariffs; tarmacs; tattoos; tawnier; taxicab; teacups; teapots; teargas; tearoom; teatime; teazles; tedious; teenage; teenier; teepees; temblor; tempest; temples; tenable; tenancy; tenants; tendons; tendril; tenfold; tenoned; tenpins; tensile; tenuous; tequila; terabit; termite; terrace; terrain; terrify; terrors; tetanus; tethers; textile; textual; texture; thalami; thanked; thawing; theatre; theists; theorem; therapy; thereto; thermal; thermos; thiamin; thickly; thimble; thirdly; thorium; thought; through; thrower; thrusts; thruway; thudded; thunder; thwacks; thwarts; thyroid; thyself; tidying; timbres; timider; timidly; timpani; tinfoil; tinsels; tipsily; tirades; tireder; tissues; titanic; titbits; titmice; titular; tobacco; tocsins; toehold; toenail; tomboys; tomcats; tonight; tonnage; tonsils; tonsure; toolbar; toolbox; toolkit; topazes; topcoat; topknot; topless; topside; tornado; torpedo; torsion; torture; tossups; totally; totemic; toucans; toupees; towhead; towpath; trachea; traduce; traffic; tragedy; traipse; trample; transit; transom; trapeze; traumas; travail; treason; treetop; trefoil; trekked; trellis; tremble; tremolo; tremors; trended; triceps; trident; trigger; trilogy; trinity; trinket; tripods; trisect; tritely; tritest; triumph; trivial; trochee; trodden; troikas; trollop; tropics; tropism; trouble; troughs; trounce; trowels; truancy; truants; truffle; truisms; trundle; tryouts; tsunami; tubbier; tufting; tugboat; tuition; tumults; tundras; tuneful; turbans; turbine; turbots; tureens; turkeys; turmoil; turnips; turnkey; turnoff; turrets; tussock; tutored; tuxedos; tweaked; twelfth; twelves; twining; twinkle; twofers; twofold; twosome; tycoons; tympana; typeset; typhoid; typhoon; typists; tyranny; tyrants; ugliest; ululate; umbrage; umlauts; umpteen; unaided; unarmed; unasked; unaware; unblock; unbolts; unbosom; uncanny; uncivil; unclasp; uncoils; uncorks; uncouth; uncover; unction; undergo; undress; unearth; uneaten; unequal; unfrock; unfunny; unfurls; ungodly; unguent; unhands; unhappy; unheard; unhinge; unhitch; unhooks; unhorse; unicorn; uniform; uniquer; unitary; uniting; unkempt; unknown; unlatch; unlearn; unleash; unloads; unlocks; unloose; unlucky; unmakes; unmanly; unmasks; unmoral; unnerve; unpacks; unpaved; unplugs; unquote; unravel; unready; unriper; unsafer; unscrew; unsnaps; unsnarl; unstops; unstuck; untried; untruer; untruth; untwist; unusual; unveils; unwiser; unwraps; upbeats; upbraid; upchuck; upended; upfront; upgrade; uphills; upholds; uplands; uplifts; upraise; uproars; uproots; upscale; upshots; upsides; upstart; upsurge; upswing; uptakes; upturns; upwards; urbaner; urchins; urethra; urgency; urinals; urinary; urinate; urology; useable; useless; ushered; usually; usurers; utensil; uterine; utilise; utility; uttered; utterly; uvulars; vacancy; vaccine; vacuity; vacuous; vacuums; vagrant; vaguely; vaguest; valeted; validly; valises; vamoose; vampire; vanilla; vapours; variate; variety; various; varlets; varmint; varsity; varying; vassals; veggies; velours; velvety; venally; venison; veranda; verbals; verbena; verbose; verdant; verdict; verdure; versify; version; vertigo; vespers; vessels; vestige; veteran; viaduct; vibrant; viceroy; vicious; victims; vicunas; viewers; viewing; vinegar; vintner; violate; violent; violets; violins; violist; viragos; virgins; virgule; virtues; viruses; visages; visaing; viscera; viscous; visions; visited; visitor; visuals; vitally; vitamin; vitiate; vitriol; viziers; vocalic; volcano; voltage; voltaic; volumes; vomited; voyeurs; waggish; wagoner; wakeful; wakened; walkout; walkway; wallaby; walleye; walnuts; wannabe; wapitis; warhead; warlike; warlord; warpath; warrant; warrior; warthog; wartier; wartime; washout; washtub; waspish; wassail; wastrel; wavelet; waxwing; waxwork; waylaid; waylays; wayside; wayward; weakens; weakest; weapons; wearily; webbing; website; wedlock; weekday; weekend; weevils; weirder; weirdly; weirdos; welcome; welfare; western; wetland; wettest; whacked; whalers; wharves; whatnot; wheaten; wheedle; whetted; whiffed; whimsey; whiskys; whitens; whitest; whitish; whoever; widgeon; wildcat; willful; windbag; windier; windups; wingtip; winsome; wiretap; without; wittier; wittily; wolfish; wolfram; womanly; woodcut; woofers; woolens; woollen; workday; workers; workout; worldly; worsens; worsted; wraiths; wrangle; written; wrongly; yachted; yardage; yardarm; yeshiva; yoghurt; yogurts; younger; yttrium; zaniest; zeniths; zephyrs; zeroing; zigzags; zincked; zinnias; zircons; zodiacs; zombies; zoology; zygotes'"
1867 ]
1868 },
1869 "execution_count": 46,
1870 "metadata": {},
1871 "output_type": "execute_result"
1872 }
1873 ],
1874 "source": [
1875 "'; '.join(sorted(list(r)[0] for r in reachables if len(r) == 1))"
1876 ]
1877 },
1878 {
1879 "cell_type": "code",
1880 "execution_count": 47,
1881 "metadata": {
1882 "collapsed": true
1883 },
1884 "outputs": [],
1885 "source": [
1886 "for a in reachables:\n",
1887 " for b in reachables:\n",
1888 " if a != b:\n",
1889 " if not a.isdisjoint(b):\n",
1890 " print(a, b)"
1891 ]
1892 },
1893 {
1894 "cell_type": "code",
1895 "execution_count": 35,
1896 "metadata": {
1897 "collapsed": true
1898 },
1899 "outputs": [],
1900 "source": [
1901 "# longest_chain = []\n",
1902 "# with open('all-chains-4.txt', 'w', 1) as f:\n",
1903 "# for ws in reachables:\n",
1904 "# for s in ws:\n",
1905 "# for t in ws:\n",
1906 "# if s < t:\n",
1907 "# chain = astar_search(s, t)\n",
1908 "# if chain:\n",
1909 "# f.write('{}\\n'.format(chain))\n",
1910 "# if len(chain) > len(longest_chain):\n",
1911 "# longest_chain = chain\n",
1912 "\n",
1913 "# longest_chain"
1914 ]
1915 },
1916 {
1917 "cell_type": "code",
1918 "execution_count": 48,
1919 "metadata": {
1920 "collapsed": true
1921 },
1922 "outputs": [],
1923 "source": [
1924 "bigset = max(reachables, key=len)"
1925 ]
1926 },
1927 {
1928 "cell_type": "code",
1929 "execution_count": 51,
1930 "metadata": {},
1931 "outputs": [
1932 {
1933 "name": "stdout",
1934 "output_type": "stream",
1935 "text": [
1936 "['galling', 'gelling', 'selling', 'sealing', 'scaling', 'scaring']\n",
1937 "['raining', 'railing', 'tailing', 'tabling', 'tabbing', 'gabbing', 'gobbing', 'bobbing', 'bobbins', 'bobbies', 'bobbles', 'babbles', 'gabbles', 'garbles', 'gargles', 'gaggles', 'giggles', 'wiggles']\n",
1938 "['blowing', 'flowing', 'flawing', 'flaking', 'slaking', 'soaking', 'socking', 'sacking', 'tacking', 'tasking']\n",
1939 "['bumbled', 'bubbled', 'bobbled', 'bobbles', 'bobbies', 'bobbins', 'bobbing', 'boobing', 'booting', 'boating', 'beating', 'beading', 'bending', 'pending']\n",
1940 "['felling', 'belling', 'belting', 'bolting', 'booting', 'boobing', 'bobbing', 'bobbins', 'bobbies', 'bobbles', 'bubbles', 'burbles', 'burgles', 'bungles', 'bangles', 'tangles', 'tingles', 'tinkles', 'tickles']\n",
1941 "['hurdled', 'huddled', 'huddles', 'puddles', 'paddles', 'paddies', 'daddies', 'dandies', 'dandier', 'handier', 'hardier', 'tardier', 'tarrier', 'terrier', 'tearier']\n",
1942 "['seeding', 'sending', 'rending', 'renting', 'ranting', 'ratting', 'hatting']\n",
1943 "['muddled', 'fuddled', 'fiddled', 'riddled']\n",
1944 "['canting', 'casting', 'basting', 'besting', 'beating', 'bearing', 'fearing']\n",
1945 "['furling', 'fulling', 'felling', 'selling', 'sealing', 'searing', 'gearing', 'glaring', 'glazing']\n",
1946 "['bracing', 'gracing', 'grading', 'goading', 'loading', 'leading', 'leaking', 'peaking', 'peeking', 'peeping']\n",
1947 "['rallied', 'dallied', 'dallies', 'dollies', 'collies', 'coolies', 'cookies', 'bookies', 'boobies', 'bobbies', 'bobbins', 'bobbing', 'boobing', 'booting', 'rooting', 'rioting', 'rifting']\n",
1948 "['sorting', 'porting', 'potting', 'pitting', 'hitting']\n",
1949 "['halving', 'halting', 'hatting', 'hitting', 'hinting', 'hinging', 'tinging']\n",
1950 "['warping', 'warring', 'barring', 'barbing', 'garbing', 'gabbing', 'gobbing', 'bobbing', 'bobbins', 'bobbies', 'bobbles', 'bubbles', 'burbles', 'burgles', 'bungles', 'bangles', 'dangles', 'dandles', 'dandies', 'daddies', 'paddies', 'paddles', 'puddles', 'huddles', 'hurdles', 'hurtles', 'hustles', 'hustler', 'rustler', 'rustier', 'mustier', 'mussier', 'mossier']\n",
1951 "['warding', 'carding', 'carting', 'parting', 'patting', 'putting']\n",
1952 "['hawking', 'hacking', 'hocking', 'hooking', 'booking', 'boobing', 'bobbing', 'bobbins', 'bobbies', 'bobbles', 'bubbles', 'burbles', 'burgles', 'bungles', 'bangles', 'dangles', 'dandles', 'dandies', 'dandier', 'handier', 'hardier', 'tardier', 'tarrier', 'tarries', 'parries', 'parties', 'patties', 'potties', 'potpies', 'poppies', 'puppies']\n",
1953 "['hussies', 'huskies', 'huskier', 'duskier', 'dustier', 'rustier', 'rustler', 'hustler', 'hustles', 'hurtles', 'hurdles', 'huddles', 'puddles', 'paddles', 'paddies', 'daddies', 'dandies', 'dandles', 'dangles', 'wangles', 'waggles', 'wiggles', 'wiggler']\n",
1954 "['gonging', 'bonging', 'bonding', 'bending', 'beading', 'bearing', 'searing', 'sparing', 'spacing', 'spicing', 'slicing', 'sliding', 'eliding', 'eluding', 'exuding']\n",
1955 "['locking', 'lucking', 'bucking', 'bulking', 'bulling', 'fulling', 'furling', 'furlong']\n"
1956 ]
1957 }
1958 ],
1959 "source": [
1960 "for _ in range(20):\n",
1961 " start, goal = random.sample(bigset, 2)\n",
1962 " print(astar_search_closed(start, goal))"
1963 ]
1964 },
1965 {
1966 "cell_type": "code",
1967 "execution_count": 52,
1968 "metadata": {},
1969 "outputs": [
1970 {
1971 "data": {
1972 "text/plain": [
1973 "{2: [['soggier', 'doggier'],\n",
1974 " ['bashing', 'hashing'],\n",
1975 " ['growing', 'groping'],\n",
1976 " ['gulling', 'pulling']],\n",
1977 " 3: [['middles', 'cuddles'],\n",
1978 " ['staring', 'snoring'],\n",
1979 " ['lashing', 'wishing'],\n",
1980 " ['reeking', 'peeping']],\n",
1981 " 4: [['mulling', 'welling'],\n",
1982 " ['seeding', 'peering'],\n",
1983 " ['diddled', 'meddled'],\n",
1984 " ['wiggler', 'wangled']],\n",
1985 " 5: [['yapping', 'bailing'],\n",
1986 " ['seating', 'pitying'],\n",
1987 " ['budging', 'gorging'],\n",
1988 " ['mailing', 'footing']],\n",
1989 " 6: [['mooring', 'polling'],\n",
1990 " ['lapping', 'pocking'],\n",
1991 " ['rooking', 'slating'],\n",
1992 " ['palling', 'yucking']],\n",
1993 " 7: [['polling', 'funding'],\n",
1994 " ['showing', 'jetting'],\n",
1995 " ['gonging', 'kenning'],\n",
1996 " ['tarring', 'tinting']],\n",
1997 " 8: [['gabbing', 'fudging'],\n",
1998 " ['rubbing', 'forking'],\n",
1999 " ['zooming', 'railing'],\n",
2000 " ['humping', 'fouling']],\n",
2001 " 9: [['soloing', 'gadding'],\n",
2002 " ['reefing', 'denying'],\n",
2003 " ['huffing', 'gearing'],\n",
2004 " ['gabbing', 'tensing']],\n",
2005 " 10: [['touting', 'bumming'],\n",
2006 " ['loafing', 'kissing'],\n",
2007 " ['destiny', 'lording'],\n",
2008 " ['styling', 'dogging']],\n",
2009 " 11: [['bagging', 'booties'],\n",
2010 " ['woolies', 'dooming'],\n",
2011 " ['whining', 'termini'],\n",
2012 " ['trading', 'fibbing']],\n",
2013 " 12: [['tangier', 'boggles'],\n",
2014 " ['hubbies', 'bonding'],\n",
2015 " ['minting', 'boobies'],\n",
2016 " ['sagging', 'bobbled']],\n",
2017 " 13: [['bandies', 'battier'],\n",
2018 " ['woodies', 'muggier'],\n",
2019 " ['pinning', 'cobbles'],\n",
2020 " ['pegging', 'bobbled']],\n",
2021 " 14: [['cobbles', 'humming'],\n",
2022 " ['rustler', 'dawdler'],\n",
2023 " ['tumbler', 'jarring'],\n",
2024 " ['wobbled', 'milking']],\n",
2025 " 15: [['gambles', 'spacing'],\n",
2026 " ['willies', 'bungled'],\n",
2027 " ['hugging', 'mumbles'],\n",
2028 " ['bidding', 'gambler']],\n",
2029 " 16: [['sillies', 'pooping'],\n",
2030 " ['cussing', 'mumbled'],\n",
2031 " ['gushing', 'gambled'],\n",
2032 " ['bundles', 'tasking']],\n",
2033 " 17: [['singled', 'hostler'],\n",
2034 " ['horsing', 'wiggles'],\n",
2035 " ['bullies', 'parking'],\n",
2036 " ['handing', 'woodies']],\n",
2037 " 18: [['tickles', 'fouling'],\n",
2038 " ['toggles', 'bidding'],\n",
2039 " ['besting', 'soldier'],\n",
2040 " ['joining', 'toggles']],\n",
2041 " 19: [['masking', 'jiggled'],\n",
2042 " ['birdied', 'boogies'],\n",
2043 " ['mantled', 'praying'],\n",
2044 " ['hillier', 'hatting']],\n",
2045 " 20: [['rapping', 'sulkier'],\n",
2046 " ['candied', 'pasting'],\n",
2047 " ['singled', 'longing'],\n",
2048 " ['sillier', 'peeving']],\n",
2049 " 21: [['sighing', 'dailies'],\n",
2050 " ['sickles', 'begging'],\n",
2051 " ['piggies', 'humbler'],\n",
2052 " ['bawling', 'paddies']],\n",
2053 " 22: [['tardier', 'rolling'],\n",
2054 " ['judging', 'bandies'],\n",
2055 " ['tardier', 'letting'],\n",
2056 " ['tasking', 'rangier']],\n",
2057 " 23: [['kicking', 'diddles'],\n",
2058 " ['dawning', 'bulgier'],\n",
2059 " ['pedaled', 'felting'],\n",
2060 " ['piddled', 'jetting']],\n",
2061 " 24: [['veining', 'cockles'],\n",
2062 " ['forcing', 'biggies'],\n",
2063 " ['gauging', 'boggier'],\n",
2064 " ['kenning', 'hardier']],\n",
2065 " 25: [['palmier', 'husking'],\n",
2066 " ['toddles', 'healing'],\n",
2067 " ['middies', 'burping'],\n",
2068 " ['bobbled', 'dossier']],\n",
2069 " 26: [['middies', 'mushing'],\n",
2070 " ['buckled', 'smoking'],\n",
2071 " ['tearier', 'gracing'],\n",
2072 " ['hitting', 'doggies']],\n",
2073 " 27: [['wearier', 'gonging'],\n",
2074 " ['farming', 'hurtled'],\n",
2075 " ['tinging', 'merrier'],\n",
2076 " ['basting', 'hustled']],\n",
2077 " 28: [['chasing', 'buddies'],\n",
2078 " ['pigmies', 'huffing'],\n",
2079 " ['veining', 'hustles'],\n",
2080 " ['manning', 'wearies']],\n",
2081 " 29: [['bulking', 'patsies'],\n",
2082 " ['bustled', 'pending'],\n",
2083 " ['rustles', 'slewing'],\n",
2084 " ['tattles', 'doggies']],\n",
2085 " 30: [['tarring', 'dustier'],\n",
2086 " ['hostler', 'glowing'],\n",
2087 " ['battier', 'flaming'],\n",
2088 " ['singing', 'potties']],\n",
2089 " 31: [['nuttier', 'packing'],\n",
2090 " ['bumping', 'potpies'],\n",
2091 " ['wagging', 'testier'],\n",
2092 " ['gushier', 'crazing']],\n",
2093 " 32: [['fattier', 'signing'],\n",
2094 " ['testing', 'tattler'],\n",
2095 " ['bossier', 'belying'],\n",
2096 " ['curling', 'gushier']],\n",
2097 " 33: [['tattled', 'soiling'],\n",
2098 " ['mintier', 'milling'],\n",
2099 " ['tacking', 'dossier'],\n",
2100 " ['bagging', 'yuckier']],\n",
2101 " 34: [['wattled', 'mending'],\n",
2102 " ['yuppies', 'dogging'],\n",
2103 " ['dunging', 'rattled'],\n",
2104 " ['tattled', 'seeming']],\n",
2105 " 35: [['wattles', 'rigging'],\n",
2106 " ['routine', 'motiles'],\n",
2107 " ['pussies', 'lathing'],\n",
2108 " ['lousier', 'staling']],\n",
2109 " 36: [['wattles', 'chasing'],\n",
2110 " ['motiles', 'orating'],\n",
2111 " ['chafing', 'mintier'],\n",
2112 " ['mottles', 'dulling']],\n",
2113 " 37: [['keeling', 'mottles'],\n",
2114 " ['yuckier', 'rimming'],\n",
2115 " ['cupping', 'motives'],\n",
2116 " ['bottled', 'scoping']],\n",
2117 " 38: [['mobiles', 'girting'],\n",
2118 " ['motiles', 'fencing'],\n",
2119 " ['motives', 'sitting'],\n",
2120 " ['killing', 'motives']],\n",
2121 " 40: [['mossier', 'noising'],\n",
2122 " ['mobiles', 'jeering'],\n",
2123 " ['scoping', 'mobiles'],\n",
2124 " ['revving', 'mottoes']]}"
2125 ]
2126 },
2127 "execution_count": 52,
2128 "metadata": {},
2129 "output_type": "execute_result"
2130 }
2131 ],
2132 "source": [
2133 "solutions = {}\n",
2134 "for _ in range(10000):\n",
2135 " start, goal = random.sample(bigset, 2)\n",
2136 " solution = astar_search_closed(start, goal)\n",
2137 " sl = len(solution)\n",
2138 " if sl not in solutions:\n",
2139 " solutions[sl] = []\n",
2140 " if len(solutions[sl]) < 4:\n",
2141 " solutions[sl].append([start, goal])\n",
2142 " \n",
2143 "# if len(solution) >= 10:\n",
2144 "# solutions += [solution]\n",
2145 " \n",
2146 "solutions"
2147 ]
2148 },
2149 {
2150 "cell_type": "code",
2151 "execution_count": 74,
2152 "metadata": {},
2153 "outputs": [
2154 {
2155 "data": {
2156 "text/plain": [
2157 "{31: [['pupping', 'lustier'],\n",
2158 " ['eloping', 'pastier'],\n",
2159 " ['daisies', 'poppies'],\n",
2160 " ['dossier', 'tattled'],\n",
2161 " ['betting', 'murkier']],\n",
2162 " 32: [['getting', 'mossier'],\n",
2163 " ['busting', 'guppies'],\n",
2164 " ['mussier', 'staring'],\n",
2165 " ['coifing', 'murkier'],\n",
2166 " ['massing', 'cattier']],\n",
2167 " 33: [['cattier', 'signing'],\n",
2168 " ['mousier', 'bulling'],\n",
2169 " ['tattles', 'railing'],\n",
2170 " ['rattler', 'tensing'],\n",
2171 " ['guppies', 'peeking']],\n",
2172 " 34: [['tattled', 'sparing'],\n",
2173 " ['darting', 'bushier'],\n",
2174 " ['dunning', 'tattled'],\n",
2175 " ['rattles', 'deeding'],\n",
2176 " ['girting', 'luckier']],\n",
2177 " 35: [['goading', 'battles'],\n",
2178 " ['rattles', 'griping'],\n",
2179 " ['jerkins', 'rattled'],\n",
2180 " ['wattled', 'pegging'],\n",
2181 " ['mintier', 'damming']],\n",
2182 " 36: [['dotting', 'motives'],\n",
2183 " ['foiling', 'motives'],\n",
2184 " ['bottles', 'missing'],\n",
2185 " ['hussies', 'hulking'],\n",
2186 " ['letting', 'mottoes']],\n",
2187 " 37: [['exuding', 'fattier'],\n",
2188 " ['tinting', 'mottoes'],\n",
2189 " ['bottled', 'temping'],\n",
2190 " ['mobiles', 'bending'],\n",
2191 " ['gushier', 'prising']],\n",
2192 " 38: [['mobiles', 'walking'],\n",
2193 " ['motives', 'furring'],\n",
2194 " ['bottled', 'yessing'],\n",
2195 " ['bottled', 'griming'],\n",
2196 " ['wormier', 'motives']],\n",
2197 " 39: [['mottoes', 'reeving'],\n",
2198 " ['guiding', 'pussier'],\n",
2199 " ['pricing', 'cashier'],\n",
2200 " ['messier', 'arising'],\n",
2201 " ['playing', 'mobiles']],\n",
2202 " 40: [['kissing', 'motives'],\n",
2203 " ['atoning', 'motives'],\n",
2204 " ['mossier', 'noising'],\n",
2205 " ['bottled', 'pricing']],\n",
2206 " 41: [['priding', 'mottled']],\n",
2207 " 42: [['eliding', 'mottoes']]}"
2208 ]
2209 },
2210 "execution_count": 74,
2211 "metadata": {},
2212 "output_type": "execute_result"
2213 }
2214 ],
2215 "source": [
2216 "solutions = {}\n",
2217 "for _ in range(10000):\n",
2218 " start, goal = random.sample(bigset, 2)\n",
2219 " solution = astar_search_closed(start, goal)\n",
2220 " if not solution:\n",
2221 " solution = astar_search_closed(goal, start)\n",
2222 " sl = len(solution)\n",
2223 " if sl > 30:\n",
2224 " if sl not in solutions:\n",
2225 " solutions[sl] = []\n",
2226 " if len(solutions[sl]) < 5:\n",
2227 " solutions[sl].append([start, goal])\n",
2228 " \n",
2229 "# if len(solution) >= 10:\n",
2230 "# solutions += [solution]\n",
2231 " \n",
2232 "solutions"
2233 ]
2234 },
2235 {
2236 "cell_type": "code",
2237 "execution_count": 75,
2238 "metadata": {
2239 "collapsed": true
2240 },
2241 "outputs": [],
2242 "source": [
2243 "solutions = {31: [['pupping', 'lustier'],\n",
2244 " ['eloping', 'pastier'],\n",
2245 " ['daisies', 'poppies'],\n",
2246 " ['dossier', 'tattled'],\n",
2247 " ['betting', 'murkier']],\n",
2248 " 32: [['getting', 'mossier'],\n",
2249 " ['busting', 'guppies'],\n",
2250 " ['mussier', 'staring'],\n",
2251 " ['coifing', 'murkier'],\n",
2252 " ['massing', 'cattier']],\n",
2253 " 33: [['cattier', 'signing'],\n",
2254 " ['mousier', 'bulling'],\n",
2255 " ['tattles', 'railing'],\n",
2256 " ['rattler', 'tensing'],\n",
2257 " ['guppies', 'peeking']],\n",
2258 " 34: [['tattled', 'sparing'],\n",
2259 " ['darting', 'bushier'],\n",
2260 " ['dunning', 'tattled'],\n",
2261 " ['rattles', 'deeding'],\n",
2262 " ['girting', 'luckier']],\n",
2263 " 35: [['goading', 'battles'],\n",
2264 " ['rattles', 'griping'],\n",
2265 " ['jerkins', 'rattled'],\n",
2266 " ['wattled', 'pegging'],\n",
2267 " ['mintier', 'damming']],\n",
2268 " 36: [['dotting', 'motives'],\n",
2269 " ['foiling', 'motives'],\n",
2270 " ['bottles', 'missing'],\n",
2271 " ['hussies', 'hulking'],\n",
2272 " ['letting', 'mottoes']],\n",
2273 " 37: [['exuding', 'fattier'],\n",
2274 " ['tinting', 'mottoes'],\n",
2275 " ['bottled', 'temping'],\n",
2276 " ['mobiles', 'bending'],\n",
2277 " ['gushier', 'prising']],\n",
2278 " 38: [['mobiles', 'walking'],\n",
2279 " ['motives', 'furring'],\n",
2280 " ['bottled', 'yessing'],\n",
2281 " ['bottled', 'griming'],\n",
2282 " ['wormier', 'motives']],\n",
2283 " 39: [['mottoes', 'reeving'],\n",
2284 " ['guiding', 'pussier'],\n",
2285 " ['pricing', 'cashier'],\n",
2286 " ['messier', 'arising'],\n",
2287 " ['playing', 'mobiles']],\n",
2288 " 40: [['motives', 'jamming'],\n",
2289 " ['guppies', 'noising'],\n",
2290 " ['dimming', 'motiles'],\n",
2291 " ['chasing', 'mobiles'],\n",
2292 " ['poising', 'battled'],\n",
2293 " ['motives', 'smoking'],\n",
2294 " ['kissing', 'motives'],\n",
2295 " ['atoning', 'motives'],\n",
2296 " ['mossier', 'noising'],\n",
2297 " ['bottled', 'pricing']],\n",
2298 " 41: [['priding', 'mottled']],\n",
2299 " 42: [['eliding', 'mottoes'], ['poising', 'mottles']]}"
2300 ]
2301 },
2302 {
2303 "cell_type": "code",
2304 "execution_count": 55,
2305 "metadata": {
2306 "scrolled": true
2307 },
2308 "outputs": [
2309 {
2310 "data": {
2311 "text/plain": [
2312 "40"
2313 ]
2314 },
2315 "execution_count": 55,
2316 "metadata": {},
2317 "output_type": "execute_result"
2318 }
2319 ],
2320 "source": [
2321 "len(astar_search_closed('mossier', 'noising'))"
2322 ]
2323 },
2324 {
2325 "cell_type": "code",
2326 "execution_count": 54,
2327 "metadata": {
2328 "scrolled": true
2329 },
2330 "outputs": [
2331 {
2332 "name": "stdout",
2333 "output_type": "stream",
2334 "text": [
2335 "10 loops, best of 3: 154 ms per loop\n"
2336 ]
2337 }
2338 ],
2339 "source": [
2340 "%%timeit\n",
2341 "astar_search_closed('mossier', 'noising')"
2342 ]
2343 },
2344 {
2345 "cell_type": "code",
2346 "execution_count": 77,
2347 "metadata": {
2348 "scrolled": true
2349 },
2350 "outputs": [
2351 {
2352 "data": {
2353 "text/plain": [
2354 "42"
2355 ]
2356 },
2357 "execution_count": 77,
2358 "metadata": {},
2359 "output_type": "execute_result"
2360 }
2361 ],
2362 "source": [
2363 "len(astar_search_closed('eliding', 'mottoes'))"
2364 ]
2365 },
2366 {
2367 "cell_type": "code",
2368 "execution_count": 78,
2369 "metadata": {
2370 "scrolled": true
2371 },
2372 "outputs": [
2373 {
2374 "data": {
2375 "text/plain": [
2376 "'eliding sliding slicing spicing spacing sparing searing bearing beating boating booting boobing bobbing bobbins bobbies bobbles bubbles burbles burgles bungles bangles dangles dandles dandies dandier handier hardier tardier tarrier tarries parries parties patties fatties fattier rattier rattler rattles battles bottles mottles mottoes'"
2377 ]
2378 },
2379 "execution_count": 78,
2380 "metadata": {},
2381 "output_type": "execute_result"
2382 }
2383 ],
2384 "source": [
2385 "' '.join(astar_search_closed('eliding', 'mottoes'))"
2386 ]
2387 },
2388 {
2389 "cell_type": "code",
2390 "execution_count": 76,
2391 "metadata": {
2392 "scrolled": true
2393 },
2394 "outputs": [
2395 {
2396 "name": "stdout",
2397 "output_type": "stream",
2398 "text": [
2399 "10 loops, best of 3: 99.7 ms per loop\n"
2400 ]
2401 }
2402 ],
2403 "source": [
2404 "%%timeit\n",
2405 "astar_search_closed('eliding', 'mottoes')"
2406 ]
2407 },
2408 {
2409 "cell_type": "code",
2410 "execution_count": 80,
2411 "metadata": {},
2412 "outputs": [
2413 {
2414 "name": "stdout",
2415 "output_type": "stream",
2416 "text": [
2417 "pupping, lustier\n",
2418 "getting, mossier\n",
2419 "cattier, signing\n",
2420 "tattled, sparing\n",
2421 "goading, battles\n",
2422 "dotting, motives\n",
2423 "exuding, fattier\n",
2424 "mobiles, walking\n",
2425 "mottoes, reeving\n",
2426 "motives, jamming\n",
2427 "priding, mottled\n",
2428 "eliding, mottoes\n"
2429 ]
2430 }
2431 ],
2432 "source": [
2433 "for l in sorted(solutions):\n",
2434 " print(', '.join(solutions[l][0]))"
2435 ]
2436 },
2437 {
2438 "cell_type": "code",
2439 "execution_count": null,
2440 "metadata": {
2441 "collapsed": true
2442 },
2443 "outputs": [],
2444 "source": []
2445 }
2446 ],
2447 "metadata": {
2448 "kernelspec": {
2449 "display_name": "Python 3",
2450 "language": "python",
2451 "name": "python3"
2452 },
2453 "language_info": {
2454 "codemirror_mode": {
2455 "name": "ipython",
2456 "version": 3
2457 },
2458 "file_extension": ".py",
2459 "mimetype": "text/x-python",
2460 "name": "python",
2461 "nbconvert_exporter": "python",
2462 "pygments_lexer": "ipython3",
2463 "version": "3.5.3"
2464 }
2465 },
2466 "nbformat": 4,
2467 "nbformat_minor": 2
2468 }