Updated notebooks for new library organisation
[cipher-tools.git] / 2014 / 2014-challenge8.ipynb
index f6d9d2e5e37fec50951141724a05d68faae5d3ea..d39900b3b758edac7a87b42999e928aa6bb9a105 100644 (file)
@@ -3,9 +3,7 @@
   {
    "cell_type": "code",
    "execution_count": 1,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [],
    "source": [
     "import os,sys,inspect\n",
     "import string\n",
     "%matplotlib inline\n",
     "\n",
-    "from cipherbreak import *\n",
+    "from cipher.vigenere import *\n",
+    "from cipher.cadenus import *\n",
+    "from support.utilities import *\n",
+    "from support.text_prettify import *\n",
+    "from support.language_models import *\n",
+    "from support.plot_frequency_histogram import *\n",
     "\n",
     "c8a = open('8a.ciphertext').read()\n",
     "c8b = open('8b.ciphertext').read().strip()"
   {
    "cell_type": "code",
    "execution_count": 2,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.axes._subplots.AxesSubplot at 0x7f42359ab6a0>"
+       "<matplotlib.axes._subplots.AxesSubplot at 0x7f383433e908>"
       ]
      },
      "execution_count": 2,
@@ -44,9 +45,9 @@
     },
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7f4235991f60>"
+       "<matplotlib.figure.Figure at 0x7f383433e048>"
       ]
      },
      "metadata": {},
   {
    "cell_type": "code",
    "execution_count": 3,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.axes._subplots.AxesSubplot at 0x7f420b429860>"
+       "<matplotlib.axes._subplots.AxesSubplot at 0x7f37f28e9f98>"
       ]
      },
      "execution_count": 3,
@@ -77,9 +76,9 @@
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWwAAAD+CAYAAAAeRj9FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAFYBJREFUeJzt3X20bHdd3/H3J0kh5AEud4knF4UmsBoCLCgSiNDg6mBD\njS2kWbVmkVa90jRLBQS6rIuLLc2JaxVDrNViH9QAWTc8qFEhTVxFc73JCIY0SHIDMSEGCtem4j2x\n4TEKkpBv/9j73hzOnacz58zc2ee8X2vNOrP32b/Z39mz5zN7fvPbM6kqJEmL77hjXYAkaTIGtiR1\nhIEtSR1hYEtSRxjYktQRBrYkdcTYwE7yliR3J7kryfuTPD7JziT7ktyX5MYkO+ZRrCRtZyMDO8np\nwKXAC6vqecDxwKuBPcC+qjoT2N9OS5JmaNwR9leAh4GTkpwAnAR8HrgA2Nsusxe4cGYVSpKAMYFd\nVV8AfgH4PzRB/aWq2gcsVdVKu9gKsDTTKiVJY7tEngm8CTgdeCpwSpIfWr1MNee2e367JM3YCWP+\n/yLgo1X1IECSDwAvBQ4lOa2qDiXZBTwwqHESg1ySplBVWTtvXB/2vcBLkjwhSYDzgHuAG4Dd7TK7\ngetGrPSoy2WXXTZw/qjLdm+zqHXZZnHrss3i1jWuzTAjj7Cr6hNJrgE+DjwK3AH8GnAqcG2SS4CD\nwEVjgl8LrHktfszll19+5PqonUfSfI3rEqGqrgSuXDP7CzRH29oyDgfzcnsBOOodmaRj6Jic6djr\n9Wyzzjbzqgvms56t1GZR67LN4tY1bZvM8i1vkvIt9eJrukQGPU6xS0Q6BpJQU3zoKElaEAa2JHWE\ngS1JHWFgS1JHGNiS1BEGtiR1hIEtSR1hYEtSRxjYktQRBrYkdYSBLUkdYWBLUkcY2JLUEQa2JHWE\ngS1JHWFgS1JHjP2JMEndsvY3OlfzBym6bewRdpJnJTmw6vLlJG9IsjPJviT3JbkxyY55FCxpEjXg\noq5b10+EJTkO+HPgHOAngf9XVVcmeTPw5Kras2Z5fyKsA/yJsK3Fx7P7Nusnws4DPlNV9wMXAHvb\n+XuBCzdWoiRplPUG9quBX2+vL1XVSnt9BVjatKokSUeZOLCTPA54FfBba//X9nv4XkuSZmg9o0S+\nH7i9qv6ynV5JclpVHUqyC3hgUKPl5eUj13u9Hr1eb8pSJWlr6vf79Pv9sctN/KFjkt8APlRVe9vp\nK4EHq+rtSfYAO/zQsZv8kGpr8fHsvmEfOk4U2ElOBv4MOKOqvtrO2wlcCzwdOAhcVFVfWtPOwG6N\nGhsLx3Z8rE/wrWWRH0/HiE9mQ4G9gZUa2K3hTyI41k+kRX6Ca/0W+fFc5NoWyWYN65MkHSMGtiR1\nhIEtSR1hYEtSR/htfdpyHImwfm6zbjCwtUUNHomgUdxmi84uEUnqCANbkjrCwJakjjCwJakjDGxJ\n6ggDW5I6wsCWpI4wsCWpIwxsSeoIA1uSOsLAlqSOMLAlqSMMbEnqiIkCO8mOJL+d5FNJ7kny3Ul2\nJtmX5L4kNybZMetiJWk7m/QI+z8D/7Oqng08H7gX2APsq6ozgf3ttCRpRsb+anqSJwEHquoZa+bf\nC/z9qlpJchrQr6qz1izjr6a3/NX0+dlq92e9prn/89pm2/2xmdRGfjX9DOAvk1yd5I4kVyU5GViq\nqpV2mRVgaRPrlSStMckvzpwAvBB4fVX9cZJfYk33R1VVkoEvj8vLy0eu93o9er3e1MVK0lbU7/fp\n9/tjl5ukS+Q04NaqOqOdfhnwFuAZwMur6lCSXcDNdokMZ5fI/Gy1+7Nedol039RdIlV1CLg/yZnt\nrPOAu4EbgN3tvN3AdZtUqyRpgLFH2ABJ/i7wTuBxwP8GXgMcD1wLPB04CFxUVV9a084j7JZH2POz\n1e7PenmE3X3DjrAnCuwNrNTAbhnY87PV7s96Gdjdt5FRIpKkBTDJKJFOaV7BB/MVXFKXbbnAbgx+\nyyVJXWaXiCR1hIEtSR1hYEtSRxjYktQRW/RDx61h1IgXcNSLtN0Y2Atv+Mk2krYXA1vStteVd7MG\ntiQBXXg364eOktQRHmFLc9KVt91aXAa2NFeL/7Zbi8suEUnqCANbkjrCwJakjjCwJakjDGxJ6oiJ\nRokkOQh8Bfgm8HBVnZNkJ/CbwN9myI/wSpI2z6RH2AX0quq7quqcdt4eYF9VnQnsb6clSTOyni6R\ntQNFLwD2ttf3AhduSkWS1AFJhl5mZT1H2H+Q5ONJLm3nLVXVSnt9BVja9OokaaHVgMvsTHqm47lV\n9RdJngLsS3Lv6n9WVSUZWOny8vKR671ej16vN2Wpi8NTjCVtpn6/T7/fH7tc1hsuSS4DHgIupenX\nPpRkF3BzVZ21Ztmad3g1YTr4V9M3q5bh6xi+nnm1mcY8ttk8Ler9WeTHc17bbCs9NrO8L0moqqOO\nDMd2iSQ5Kcmp7fWTgX8I3AVcD+xuF9sNXLehCiVJI03SJbIEfLDtBjgBeF9V3Zjk48C1SS6hHdY3\nsyolSevvElnXjdslMvc201jUt6nTWtT7s8iPp10iW6RLRJK0GAxsSeoIA1uSOsLAlqSOMLAlqSMM\nbEnqCANbkjrCwJakjjCwJakjJv22PumYGPXNiF08C1PaCANbHTD49F9pu7FLRJI6wsCWpI4wsCWp\nIwxsSeoIP3TUVBy9Ic2fga0NcPSGNE92iUhSRxjYktQREwV2kuOTHEhyQzu9M8m+JPcluTHJjtmW\nKUma9Aj7jcA9PNZpuQfYV1VnAvvbaUnSDI0N7CTfCfwj4J089onSBcDe9vpe4MKZVCdJOmKSI+xf\nBH4aeHTVvKWqWmmvrwBLm12YJOlbjRzWl+SVwANVdSBJb9AyVVVJhg68XV5ePnK91+vR6w28GUna\ntvr9Pv1+f+xyGXWSQ5K3AT8MPAKcCDwR+ADwYqBXVYeS7AJurqqzBrSveZ9E0ZzQMXh88GbVMnwd\nw9czrzbTmGabzWM7L3pt6+XjubUem1nelyRU1VEnNYzsEqmqn6mqp1XVGcCrgZuq6oeB64Hd7WK7\nges2VJ0kaaz1nul4+GXjCuDaJJcAB4GLNrMoadGNOjUfPD1fszGyS2TDN26XyNzbTGOrvYXeSvvA\n5tbWzcdzHrZEl4gkaXEs9Jc/+Y1wkvSYhQ7sht8IJ0lgl4gkdYaBLUkdYWBLUkcY2JLUEQa2JHWE\ngS1JHdGBYX2SFpHnScyfgS1pAzxPYp7sEpGkjjCwJakjDGxJ6ggDW5I6wsCWpI4wsCWpIwxsSeoI\nA1uSOmJkYCc5McltSe5Mck+Sn2vn70yyL8l9SW5MsmM+5UrS9jUysKvq68DLq+oFwPOBlyd5GbAH\n2FdVZwL722lJ2lRJRl62m7FdIlX11+3VxwHHA18ELgD2tvP3AhfOpDpJooZctp+xgZ3kuCR3AivA\nzVV1N7BUVSvtIivA0gxrlCQxwZc/VdWjwAuSPAn4/SQvX/P/SjL05W55efnI9V6vR6/Xm7pYSdqK\n+v0+/X5/7HJZz9cgJnkr8DXgXwG9qjqUZBfNkfdZA5avjXzNYtNHNfjbwIbd7jRtNq+u4euZV5tp\nLOp2XuTafDzn0+bYb7Npatt4XUmoqqM66ceNEvm2wyNAkjwBeAVwALge2N0uthu4bkPVSZLGGtcl\nsgvYm+Q4mnB/T1XtT3IAuDbJJcBB4KLZliltT/5IgFZbV5fIum/cLpG5t5nGom7nRa7t2O8D3eve\nmKbNsX8OTFPbMeoSkSQtDn8iTNKWMu6Emi53JRnYkrag4d0bXWaXiCR1hIEtSR1hYEtSRxjYktQR\nBrYkdYSBLUkdMbdhfZ5iOx9beQyqtN3NeRz24NM4tdm25hhUabuzS0SSOsLAlqSOMLAlqSMMbEnq\nCL/8SdueI2vUFQa2BDiyRl1gYOMYcUndYGAf4RhxSYtt7IeOSZ6W5OYkdyf5kyRvaOfvTLIvyX1J\nbjz86+qSpNmYZJTIw8C/rqrnAi8BXpfk2cAeYF9VnQnsb6clSTMyNrCr6lBV3dlefwj4FPAdwAXA\n3naxvcCFsypSkrTOcdhJTge+C7gNWKqqlfZfK8DSplYmSfoWE3/omOQU4HeAN1bVV1ePrKiqSjJw\nOMXy8vKqqT7Qm6ZOSdqy+v0+/X5/7HKZZNhakr8F/C7woar6pXbevUCvqg4l2QXcXFVnrWlXh2+/\nCfjBIzGG1bCobYYvv9XabO52noaP52I+B+bV5thv52nabPw5kISqOmqY2iSjRAK8C7jncFi3rgd2\nt9d3A9dtqEJJ0kiTdImcC/wQ8MkkB9p5bwGuAK5NcglwELhoJhVKkoAJAruq/ojhR+LnbW45kqRh\n/LY+SeoIA1uSOsLAlqSOMLAlqSMMbEnqCANbkjrCwJakjjCwJakjDGxJ6gh/IkyS5mSjvx9rYEvS\nXE3/+7F2iUhSR3iErbnZ6NtBabszsDVn078dlLY7u0QkqSMMbEnqCANbkjrCwJakjpjkR3jfnWQl\nyV2r5u1Msi/JfUluTLJjtmVKkiY5wr4aOH/NvD3Avqo6E9jfTkuSZmhsYFfVR4Avrpl9AbC3vb4X\nuHCT65IkrTFtH/ZSVa2011eApU2qR5I0xIY/dKzmFDVPU5OkGZv2TMeVJKdV1aEku4AHhi24vLy8\naqoP9KZcpSRtXd+alYNlku9wSHI6cENVPa+dvhJ4sKrenmQPsKOqjvrgMUkdvv3meyQGn5Y8rIZF\nbTN8+a3WpnuPzTRtjv12nqZN97bzNG2O/Xaeps3G738Squqo72yYZFjfrwMfBZ6V5P4krwGuAF6R\n5D7ge9tpSdIMje0SqaqLh/zrvE2uRZI0gmc6SlJHGNiS1BEGtiR1hIEtSR1hYEtSRxjYktQRBrYk\ndYSBLUkdYWBLUkcY2JLUEQa2JHWEgS1JHWFgS1JHGNiS1BEGtiR1hIEtSR1hYEtSRxjYktQRBrYk\ndcSGAjvJ+UnuTfLpJG/erKIkSUebOrCTHA/8F+B84DnAxUmePVnr/hRr3O5t5rEO20zXZh7rsM10\nbeaxjvm12cgR9jnAZ6rqYFU9DPwG8E8ma9qfYnXbvc081mGb6drMYx22ma7NPNYxvzYbCezvAO5f\nNf1/23mSpBnYSGDXplUhSRorVdPlbpKXAMtVdX47/Rbg0ap6+6plDHVJmkJVZe28jQT2CcCfAv8A\n+DzwMeDiqvrURoqUJA12wrQNq+qRJK8Hfh84HniXYS1JszP1EbYkab6mPsJeryQ7gb8DPP7wvKr6\n8IjlnwC8FngZzQecHwH+e1V9fZPq+alVkwVk1XWq6j+NaHsc8C+AM6rqZ5M8HTitqj62GbWtqm9t\nXV8Gbq+qO4e0ORH4AeB0Hntsq6p+dpNquqWqzk3yEEd/6FzAF4Cfr6r/OqDt2VV1+5p5r6yq392M\n2lbd5ouBn+HobfD8EW3Wvd2SvAD4Htp9s6o+Maaude/PQ/aBI9fX7qNJAnxnVa0evbUwklw2YPam\n7Z/bwVxOTU9yKfCHwO8Bl9N0oyyPaXYNzQk576A5Qee5wHvGrOeaJE9eNb0zybuHLH4qcApwNvAT\nwFNphiX+OPDCMbX9N+ClwD9vpx9q5w2q6T3t3zeNuc21zm5rOVzXjwHfD1w14qzS/wFcADzc1vQQ\n8FdD6rql/ftQkq+uuXxlUJuqOrf9e0pVnbrm8sS25jcMqe2qJM9btf6LgX8/pLZBNY2sbZX3AVfT\nBPCr2ssFY9pMvN3a+t4IvBd4CrAEvDfJsPt92Lr3Z4bvm6fQ7L+DfGjMbR4lyUVJnthef2uSDyYZ\n+RxI8vZJ5q3xVzy2fb9Jsz+fPmY9P5Vk4uHCSd6b5NIkZ62jzXMGzOuNafOG1Vkz4XpuSvKP18z7\ntfXcBlU18wvwJ8ATgDvb6bOAD45pc88k89b8/85J5q35/0eAU1dNn0pzxDSqzYHVf9vrnxh2P2ie\ncJ8Edq69jKnrlFXTpwAfBk4CPjVsO8/j8RyzbZ46ZP4zgDvax/7S9v49aQbrv2WKNuvabsBdwMmr\npk8G7hrTZpr9eZp9cy9wznrvT/v3ZTRnc7wSuG1MmwPDbmcd63088IdjllkG7gb+CHg9sDRm+e8F\nLgP2AZ8Dfgd407jHH3gzzbuXk4BfBv7XmDb/AfgMcC3N2d6Z4P5+rn0OXzZqO466zOvLn75eVV+D\n5u1nVd0LPGtMmzuSvPTwRDuM8PYRy7eLZeeqiZ00H4iO8u00R1aHPdzOG+Ub7an5h9fzFODRIcv+\nCrCf5v7evuby8RHreArwjTV1LVXVXwPD3kZ/NMnQt/7zUFWfHzL/s8DFwAdpjn6/r6q+PIMSLk/y\nriQXJ/mB9vJPx7SZZrs9OuT6MNPsz9Psmy8Bbk3y2SR3tZdPjmnzzfbvK4GrqummetygBZP8RJK7\ngGetuv27khykOShZj5MZc7JdVS1X1XOB1wG7gA8n2T9i+ZtowvStwFXAi2nepYzy3cDTgFtpRrv9\nBfD3xtT1b4EzgXcDPwp8OsnbkjxzRLMv0bygLCW5IcmOMXUdZV592Pe3bx+uA/Yl+SJwcNCC7c5w\nuLZbktxP03f3dJphhKP8As3Oei3Nq+UP0jx4o1wDfCzJB9o2F9IcpYzyyzTB8+1J3gb8M+DfDVqw\nqt4BvCPJr1TVj4+53dXeB9yW5Lq2rlcB709yMs1R+xGrttnxwGuSfA74m8dKGN5/O2urajtsJ01X\n3G1JZlHbbpoXxxP41iD9wIg238P6ttvVNPWv3meGdb0d9iIG7M/t9hm2rmn2ze8b8/9B/rx9a/4K\n4Iq2T3/Ywdz7abpdruCxo1KAr1bVg6NWsmZfOI7mxWfS/usHgEPAgzQHM8PWsZ/mheBWmqPyF1XV\nA2Nu+xHgazS9ACcCn62qsS/CVfVokkPACs2L3pOB307yB1X100PaPAK8NsmP0ryDWl+3SntYPjdt\n39ATgd+rqm8M+P/pI5pXVf3ZmNt/Ls2rWAE3VdU9o5Zv25zNYx8gfbiqDkzQ5tk0Y9AB9tcMhjS2\nH6Cd29Z1S1UNPCIfs82oqoObXduk5l1bkj8Fzqp17NjDahxVW7vPHPkAcdw+M+12mGbfXK/2IOB8\n4JNV9ekku4DnVdWNm7ye01dNPgKsVPM9RKPavBa4iCbcfwv4zVHP6SS/SPPi+HXgozSfnd16+B3+\nkDafAK6nefH4NuBXgb+pqh8c0eaNwI/QvIC8k6aL9+E0AxI+XVVHHWkn+bGq+tVV02cDr6uqfzls\nPUfdxrwDW5qlJFcD/7Gq7j7WtWjjkvwcTUgPHBk1ot2pNF0V/4ZmBNfjRyz74qr64zXzfqSqrhnR\n5nLg3YMOIJM8Z5IDxWkY2NpSktwLPJPmA56F6BbS/CT5SZp3JGfT7AMfoXkHdNMxLWyTzG0ctjQn\n5x/rAnRMnUjzWdYd47pbusgjbEnqCH/TUZI6wsCWpI4wsCWpIwxsSeoIA1uSOuL/Axc+C4z6mlNK\nAAAAAElFTkSuQmCC\n",
+      "image/png": "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\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7f420b4599b0>"
+       "<matplotlib.figure.Figure at 0x7f37f463ecc0>"
       ]
      },
      "metadata": {},
@@ -94,9 +93,7 @@
   {
    "cell_type": "code",
    "execution_count": 4,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 5,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 6,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
-     "data": {
-      "text/plain": [
-       "'mark i cracked what appears to be the final document about the trojan deployment and i think i have an idea about how to deal with it and with the flag day associates the principal weakness of any system like the one they have installed is the need to provide large quantities of power the fda came up with an ingenious solution but it is very vulnerable special forces could take it out for us but that would tell the fda that we have cracked their ciphers so instead i suggest we let them destroy trojan for us we will need cooperation from the omani government an armed fighter jet and the flight control systems from a drone meanwhile we need to ensure two things one that we do not send critical information across the ba balm and abstrait and two that we use an on critical key generation protocol on that channel given the level of commitment the fda have shown in developing this plan i am sure that they will reinstate the powersupply within a few months but with luck they will not guess that we know about it and we will put it out of business for long enough to come up with a plan of our own to exploit it in the meantime we now know that their highest security communications are encrypted using a caden us cipher so we can start hunting through the database for other intercepts we can crack this maybe the breakthrough we have been looking for in the fight against the fda lets not screw it up all the best harry'"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "mark i cracked what appears to be the final document about the trojan deployment and i think i have\n",
+      "an idea about how to deal with it and with the flag day associates the principal weakness of any\n",
+      "system like the one they have installed is the need to provide large quantities of power the fda\n",
+      "came up with an ingenious solution but it is very vulnerable special forces could take it out for us\n",
+      "but that would tell the fda that we have cracked their ciphers so instead i suggest we let them\n",
+      "destroy trojan for us we will need cooperation from the omani government an armed fighter jet and\n",
+      "the flight control systems from a drone meanwhile we need to ensure two things one that we do not\n",
+      "send critical information across the ba balm and abstrait and two that we use an on critical key\n",
+      "generation protocol on that channel given the level of commitment the fda have shown in developing\n",
+      "this plan i am sure that they will reinstate the powersupply within a few months but with luck they\n",
+      "will not guess that we know about it and we will put it out of business for long enough to come up\n",
+      "with a plan of our own to exploit it in the meantime we now know that their highest security\n",
+      "communications are encrypted using a caden us cipher so we can start hunting through the database\n",
+      "for other intercepts we can crack this maybe the breakthrough we have been looking for in the fight\n",
+      "against the fda lets not screw it up all the best harry\n"
+     ]
     }
    ],
    "source": [
-    "' '.join(segment(vigenere_decipher(c8as, key_a)))"
+    "print(prettify(vigenere_decipher(c8as, key_a)))"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 7,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 8,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 9,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 10,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 11,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [
     {
      "data": {
   {
    "cell_type": "code",
    "execution_count": 12,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'y'"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "max([unpos(int(c, 2)) for c in chunks(c8b, 5)])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def cadenus_letter(n, doubled='v'):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 14,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def cadenus_letter(n, doubled='v'):\n",
+    "    letter = unpos(n)\n",
+    "    if letter > doubled:\n",
+    "        letter = unpos(n + 1)\n",
+    "    return letter"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "('afcaeuottacthrioletcserthshtrahkzorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstxientrvoonerhuahravereetsvsielhlostdoalozaesmnndignnrhohhtsnaoilncnssicreanneeiiierxtanesrvogieizxssdgpvoiaisaoaeoaedrnitrnyeigrpsshadhdtoipaateyennesagrobtlesrnroirzpbgedcllixalaleenigrrnxzrlimlpstoleftrdmuarieeeiiaolnexsaohrtlstobetnslvfivdovtpoaeeisciohipseveedtexfarnhebleaotohtttepnckaonhxetmvzprreonnasgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfysoaotctbbsoeirnsadlztrrunrceptthreuhnktaceceelrxnireeeaeseeeidisogceomnrtejhagabsenitlxtrnbmielsaretesrngsnhebiosdienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnzpaidziegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlevasadnnthneiteiisahuhhuamonefzhlonxhaeeeeosneezaneisetogziterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseizclsiantaoltcizmidentthltndytttmasbleaeetlisirtxturpfailteaoefeisiiizisikvtxisprbsinelphrmohiagnlslvitodaisdpnzddcaaotahcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmuppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienniklzsogstcifzpipvidvssmnceiasiitsnneatitomrhbnhnidprlrepoznalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghznxeintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaozaanoeeldoinhusgiteaoriecevemntratmtfpeucutahamtnexonicdeemrpaolitoafesoosspfnlneeootachllirssysofpdftfrnpraeeazlonahautntcntcbaxloneftoatecvoxdlxvnneedtiioigtegmtaheeatefaaeprrcrosheerrpalediengidrreouhvesuroztnsosinuiuiofprda',\n",
+       " -1814.2525644323327)"
+      ]
+     },
+     "execution_count": 15,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "c8bl = ''.join([cadenus_letter(int(c, 2)) for c in chunks(c8b, 5)])\n",
+    "c8bl, Pletters(c8bl)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "'afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsvsielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiierwtanesrvogieiywssdgpvoiaisaoaeoaedrnitrnxeigrpsshadhdtoipaatexennesagrobtlesrnroirypbgedclliwalaleenigrrnwyrlimlpstoleftrdmuarieeeiiaolnewsaohrtlstobetnslvfivdovtpoaeeisciohipseveedtewfarnhebleaotohtttepnckaonhwetmvyprreonnasgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfxsoaotctbbsoeirnsadlytrrunrceptthreuhnktaceceelrwnireeeaeseeeidisogceomnrtejhagabsenitlwtrnbmielsaretesrngsnhebiosdienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnypaidyiegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlevasadnnthneiteiisahuhhuamonefyhlonwhaeeeeosneeyaneisetogyiterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseiyclsiantaoltciymidentthltndxtttmasbleaeetlisirtwturpfailteaoefeisiiiyisikvtwisprbsinelphrmohiagnlslvitodaisdpnyddcaaotahcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmuppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienniklysogstcifypipvidvssmnceiasiitsnneatitomrhbnhnidprlrepoynalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghynweintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaoyaanoeeldoinhusgiteaoriecevemntratmtfpeucutahamtnewonicdeemrpaolitoafesoosspfnlneeootachllirssxsofpdftfrnpraeeaylonahautntcntcbawloneftoatecvowdlwvnneedtiioigtegmtaheeatefaaeprrcrosheerrpalediengidrreouhvesuroytnsosinuiuiofprda'"
+       "('afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsvsielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiierwtanesrvogieiywssdgpvoiaisaoaeoaedrnitrnxeigrpsshadhdtoipaatexennesagrobtlesrnroirypbgedclliwalaleenigrrnwyrlimlpstoleftrdmuarieeeiiaolnewsaohrtlstobetnslvfivdovtpoaeeisciohipseveedtewfarnhebleaotohtttepnckaonhwetmvyprreonnasgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfxsoaotctbbsoeirnsadlytrrunrceptthreuhnktaceceelrwnireeeaeseeeidisogceomnrtejhagabsenitlwtrnbmielsaretesrngsnhebiosdienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnypaidyiegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlevasadnnthneiteiisahuhhuamonefyhlonwhaeeeeosneeyaneisetogyiterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseiyclsiantaoltciymidentthltndxtttmasbleaeetlisirtwturpfailteaoefeisiiiyisikvtwisprbsinelphrmohiagnlslvitodaisdpnyddcaaotahcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmuppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienniklysogstcifypipvidvssmnceiasiitsnneatitomrhbnhnidprlrepoynalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghynweintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaoyaanoeeldoinhusgiteaoriecevemntratmtfpeucutahamtnewonicdeemrpaolitoafesoosspfnlneeootachllirssxsofpdftfrnpraeeaylonahautntcntcbawloneftoatecvowdlwvnneedtiioigtegmtaheeatefaaeprrcrosheerrpalediengidrreouhvesuroytnsosinuiuiofprda',\n",
+       " -1760.1126100904926)"
       ]
      },
-     "execution_count": 13,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
     "c8bl = ''.join([cadenus_letter(int(c, 2), doubled='z') for c in chunks(c8b, 5)])\n",
-    "c8bl"
+    "c8bl, Pletters(c8bl)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 17,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'y'"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "max((cl for cl in string.ascii_lowercase),\n",
+    "   key=lambda l: Pletters(cadenus_letter(int(c, 2), doubled=l) for c in chunks(c8b, 5)))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "('afcaeuottacthrioletcserthshtrahkzorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstxientrvoonerhuahravereetsvsielhlostdoalozaesmnndignnrhohhtsnaoilncnssicreanneeiiierxtanesrvogieizxssdgpvoiaisaoaeoaedrnitrnyeigrpsshadhdtoipaateyennesagrobtlesrnroirzpbgedcllixalaleenigrrnxzrlimlpstoleftrdmuarieeeiiaolnexsaohrtlstobetnslvfivdovtpoaeeisciohipseveedtexfarnhebleaotohtttepnckaonhxetmvzprreonnasgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfysoaotctbbsoeirnsadlztrrunrceptthreuhnktaceceelrxnireeeaeseeeidisogceomnrtejhagabsenitlxtrnbmielsaretesrngsnhebiosdienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnzpaidziegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlevasadnnthneiteiisahuhhuamonefzhlonxhaeeeeosneezaneisetogziterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseizclsiantaoltcizmidentthltndytttmasbleaeetlisirtxturpfailteaoefeisiiizisikvtxisprbsinelphrmohiagnlslvitodaisdpnzddcaaotahcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmuppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienniklzsogstcifzpipvidvssmnceiasiitsnneatitomrhbnhnidprlrepoznalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghznxeintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaozaanoeeldoinhusgiteaoriecevemntratmtfpeucutahamtnexonicdeemrpaolitoafesoosspfnlneeootachllirssysofpdftfrnpraeeazlonahautntcntcbaxloneftoatecvoxdlxvnneedtiioigtegmtaheeatefaaeprrcrosheerrpalediengidrreouhvesuroztnsosinuiuiofprda',\n",
+       " -1814.2525644323327)"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "c8bl = ''.join([cadenus_letter(int(c, 2), doubled='v') for c in chunks(c8b, 5)])\n",
+    "c8bl, Pletters(c8bl)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "('a', 'y')"
+       "('a', 'z')"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 20,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "(1400, 56.0)"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 21,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.axes._subplots.AxesSubplot at 0x7f420b349a20>"
+       "<matplotlib.axes._subplots.AxesSubplot at 0x7f37f275c390>"
       ]
      },
-     "execution_count": 16,
+     "execution_count": 21,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "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\nNbxLWGOjAAAAAElFTkSuQmCC\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD7CAYAAABkO19ZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAEuhJREFUeJzt3X+05HVdx/HnK0gwxQBZiaPIiiFqhqtewU5iJGb4o5BKZFX8maslHs1OHVKTtMyfZBkFrUKAPxARSVT8wcGS/M1d2JYVJQGXXM623ESJYx4UfPfHfK8Ol3vvzJ2Zuz8++3ycM2e+3898P/N97/fOvOYzn5n5bqoKSVK7fmZ7FyBJWl4GvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxu2/vAgD222+/Wrly5fYuQ5J2KuvWrfufqloxaLsdIuhXrlzJ9PT09i5DknYqSW4cZjunbiSpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjBgZ9krOS3JxkY1/b+UnWd5dNSdZ37SuT/KDvtjOWs3hJ0mDDfI/+bOA04NzZhqp61uxyklOBW/u2v76qVk2qQEnSeAYGfVVdnmTlfLclCXA88MTJltW2lSd/YsHbNr3laduwEkm7gnHn6I8EtlbVN/vaHpTkqiSfS3LkQh2TrEkynWR6ZmZmzDIkSQsZN+hXA+f1rW8BHlhVjwJeDXwgyX3m61hVa6tqqqqmVqwYeKoGSdKIRg76JLsDvwOcP9tWVbdX1Xe65XXA9cBDxi1SkjS6cUb0TwK+UVWbZxuSrEiyW7d8MHAIcMN4JUqSxjHM1yvPA74EHJpkc5IXdzedwF2nbQCeAGzovm75YeBlVXXLJAuWJC3NMN+6Wb1A+wvmabsQuHD8siRJk+IvYyWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaNzDok5yV5OYkG/va/iLJTUnWd5en9t32Z0muS3Jtkt9crsIlScMZZkR/NnDMPO3vrKpV3eUSgCQPB04Afqnr849JdptUsZKkpRsY9FV1OXDLkPd3LPDBqrq9qr4FXAccPkZ9kqQxjTNHf1KSDd3Uzj5d2/2Bb/dts7lru5ska5JMJ5memZkZowxJ0mJGDfrTgQcDq4AtwKlLvYOqWltVU1U1tWLFihHLkCQNMlLQV9XWqrqzqn4MvJufTs/cBBzYt+kDujZJ0nYyUtAnOaBv9Thg9hs5FwMnJNkjyYOAQ4CvjleiJGkcuw/aIMl5wFHAfkk2A6cARyVZBRSwCXgpQFV9LcmHgGuAO4CXV9Wdy1O6JGkYA4O+qlbP03zmItu/CXjTOEVJkibHX8ZKUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxA4M+yVlJbk6ysa/t7Um+kWRDkouS7N21r0zygyTru8sZy1m8JGmwYUb0ZwPHzGm7FHhEVR0G/CfwZ323XV9Vq7rLyyZTpiRpVAODvqouB26Z0/aZqrqjW/0y8IBlqE2SNAGTmKN/EfDJvvUHJbkqyeeSHLlQpyRrkkwnmZ6ZmZlAGZKk+YwV9EleC9wBvL9r2gI8sKoeBbwa+ECS+8zXt6rWVtVUVU2tWLFinDIkSYvYfdSOSV4APB04uqoKoKpuB27vltcluR54CDA9fqnaGaw8+RML3rbpLU/bhpVoZ+DjZdsYaUSf5BjgT4Hfrqr/62tfkWS3bvlg4BDghkkUKkkazcARfZLzgKOA/ZJsBk6h9y2bPYBLkwB8ufuGzROANyb5EfBj4GVVdcu8dyxJ2iYGBn1VrZ6n+cwFtr0QuHDcoiRJk+MvYyWpcQa9JDVu5G/dLCc/iZekyXFEL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNW6HPNeN1BrP36TtyRG9JDXOoJekxhn0ktQ4g16SGmfQS1Ljhgr6JGcluTnJxr62fZNcmuSb3fU+XXuSvCvJdUk2JHn0chUvSRps2BH92cAxc9pOBi6rqkOAy7p1gKcAh3SXNcDp45cpSRrVUEFfVZcDt8xpPhY4p1s+B3hGX/u51fNlYO8kB0yiWEnS0o0zR79/VW3plv8b2L9bvj/w7b7tNndtkqTtYCIfxlZVAbWUPknWJJlOMj0zMzOJMiRJ8xjnFAhbkxxQVVu6qZmbu/abgAP7tntA13YXVbUWWAswNTW1pBcJaVexrU+d4Kka2jTOiP5i4Pnd8vOBj/a1P6/79s3jgFv7pngkSdvYUCP6JOcBRwH7JdkMnAK8BfhQkhcDNwLHd5tfAjwVuA74P+CFE65ZkrQEQwV9Va1e4Kaj59m2gJePU5QkaXL8ZawkNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDVunJOaSRLgydB2dI7oJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxo18rpskhwLn9zUdDLwe2Bt4CTDTtb+mqi4ZuUJJ0lhGDvqquhZYBZBkN+Am4CLghcA7q+odE6lQkjSWSU3dHA1cX1U3Tuj+JEkTMqmgPwE4r2/9pCQbkpyVZJ/5OiRZk2Q6yfTMzMx8m0iSJmDsoE9yD+C3gQu6ptOBB9Ob1tkCnDpfv6paW1VTVTW1YsWKccuQJC1gEiP6pwBXVtVWgKraWlV3VtWPgXcDh09gH5KkEU0i6FfTN22T5IC+244DNk5gH5KkEY31XwkmuRfwG8BL+5rflmQVUMCmObdJkraxsYK+qr4P3HdO24ljVSRJmih/GStJjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktS4sc5euatbefInFrxt01uetg0rkaSFOaKXpMY5otcuyXdj2pUY9JqXQSi1w6kbSWqcQS9JjTPoJalxY8/RJ9kE3AbcCdxRVVNJ9gXOB1YCm4Djq+q74+5LkrR0kxrR/3pVraqqqW79ZOCyqjoEuKxblyRtB8s1dXMscE63fA7wjGXajyRpgEkEfQGfSbIuyZqubf+q2tIt/zew/9xOSdYkmU4yPTMzM4EyJEnzmcT36B9fVTcluR9waZJv9N9YVZWk5naqqrXAWoCpqam73S5JmoyxR/RVdVN3fTNwEXA4sDXJAQDd9c3j7keSNJqxgj7JvZLsNbsMPBnYCFwMPL/b7PnAR8fZjyRpdONO3ewPXJRk9r4+UFWfSnIF8KEkLwZuBI4fcz+SpBGNFfRVdQPwyHnavwMcPc59S5Imw1/GSlLjDHpJapxBL0mN83z0eO51SW1zRC9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY3zl7FSg/y1t/oZ9DsRn7ySRuHUjSQ1zhG9tAS+q9LOyBG9JDXOoJekxhn0ktQ45+h3AQvNKzunLO0aRg76JAcC5wL7AwWsraq/S/IXwEuAmW7T11TVJeMWKkmz/FB8acYZ0d8B/HFVXZlkL2Bdkku7295ZVe8YvzxJ0rhGDvqq2gJs6ZZvS/J14P6TKkySNBkT+TA2yUrgUcBXuqaTkmxIclaSfRbosybJdJLpmZmZ+TaRJE3A2B/GJrk3cCHwqqr63ySnA39Jb97+L4FTgRfN7VdVa4G1AFNTUzVuHZI0yK46tz9W0Cf5WXoh//6q+ghAVW3tu/3dwMfHqlCSdjGTfkEaeeomSYAzga9X1d/0tR/Qt9lxwMZR9yFJGt84I/pfBU4Erk6yvmt7DbA6ySp6UzebgJeOVaEkaSzjfOvm80DmucnvzEvSDsRTIEhS4wx6SWpcU+e62VW/OiVpee3s2eKIXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNa+qkZtr17Ownm5K2BUf0ktQ4R/SStEx2lHecjuglqXEGvSQ1btmCPskxSa5Ncl2Sk5drP5KkxS3LHH2S3YB/AH4D2AxckeTiqrpmOfannd+OMpcptWi5RvSHA9dV1Q1V9UPgg8Cxy7QvSdIiUlWTv9Pk94Bjqur3u/UTgSOq6qS+bdYAa7rVQ4FrF7i7/YD/GaEM+9nPftun385QYyv9DqqqFQPvoaomfgF+D3hP3/qJwGkj3te0/exnv52n385Q467Qr/+yXFM3NwEH9q0/oGuTJG1jyxX0VwCHJHlQknsAJwAXL9O+JEmLWJZv3VTVHUlOAj4N7AacVVVfG/Hu1trPfvbbqfrtDDXuCv1+Ylk+jJUk7Tj8ZawkNc6gl6TGGfSSAEjPgYO31M5mhw36JPskOTzJE2YvQ/TZM8mrk3wkyYVJ/ijJntui3qXonlDPTfL6bv2BSQ5fYNv3dtev3JY1bitJPt9d35bkf+dcbk3yrSR/OOA+HjNP29OXq+ZtLckjk5zUXR45ZJ8lPxeq94HdJSPW+Mwke3XLr+v2++gh+r11mLZJ6Y7J/Ufo9/B52o4a0OcVSfZZ6r66vpcleeqctpE/lN0hP4xN8vvAK+l9/3498DjgS1X1xAH9PgTcBryva3o2sHdVPXNAv3OAV1bV97r1fYBTq+pFC2z/6sXur6r+ZsD+Tgd+DDyxqh7W7e8zVfXYeba9BngS8EngKCBz9nXLYvtapN5bgXVVtX6RfnsAvwuspO8bWlX1xkH7nJQk9wW+WFWHLrLNlcDzqmpjt74aeFVVHbFMNU0BrwUOondcQi8nDxvQb8nHs3uBfwnwka7pOGBtVf39gH2N81w4raquWGy7efptqKrDkjwe+Cvg7cDrB/0NklxZVY+e07ZhiGP5+vnaBz02k5wCHA/cApwPXFBVWxfr0/XbCLwXeBuwZ3c9VVW/skifv6L31fIrgbOAT9eQgZvkBuDbwGer6g1d292O1bB21P945JXAY4EvV9WvJ3ko8NdD9HtEVfW/8v5rF5SDHDYb8gBV9d0kj1pk+72660O7Omd/I/BbwFeH2N8RVfXoJFf17e8eC2x7BnAZcDCwjrsGfXXtg0x1l491608HNgAvS3JBVb1tgX4fpXtBAG4ftJMkn6+qxye5ravtJzfRC8L7DFHrXVTVdwaNnOj9EvvDSZ4NHAk8D3jyInXOrW+pdb4f+BPganov2MNa0vHsvJje4+X78JPR7peARYOe0Z8LRwDPSXIj8H2GfBED7uyun0bvhegTXdDNK8kfAH8IHJxkQ99NewFfGKLO7/ct70nvMf31QZ260HxDksOAZwGfS7K5qp40oOsRwFuBL3Y1vh/41QH7el2SP6f3WHwhcFr3AnxmVV0/YH/fA44G3pXkY8BzB2y/uHF/WrscF+CK7no9sEe3/LUh+r0PeFzf+hHAuUP0+w9gn771fYGrh+h3ObBX3/pewOVD9PsKvd8XXNmtrwCuGtDn9DGO5+XAvfvW7w18DrgncM0i/TZu78fCEv6NDwGuAT4F3HOZ9/X5Efst+XjSezHZs299zyEfm6M+Fw6a7zJEv48D/wTcAOwN7AH8xyLb/zy9dzbnzdnXviMe2z2Af1vC9r8AvILei8qGIba/B713KeuB64ATlrCvRwJ/C3wDOB24CnjbgD5X9S2/oHscbB71Mbujjug3J9kb+Bfg0iTfBW5caOMkV9Mbof0s8MUk/9WtH0Tv4A5yKvClJBd0688E3jREv/2BH/at/7BrG+RdwEXA/ZK8id6I9HWLdaiqPxjifhdyP+46gvwRsH9V/SDJYiPLLyb55aq6eox9L5u+v/usfem9gH4lCTV4FDqqU5K8h947rZ8cv6r6yMJdgNGO5z/T+/dc1K0/AzhziH6P4afPBYAHAtfOHrOFjk1VLfg8G+B44BjgHVX1vSQH0HvXM6+qupXeu5vVI+5vrp+jN9W7qO7znuPpDa4uAF5Sw50+/Qp678geS+8kY2ck+d1aZCqsm3Z7Hr0Tkr0H+JOq+lGSnwG+CfzpIvs7Y3ahqs7u/m4vH6LO+WvpXjF2WEl+jd6r/6eqd8rj+bY5aLH7GObB233YMvsZwGeH+eMneS29B03/k/D8qnrzEH0fSu+tWYDLqmrg285RdW8fj6P3QIXeFNPF9F7g1lbVc+ZsPxuguwOH0Bul3c7wb+O3iUn83Ufc7/uAhwJf46dTN1ULfKbT1+8a4BeBb7GE49l9qPn4bvXfq+qqIWrcLsdmW5nzIr8bveB+Y1WdNqDfm+k9Rxf8bGqBflNVNT2n7cSqeu8ifd5A76wAdzvWSR62nM/5u+1vRw/6HV33JDyyW718mCfh9tB9gDg7p/iFuQ/aOds2HRLjSnJtLfLh8CL95j2uu/rxHMWcY3kHsLWq7the9ezoDHppiZL8M/D2Id/yS9udQS8tUZKvAw9miVMw0vZi0EtL5BSMdjYGvSQ1boc9BYIkaTIMeklqnEEvSY0z6CWpcf8PFvkZRxhURioAAAAASUVORK5CYII=\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7f420b349048>"
+       "<matplotlib.figure.Figure at 0x7f37f2757470>"
       ]
      },
      "metadata": {},
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 22,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.axes._subplots.AxesSubplot at 0x7f420b2a5d68>"
+       "<matplotlib.axes._subplots.AxesSubplot at 0x7f37f26b4c50>"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAD+CAYAAAA+hqL9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHrNJREFUeJzt3X+cXXV95/HXG7KJESJhkIYAAVJ3EOLqQ40muv7YcZGQ\n7iqwWwphtzC1sz4qUdF9dPswcVcyU7oW3G0pdhdqLUISlSYVhdjFMGPira4aBhE0JaZJVsdNBjK4\ngwna+iMpn/3jfIc553J/Z37cTN7Px+M+7vd8z/f7Pd9z58z93PP9nnuuIgIzM7MxJ013B8zMrL04\nMJiZWYEDg5mZFTgwmJlZgQODmZkVODCYmVlB3cAgaa2kJyTtlPRZSXMkdUgakLRHUr+k+WXl90ra\nLWlFLn9pamOvpNtz+XMkbUr5OySdn1vXnbaxR9L1E7njZmZWWc3AIOkC4N3AayPilcDJwCpgDTAQ\nERcC29IykpYA1wBLgJXAHZKUmrsT6ImITqBT0sqU3wOMpvzbgFtTWx3ATcCy9FiXD0BmZjY56p0x\nPAscAV4saRbwYuBJ4HJgfSqzHrgypa8A7o2IIxExBOwDlktaCMyLiMFUbkOuTr6t+4BLUvoyoD8i\nDkXEIWCALNiYmdkkqhkYIuIZ4I+A/0sWEA5FxACwICJGUrERYEFKnw0cyDVxADinQv5wyic970/b\nOwoclnRGjbbMzGwS1RtKehnwQeACsjfqUyX9Zr5MZPfU8H01zMxmiFl11r8O+EZEjAJI+jzwRuCg\npLMi4mAaJno6lR8GFuXqn0v2SX84pcvzx+qcBzyZhqtOi4hRScNAV67OImB7eQclOSiZmbUgIlQp\nv94cw27gDZLmpknktwO7gC8C3alMN3B/Sm8BVkmaLWkx0AkMRsRB4FlJy1M71wEP5OqMtXUV2WQ2\nQD+wQtJ8SacDlwIPVdm5io9169ZVXTdRdaZiG67jv81Mq9Ou/TqR6tRS84whIr4jaQPwLeA54NvA\nnwPzgM2SeoAh4OpUfpekzSl4HAVWx3gPVgP3AHOBByNia8q/C9goaS8wSnbVExHxjKSbgUdSub7I\nJqHNzGwS1RtKIiI+BnysLPsZsrOHSuU/Cny0Qv6jwCsr5P+CFFgqrLsbuLteH83MbOKc3NvbO919\nOCZ9fX29tfbhggsuaLrNZutMxTZcp7U67dov12nffp0odfr6+ujt7e2rVF71xpranaQ43vfBzGyq\nSSJanHw2M7MTjAODmZkVODCYmVmBA4OZmRU4MJiZWUHd7zHY9Bm/Y/kL+UosM5ssDgxtr1IAqB4w\nzMyOlYeSzMyswIHBzMwKHBjMzKzAgcHMzAocGMzMrMCBwczMChwYzMyswIHBzMwKHBjMzKzAgcHM\nzArqBgZJL5f0WO5xWNKNkjokDUjaI6lf0vxcnbWS9kraLWlFLn+ppJ1p3e25/DmSNqX8HZLOz63r\nTtvYI+n6idx5MzN7oaZ+2lPSScAwsAx4P/D/IuJjkj4EnB4RayQtAT4LvB44B/gy0BkRIWkQeF9E\nDEp6EPh4RGyVtBr4ZxGxWtI1wL+JiFWSOoBHgKWpC48CSyPiUK5PM/anPbOb6FW+V9JM3WczmxoT\n+dOebwf2RcR+4HJgfcpfD1yZ0lcA90bEkYgYAvYByyUtBOZFxGAqtyFXJ9/WfcAlKX0Z0B8Rh1Iw\nGABWNtlnMzNrQrOBYRVwb0oviIiRlB4BFqT02cCBXJ0DZGcO5fnDKZ/0vB8gIo4ChyWdUaMtMzOb\nJA0HBkmzgXcCf1W+Lo3leGzDzGwGaOb3GH4NeDQifpSWRySdFREH0zDR0yl/GFiUq3cu2Sf94ZQu\nzx+rcx7wpKRZwGkRMSppGOjK1VkEbC/vWG9v7/Pprq4uurq6youYmZ3QSqUSpVKpobINTz5L+kvg\nSxGxPi1/DBiNiFslrQHml00+L2N88vmfpsnnh4EbgUHgf1GcfH5lRNwgaRVwZW7y+VvAa8l+neZR\n4LWefPbks5kdm1qTzw0FBkmnAD8EFkfET1JeB7CZ7JP+EHD12Bu2pA8Dvw0cBT4QEQ+l/KXAPcBc\n4MGIuDHlzwE2Aq8BRoFVaeIaSe8CPpy68gdjgSnXNwcGM7MmHXNgaGcODGZmzZvIy1XNzGyGc2Aw\nM7MCBwYzMytwYDAzswIHBjMzK3BgMDOzAgcGMzMrcGAwM7MCBwYzMytwYDAzswIHBjMzK3BgMDOz\nAgcGMzMrcGAwM7MCBwYzMytwYDAzswIHBjMzK3BgMDOzAgcGMzMraCgwSJov6XOSvidpl6Tlkjok\nDUjaI6lf0vxc+bWS9kraLWlFLn+ppJ1p3e25/DmSNqX8HZLOz63rTtvYI+n6idpxMzOrrNEzhtuB\nByPiYuBVwG5gDTAQERcC29IykpYA1wBLgJXAHcp+1R7gTqAnIjqBTkkrU34PMJrybwNuTW11ADcB\ny9JjXT4AmZnZxKsbGCSdBrwlIj4FEBFHI+IwcDmwPhVbD1yZ0lcA90bEkYgYAvYByyUtBOZFxGAq\ntyFXJ9/WfcAlKX0Z0B8RhyLiEDBAFmzMzGySNHLGsBj4kaS7JX1b0iclnQIsiIiRVGYEWJDSZwMH\ncvUPAOdUyB9O+aTn/ZAFHuCwpDNqtGVmZpNkVoNlXgu8LyIekfQnpGGjMRERkmIyOtiI3t7e59Nd\nXV10dXVNV1fMzNpSqVSiVCo1VLaRwHAAOBARj6TlzwFrgYOSzoqIg2mY6Om0fhhYlKt/bmpjOKXL\n88fqnAc8KWkWcFpEjEoaBrpydRYB28s7mA8MZmb2QuUfmvv6+qqWrTuUFBEHgf2SLkxZbweeAL4I\ndKe8buD+lN4CrJI0W9JioBMYTO08m65oEnAd8ECuzlhbV5FNZgP0AyvSVVGnA5cCD9Xrs5mZta6R\nMwaA9wOfkTQb+D/Au4CTgc2SeoAh4GqAiNglaTOwCzgKrI6IsWGm1cA9wFyyq5y2pvy7gI2S9gKj\nwKrU1jOSbgbGzlb60iS0mZlNEo2/Zx+fJMXxvg/VZCdWlfZNzNR9NrOpIYmIUKV1/uazmZkVODCY\nmVmBA4OZmRU4MJiZWYEDg5mZFTgwmJlZQaPfYzAzm3LjN2auzJdtTw4HBjNrc9Xe/GsHDWudh5LM\nzKzAgcHMzAocGMzMrMCBwczMChwYzMyswIHBzMwKHBjMzKzAgcHMzAocGMzMrMCBwczMChwYzMys\noKHAIGlI0nclPSZpMOV1SBqQtEdSv6T5ufJrJe2VtFvSilz+Ukk707rbc/lzJG1K+TsknZ9b1522\nsUfS9ROz22ZmVk2jZwwBdEXEayJiWcpbAwxExIXAtrSMpCXANcASYCVwh8ZvkXgn0BMRnUCnpJUp\nvwcYTfm3AbemtjqAm4Bl6bEuH4DMzGziNTOUVH4rw8uB9Sm9Hrgypa8A7o2IIxExBOwDlktaCMyL\niMFUbkOuTr6t+4BLUvoyoD8iDkXEIWCALNiYmdkkaeaM4cuSviXp3SlvQUSMpPQIsCClzwYO5Ooe\nAM6pkD+c8knP+wEi4ihwWNIZNdoyOyFIqvowmyyN/h7DmyLiKUlnAgOSdudXRkRImrZfzOjt7X0+\n3dXVRVdX13R1xWwSVPrXcmCw5pRKJUqlUkNlGwoMEfFUev6RpC+QjfePSDorIg6mYaKnU/FhYFGu\n+rlkn/SHU7o8f6zOecCTkmYBp0XEqKRhoCtXZxGwvbx/+cBgZmYvVP6hua+vr2rZukNJkl4saV5K\nnwKsAHYCW4DuVKwbuD+ltwCrJM2WtBjoBAYj4iDwrKTlaTL6OuCBXJ2xtq4im8wG6AdWSJov6XTg\nUuChen02M7PWNXLGsAD4QhrTnAV8JiL6JX0L2CypBxgCrgaIiF2SNgO7gKPA6hj/YdbVwD3AXODB\niNia8u8CNkraC4wCq1Jbz0i6GXgkletLk9AV+fdhzcyOnY73N0tJz8edLDBU/33Y421fq+/P8bcv\n1poT/RiYaf/T7UQSEVHx07S/+WxmZgUODGZmVuDAYGZmBQ4MZmZW4MBgZmYFDgxmZlbgwGBmZgUO\nDGZmVuDAYGZmBQ4MZmZW4MBgZmYFDgxmZlbgwGBmZgUODGZmVuDAYGZmBQ4MZmZW4MBgZmYFjfy0\np9kx88+umh0/HBhsClX/icYTQa3g6MBo7aShoSRJJ0t6TNIX03KHpAFJeyT1S5qfK7tW0l5JuyWt\nyOUvlbQzrbs9lz9H0qaUv0PS+bl13WkbeyRdPzG7bBNBUtWH1RIVHmbtpdE5hg8Auxg/itcAAxFx\nIbAtLSNpCXANsARYCdyh8XeKO4GeiOgEOiWtTPk9wGjKvw24NbXVAdwELEuPdfkAZO3Ab3JmM1Hd\nwCDpXOBfAX/B+Dn/5cD6lF4PXJnSVwD3RsSRiBgC9gHLJS0E5kXEYCq3IVcn39Z9wCUpfRnQHxGH\nIuIQMEAWbMzMbBI1csZwG/B7wHO5vAURMZLSI8CClD4bOJArdwA4p0L+cMonPe8HiIijwGFJZ9Ro\ny8yOQ7WGHz0E2V5qTj5LegfwdEQ8JqmrUpmICEnTOobQ29ubWyoBXdPSDzOr58S+AGE6lUolSqVS\nQ2VV62oISR8FrgOOAi8CXgJ8Hng90BURB9Mw0Vci4iJJawAi4pZUfyuwDvhhKnNxyr8WeGtE3JDK\n9EbEDkmzgKci4kxJq9I23pPqfALYHhGbyvoYY/uQfeqofuAdb1d+VN+f6d+XZvs20/42rWjl79nO\nx0CzWjkGfNxMHklERMWIXHMoKSI+HBGLImIxsIrsjfk6YAvQnYp1A/en9BZglaTZkhYDncBgRBwE\nnpW0PE1GXwc8kKsz1tZVZJPZAP3ACknzJZ0OXAo81NSem5lZ05r9HsNYeL4F2CypBxgCrgaIiF2S\nNpNdwXQUWB3jIX01cA8wF3gwIram/LuAjZL2AqNkAYiIeEbSzcAjqVxfmoQ2M7NJVHMo6XjgoaTp\n4aGk5nkoyUNJ7aTloSQzMzvxODCYmVmBA4OZmRX4Jnpm1jTfLXdmc2Awsxb5y2ozlYeSzMyswIHB\nzMwKHBjMzKzAgcHMzAocGMzMrMCBwczMChwYzMyswIHBzMwKHBjMzKzAgcHMzAocGMzMrMCBwczM\nChwYzMyswIHBzMwKagYGSS+S9LCkxyXtkvSHKb9D0oCkPZL6Jc3P1Vkraa+k3ZJW5PKXStqZ1t2e\ny58jaVPK3yHp/Ny67rSNPZKun9hdNzOzSmoGhoj4OfC2iHg18CrgbZLeDKwBBiLiQmBbWkbSEuAa\nYAmwErhD47/ocSfQExGdQKeklSm/BxhN+bcBt6a2OoCbgGXpsS4fgMzMbHLUHUqKiH9IydnAycCP\ngcuB9Sl/PXBlSl8B3BsRRyJiCNgHLJe0EJgXEYOp3IZcnXxb9wGXpPRlQH9EHIqIQ8AAWbAxM7NJ\nVDcwSDpJ0uPACPCViHgCWBARI6nICLAgpc8GDuSqHwDOqZA/nPJJz/sBIuIocFjSGTXaMjOzSVT3\npz0j4jng1ZJOAx6S9Lay9SFpWn/gtbe3N7dUArqmpR9mZu2qVCpRKpUaKqtmfrRb0keAnwH/AeiK\niINpmOgrEXGRpDUAEXFLKr8VWAf8MJW5OOVfC7w1Im5IZXojYoekWcBTEXGmpFVpG+9JdT4BbI+I\nTWV9irF9yKYzqv8O7fH2A+XV92f696XZvs20v00rWvl7tusx0Mrfc6rqWGMkEREVf6C73lVJLx2b\n8JU0F7gUeAzYAnSnYt3A/Sm9BVglabakxUAnMBgRB4FnJS1Pk9HXAQ/k6oy1dRXZZDZAP7BC0nxJ\np6dtP9TEfpuZWQvqDSUtBNZLOoksiGyMiG2SHgM2S+oBhoCrASJil6TNwC7gKLA6xkP6auAeYC7w\nYERsTfl3ARsl7QVGgVWprWck3Qw8ksr1pUloMzObRE0NJbUjDyVNDw8lNc9DSR5KaictDyWZmdmJ\nx4HBzMwKHBjMzKzAgcHMzArqfsHNJsb4LaMq8ySambULB4YpVf3qCjOzduGhJDMzK/AZg53wPMxn\nVuTAYAZ4mM9snIeSzMyswIHBzMwKHBjMzKzAgcHMzAocGMzMrMCBwczMChwYzMyswIHBzMwKHBjM\nzKzAgcHMzArqBgZJiyR9RdITkv5W0o0pv0PSgKQ9kvolzc/VWStpr6Tdklbk8pdK2pnW3Z7LnyNp\nU8rfIen83LrutI09kq6fuF03M7NKGjljOAL8x4h4BfAG4L2SLgbWAAMRcSGwLS0jaQlwDbAEWAnc\nofG7lN0J9EREJ9ApaWXK7wFGU/5twK2prQ7gJmBZeqzLByAzM5t4dQNDRByMiMdT+qfA94BzgMuB\n9anYeuDKlL4CuDcijkTEELAPWC5pITAvIgZTuQ25Ovm27gMuSenLgP6IOBQRh4ABsmBjZmaTpKk5\nBkkXAK8BHgYWRMRIWjUCLEjps4EDuWoHyAJJef5wyic97weIiKPAYUln1GjLzMwmScO33ZZ0Ktmn\n+Q9ExE/y97CPiJA0bTet7+3tzS2VgK5p6YeZWbsqlUqUSqWGyqqRHyGR9E+Avwa+FBF/kvJ2A10R\ncTANE30lIi6StAYgIm5J5bYC64AfpjIXp/xrgbdGxA2pTG9E7JA0C3gqIs6UtCpt4z2pzieA7RGx\nKde3GNuHLFhVv6/+dP7gSit9q15nevcFmu/bTPvbTOx2qm+jXY+BiT2eJ7aONUYSEVHxB0cauSpJ\nwF3ArrGgkGwBulO6G7g/l79K0mxJi4FOYDAiDgLPSlqe2rwOeKBCW1eRTWYD9AMrJM2XdDpwKfBQ\n3T02M7OWNTKU9CbgN4HvSnos5a0FbgE2S+oBhoCrASJil6TNwC7gKLA6xsP6auAeYC7wYERsTfl3\nARsl7QVGgVWprWck3Qw8ksr1pUloM7OKav1Uq88wGtPQUFI781DS9PBQ0kRux0NJU1Nn+v9v2skx\nDSWZmdmJxYHBzMwKHBjMzKyg4e8xmNk4T3DaTObAYNayyhOcZsc7DyWZmVmBA4OZmRU4MJiZWYHn\nGMzMWjCTL0BwYDAza9nMvADBQ0lmZlbgM4YW1DqFhOP/NNLM2sd0DFk5MLSs+o29zMwm1tQOWTkw\nzDAzeULMzKaGA8OMNDMnxMxsanjy2czMChwYzMyswIHBzMwKPMdgnrA2s4K6ZwySPiVpRNLOXF6H\npAFJeyT1S5qfW7dW0l5JuyWtyOUvlbQzrbs9lz9H0qaUv0PS+bl13WkbeyRdPzG7bJVFhYeZnYga\nGUq6G1hZlrcGGIiIC4FtaRlJS4BrgCWpzh0a/zh6J9ATEZ1Ap6SxNnuA0ZR/G3BraqsDuAlYlh7r\n8gHIzMwmR93AEBFfA35cln05sD6l1wNXpvQVwL0RcSQihoB9wHJJC4F5ETGYym3I1cm3dR9wSUpf\nBvRHxKGIOAQM8MIAZWZmE6zVyecFETGS0iPAgpQ+GziQK3cAOKdC/nDKJz3vB4iIo8BhSWfUaMvM\nzCbRMU8+R0RImtYB6d7e3txSCeialn6YtQNfTGCVlEolSqVSQ2VbDQwjks6KiINpmOjplD8MLMqV\nO5fsk/5wSpfnj9U5D3hS0izgtIgYlTRM8R1+EbC9UmfGAkNfXx8OCmbgb79bua6uLrq6up5fzt4v\nK2t1KGkL0J3S3cD9ufxVkmZLWgx0AoMRcRB4VtLyNBl9HfBAhbauIpvMBugHVkiaL+l04FLgoRb7\nW5Wkmg8zsxNN3TMGSfcC/wJ4qaT9ZFcK3QJsltQDDAFXA0TELkmbgV3AUWB1jJ+7rgbuAeYCD0bE\n1pR/F7BR0l5gFFiV2npG0s3AI6lcX5qEngS+U6qZ2Rgd72OOkp6PPdkn/Opv8pX29fisU7l8O9dp\nZf+nyon+t2nF9P8PtFJnYo+z4307koiIip9+fUsMMzMrcGAwM7MCBwYzMytwYDAzswIHBjMzK/Bt\nt83shOdvixc5MJiZAf62+DgPJZmZWYHPGGxGqXcbkxNxWMCsWQ4MNgP5Fidmx8JDSWZmVuDAYGZm\nBQ4MZmZW4MBgZmYFDgxmZlbgwGBmZgUODGZmVuDAYGZmBW0fGCStlLRb0l5JH5ru/piZzXRtHRgk\nnQz8D2AlsAS4VtLFjbdQamGrzdaZim24DkCp1Gyd5rfhOq28zq1sZyq20d51puZ1bm07bR0YgGXA\nvogYiogjwF8CVzRevdTCJputMxXbcB1wYGjf17mV7UzFNtq7TjsHhna/V9I5wP7c8gFg+TT1xaZY\npRvi9fX1PZ/2DfEmTvlr7dd5chwvr3O7nzG0zytl0yRyj3W5tE08v85TY3JfZ0mFR19fX2G5oTba\nKUqVk/QGoDciVqbltcBzEXFrrkz77oCZWRuLiIqRot0Dwyzg74BLgCeBQeDaiPjetHbMzGwGa+s5\nhog4Kul9wEPAycBdDgpmZpOrrc8YzMxs6rX1GUMrJHUAncCcsbyI+GqN8nOB1cCbyWaBvgbcGRE/\nn4C+/G5uMRj/CbFI/frjGnVPAv49sDgifl/SecBZETF4rP2q0Mfyvh0GHo2Ix6vUeRHw68AFjB9D\nERG/P0F9+npEvEnST3nhzFwAzwD/LSL+Z1m9pRHxaFneOyLiryeiX7k2Xw98mBfu/6tq1GnpNZP0\nauAtpGMzIr5Tp3zTx3OVY+D5dPlxqmwG89yIyF8x2BYkrauQPWHH5omi3a9KaoqkdwN/A2wF+siG\noHrrVNtA9uW5j5N9me4VwMYa29gg6fTccoekT1UpPg84FVgK3ACcTXYJ7nuA19bp1x3AG4F/l5Z/\nmvIq9Wljev5gnTYrWZr6M9a33wF+DfhkjW+aPwBcDhxJ/fop8PdV+vb19PxTST8pezxbqU5EvCk9\nnxoR88oeL0l9vrFC1U9KemVu29cCN1XpV6X+1OxXzmeAu8ne6N+ZHpfXqdPwa5br4weATwNnAguA\nT0uqtN95TR3PSbXj81SyY7iSL9Vps0DS1ZJektIfkfQFSTX/ByTd2khemb9n/PX9R7Jj+YI62/ld\nSefUabe8zqclvVvSRU3UWVIhr6tOnRvz7zcNbme7pH9dlvfnzbRBRMyYB/C3wFzg8bR8EfCFOnV2\nNZKXW/d4I3ll678GzMstzyP79FerzmP555T+TrV9IPun/i7QUf5ooG+n5pZPBb4KvBj4XrXXuQ3+\n1mdXyPtV4Nvp7/7utG+nTcK2v97KsdlCnZ3AKbnlU4Cddeo0dTznjoFmj8/1wLJm9iU9v5nsW1rv\nAB6uU+exau00sd05wN/UKdMLPAH8b+B9wIIG2v2XZNebDgA/AO4DPljvGAA+RHY29mLgT4Edder8\nV2AfsJnsDhBqoG8/SP/D62q9lrUeM+qMAfh5RPwMslP3iNgNvLxOnW9LeuPYQrpE9tEa5ZWGq8YW\nOsgmxmv5FbJPimOOpLxafpluCTK2nTOB56qU/TNgG9m+Plr2+Fad7ZwJ/LKsbwsi4h+AasMP35BU\nddhkKkTEkxXyvg9cC3yB7NP8ZRFxeBI23yfpLknXSvr19Pi3deq0+po9VyVdTbPHM7R2fL4B+Kak\n70vamR7frVH+H9PzO4BPRja8N7tSQUk3SNoJvDzX9k5JQ2QffppxCtlZUFUR0RsRrwDeCywEvipp\nW50628netD8CfBJ4PdlZVy3LgUXAN8musHwK+Od1tvOfgQuBTwG/BeyV9FFJL6tR7RBZ4Fog6YuS\n5tfp1wvMtDmG/em0635gQNKPgaFKBdOBB9lr8HVJ+8nGVs8ju0S2mj8i+4fYTBb5f4PsAKllAzAo\n6fOpzpVkn7hq+VOyN7hfkfRR4Crgv1QqGBEfBz4u6c8i4j112i33GeBhSfenvr0T+KykU8jORJ6X\ne81OBt4l6QfAL8a7UX2MfTLl+jWmg2yY9GFJk9GvbrIgPIvim/Xna9R5C82/ZneT7UP+uKk2bDnm\ndVQ4ntNrVG17rRyfl9VZX244DWdcCtyS5lyqfTD9LNlQ1S2Mf8IG+ElEjNbaSNmxcBJZgGt0fuFp\n4CAwSvaBqdZ2tpEFnW+SnWm8LiKertP+UeBnZKMaLwK+HxF1g31EPCfpIDBCFmBPBz4n6csR8XtV\n6hwFVkv6LbIzwuaGo9JpxoyTxu5eAmyNiF9WWH9BjeoRET+s0fYryCJyANsjYle1srk6SxmfRPxq\nRDzWQJ2Lyb7DAbAtJulS3TSZ+qbUt69HRMWzjDqvGRExNNF9a8RU90vS3wEXRRP/PNX6WK9v6bh5\nfiK53nHT6mvRyvHZjPRBYyXw3YjYK2kh8MqI6J/g7VyQWzwKjER2n7VadVYDV5MFkb8CNtX7n5Z0\nG1kQ/jnwDbK5zW+OjVhUqfMdYAtZoHop8AngFxHxGzXqfAC4nixY/QXZ0PgRZRen7I2IF5w5SPqd\niPhEbnkp8N6I+O1a+1RoY6YGBrPJIulu4L9HxBPT3Rc7dpL+kCwYVLwKr07deWRDPP+J7KrBOTXK\nvj4iHinLuz4iNtSo0wd8qtIHVUlLGvlQ2goHBrMmSdoNvIxskm/ah9Js6kl6P9kZ1lKy4+BrZGd0\n26e1YxNkps0xmE2FldPdAZt2LyKbb/x2vaGq45HPGMzMrGCmXa5qZmbHyIHBzMwKHBjMzKzAgcHM\nzAocGMzMrOD/A5ZV4vqjDJn1AAAAAElFTkSuQmCC\n",
+      "image/png": "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\n",
       "text/plain": [
-       "<matplotlib.figure.Figure at 0x7f420b33ecc0>"
+       "<matplotlib.figure.Figure at 0x7f37f27526a0>"
       ]
      },
      "metadata": {},
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 23,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "['afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefe',\n",
-       " 'ofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsv',\n",
-       " 'sielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiie',\n",
-       " 'rwtanesrvogieiywssdgpvoiaisaoaeoaedrnitrnxeigrpsshadhdto',\n",
-       " 'ipaatexennesagrobtlesrnroirypbgedclliwalaleenigrrnwyrlim',\n",
-       " 'lpstoleftrdmuarieeeiiaolnewsaohrtlstobetnslvfivdovtpoaee',\n",
-       " 'isciohipseveedtewfarnhebleaotohtttepnckaonhwetmvyprreonn',\n",
-       " 'asgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfxs',\n",
-       " 'oaotctbbsoeirnsadlytrrunrceptthreuhnktaceceelrwnireeeaes',\n",
-       " 'eeeidisogceomnrtejhagabsenitlwtrnbmielsaretesrngsnhebios',\n",
-       " 'dienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnypai',\n",
-       " 'dyiegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlev',\n",
-       " 'asadnnthneiteiisahuhhuamonefyhlonwhaeeeeosneeyaneisetogy',\n",
-       " 'iterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseiyclsian',\n",
-       " 'taoltciymidentthltndxtttmasbleaeetlisirtwturpfailteaoefe',\n",
-       " 'isiiiyisikvtwisprbsinelphrmohiagnlslvitodaisdpnyddcaaota',\n",
+       "['afcaeuottacthrioletcserthshtrahkzorpfrgeoadppjnglternefe',\n",
+       " 'ofiortsddoeeumscruernfetlaafstxientrvoonerhuahravereetsv',\n",
+       " 'sielhlostdoalozaesmnndignnrhohhtsnaoilncnssicreanneeiiie',\n",
+       " 'rxtanesrvogieizxssdgpvoiaisaoaeoaedrnitrnyeigrpsshadhdto',\n",
+       " 'ipaateyennesagrobtlesrnroirzpbgedcllixalaleenigrrnxzrlim',\n",
+       " 'lpstoleftrdmuarieeeiiaolnexsaohrtlstobetnslvfivdovtpoaee',\n",
+       " 'isciohipseveedtexfarnhebleaotohtttepnckaonhxetmvzprreonn',\n",
+       " 'asgdedoeeeoaamtcicttifnadresrtserosetrhcictpsaaehldhsfys',\n",
+       " 'oaotctbbsoeirnsadlztrrunrceptthreuhnktaceceelrxnireeeaes',\n",
+       " 'eeeidisogceomnrtejhagabsenitlxtrnbmielsaretesrngsnhebios',\n",
+       " 'dienafleisahocifevmfatanatrniagnhatnmibniufenrtottrnzpai',\n",
+       " 'dziegdnmerhhiotretcesseildrbceprigaesoadltahievebrcenlev',\n",
+       " 'asadnnthneiteiisahuhhuamonefzhlonxhaeeeeosneezaneisetogz',\n",
+       " 'iterlihtcmioirarfdoetnihtnehiikamrdmnadanaodseseizclsian',\n",
+       " 'taoltcizmidentthltndytttmasbleaeetlisirtxturpfailteaoefe',\n",
+       " 'isiiizisikvtxisprbsinelphrmohiagnlslvitodaisdpnzddcaaota',\n",
        " 'hcehtueirredaectosnrhvnaodoikoetcineneurrisdcouraglvimmu',\n",
        " 'ppditeanditmaaiaieleonnreedaodboiumelrotntttgitnrlrienni',\n",
-       " 'klysogstcifypipvidvssmnceiasiitsnneatitomrhbnhnidprlrepo',\n",
-       " 'ynalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghyn',\n",
-       " 'weintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaoyaa',\n",
-       " 'noeeldoinhusgiteaoriecevemntratmtfpeucutahamtnewonicdeem',\n",
-       " 'rpaolitoafesoosspfnlneeootachllirssxsofpdftfrnpraeeaylon',\n",
-       " 'ahautntcntcbawloneftoatecvowdlwvnneedtiioigtegmtaheeatef',\n",
-       " 'aaeprrcrosheerrpalediengidrreouhvesuroytnsosinuiuiofprda']"
+       " 'klzsogstcifzpipvidvssmnceiasiitsnneatitomrhbnhnidprlrepo',\n",
+       " 'znalsnvsdosanesitfaenltgodatteeaisicrootmsmfhauenirsghzn',\n",
+       " 'xeintegodiileedtarnosrcaaendtcuttfdrbehtmfitoordruiaozaa',\n",
+       " 'noeeldoinhusgiteaoriecevemntratmtfpeucutahamtnexonicdeem',\n",
+       " 'rpaolitoafesoosspfnlneeootachllirssysofpdftfrnpraeeazlon',\n",
+       " 'ahautntcntcbaxloneftoatecvoxdlxvnneedtiioigtegmtaheeatef',\n",
+       " 'aaeprrcrosheerrpalediengidrreouhvesuroztnsosinuiuiofprda']"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 24,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 'aaep.....shee..pa.e..e......e..h.es......s.s........p..a']"
       ]
      },
-     "execution_count": 19,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 25,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "['aosriliaoeddaitihpkywnraa',\n",
-       " 'ffiwppssaeiystascplneopha',\n",
-       " 'cietascgoeeiaeoiedyaieaae',\n",
+       "['aosriliaoeddaitihpkzxnraa',\n",
+       " 'ffixppssaeizstascplneopha',\n",
+       " 'cietascgoeeiaeoiedzaieaae',\n",
        " 'aolaatidtinedrlihislneoup',\n",
        " 'erhntooecdagnltittostlltr',\n",
-       " 'utleelhdtifdnicyuegnedinr',\n",
-       " 'ososxeiobslnthiieasvgottc',\n",
-       " 'tdsrefpeboemhtysintsoiocr',\n",
+       " 'utleelhdtifdniczuegnedinr',\n",
+       " 'ososyeiobslnthiieasvgottc',\n",
+       " 'tdsrefpeboemhtzsintsoiocr',\n",
        " 'tdtvntsesgiencmirdcddnano',\n",
        " 'aodonreeocsremikriioihfts',\n",
        " 'ceogedvoeeahiidvetfsiuech',\n",
-       " 'teaismeaiohhtoetdmyalssbe',\n",
-       " 'huleauearmoieinwaapnegoae',\n",
-       " 'rmoigadmnncoirtieaieeiowr',\n",
-       " 'isyyrrttsritiatscipsdtslr',\n",
-       " 'ocawoiecatfrsrhptavitesop',\n",
-       " 'lresbewideeeaflroiitaapna',\n",
+       " 'teaismeaiohhtoetdmzalssbe',\n",
+       " 'huleauearmoieinxaapnegoae',\n",
+       " 'rmoigadmnncoirtieaieeioxr',\n",
+       " 'iszzrrttsritiatscipsdtslr',\n",
+       " 'ocaxoiecatfrsrhptavitesop',\n",
+       " 'lresbexideeeaflroiitaapna',\n",
        " 'eusstefcljvthdtbsedfrofel',\n",
-       " 'temdleatyhmcuonsnlvanrnfe',\n",
+       " 'temdleatzhmcuonsnlvanrnfe',\n",
        " 'crngeirttafehedireseoiltd',\n",
-       " 'snnpsinirgashtxnhosnsenoi',\n",
+       " 'snnpsinirgashtynhosnsenoi',\n",
        " 'efdvrahfratsuntevnmlrceae',\n",
        " 'reionoenubaeaitlnnntceetn',\n",
        " 'ttgirlbansnimhtparcgavoeg',\n",
        " 'hlnaonldrealotmhoeeoaeoci',\n",
        " 'saniieercntdnnardeidemtvd',\n",
-       " 'harsrwaeeirreesmodaannaor',\n",
-       " 'tfhaysosptnbfhboiastdtcwr',\n",
-       " 'rsoopatrtlicyilhkoittrhde',\n",
-       " 'athaboottwaehieiodiecallo',\n",
-       " 'hwheghhshtgplkaaebteutlwu',\n",
+       " 'harsrxaeeirreesmodaannaor',\n",
+       " 'tfhazsosptnbfhboiastdtcxr',\n",
+       " 'rsoopatrtliczilhkoittrhde',\n",
+       " 'athaboottxaehieiodiecallo',\n",
+       " 'hxheghhshtgplkaaebteutlxu',\n",
        " 'kitoerterrnroaegtosatmivh',\n",
-       " 'yesadttrenhinmencinittrnv',\n",
-       " 'onnecltoubagwrtliunsffsne',\n",
+       " 'zesadttrenhinmencinittrnv',\n",
+       " 'onnecltoubagxrtliunsffsne',\n",
        " 'rtadlseshmtahdlsnmeidpses',\n",
-       " 'prorltpenineamileeacrexeu',\n",
+       " 'prorltpenineamileeacreyeu',\n",
        " 'fviniontkemsensvnltrbusdr',\n",
-       " 'roliwbcrtlioeaiierioecoto',\n",
-       " 'gontaekhasbaedrtuotohufiy',\n",
+       " 'rolixbcrtlioeaiierioecoto',\n",
+       " 'gontaekhasbaedrtuotohufiz',\n",
        " 'encrltaccandeatortotttpit',\n",
-       " 'oennanoierilonwdrnmmmadon',\n",
-       " 'arsxlsncceutsataitrsfhfis',\n",
+       " 'oennanoierilonxdrnmmmadon',\n",
+       " 'arsylsncceutsataitrsfhfis',\n",
        " 'dhseelhtetfanouisthmiatgo',\n",
-       " 'puiievwpeeehedrsdtbftmfts',\n",
+       " 'puiievxpeeehedrsdtbftmfts',\n",
        " 'pacgnfeslsniespdcgnhotrei',\n",
-       " 'jhrriitarrreyefpoihaonngn',\n",
-       " 'nrepgvmawntvasanutnurepmu',\n",
-       " 'gaasrdvengoeneiyrniedwrti',\n",
-       " 'lvnsroyhistbeildardnroaau',\n",
-       " 'tenhnvplrntriytdglpiunehi',\n",
-       " 'ereawtrdehrcsceclrrriieeo',\n",
-       " 'reedyprheeneelaavilsacaef',\n",
-       " 'neihroesebyntsoaiergodyap',\n",
-       " 'etidlaofaiploieomnehyeltr',\n",
-       " 'fsitienxeoaegaftmnpyaeoed',\n",
-       " 'eveomensssivyneauionamnfa']"
+       " 'jhrriitarrrezefpoihaonngn',\n",
+       " 'nrepgvmaxntvasanutnurepmu',\n",
+       " 'gaasrdvengoeneizrniedxrti',\n",
+       " 'lvnsrozhistbeildardnroaau',\n",
+       " 'tenhnvplrntriztdglpiunehi',\n",
+       " 'ereaxtrdehrcsceclrrriieeo',\n",
+       " 'reedzprheeneelaavilsacaef',\n",
+       " 'neihroesebzntsoaiergodzap',\n",
+       " 'etidlaofaiploieomnehzeltr',\n",
+       " 'fsitienyeoaegaftmnpzaeoed',\n",
+       " 'eveomensssivzneauionamnfa']"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 26,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "  (24, 32)]}"
       ]
      },
-     "execution_count": 21,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 27,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 24: 'b'}"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 28,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def valid_partial_solution(solution, inverse_keycolumn):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 29,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "43005"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 30,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "True"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 31,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 'aed',\n",
        " 'mir',\n",
        " 'inl',\n",
-       " 'lwi',\n",
+       " 'lxi',\n",
        " 'eah',\n",
        " 'eai',\n",
        " 'aps',\n",
        " 'cnl',\n",
        " 'ren',\n",
        " 'ege',\n",
-       " 'xoo',\n",
+       " 'yoo',\n",
        " 'eau',\n",
        " 'uep']"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 31,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 32,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def display_solution(solution, columns):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 33,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 'aea',\n",
        " 'mii',\n",
        " 'int',\n",
-       " 'lwi',\n",
+       " 'lxi',\n",
        " 'eah',\n",
        " 'eap',\n",
        " 'apk',\n",
-       " 'cny',\n",
-       " 'rew',\n",
+       " 'cnz',\n",
+       " 'rex',\n",
        " 'egn',\n",
-       " 'xor',\n",
+       " 'yor',\n",
        " 'eaa',\n",
        " 'uea']"
       ]
      },
-     "execution_count": 28,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 34,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "-109.09171451522874"
+       "-110.74748837196742"
       ]
      },
-     "execution_count": 29,
+     "execution_count": 34,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 35,
+   "metadata": {},
    "outputs": [],
    "source": [
     "def score_solution(solution, columns):\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 36,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "   'aea',\n",
        "   'mii',\n",
        "   'int',\n",
-       "   'lwi',\n",
+       "   'lxi',\n",
        "   'eah',\n",
        "   'eap',\n",
        "   'apk',\n",
-       "   'cny',\n",
-       "   'rew',\n",
+       "   'cnz',\n",
+       "   'rex',\n",
        "   'egn',\n",
-       "   'xor',\n",
+       "   'yor',\n",
        "   'eaa',\n",
        "   'uea'],\n",
-       "  -112.23213925765266),\n",
+       "  -114.13063154833905),\n",
        " ([(0, 35), (0, 12), (0, 3)],\n",
        "  ['pha',\n",
        "   'ruo',\n",
        "   'aed',\n",
        "   'mir',\n",
        "   'inl',\n",
-       "   'lwi',\n",
+       "   'lxi',\n",
        "   'eah',\n",
        "   'eai',\n",
        "   'aps',\n",
        "   'cnl',\n",
        "   'ren',\n",
        "   'ege',\n",
-       "   'xoo',\n",
+       "   'yoo',\n",
        "   'eau',\n",
        "   'uep'],\n",
-       "  -109.09171451522874),\n",
+       "  -110.74748837196742),\n",
        " ([(0, 35), (0, 12), (0, 9)],\n",
        "  ['pha',\n",
        "   'ruo',\n",
        "   'aee',\n",
        "   'mim',\n",
        "   'ini',\n",
-       "   'lwk',\n",
+       "   'lxk',\n",
        "   'ear',\n",
        "   'eai',\n",
        "   'api',\n",
        "   'cno',\n",
        "   'rei',\n",
        "   'egh',\n",
-       "   'xof',\n",
+       "   'yof',\n",
        "   'eat',\n",
        "   'ues'],\n",
-       "  -105.51902198106185),\n",
+       "  -104.78169431178242),\n",
        " ([(0, 35), (0, 12), (0, 29)],\n",
        "  ['pha',\n",
        "   'rut',\n",
        "   'peo',\n",
        "   'eat',\n",
        "   'nrt',\n",
-       "   'imw',\n",
+       "   'imx',\n",
        "   'noa',\n",
        "   'eie',\n",
        "   'aeh',\n",
        "   'mii',\n",
        "   'ine',\n",
-       "   'lwi',\n",
+       "   'lxi',\n",
        "   'eao',\n",
        "   'ead',\n",
        "   'api',\n",
        "   'cne',\n",
        "   'rec',\n",
        "   'ega',\n",
-       "   'xol',\n",
+       "   'yol',\n",
        "   'eal',\n",
        "   'ueo'],\n",
-       "  -106.91642615054437),\n",
+       "  -109.4716997212109),\n",
        " ([(0, 35), (0, 12), (0, 41)],\n",
        "  ['pha',\n",
        "   'rur',\n",
        "   'ols',\n",
-       "   'rex',\n",
+       "   'rey',\n",
        "   'lal',\n",
        "   'tus',\n",
        "   'pen',\n",
        "   'aes',\n",
        "   'mia',\n",
        "   'int',\n",
-       "   'lwa',\n",
+       "   'lxa',\n",
        "   'eai',\n",
        "   'eat',\n",
        "   'apr',\n",
        "   'cns',\n",
        "   'ref',\n",
        "   'egh',\n",
-       "   'xof',\n",
+       "   'yof',\n",
        "   'eai',\n",
        "   'ues'],\n",
-       "  -100.92420426683796),\n",
+       "  -101.93339111217242),\n",
        " ([(0, 35), (0, 12), (1, 44)],\n",
        "  ['pha',\n",
        "   'ruc',\n",
        "   'aes',\n",
        "   'mip',\n",
        "   'ind',\n",
-       "   'lwc',\n",
+       "   'lxc',\n",
        "   'eag',\n",
        "   'ean',\n",
        "   'aph',\n",
        "   'cno',\n",
        "   'ret',\n",
        "   'egr',\n",
-       "   'xoe',\n",
+       "   'yoe',\n",
        "   'eai',\n",
        "   'uep'],\n",
-       "  -108.53207489276411),\n",
+       "  -108.4937247934099),\n",
        " ([(0, 35), (0, 12), (1, 47)],\n",
        "  ['pha',\n",
        "   'rua',\n",
        "   'ein',\n",
        "   'aee',\n",
        "   'mii',\n",
-       "   'iny',\n",
-       "   'lwr',\n",
+       "   'inz',\n",
+       "   'lxr',\n",
        "   'ean',\n",
        "   'eai',\n",
        "   'ape',\n",
        "   'cnd',\n",
-       "   'rew',\n",
+       "   'rex',\n",
        "   'egr',\n",
-       "   'xot',\n",
+       "   'yot',\n",
        "   'eai',\n",
        "   'ueg'],\n",
-       "  -109.50900823047225),\n",
+       "  -111.05157201209927),\n",
        " ([(0, 35), (0, 12), (2, 47)],\n",
        "  ['pha',\n",
        "   'rus',\n",
        "   'non',\n",
        "   'eie',\n",
        "   'aei',\n",
-       "   'miy',\n",
+       "   'miz',\n",
        "   'inr',\n",
-       "   'lwn',\n",
+       "   'lxn',\n",
        "   'eai',\n",
        "   'eae',\n",
        "   'apd',\n",
-       "   'cnw',\n",
+       "   'cnx',\n",
        "   'rer',\n",
        "   'egt',\n",
-       "   'xoi',\n",
+       "   'yoi',\n",
        "   'eag',\n",
        "   'uea'],\n",
-       "  -114.40196859359595),\n",
+       "  -113.41085773377256),\n",
        " ([(0, 35), (0, 12), (3, 50)],\n",
        "  ['pha',\n",
-       "   'ruw',\n",
+       "   'rux',\n",
        "   'olt',\n",
        "   'rer',\n",
        "   'lad',\n",
        "   'aec',\n",
        "   'mil',\n",
        "   'inr',\n",
-       "   'lwr',\n",
+       "   'lxr',\n",
        "   'ear',\n",
        "   'eai',\n",
        "   'api',\n",
        "   'cne',\n",
        "   'ree',\n",
        "   'ego',\n",
-       "   'xoe',\n",
+       "   'yoe',\n",
        "   'ear',\n",
        "   'uee'],\n",
-       "  -106.68850150792129),\n",
+       "  -107.5080042911796),\n",
        " ([(0, 35), (0, 12), (4, 38)],\n",
        "  ['pha',\n",
        "   'rue',\n",
        "   'aeu',\n",
        "   'mio',\n",
        "   'int',\n",
-       "   'lwo',\n",
+       "   'lxo',\n",
        "   'eah',\n",
        "   'eau',\n",
        "   'apf',\n",
        "   'cni',\n",
-       "   'rey',\n",
+       "   'rez',\n",
        "   'egg',\n",
-       "   'xoo',\n",
+       "   'yoo',\n",
        "   'ean',\n",
        "   'uet'],\n",
-       "  -108.49770543928673)]"
+       "  -111.19702574254387)]"
       ]
      },
-     "execution_count": 31,
+     "execution_count": 36,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 37,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[[(0, 35), (0, 12), (0, 41)],\n",
        " [(0, 35), (0, 12), (0, 9)],\n",
        " [(0, 35), (0, 12), (3, 50)],\n",
-       " [(0, 35), (0, 12), (0, 29)],\n",
-       " [(0, 35), (0, 12), (4, 38)],\n",
        " [(0, 35), (0, 12), (1, 44)],\n",
+       " [(0, 35), (0, 12), (0, 29)],\n",
        " [(0, 35), (0, 12), (0, 3)],\n",
        " [(0, 35), (0, 12), (1, 47)],\n",
-       " [(0, 35), (0, 12), (0, 0)],\n",
-       " [(0, 35), (0, 12), (2, 47)]]"
+       " [(0, 35), (0, 12), (4, 38)],\n",
+       " [(0, 35), (0, 12), (2, 47)],\n",
+       " [(0, 35), (0, 12), (0, 0)]]"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 37,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 38,
+   "metadata": {},
    "outputs": [],
    "source": [
     "solutions = sorted(solutions, key=lambda s: score_solution(s, columns), reverse=True)[:10000]"
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "10000"
-      ]
-     },
-     "execution_count": 34,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "for letter in 'seseven': #'haseeight':\n",
-    "    new_solutions = []\n",
-    "    for solution in solutions:\n",
-    "        used_columns = [p[1] for p in solution]\n",
-    "        for position in letter_positions[letter]:\n",
-    "            if position[1] not in used_columns:\n",
-    "                if valid_partial_solution(solution + [position], inverse_keycolumn):\n",
-    "                    new_solutions += [solution + [position]]\n",
-    "    solutions = sorted(new_solutions, key=lambda s: score_solution(s, columns), reverse=True)[:10000]\n",
-    "len(solutions)"
+    "for letter in 'seseven': #'haseeight':\n",
+    "    new_solutions = []\n",
+    "    for solution in solutions:\n",
+    "        used_columns = [p[1] for p in solution]\n",
+    "        for position in letter_positions[letter]:\n",
+    "            if position[1] not in used_columns:\n",
+    "                if valid_partial_solution(solution + [position], inverse_keycolumn):\n",
+    "                    new_solutions += [solution + [position]]\n",
+    "    solutions = sorted(new_solutions, key=lambda s: score_solution(s, columns), reverse=True)[:10000]\n",
+    "len(solutions)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 40,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "['phaseseven',\n",
-       " 'ninmelcalh',\n",
-       " 'andodrinho',\n",
-       " 'lmedyierts',\n",
-       " 'reaapstnen',\n",
-       " 'entaryafts',\n",
-       " 'sconhysefe',\n",
-       " 'birnerctan',\n",
-       " 'entaergeno',\n",
-       " 'wioontomoi',\n",
-       " 'ittretedus',\n",
-       " 'dttheselin',\n",
-       " 'ertalriesn',\n",
-       " 'enpraiaatp',\n",
-       " 'evisateths',\n",
-       " 'aytrvioymi',\n",
-       " 'feewiaihin',\n",
-       " 'lsnaltemai',\n",
-       " 'racessdctr',\n",
-       " 'odreacyugg',\n",
-       " 'itliciaooa',\n",
-       " 'ittrapinds',\n",
-       " 'trareseshh',\n",
-       " 'aecefdanst',\n",
-       " 'ancertalex']"
+       "['pha',\n",
+       " 'reo',\n",
+       " 'oel',\n",
+       " 'rna',\n",
+       " 'lea',\n",
+       " 'tet',\n",
+       " 'pli',\n",
+       " 'ead',\n",
+       " 'nat',\n",
+       " 'ivi',\n",
+       " 'nin',\n",
+       " 'ele',\n",
+       " 'asd',\n",
+       " 'mar',\n",
+       " 'icl',\n",
+       " 'lai',\n",
+       " 'eeh',\n",
+       " 'efi',\n",
+       " 'ars',\n",
+       " 'cel',\n",
+       " 'ren',\n",
+       " 'ede',\n",
+       " 'yzo',\n",
+       " 'epu',\n",
+       " 'urp']"
       ]
      },
-     "execution_count": 35,
+     "execution_count": 40,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 41,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "849"
       ]
      },
-     "execution_count": 36,
+     "execution_count": 41,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 42,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 'fainted']"
       ]
      },
-     "execution_count": 37,
+     "execution_count": 42,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 43,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "175"
       ]
      },
-     "execution_count": 38,
+     "execution_count": 43,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 44,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        " 'raaorejpftneanrpihes',\n",
        " 'ghrrlanjratnthnpfhri',\n",
        " 'gharnarjreaetvnpnfai',\n",
-       " 'frtroenppwthsredoheo',\n",
+       " 'frtroenppxthsredoheo',\n",
        " 'frahoepppeaearednsus',\n",
        " 'raeaoalpfnsntirprlhi',\n",
        " 'raaiahnpfmotarrpnhis',\n",
        " 'rrlatajpenfisnrerpen',\n",
        " 'rooaeaepenfntaruhpri',\n",
        " 'fiairnhpomopraernhdn',\n",
-       " 'pfomrteddsnnwstcnsno',\n",
+       " 'pfomrteddsnnxstcnsno',\n",
        " 'rrninalpeheofnrearep',\n",
        " 'fonrraeperipmseunodn',\n",
        " 'fonrnrhperirpaeunotd',\n",
        " 'gaanehrjnthrraneiaep',\n",
        " 'raannalpethofnrniaep',\n",
        " 'eaahtktnntaogheeisrj',\n",
-       " 'ftaaormpwtshnneoinen',\n",
-       " 'ftashanpwtnemreoieln',\n",
-       " 'ftashnapwtnenmeoiela',\n",
+       " 'ftaaormpxtshnneoinen',\n",
+       " 'ftashanpxtnemreoieln',\n",
+       " 'ftashnapxtnenmeoiela',\n",
        " 'faasoeppetnearenieus',\n",
        " 'faaeoeppetsearenious',\n",
        " 'farnorppepeevrendauv',\n",
        " 'gaviehrjnvearaneorep',\n",
        " 'raaoorapesneatrnlhuf',\n",
        " 'flaoinrpisnorpeolhrt',\n",
-       " 'ptrlfondwtndhhtohrce',\n",
-       " 'pthafnhdwemdratolncn',\n",
-       " 'ftrhnaipwtartoeohsni',\n",
+       " 'ptrlfondxtndhhtohrce',\n",
+       " 'pthafnhdxemdratolncn',\n",
+       " 'ftrhnaipxtartoeohsni',\n",
        " 'rlaaniapissrefrolntr',\n",
        " 'rlralaepitsnfrrohnrp',\n",
        " 'rlraraepitsnfrrohnnp',\n",
-       " 'fthsranpwenpmreoledn',\n",
-       " 'fthnraepweapmseolidn',\n",
+       " 'fthsranpxenpmreoledn',\n",
+       " 'fthnraepxeapmseolidn',\n",
        " 'plasinpdisnoretolert',\n",
        " 'rlnaniepinfresroaptr',\n",
        " 'faauirlpeslopnennird',\n",
        " 'raaeuaepesalfrrnnsip',\n",
-       " 'flnnrrepinrtpseoatwd',\n",
+       " 'flnnrrepinrtpseoatxd',\n",
        " 'faaeuirpesalopennsir',\n",
-       " 'ptnocemdwnhesntoaeto',\n",
+       " 'ptnocemdxnhesntoaeto',\n",
        " 'raannaepesrofrrnnnep',\n",
        " 'flanrrapisripmeonnod',\n",
-       " 'ftamrropwsnnpseonsnd',\n",
+       " 'ftamrropxsnnpseonsnd',\n",
        " 'plarinpdisnoretonnrt',\n",
        " 'plnninpdineoretoasrt',\n",
        " 'pleinpndisorertoortf',\n",
-       " 'ftehnrapwseapmeoolid',\n",
+       " 'ftehnrapxseapmeoolid',\n",
        " 'fvaaoeppvteeareoinus',\n",
        " 'raaeoaopstnefnrlirup',\n",
        " 'fvaeoeppvtneareoirus',\n",
        " 'frlprlnptirpnhehoidr',\n",
        " 'rvarajapvnetnfroeeio',\n",
        " 'raaoahapseetafrlnuis',\n",
-       " 'frwrohnptopharehades',\n",
+       " 'frxrohnptopharehades',\n",
        " 'rroeanhpthrfrarheppn',\n",
        " 'ranelanpsrrifhrltpop',\n",
        " 'rroeaanpthrsfrrhepnp',\n",
        " 'fhaprhnpemrparelnids',\n",
        " 'frlposrptnrenpehriue',\n",
        " 'paouinpdsnloretlhirt',\n",
-       " 'frliatnptnotwhehrhio',\n",
-       " 'frlwaohptnothaehraie',\n",
+       " 'frliatnptnotxhehrhio',\n",
+       " 'frlxaohptnothaehraie',\n",
        " 'rrliahaptnotafrhrhis',\n",
-       " 'fhawahnpemotarelnais',\n",
+       " 'fhaxahnpemotarelnais',\n",
        " 'raoeooapsnnertrlhrua',\n",
        " 'paoiinpdsnooretlhhrt',\n",
-       " 'frliataptnoswtehrhno',\n",
+       " 'frliataptnosxtehrhno',\n",
        " 'rrlnauaptnhtlfrhraii',\n",
        " 'fhahirnpemaoprelnsrd',\n",
        " 'fharaorpemnsapelnnne',\n",
        " 'fhasrorpemnpanelnede',\n",
-       " 'fhatrmrpeswpnnelnods',\n",
+       " 'fhatrmrpesxpnnelnods',\n",
        " 'paalinpdssioretlnort',\n",
        " 'rraoealptshrfnrhnepp',\n",
        " 'fhnoeaepenarmselaepn',\n",
        " 'goaeehrjntaaranhisep',\n",
        " 'roaeuaapntalferhisip',\n",
        " 'roaeeoapntaaefrhiseu',\n",
-       " 'flanrlepntrtiseritwo',\n",
+       " 'flanrlepntrtiseritxo',\n",
        " 'rlanhoopntraerrritsu',\n",
        " 'faaapnrpmtsroneninie',\n",
        " 'flaeonppntserreriout',\n",
        " 'glhrranjnreathnrpefi',\n",
        " 'flrrpnhpnperoaerdeie',\n",
-       " 'flrwrohpnpothaerdahe',\n",
+       " 'flrxrohpnpothaerdahe',\n",
        " 'rlaninnpnfreohrrptre',\n",
        " 'forosimpspaoenenderu',\n",
        " 'farnrlepmpriisendnoo',\n",
        " 'foapianpnsrotrehlihi',\n",
        " 'foapirnpnsroprehlihd',\n",
        " 'flrliinpntioeherhorr',\n",
-       " 'flrohatpnthatwerhesi',\n",
+       " 'flrohatpnthatxerhesi',\n",
        " 'rlrohaepnthafrrrhesp',\n",
        " 'rahnhaepmerafrrnlnsp',\n",
        " 'rlrhnaepntaofrrrhsep',\n",
        " 'faieoeppseaearenreus',\n",
        " 'faraoeppspeearendnus',\n",
        " 'falaninpsitrorenoitr',\n",
-       " 'fatnrirpswrtopenonhh',\n",
+       " 'fatnrirpsxrtopenonhh',\n",
        " 'paerhomdstneantnvnle',\n",
        " 'gantahrjseierannaenp',\n",
        " 'raetlalpsniifnrnreop',\n",
        " 'fanuirlpsrlopnentird',\n",
        " 'faatonrpsmierienneun',\n",
        " 'pallinpdsnioretnrort',\n",
-       " 'paltropdsnwthetnrohe',\n",
+       " 'paltropdsnxthetnrohe',\n",
        " 'galnaohjsnrtrrnnrtia',\n",
        " 'paaoinedsmhorftnnern',\n",
        " 'fnonisrpnssonpeancre',\n",
        " 'failthoptonheneirral',\n",
        " 'faionoiptosarneirnis',\n",
        " 'faorrasptenilceiunoe',\n",
-       " 'fatlvnnptwivnseioooa',\n",
+       " 'fatlvnnptxivnseioooa',\n",
        " 'gaaavlajtenvcfnineoe',\n",
        " 'ralnahnptirfasrionps',\n",
        " 'falmireptinonseiosrn',\n",
        " 'raoeluvptnnihurihroc',\n",
        " 'galavlajtnmvcfnirnoe',\n",
        " 'raahnanptmaofrrinsep',\n",
-       " 'ganorctjthrehwniaaeo',\n",
+       " 'ganorctjthrehxniaaeo',\n",
        " 'fanroanpthiesreiaoul',\n",
        " 'ganhhnajtrarrfninspt',\n",
-       " 'ranhaoyptrafherinspe',\n",
-       " 'fahattmptacwuneiseor',\n",
+       " 'ranhaozptrafherinspe',\n",
+       " 'fahattmptacxuneiseor',\n",
        " 'gahehfhjtarrtonisepo',\n",
        " 'gahehlajtarrnfnisepr',\n",
        " 'fanlnifptnisoteiaocr',\n",
        " 'faamriaptsnnoceinsnr',\n",
        " 'raalnripftnhtorpirah',\n",
        " 'ghanrtajrtheonnpiaer',\n",
-       " 'raahnylpftaoenrpisen',\n",
-       " 'raarnyopftnoenrpinen',\n",
+       " 'raahnzlpftaoenrpisen',\n",
+       " 'raarnzopftnoenrpinen',\n",
        " 'gharaaajrtnsmfnpinnn',\n",
-       " 'raaraoypftnsserpinnn',\n",
+       " 'raaraozpftnsserpinnn',\n",
        " 'ghtanaojromntnnprnai',\n",
-       " 'ghrosefjraoyttnpfgdt',\n",
+       " 'ghrosefjraozttnpfgdt',\n",
        " 'ghrraocjraamdhnpflns',\n",
-       " 'oykrtcsgegaiatfnjfel',\n",
+       " 'ozkrtcsgegaiatfnjfel',\n",
        " 'ekhrtulngraiheejpfec',\n",
-       " 'rarstolpfpyuherpdere',\n",
-       " 'fryltolppeiuaeednore',\n",
-       " 'ghaatoojrnfsdrnpepys',\n",
+       " 'rarstolpfpzuherpdere',\n",
+       " 'frzltolppeiuaeednore',\n",
+       " 'ghaatoojrnfsdrnpepzs',\n",
        " 'gharooojrnerdrnpeeas',\n",
        " 'raaoithpfeeeuarpnurr',\n",
        " 'raafontpfesrturpnrsn',\n",
        " 'frlanirppisroaedoltr',\n",
        " 'friintnppooruhedhrtr',\n",
        " 'raeirolpfaeeherpsree',\n",
-       " 'frawkrrppmogvnednajv',\n",
+       " 'fraxkrrppmogvnednajv',\n",
        " 'ghonavhjrnrtuonphtir',\n",
        " 'frloiroppnnaeaedrhae',\n",
        " 'raankrspfmaghtrpnije',\n",
        " 'frosanappsnenmedneea',\n",
        " 'rahrinopfaeeoorpsere',\n",
-       " 'frsyoteppnesugedennr',\n",
+       " 'frszoteppnesugedennr',\n",
        " 'raeniaepfsrotarpothi',\n",
        " 'granoahjethrsrneiaal',\n",
        " 'fiihrhepoeaeeaerrsel',\n",
-       " 'roeseooperytonrupevg',\n",
+       " 'roeseooperztonrupevg',\n",
        " 'roeaathperfeuaruppnr',\n",
        " 'grtaooujehsrdhnernas',\n",
        " 'roaaeoopeferonrupnpg',\n",
        " 'rraaesopefnrmhrepepn',\n",
        " 'rraeesspefarmnrepspn',\n",
-       " 'roaliyfpefneetruprrn',\n",
+       " 'roalizfpefneetruprrn',\n",
        " 'roaaionpefmeohrupnrg',\n",
        " 'fopalrrpersneheuinre',\n",
        " 'frainsopeneomaeeeren',\n",
        " 'roaaranpeefvterunpvi',\n",
-       " 'filanvspoieevyeronao',\n",
+       " 'filanvspoieevzeronao',\n",
        " 'fileoonpoindoherorsg',\n",
        " 'roatsecpenrrteruevht',\n",
        " 'roahalrpeeafnprunspr',\n",
        " 'roeaasapeatemirusinn',\n",
        " 'finaltnportiuhertior',\n",
        " 'finalthportiuaertior',\n",
-       " 'roeaaswpeatemfrusinn',\n",
+       " 'roeaasxpeatemfrusinn',\n",
        " 'etravehnuvtuhrervirk',\n",
        " 'greavlrjeatutanesirh',\n",
        " 'rrejaorpeanfnpresoph',\n",
        " 'rooataepenfisnruhpel',\n",
        " 'fiargfipompjteerndnr',\n",
        " 'fiargvapompjvierndno',\n",
-       " 'rolahsepenfaytrurpsd',\n",
+       " 'rolahsepenfaztrurpsd',\n",
        " 'rolasaapenfnterurpei',\n",
        " 'rolasrhpenfnterurpeh',\n",
        " 'filrsroponpntserrdeh',\n",
        " 'faahgtepetajugenisnr',\n",
        " 'gaahehfjntarrtneisep',\n",
        " 'rlahnanpitarfrroistp',\n",
-       " 'rlahiyepitahearoisin',\n",
-       " 'rlahiylpitahenroisin',\n",
-       " 'rlariyopitnhenroinin',\n",
+       " 'rlahizepitahearoisin',\n",
+       " 'rlahizlpitahenroisin',\n",
+       " 'rlarizopitnhenroinin',\n",
        " 'faahntopetatuaenisnr',\n",
-       " 'ftahnrspwtattleoisnh',\n",
+       " 'ftahnrspxtattleoisnh',\n",
        " 'rlarsetpitnntaroinet',\n",
        " 'flaarimpitsnoneoinnr',\n",
        " 'gaannhajeterrfnnisnp',\n",
-       " 'raartsopnfpsmhrepdyn',\n",
+       " 'raartsopnfpsmhrepdzn',\n",
        " 'farrntopepatuaendlnr',\n",
        " 'farnonrpepeehiendaua',\n",
        " 'farnroopephieoendaou',\n",
        " 'plavervdisoeeutolode',\n",
        " 'rlaoanipisnfrerolhpt',\n",
        " 'flrliefpitnorteohrrp',\n",
-       " 'pthafnhdwemdratolncn',\n",
+       " 'pthafnhdxemdratolncn',\n",
        " 'planervdishgeutolahe',\n",
-       " 'ftrhnaipwtartoeohsni',\n",
+       " 'ftrhnaipxtartoeohsni',\n",
        " 'rlrsalrpitnfnprohepr',\n",
        " 'faatctopesieuaennehr',\n",
-       " 'ftnronfpwnphsteoadec',\n",
+       " 'ftnronfpxnphsteoadec',\n",
        " 'flnierhpinoreaeoarpe',\n",
        " 'paaeuivdesaloutnnsir',\n",
        " 'raalofrpesnsdprnnrnc',\n",
        " 'flaadoopismedoeonngs',\n",
        " 'flamrrnpisnipreonsod',\n",
-       " 'ftamrropwsnnpseonsnd',\n",
-       " 'ftardkapwsnogmeonnoj',\n",
-       " 'ftnndkopwnsogneoacoj',\n",
+       " 'ftamrropxsnnpseonsnd',\n",
+       " 'ftardkapxsnogmeonnoj',\n",
+       " 'ftnndkopxnsogneoacoj',\n",
        " 'rletaropishtiorooait',\n",
        " 'flemrropisnipoeoosod',\n",
        " 'grianeajtesrgfnhrnnh',\n",
        " 'prpraordteissvthfoln',\n",
        " 'prinhovdtoraeuthrnsu',\n",
        " 'rrlranoptiatarrhofii',\n",
-       " 'palrnrvdsithtutlowah',\n",
+       " 'palrnrvdsithtutloxah',\n",
        " 'raianhrpsofraprlhpts',\n",
        " 'rrorarrpthatvnrhefiv',\n",
        " 'fveeaoopvareeaeospnu',\n",
        " 'ranhaovpsrateurltsiu',\n",
-       " 'fhafyoipeeseneelernh',\n",
+       " 'fhafzoipeeseneelernh',\n",
        " 'rrhfaiuptetiehrhlrhr',\n",
        " 'rrvdapoptvoceorhooef',\n",
        " 'prvgovgdtvheuftholur',\n",
        " 'gaoherfjsnrrptnlhped',\n",
        " 'frlrlhlptnpireehrdop',\n",
        " 'raoaahepsnfeehrlhpns',\n",
-       " 'fharwanpemposhelndal',\n",
+       " 'fharxanpemposhelndal',\n",
        " 'raoanaipsnfrtorlhpti',\n",
        " 'rhaanhrpemfraprlnpns',\n",
        " 'faormropespnnneendsn',\n",
        " 'fharshepempnraelndep',\n",
        " 'fhaphsrpemdrmnelntpn',\n",
        " 'fhaproipemrpneelnidh',\n",
-       " 'prlrlfadtntidlthrwoc',\n",
-       " 'frliatfptnotwtehrhio',\n",
+       " 'prlrlfadtntidlthrxoc',\n",
+       " 'frliatfptnotxtehrhio',\n",
        " 'frlirdfptnopetehrhdg',\n",
-       " 'frlitrnptnowphehrhod',\n",
-       " 'frlwvyaptnovdcehraoo',\n",
+       " 'frlitrnptnoxphehrhod',\n",
+       " 'frlxvzaptnovdcehraoo',\n",
        " 'rrlnauaptnhtlfrhraii',\n",
        " 'rhansaapemrnftrlnnep',\n",
        " 'frlhorgptnaephehrsud',\n",
-       " 'fhahscepemayaaelnsdl',\n",
+       " 'fhahscepemazaaelnsdl',\n",
        " 'rhasathpemntaorlneii',\n",
        " 'rhnhaarperafmprlnspn',\n",
        " 'rraoataptsrtnnrhnair',\n",
-       " 'fratornptswhprehnoed',\n",
+       " 'fratornptsxhprehnoed',\n",
        " 'faaneoopssrreaelntpu',\n",
        " 'fraoraiptshntoehneni',\n",
        " 'fhaanaspesmrerelnnne',\n",
        " 'foaeeoopntaaeaehiseu',\n",
        " 'foaeuaipntaleoehisin',\n",
        " 'raasoalpmtoefnrnirup',\n",
-       " 'glasntajntoewfnrirto',\n",
+       " 'glasntajntoexfnrirto',\n",
        " 'raasaeopmtoatornircv',\n",
        " 'gohieaajnreanfnhpree',\n",
        " 'rlaiuarpnfelearrprin',\n",
        " 'gohraocjnramdhnhpfns',\n",
        " 'glhraosjnramdtnrpfns',\n",
-       " 'gohassujnrfyrhnhppeh',\n",
-       " 'rlarshtpnfpyerrrpdel',\n",
-       " 'gohytuvjnreohunhpndc',\n",
+       " 'gohassujnrfzrhnhppeh',\n",
+       " 'rlarshtpnfpzerrrpdel',\n",
+       " 'gohztuvjnreohunhpndc',\n",
        " 'roakfrfpnfgttsrhpjuh',\n",
        " 'flrkrolpnpgeaeerdjee',\n",
-       " 'gohyahfjnrenetnhpnes',\n",
+       " 'gohzahfjnrenetnhpnes',\n",
        " 'rlakserpnfgrtvrrpjht',\n",
        " 'faronvlpmpotvcendgno',\n",
        " 'roaoooipsfosrnrnpgns',\n",
        " 'rlansorpnfroeprrptru',\n",
        " 'farosiopmphoooenderr',\n",
        " 'farlahepmposraendsnp',\n",
-       " 'flrnriypnphioeerdaoh',\n",
+       " 'flrnrizpnphioeerdaoh',\n",
        " 'flrhnropnpateaerdsne',\n",
        " 'farrshdpmpnneeendnel',\n",
        " 'fliihrhpnoeaeeerrrse',\n",
-       " 'floposfpnerdyteruise',\n",
-       " 'pafnrofdmdrtettncnwu',\n",
+       " 'floposfpnerdzteruise',\n",
+       " 'pafnrofdmdrtettncnxu',\n",
        " 'plinurvdnohleutrraie',\n",
        " 'rlosnerpneoetprrurtv',\n",
        " 'faisafopmooasoenrrcr',\n",
        " 'paafroadmsdneetnncnu',\n",
        " 'flaitirpnsohopernhar',\n",
        " 'raonnrapsroretrnaene',\n",
-       " 'faesltopsryiuaenpeor',\n",
+       " 'faesltopsrziuaenpeor',\n",
        " 'faraltopspeiuaendnor',\n",
        " 'fnponsopnresmseaiucn',\n",
        " 'fneisaapnuontmealrei',\n",
-       " 'fatiatnpswemneenornr',\n",
+       " 'fatiatnpsxemneenornr',\n",
        " 'gaaetctjsntiasnnevel',\n",
        " 'faoirirpshenotenernr',\n",
        " 'faneoogpsrreafentpue',\n",
        " 'ranalrapsrfnpcrntprd',\n",
-       " 'faoooynpshadereneesn',\n",
+       " 'faoooznpshadereneesn',\n",
        " 'pallrhpdsnitirtnrohi',\n",
-       " 'faodoynpssederenngsn',\n",
+       " 'faodoznpssederenngsn',\n",
        " 'rnaovirpnmsviprannoe',\n",
        " 'faorrrapssnipmennnod',\n",
        " 'faorrrmpssnipnennnod',\n",
        " 'ranhusiptrahnhritsct',\n",
        " 'raaaskaptmfngnrinpej',\n",
        " 'raaieflptmostnrinhoo',\n",
-       " 'ranhaoyptrafherinspe',\n",
-       " 'fahattmptacwuneiseor',\n",
-       " 'faratsnptncwmseineon',\n",
+       " 'ranhaozptrafherinspe',\n",
+       " 'fahattmptacxuneiseor',\n",
+       " 'faratsnptncxmseineon',\n",
        " 'ranaotfptsfgntricpfr',\n",
        " 'faroparptnerseeinuin',\n",
        " 'rahiknoptahgrorisijt',\n",
        " 'rahionoptahorerisigt',\n",
-       " 'raalreyptsinterinonv',\n",
+       " 'raalrezptsinterinonv',\n",
        " 'raaaotfpftmgntrpinfr',\n",
        " 'ghaheotjrtaroanpiseg',\n",
-       " 'ghrosefjraoyttnpfgdt',\n",
-       " 'ghrysorjraeyrnnpfnds',\n",
-       " 'fryltolppeiuaeednore',\n",
+       " 'ghrosefjraozttnpfgdt',\n",
+       " 'ghrzsorjraezrnnpfnds',\n",
+       " 'frzltolppeiuaeednore',\n",
        " 'friintnppooruhedhrtr',\n",
        " 'frnaplkpprsrngedtnir',\n",
        " 'ghorreajrnaeatnphfes',\n",
-       " 'raliyrdpfnoevorprhnv',\n",
+       " 'ralizrdpfnoevorprhnv',\n",
        " 'ghlnavtjrnrturnprtir',\n",
        " 'frloknippnngsoedrhjc',\n",
        " 'frarilrppmnoiaednnro',\n",
        " 'poprhredeeiaeatufose',\n",
        " 'pipaaoedoesmeatrfnnu',\n",
        " 'rraoltrpeneeapreeusi',\n",
-       " 'foaigsrpeeofyaeunrtd',\n",
-       " 'pftterrddwulevtcoroe',\n",
+       " 'foaigsrpeeofzaeunrtd',\n",
+       " 'pftterrddxulevtcoroe',\n",
        " 'foafrripeesanoeunrln',\n",
        " 'foahroopeeaidoeunsos',\n",
        " 'roeaasapeatemirusinn',\n",
        " 'finaltnportiuhertior',\n",
        " 'greavlsjeatutmnesirh',\n",
-       " 'roeotcspeadsemrussyt',\n",
+       " 'roeotcspeadsemrusszt',\n",
        " 'fonsetopermgooeutnhd',\n",
        " 'rrevkdopeaugtrresrjo',\n",
-       " 'grohtsojenroyonehprd',\n",
+       " 'grohtsojenrozonehprd',\n",
        " 'frlrrolpenppeeeerdru',\n",
        " 'filrthsponphenerrdal',\n",
        " 'roaasarpemfntnrunpei',\n",
        " 'rlahnanpitarfrroistp',\n",
        " 'gaahgovjetahounnislg',\n",
        " 'gaahgotjetahoannislg',\n",
-       " 'rlaraeypitnsteroinnv',\n",
+       " 'rlaraezpitnsteroinnv',\n",
        " 'flaarimpitsnoneoinnr',\n",
-       " 'ftashaopwtnemgeoieln',\n",
+       " 'ftashaopxtnemgeoieln',\n",
        " 'raaejaspnfrnemreppon',\n",
        " 'raaretrpefphuarnpdkr',\n",
        " 'farnrorpeprieaendnou',\n",
        " 'flrsrlipitnpnoeohedr',\n",
        " 'gaaorocjesrnoannnans',\n",
        " 'flarpropispdeoeonrte',\n",
-       " 'rlariyspisnheyronnin',\n",
+       " 'rlarizspisnhezronnin',\n",
        " 'rleerucpistpheroovdc',\n",
-       " 'flenrrypisaipeeooiod',\n",
+       " 'flenrrzpisaipeeooiod',\n",
        " 'fapjrrrpsrnehaelioee',\n",
-       " 'frlrahoptitnenehowes',\n",
+       " 'frlrahoptitnenehoxes',\n",
        " 'raaloofpseidrtrlnosa',\n",
-       " 'fhtfhcopewteeoelorsi',\n",
+       " 'fhtfhcopexteeoelorsi',\n",
        " 'frlfhnhptitearehorsi',\n",
        " 'palfacfdsiteedtlorei',\n",
        " 'frhfodsptesoemehlrgg',\n",
-       " 'prhttaedtewuisthlorh',\n",
+       " 'prhttaedtexuisthlorh',\n",
        " 'rrhfaiuptetiehrhlrhr',\n",
        " 'rrvitaaptvhicnrhoiee',\n",
        " 'prviroadtvhienthoiou',\n",
        " 'prlpisodtneonethrfre',\n",
        " 'frlpvdnptnrvotehrioo',\n",
        " 'rrliahiptnotahrhrhis',\n",
-       " 'frlwvyaptnovdcehraoo',\n",
+       " 'frlxvzaptnovdcehraoo',\n",
        " 'rhansaapemrnftrlnnep',\n",
        " 'pharesidemnfnotlnnde',\n",
        " 'rrlhofoptnaepdrhrsue',\n",
        " 'grlsattjtnntahnhreii',\n",
        " 'frneofoptrgetdehnhur',\n",
        " 'fhnhraiperapmoelnsdn',\n",
-       " 'pratiahdtswosithnohl',\n",
-       " 'fratornptswhprehnoed',\n",
+       " 'pratiahdtsxosithnohl',\n",
+       " 'fratornptsxhprehnoed',\n",
        " 'rraoealptshrfnrhnepp',\n",
        " 'rhaaniupesmrerrlnnnr',\n",
        " 'fhaanaspesmrerelnnne',\n",
        " 'goanlfojntentanhirro',\n",
        " 'glanohnjntrrrhnritap',\n",
        " 'rlanoonpntrrehrritau',\n",
-       " 'flaorevpnthtnveriewe',\n",
-       " 'faaoranpmthtlneniewe',\n",
+       " 'flaorevpnthtnveriexe',\n",
+       " 'faaoranpmthtlneniexe',\n",
        " 'rlanuvrpntrluarritir',\n",
        " 'rlahaaopntafmhrrispn',\n",
-       " 'gohrystjnraeyunhpfnd',\n",
-       " 'glhryssjnraeymnrpfnd',\n",
+       " 'gohrzstjnraezunhpfnd',\n",
+       " 'glhrzssjnraezmnrpfnd',\n",
        " 'elkatoenngfirgerjpes',\n",
-       " 'gohyfuvjnreshunhpnrc',\n",
+       " 'gohzfuvjnreshunhpnrc',\n",
        " 'faronnapmpohteendgan',\n",
-       " 'forynhepsperatendnns',\n",
+       " 'forznhepsperatendnns',\n",
        " 'flrrpnhpnperoaerdeie',\n",
        " 'roaeinepnfaeonrhpsre',\n",
-       " 'rlannyrpnfhoehrrpaen',\n",
+       " 'rlannzrpnfhoehrrpaen',\n",
        " 'fornohfpspsgltendcfc',\n",
        " 'glroanejnerthgnreaia',\n",
-       " 'gothrsrjnurayenhrpfd',\n",
+       " 'gothrsrjnurazenhrpfd',\n",
        " 'ploprhrdneeiaetrufos',\n",
        " 'faopohspmerdomenuiso',\n",
        " 'failftrpmoisuaenrorr',\n",
        " 'fainuorpmorldaenrnis',\n",
        " 'foisrropsooaeoenrrte',\n",
        " 'plisaafdnooaedtrrrcn',\n",
-       " 'fahinyopmeordrenlrno',\n",
+       " 'fahinzopmeordrenlrno',\n",
        " 'fahnhirpmeraopenlnsr',\n",
-       " 'foairoypssondeennrns',\n",
-       " 'roamrsfpssnnytrnnsnd',\n",
-       " 'faerylipsaheioenseno',\n",
-       " 'faaihnypsmoendennrla',\n",
+       " 'foairozpssondeennrns',\n",
+       " 'roamrsfpssnnztrnnsnd',\n",
+       " 'faerzlipsaheioenseno',\n",
+       " 'faaihnzpsmoendennrla',\n",
        " 'faaoiropsmhonoennern',\n",
-       " 'raarnaspsmnofyrnnnep',\n",
+       " 'raarnaspsmnofzrnnnep',\n",
        " 'ranaaajpsrfetnrnnpni',\n",
-       " 'pnnftsndnsdwmttaccon',\n",
+       " 'pnnftsndnsdxmttaccon',\n",
        " 'pnnhtsndnslamttaccin',\n",
-       " 'fnstorypnoceheearaue',\n",
+       " 'fnstorzpnoceheearaue',\n",
        " 'gaorasgjtrenmhniaeen',\n",
        " 'raonhvopterauoriutsr',\n",
        " 'garnuecjtehhtanieacv',\n",
        " 'raheltaptatiuiristor',\n",
        " 'rahelfrptatidnristoc',\n",
        " 'raaalonpftmiohrpinog',\n",
-       " 'raahnylpftaoenrpisen',\n",
+       " 'raahnzlpftaoenrpisen',\n",
        " 'raahnoapftaoomrpiseg',\n",
        " 'raaoisrpfeeemnrpnurn',\n",
        " 'friintrppooruvedhrtr',\n",
        " 'frsninsppnsoamedtcri',\n",
        " 'frhonrrppaerieedsuno',\n",
        " 'fiirohrpoeneaeerrnus',\n",
-       " 'roaliyrpefneevruprrn',\n",
-       " 'foadyhepeloeraeueonp',\n",
+       " 'roalizrpefneevruprrn',\n",
+       " 'foadzhepeloeraeueonp',\n",
        " 'foeaasepeatemgeusinn',\n",
        " 'foeaastpeatemceusinn',\n",
        " 'rreavespeatuhmresirk',\n",
        " 'filrtovponphsverrdan',\n",
        " 'gaantcrjetevasnniaul',\n",
        " 'rlanvrapitruanroitrl',\n",
-       " 'raarvylpntvueireivrn',\n",
+       " 'raarvzlpntvueireivrn',\n",
        " 'raanntapetroosrniner',\n",
        " 'gaahoaujetagernnisfe',\n",
-       " 'rlahiylpitahenroisin',\n",
-       " 'ftashnapwtnenmeoiela',\n",
-       " 'rlaneynpitatehroiivn',\n",
-       " 'raaejyfpnfrnetreppon',\n",
+       " 'rlahizlpitahenroisin',\n",
+       " 'ftashnapxtnenmeoiela',\n",
+       " 'rlaneznpitatehroiivn',\n",
+       " 'raaejzfpnfrnetreppon',\n",
        " 'farnrlspepriimendnoo',\n",
        " 'flientrpionhuheorrar',\n",
        " 'flaahcnpistaaseolisl',\n",
        " 'foanpospntrrelehitiu',\n",
        " 'rlanuvrpntrluarritir',\n",
        " 'roakfrfpnfgttsrhpjuh',\n",
-       " 'gohyfuvjnreshunhpnrc',\n",
-       " 'gohyahfjnrenetnhpnes',\n",
-       " 'gohyahfjnrenetnhpnes',\n",
-       " 'forynhepsperatendnns',\n",
+       " 'gohzfuvjnreshunhpnrc',\n",
+       " 'gohzahfjnrenetnhpnes',\n",
+       " 'gohzahfjnrenetnhpnes',\n",
+       " 'forznhepsperatendnns',\n",
        " 'farrlnopmpacooendlee',\n",
        " 'farlahepmposraendsnp',\n",
        " 'glroanejnerthgnreaia',\n",
        " 'gotnfecjnuedranhrrcp',\n",
        " 'flinurrpnohleherraie',\n",
        " 'fairoffpmonestenrnur',\n",
-       " 'flohdydpneaoeeeruson',\n",
+       " 'flohdzdpneaoeeeruson',\n",
        " 'ponfnradsndspstnaccr',\n",
-       " 'roamrsfpssnnytrnnsnd',\n",
-       " 'roamrsfpssnnytrnnsnd',\n",
-       " 'faeryltpsaheiwenseno',\n",
-       " 'fartdrypsnneedennrge',\n",
+       " 'roamrsfpssnnztrnnsnd',\n",
+       " 'roamrsfpssnnztrnnsnd',\n",
+       " 'faerzltpsaheixenseno',\n",
+       " 'fartdrzpsnneedennrge',\n",
        " 'fartdonpsnnedsennrgs',\n",
-       " 'fnstorypnoceheearaue',\n",
+       " 'fnstorzpnoceheearaue',\n",
        " 'raalfhspteidcmrinoch',\n",
        " 'gaanrfijtnheponieaee',\n",
        " 'fanhusiptrahnoeitsct',\n",
        " 'frahiltppmaoiuednsro',\n",
        " 'rahrnnopfaerodrpsene',\n",
-       " 'roaliyrpefneevruprrn',\n",
-       " 'foailsopeeoeyoeunrsd',\n",
-       " 'roeavtspeatusmrusiry',\n",
-       " 'grohosujenrryhnehpad',\n",
+       " 'roalizrpefneevruprrn',\n",
+       " 'foailsopeeoezoeunrsd',\n",
+       " 'roeavtspeatusmrusirz',\n",
+       " 'grohosujenrrzhnehpad',\n",
        " 'frlrrolpenppeeeerdru',\n",
        " 'rooasahpenflmeruhpln',\n",
        " 'gaanhfejnterttneirpr',\n",
        " 'raajafapetnftnrniopr',\n",
-       " 'raarvylpntvueireivrn',\n",
-       " 'gartptfjnerdwtneevto',\n",
+       " 'raarvzlpntvueireivrn',\n",
+       " 'gartptfjnerdxtneevto',\n",
        " 'flientrpionhuheorrar',\n",
        " 'flareoepispndaeonres',\n",
        " 'fharohepempnlaelndhc',\n",
        " 'raallrmpftnianrpirol']"
       ]
      },
-     "execution_count": 39,
+     "execution_count": 44,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 40,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 45,
+   "metadata": {},
    "outputs": [
     {
      "data": {
        "[]"
       ]
      },
-     "execution_count": 40,
+     "execution_count": 45,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 46,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "def cadenus_break_worker(message, keyword, keycolumn, fitness):\n",
-    "    message_chunks = chunks(message, 175)\n",
-    "    plaintext = ''.join(cadenus_decipher(c, keyword, keycolumn) for c in message_chunks)\n",
-    "    fit = fitness(plaintext)\n",
-    "    return (keyword, keycolumn), fit"
+    "def cadenus_break_worker(message, keyword, keycolumn, fitness):\n",
+    "    message_chunks = chunks(message, 175)\n",
+    "    plaintext = ''.join(cadenus_decipher(c, keyword, keycolumn) for c in message_chunks)\n",
+    "    fit = fitness(plaintext)\n",
+    "    return (keyword, keycolumn), fit"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 47,
+   "metadata": {},
    "outputs": [],
    "source": [
-    "def cadenus_break(message, words=keywords, fitness=Pbigrams):\n",
-    "    c = make_cadenus_keycolumn(reverse=True)\n",
-    "    results = starmap(cadenus_break_worker, [(message, \n",
-    "                                              w, \n",
-    "                                              make_cadenus_keycolumn(doubled_letters='vw', start=s, reverse=r), \n",
-    "                                              fitness)\n",
-    "                               for w in words for s in string.ascii_lowercase for r in [True, False]])\n",
-    "    # return list(results)\n",
-    "    return max(results, key=lambda k: k[1])"
+    "def cadenus_break(message, words=keywords, fitness=Pbigrams):\n",
+    "    c = make_cadenus_keycolumn(reverse=True)\n",
+    "    results = starmap(cadenus_break_worker, [(message, \n",
+    "                                              w, \n",
+    "                                              make_cadenus_keycolumn(doubled_letters='vw', start=s, reverse=r), \n",
+    "                                              fitness)\n",
+    "                               for w in words for s in string.ascii_lowercase for r in [True, False]])\n",
+    "    # return list(results)\n",
+    "    return max(results, key=lambda k: k[1])"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 43,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 48,
+   "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
        "(('finalist',\n",
-       "  {'a': 6,\n",
-       "   'b': 5,\n",
-       "   'c': 4,\n",
-       "   'd': 3,\n",
-       "   'e': 2,\n",
-       "   'f': 1,\n",
-       "   'g': 0,\n",
-       "   'h': 24,\n",
-       "   'i': 23,\n",
-       "   'j': 22,\n",
-       "   'k': 21,\n",
-       "   'l': 20,\n",
-       "   'm': 19,\n",
-       "   'n': 18,\n",
-       "   'o': 17,\n",
-       "   'p': 16,\n",
-       "   'q': 15,\n",
-       "   'r': 14,\n",
-       "   's': 13,\n",
-       "   't': 12,\n",
-       "   'u': 11,\n",
-       "   'v': 10,\n",
-       "   'w': 10,\n",
-       "   'x': 9,\n",
-       "   'y': 8,\n",
-       "   'z': 7}),\n",
-       " -5286.197562931952)"
+       "  {'a': 3,\n",
+       "   'b': 2,\n",
+       "   'c': 1,\n",
+       "   'd': 0,\n",
+       "   'e': 24,\n",
+       "   'f': 23,\n",
+       "   'g': 22,\n",
+       "   'h': 21,\n",
+       "   'i': 20,\n",
+       "   'j': 19,\n",
+       "   'k': 18,\n",
+       "   'l': 17,\n",
+       "   'm': 16,\n",
+       "   'n': 15,\n",
+       "   'o': 14,\n",
+       "   'p': 13,\n",
+       "   'q': 12,\n",
+       "   'r': 11,\n",
+       "   's': 10,\n",
+       "   't': 9,\n",
+       "   'u': 8,\n",
+       "   'v': 7,\n",
+       "   'w': 7,\n",
+       "   'x': 6,\n",
+       "   'y': 5,\n",
+       "   'z': 4}),\n",
+       " -5436.133070290792)"
       ]
      },
-     "execution_count": 43,
+     "execution_count": 48,
      "metadata": {},
      "output_type": "execute_result"
     }
   },
   {
    "cell_type": "code",
-   "execution_count": 44,
-   "metadata": {
-    "collapsed": false
-   },
+   "execution_count": 49,
+   "metadata": {},
    "outputs": [
     {
-     "data": {
-      "text/plain": [
-       "'wledgctftrojhrtheonovoresoovrpanegoarerufofinaltnportiuhertiorafthehasdwarenncompleeeandoastestssoveconlrudedtlsreisnntignfrrrthesinaaltranlicthaaehesecisityseemiceshuneanykhf'"
-      ]
-     },
-     "execution_count": 44,
-     "metadata": {},
-     "output_type": "execute_result"
+     "ename": "IndexError",
+     "evalue": "string index out of range",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[0;31mRemoteTraceback\u001b[0m                           Traceback (most recent call last)",
+      "\u001b[0;31mRemoteTraceback\u001b[0m: \n\"\"\"\nTraceback (most recent call last):\n  File \"/usr/lib/python3.6/multiprocessing/pool.py\", line 119, in worker\n    result = (True, func(*args, **kwds))\n  File \"/usr/lib/python3.6/multiprocessing/pool.py\", line 47, in starmapstar\n    return list(itertools.starmap(args[0], args[1]))\n  File \"/home/neil/Documents/programming/national-cipher-challenge/cipher/cadenus.py\", line 120, in cadenus_break_worker\n    plaintext = ''.join(cadenus_decipher(c, keyword, keycolumn) for c in message_chunks)\n  File \"/home/neil/Documents/programming/national-cipher-challenge/cipher/cadenus.py\", line 120, in <genexpr>\n    plaintext = ''.join(cadenus_decipher(c, keyword, keycolumn) for c in message_chunks)\n  File \"/home/neil/Documents/programming/national-cipher-challenge/cipher/cadenus.py\", line 89, in cadenus_decipher\n    untransposed_rows = [untranspose(r, transpositions) for r in rows]\n  File \"/home/neil/Documents/programming/national-cipher-challenge/cipher/cadenus.py\", line 89, in <listcomp>\n    untransposed_rows = [untranspose(r, transpositions) for r in rows]\n  File \"/home/neil/Documents/programming/national-cipher-challenge/support/utilities.py\", line 101, in untranspose\n    transposed[t] = items[p]\nIndexError: string index out of range\n\"\"\"",
+      "\nThe above exception was the direct cause of the following exception:\n",
+      "\u001b[0;31mIndexError\u001b[0m                                Traceback (most recent call last)",
+      "\u001b[0;32m<ipython-input-49-ef8b0c9b9c63>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mkey8b\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfitness\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcadenus_break\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mc8bl\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfitness\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mPtrigrams\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0mkey8b\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfitness\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m~/Documents/programming/national-cipher-challenge/cipher/cadenus.py\u001b[0m in \u001b[0;36mcadenus_break\u001b[0;34m(message, words, doubled_letters, fitness)\u001b[0m\n\u001b[1;32m    106\u001b[0m                         start=s, reverse=r), \n\u001b[1;32m    107\u001b[0m                     fitness)\n\u001b[0;32m--> 108\u001b[0;31m                 \u001b[0;32mfor\u001b[0m \u001b[0mw\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mwords\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    109\u001b[0m                 \u001b[0;32mfor\u001b[0m \u001b[0ms\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mstring\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mascii_lowercase\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    110\u001b[0m                 \u001b[0;32mfor\u001b[0m \u001b[0mr\u001b[0m \u001b[0;32min\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;32m/usr/lib/python3.6/multiprocessing/pool.py\u001b[0m in \u001b[0;36mstarmap\u001b[0;34m(self, func, iterable, chunksize)\u001b[0m\n\u001b[1;32m    272\u001b[0m         \u001b[0;31m`\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0mbecomes\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mb\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    273\u001b[0m         '''\n\u001b[0;32m--> 274\u001b[0;31m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_map_async\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfunc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstarmapstar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mchunksize\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    275\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    276\u001b[0m     def starmap_async(self, func, iterable, chunksize=None, callback=None,\n",
+      "\u001b[0;32m/usr/lib/python3.6/multiprocessing/pool.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m    642\u001b[0m             \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    643\u001b[0m         \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 644\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    645\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    646\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_set\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
+      "\u001b[0;31mIndexError\u001b[0m: string index out of range"
+     ]
     }
    ],
+   "source": [
+    "key8b, fitness = cadenus_break(c8bl, fitness=Ptrigrams)\n",
+    "key8b, fitness"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "cadenus_decipher(first_chunk, key8b[0], key8b[1])"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 50,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[('finalist', 'z', 'az', True),\n",
-       " ('finalist', 'a', 'no', True),\n",
-       " ('finalist', 'n', 'no', True),\n",
-       " ('finalist', 'a', 'nu', True),\n",
-       " ('finalist', 'n', 'nu', True),\n",
-       " ('finalist', 'a', 'nz', True),\n",
-       " ('finalist', 'n', 'nz', True),\n",
-       " ('finalist', 'a', 'op', True),\n",
-       " ('finalist', 'o', 'op', True),\n",
-       " ('finalist', 'a', 'oq', True),\n",
-       " ('finalist', 'o', 'oq', True),\n",
-       " ('finalist', 'a', 'or', True),\n",
-       " ('finalist', 'o', 'or', True),\n",
-       " ('finalist', 'a', 'os', True),\n",
-       " ('finalist', 'o', 'os', True),\n",
-       " ('finalist', 'a', 'ot', True),\n",
-       " ('finalist', 'o', 'ot', True),\n",
-       " ('finalist', 'a', 'ou', True),\n",
-       " ('finalist', 'o', 'ou', True),\n",
-       " ('finalist', 'a', 'ov', True),\n",
-       " ('finalist', 'o', 'ov', True),\n",
-       " ('finalist', 'a', 'ow', True),\n",
-       " ('finalist', 'o', 'ow', True),\n",
-       " ('finalist', 'a', 'ox', True),\n",
-       " ('finalist', 'o', 'ox', True),\n",
-       " ('finalist', 'a', 'oy', True),\n",
-       " ('finalist', 'o', 'oy', True),\n",
-       " ('finalist', 'a', 'oz', True),\n",
-       " ('finalist', 'o', 'oz', True),\n",
-       " ('finalist', 'a', 'pq', True),\n",
-       " ('finalist', 'p', 'pq', True),\n",
-       " ('finalist', 'a', 'pr', True),\n",
-       " ('finalist', 'p', 'pr', True),\n",
-       " ('finalist', 'a', 'ps', True),\n",
-       " ('finalist', 'p', 'ps', True),\n",
-       " ('finalist', 'a', 'pt', True),\n",
-       " ('finalist', 'p', 'pt', True),\n",
-       " ('finalist', 'a', 'pu', True),\n",
-       " ('finalist', 'p', 'pu', True),\n",
-       " ('finalist', 'a', 'pv', True),\n",
-       " ('finalist', 'p', 'pv', True),\n",
-       " ('finalist', 'a', 'pw', True),\n",
-       " ('finalist', 'p', 'pw', True),\n",
-       " ('finalist', 'a', 'px', True),\n",
-       " ('finalist', 'p', 'px', True),\n",
-       " ('finalist', 'a', 'py', True),\n",
-       " ('finalist', 'p', 'py', True),\n",
-       " ('finalist', 'a', 'pz', True),\n",
-       " ('finalist', 'p', 'pz', True),\n",
-       " ('finalist', 'a', 'qr', True),\n",
-       " ('finalist', 'q', 'qr', True),\n",
-       " ('finalist', 'a', 'qs', True),\n",
-       " ('finalist', 'q', 'qs', True),\n",
-       " ('finalist', 'a', 'qt', True),\n",
-       " ('finalist', 'q', 'qt', True),\n",
-       " ('finalist', 'a', 'qu', True),\n",
-       " ('finalist', 'q', 'qu', True),\n",
-       " ('finalist', 'a', 'qv', True),\n",
-       " ('finalist', 'q', 'qv', True),\n",
-       " ('finalist', 'a', 'qw', True),\n",
-       " ('finalist', 'q', 'qw', True),\n",
-       " ('finalist', 'a', 'qx', True),\n",
-       " ('finalist', 'q', 'qx', True),\n",
-       " ('finalist', 'a', 'qy', True),\n",
-       " ('finalist', 'q', 'qy', True),\n",
-       " ('finalist', 'a', 'qz', True),\n",
-       " ('finalist', 'q', 'qz', True),\n",
-       " ('finalist', 'a', 'rs', True),\n",
-       " ('finalist', 'r', 'rs', True),\n",
-       " ('finalist', 'a', 'rt', True),\n",
-       " ('finalist', 'r', 'rt', True),\n",
-       " ('finalist', 'a', 'ru', True),\n",
-       " ('finalist', 'r', 'ru', True),\n",
-       " ('finalist', 'a', 'rv', True),\n",
-       " ('finalist', 'r', 'rv', True),\n",
-       " ('finalist', 'a', 'rw', True),\n",
-       " ('finalist', 'r', 'rw', True),\n",
-       " ('finalist', 'a', 'rx', True),\n",
-       " ('finalist', 'r', 'rx', True),\n",
-       " ('finalist', 'a', 'ry', True),\n",
-       " ('finalist', 'r', 'ry', True),\n",
-       " ('finalist', 'a', 'rz', True),\n",
-       " ('finalist', 'r', 'rz', True),\n",
-       " ('finalist', 'a', 'st', True),\n",
-       " ('finalist', 's', 'st', True),\n",
-       " ('finalist', 'a', 'su', True),\n",
-       " ('finalist', 's', 'su', True),\n",
-       " ('finalist', 'a', 'sv', True),\n",
-       " ('finalist', 's', 'sv', True),\n",
-       " ('finalist', 'a', 'sw', True),\n",
-       " ('finalist', 's', 'sw', True),\n",
-       " ('finalist', 'a', 'sx', True),\n",
-       " ('finalist', 's', 'sx', True),\n",
-       " ('finalist', 'a', 'sy', True),\n",
-       " ('finalist', 's', 'sy', True),\n",
-       " ('finalist', 'a', 'sz', True),\n",
-       " ('finalist', 's', 'sz', True),\n",
-       " ('finalist', 'a', 'tu', True),\n",
-       " ('finalist', 't', 'tu', True),\n",
-       " ('finalist', 'a', 'tv', True),\n",
-       " ('finalist', 't', 'tv', True),\n",
-       " ('finalist', 'a', 'tw', True),\n",
-       " ('finalist', 't', 'tw', True),\n",
-       " ('finalist', 'a', 'tx', True),\n",
-       " ('finalist', 't', 'tx', True),\n",
-       " ('finalist', 'a', 'ty', True),\n",
-       " ('finalist', 't', 'ty', True),\n",
-       " ('finalist', 'a', 'tz', True),\n",
-       " ('finalist', 't', 'tz', True),\n",
-       " ('finalist', 'a', 'uv', True),\n",
-       " ('finalist', 'u', 'uv', True),\n",
-       " ('finalist', 'a', 'uw', True),\n",
-       " ('finalist', 'u', 'uw', True),\n",
-       " ('finalist', 'a', 'ux', True),\n",
-       " ('finalist', 'u', 'ux', True),\n",
-       " ('finalist', 'a', 'uy', True),\n",
-       " ('finalist', 'u', 'uy', True),\n",
-       " ('finalist', 'a', 'uz', True),\n",
-       " ('finalist', 'u', 'uz', True),\n",
-       " ('finalist', 'a', 'vw', True),\n",
-       " ('finalist', 'v', 'vw', True),\n",
-       " ('finalist', 'a', 'vx', True),\n",
-       " ('finalist', 'v', 'vx', True),\n",
-       " ('finalist', 'a', 'vy', True),\n",
-       " ('finalist', 'v', 'vy', True),\n",
-       " ('finalist', 'a', 'vz', True),\n",
-       " ('finalist', 'v', 'vz', True),\n",
-       " ('finalist', 'a', 'wx', True),\n",
-       " ('finalist', 'w', 'wx', True),\n",
-       " ('finalist', 'a', 'wy', True),\n",
-       " ('finalist', 'w', 'wy', True),\n",
-       " ('finalist', 'a', 'wz', True),\n",
-       " ('finalist', 'w', 'wz', True),\n",
-       " ('finalist', 'a', 'xy', True),\n",
-       " ('finalist', 'x', 'xy', True),\n",
-       " ('finalist', 'a', 'xz', True),\n",
-       " ('finalist', 'x', 'xz', True),\n",
-       " ('finalist', 'a', 'yz', True),\n",
-       " ('finalist', 'y', 'yz', True),\n",
-       " ('finality', 'z', 'az', True),\n",
-       " ('finality', 'a', 'no', True),\n",
-       " ('finality', 'n', 'no', True),\n",
-       " ('finality', 'a', 'nu', True),\n",
-       " ('finality', 'n', 'nu', True),\n",
-       " ('finality', 'a', 'nz', True),\n",
-       " ('finality', 'n', 'nz', True),\n",
-       " ('finality', 'a', 'op', True),\n",
-       " ('finality', 'o', 'op', True),\n",
-       " ('finality', 'a', 'oq', True),\n",
-       " ('finality', 'o', 'oq', True),\n",
-       " ('finality', 'a', 'or', True),\n",
-       " ('finality', 'o', 'or', True),\n",
-       " ('finality', 'a', 'os', True),\n",
-       " ('finality', 'o', 'os', True),\n",
-       " ('finality', 'a', 'ot', True),\n",
-       " ('finality', 'o', 'ot', True),\n",
-       " ('finality', 'a', 'ou', True),\n",
-       " ('finality', 'o', 'ou', True),\n",
-       " ('finality', 'a', 'ov', True),\n",
-       " ('finality', 'o', 'ov', True),\n",
-       " ('finality', 'a', 'ow', True),\n",
-       " ('finality', 'o', 'ow', True),\n",
-       " ('finality', 'a', 'ox', True),\n",
-       " ('finality', 'o', 'ox', True),\n",
-       " ('finality', 'a', 'oy', True),\n",
-       " ('finality', 'o', 'oy', True),\n",
-       " ('finality', 'a', 'oz', True),\n",
-       " ('finality', 'o', 'oz', True),\n",
-       " ('finality', 'a', 'pq', True),\n",
-       " ('finality', 'p', 'pq', True),\n",
-       " ('finality', 'a', 'pr', True),\n",
-       " ('finality', 'p', 'pr', True),\n",
-       " ('finality', 'a', 'ps', True),\n",
-       " ('finality', 'p', 'ps', True),\n",
-       " ('finality', 'a', 'pt', True),\n",
-       " ('finality', 'p', 'pt', True),\n",
-       " ('finality', 'a', 'pu', True),\n",
-       " ('finality', 'p', 'pu', True),\n",
-       " ('finality', 'a', 'pv', True),\n",
-       " ('finality', 'p', 'pv', True),\n",
-       " ('finality', 'a', 'pw', True),\n",
-       " ('finality', 'p', 'pw', True),\n",
-       " ('finality', 'a', 'px', True),\n",
-       " ('finality', 'p', 'px', True),\n",
-       " ('finality', 'a', 'py', True),\n",
-       " ('finality', 'p', 'py', True),\n",
-       " ('finality', 'a', 'pz', True),\n",
-       " ('finality', 'p', 'pz', True),\n",
-       " ('finality', 'a', 'qr', True),\n",
-       " ('finality', 'q', 'qr', True),\n",
-       " ('finality', 'a', 'qs', True),\n",
-       " ('finality', 'q', 'qs', True),\n",
-       " ('finality', 'a', 'qt', True),\n",
-       " ('finality', 'q', 'qt', True),\n",
-       " ('finality', 'a', 'qu', True),\n",
-       " ('finality', 'q', 'qu', True),\n",
-       " ('finality', 'a', 'qv', True),\n",
-       " ('finality', 'q', 'qv', True),\n",
-       " ('finality', 'a', 'qw', True),\n",
-       " ('finality', 'q', 'qw', True),\n",
-       " ('finality', 'a', 'qx', True),\n",
-       " ('finality', 'q', 'qx', True),\n",
-       " ('finality', 'a', 'qy', True),\n",
-       " ('finality', 'q', 'qy', True),\n",
-       " ('finality', 'a', 'qz', True),\n",
-       " ('finality', 'q', 'qz', True),\n",
-       " ('finality', 'a', 'rs', True),\n",
-       " ('finality', 'r', 'rs', True),\n",
-       " ('finality', 'a', 'rt', True),\n",
-       " ('finality', 'r', 'rt', True),\n",
-       " ('finality', 'a', 'ru', True),\n",
-       " ('finality', 'r', 'ru', True),\n",
-       " ('finality', 'a', 'rv', True),\n",
-       " ('finality', 'r', 'rv', True),\n",
-       " ('finality', 'a', 'rw', True),\n",
-       " ('finality', 'r', 'rw', True),\n",
-       " ('finality', 'a', 'rx', True),\n",
-       " ('finality', 'r', 'rx', True),\n",
-       " ('finality', 'a', 'ry', True),\n",
-       " ('finality', 'r', 'ry', True),\n",
-       " ('finality', 'a', 'rz', True),\n",
-       " ('finality', 'r', 'rz', True),\n",
-       " ('finality', 'a', 'st', True),\n",
-       " ('finality', 's', 'st', True),\n",
-       " ('finality', 'a', 'su', True),\n",
-       " ('finality', 's', 'su', True),\n",
-       " ('finality', 'a', 'sv', True),\n",
-       " ('finality', 's', 'sv', True),\n",
-       " ('finality', 'a', 'sw', True),\n",
-       " ('finality', 's', 'sw', True),\n",
-       " ('finality', 'a', 'sx', True),\n",
-       " ('finality', 's', 'sx', True),\n",
-       " ('finality', 'a', 'sy', True),\n",
-       " ('finality', 's', 'sy', True),\n",
-       " ('finality', 'a', 'sz', True),\n",
-       " ('finality', 's', 'sz', True),\n",
-       " ('finality', 'a', 'tu', True),\n",
-       " ('finality', 't', 'tu', True),\n",
-       " ('finality', 'a', 'tv', True),\n",
-       " ('finality', 't', 'tv', True),\n",
-       " ('finality', 'a', 'tw', True),\n",
-       " ('finality', 't', 'tw', True),\n",
-       " ('finality', 'a', 'tx', True),\n",
-       " ('finality', 't', 'tx', True),\n",
-       " ('finality', 'a', 'ty', True),\n",
-       " ('finality', 't', 'ty', True),\n",
-       " ('finality', 'a', 'tz', True),\n",
-       " ('finality', 't', 'tz', True),\n",
-       " ('finality', 'a', 'uv', True),\n",
-       " ('finality', 'u', 'uv', True),\n",
-       " ('finality', 'a', 'uw', True),\n",
-       " ('finality', 'u', 'uw', True),\n",
-       " ('finality', 'a', 'ux', True),\n",
-       " ('finality', 'u', 'ux', True),\n",
-       " ('finality', 'a', 'uy', True),\n",
-       " ('finality', 'u', 'uy', True),\n",
-       " ('finality', 'a', 'uz', True),\n",
-       " ('finality', 'u', 'uz', True),\n",
-       " ('finality', 'a', 'vw', True),\n",
-       " ('finality', 'v', 'vw', True),\n",
-       " ('finality', 'a', 'vx', True),\n",
-       " ('finality', 'v', 'vx', True),\n",
-       " ('finality', 'a', 'vy', True),\n",
-       " ('finality', 'v', 'vy', True),\n",
-       " ('finality', 'a', 'vz', True),\n",
-       " ('finality', 'v', 'vz', True),\n",
-       " ('finality', 'a', 'wx', True),\n",
-       " ('finality', 'w', 'wx', True),\n",
-       " ('finality', 'a', 'wy', True),\n",
-       " ('finality', 'w', 'wy', True),\n",
-       " ('finality', 'a', 'wz', True),\n",
-       " ('finality', 'w', 'wz', True),\n",
-       " ('finality', 'a', 'xy', True),\n",
-       " ('finality', 'x', 'xy', True),\n",
-       " ('finality', 'a', 'xz', True),\n",
-       " ('finality', 'x', 'xz', True),\n",
-       " ('finality', 'a', 'yz', True),\n",
-       " ('finality', 'y', 'yz', True),\n",
-       " ('foulness', 'x', 'ov', True),\n",
-       " ('finalists', 'z', 'az', True),\n",
-       " ('finalists', 'a', 'no', True),\n",
-       " ('finalists', 'n', 'no', True),\n",
-       " ('finalists', 'a', 'nu', True),\n",
-       " ('finalists', 'n', 'nu', True),\n",
-       " ('finalists', 'a', 'nz', True),\n",
-       " ('finalists', 'n', 'nz', True),\n",
-       " ('finalists', 'a', 'op', True),\n",
-       " ('finalists', 'o', 'op', True),\n",
-       " ('finalists', 'a', 'oq', True),\n",
-       " ('finalists', 'o', 'oq', True),\n",
-       " ('finalists', 'a', 'or', True),\n",
-       " ('finalists', 'o', 'or', True),\n",
-       " ('finalists', 'a', 'os', True),\n",
-       " ('finalists', 'o', 'os', True),\n",
-       " ('finalists', 'a', 'ot', True),\n",
-       " ('finalists', 'o', 'ot', True),\n",
-       " ('finalists', 'a', 'ou', True),\n",
-       " ('finalists', 'o', 'ou', True),\n",
-       " ('finalists', 'a', 'ov', True),\n",
-       " ('finalists', 'o', 'ov', True),\n",
-       " ('finalists', 'a', 'ow', True),\n",
-       " ('finalists', 'o', 'ow', True),\n",
-       " ('finalists', 'a', 'ox', True),\n",
-       " ('finalists', 'o', 'ox', True),\n",
-       " ('finalists', 'a', 'oy', True),\n",
-       " ('finalists', 'o', 'oy', True),\n",
-       " ('finalists', 'a', 'oz', True),\n",
-       " ('finalists', 'o', 'oz', True),\n",
-       " ('finalists', 'a', 'pq', True),\n",
-       " ('finalists', 'p', 'pq', True),\n",
-       " ('finalists', 'a', 'pr', True),\n",
-       " ('finalists', 'p', 'pr', True),\n",
-       " ('finalists', 'a', 'ps', True),\n",
-       " ('finalists', 'p', 'ps', True),\n",
-       " ('finalists', 'a', 'pt', True),\n",
-       " ('finalists', 'p', 'pt', True),\n",
-       " ('finalists', 'a', 'pu', True),\n",
-       " ('finalists', 'p', 'pu', True),\n",
-       " ('finalists', 'a', 'pv', True),\n",
-       " ('finalists', 'p', 'pv', True),\n",
-       " ('finalists', 'a', 'pw', True),\n",
-       " ('finalists', 'p', 'pw', True),\n",
-       " ('finalists', 'a', 'px', True),\n",
-       " ('finalists', 'p', 'px', True),\n",
-       " ('finalists', 'a', 'py', True),\n",
-       " ('finalists', 'p', 'py', True),\n",
-       " ('finalists', 'a', 'pz', True),\n",
-       " ('finalists', 'p', 'pz', True),\n",
-       " ('finalists', 'a', 'qr', True),\n",
-       " ('finalists', 'q', 'qr', True),\n",
-       " ('finalists', 'a', 'qs', True),\n",
-       " ('finalists', 'q', 'qs', True),\n",
-       " ('finalists', 'a', 'qt', True),\n",
-       " ('finalists', 'q', 'qt', True),\n",
-       " ('finalists', 'a', 'qu', True),\n",
-       " ('finalists', 'q', 'qu', True),\n",
-       " ('finalists', 'a', 'qv', True),\n",
-       " ('finalists', 'q', 'qv', True),\n",
-       " ('finalists', 'a', 'qw', True),\n",
-       " ('finalists', 'q', 'qw', True),\n",
-       " ('finalists', 'a', 'qx', True),\n",
-       " ('finalists', 'q', 'qx', True),\n",
-       " ('finalists', 'a', 'qy', True),\n",
-       " ('finalists', 'q', 'qy', True),\n",
-       " ('finalists', 'a', 'qz', True),\n",
-       " ('finalists', 'q', 'qz', True),\n",
-       " ('finalists', 'a', 'rs', True),\n",
-       " ('finalists', 'r', 'rs', True),\n",
-       " ('finalists', 'a', 'rt', True),\n",
-       " ('finalists', 'r', 'rt', True),\n",
-       " ('finalists', 'a', 'ru', True),\n",
-       " ('finalists', 'r', 'ru', True),\n",
-       " ('finalists', 'a', 'rv', True),\n",
-       " ('finalists', 'r', 'rv', True),\n",
-       " ('finalists', 'a', 'rw', True),\n",
-       " ('finalists', 'r', 'rw', True),\n",
-       " ('finalists', 'a', 'rx', True),\n",
-       " ('finalists', 'r', 'rx', True),\n",
-       " ('finalists', 'a', 'ry', True),\n",
-       " ('finalists', 'r', 'ry', True),\n",
-       " ('finalists', 'a', 'rz', True),\n",
-       " ('finalists', 'r', 'rz', True),\n",
-       " ('finalists', 'a', 'st', True),\n",
-       " ('finalists', 's', 'st', True),\n",
-       " ('finalists', 'a', 'su', True),\n",
-       " ('finalists', 's', 'su', True),\n",
-       " ('finalists', 'a', 'sv', True),\n",
-       " ('finalists', 's', 'sv', True),\n",
-       " ('finalists', 'a', 'sw', True),\n",
-       " ('finalists', 's', 'sw', True),\n",
-       " ('finalists', 'a', 'sx', True),\n",
-       " ('finalists', 's', 'sx', True),\n",
-       " ('finalists', 'a', 'sy', True),\n",
-       " ('finalists', 's', 'sy', True),\n",
-       " ('finalists', 'a', 'sz', True),\n",
-       " ('finalists', 's', 'sz', True),\n",
-       " ('finalists', 'a', 'tu', True),\n",
-       " ('finalists', 't', 'tu', True),\n",
-       " ('finalists', 'a', 'tv', True),\n",
-       " ('finalists', 't', 'tv', True),\n",
-       " ('finalists', 'a', 'tw', True),\n",
-       " ('finalists', 't', 'tw', True),\n",
-       " ('finalists', 'a', 'tx', True),\n",
-       " ('finalists', 't', 'tx', True),\n",
-       " ('finalists', 'a', 'ty', True),\n",
-       " ('finalists', 't', 'ty', True),\n",
-       " ('finalists', 'a', 'tz', True),\n",
-       " ('finalists', 't', 'tz', True),\n",
-       " ('finalists', 'a', 'uv', True),\n",
-       " ('finalists', 'u', 'uv', True),\n",
-       " ('finalists', 'a', 'uw', True),\n",
-       " ('finalists', 'u', 'uw', True),\n",
-       " ('finalists', 'a', 'ux', True),\n",
-       " ('finalists', 'u', 'ux', True),\n",
-       " ('finalists', 'a', 'uy', True),\n",
-       " ('finalists', 'u', 'uy', True),\n",
-       " ('finalists', 'a', 'uz', True),\n",
-       " ('finalists', 'u', 'uz', True),\n",
-       " ('finalists', 'a', 'vw', True),\n",
-       " ('finalists', 'v', 'vw', True),\n",
-       " ('finalists', 'a', 'vx', True),\n",
-       " ('finalists', 'v', 'vx', True),\n",
-       " ('finalists', 'a', 'vy', True),\n",
-       " ('finalists', 'v', 'vy', True),\n",
-       " ('finalists', 'a', 'vz', True),\n",
-       " ('finalists', 'v', 'vz', True),\n",
-       " ('finalists', 'a', 'wx', True),\n",
-       " ('finalists', 'w', 'wx', True),\n",
-       " ('finalists', 'a', 'wy', True),\n",
-       " ('finalists', 'w', 'wy', True),\n",
-       " ('finalists', 'a', 'wz', True),\n",
-       " ('finalists', 'w', 'wz', True),\n",
-       " ('finalists', 'a', 'xy', True),\n",
-       " ('finalists', 'x', 'xy', True),\n",
-       " ('finalists', 'a', 'xz', True),\n",
-       " ('finalists', 'x', 'xz', True),\n",
-       " ('finalists', 'a', 'yz', True),\n",
-       " ('finalists', 'y', 'yz', True),\n",
-       " ('foulnesss', 'x', 'ov', True)]"
-      ]
-     },
-     "execution_count": 50,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "[(w, s, d1+d2, r)\n",
     " for w in hinted_keywords \n",
   },
   {
    "cell_type": "code",
-   "execution_count": 55,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[]"
-      ]
-     },
-     "execution_count": 55,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "[(w, s, d1+d2, r, cadenus_decipher(first_chunk, w, \n",
     "                                   make_cadenus_keycolumn(doubled_letters=d1+d2, start=s, reverse=r))[:50])\n",
   },
   {
    "cell_type": "code",
-   "execution_count": 52,
+   "execution_count": null,
    "metadata": {
-    "collapsed": false,
     "scrolled": true
    },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "[('finalist', 'a', 'no', True),\n",
-       " ('finalist', 'n', 'no', True),\n",
-       " ('finalist', 'a', 'op', True),\n",
-       " ('finalist', 'o', 'op', True),\n",
-       " ('finalist', 'a', 'pq', True),\n",
-       " ('finalist', 'p', 'pq', True),\n",
-       " ('finalist', 'a', 'qr', True),\n",
-       " ('finalist', 'q', 'qr', True),\n",
-       " ('finalist', 'a', 'rs', True),\n",
-       " ('finalist', 'r', 'rs', True),\n",
-       " ('finalist', 'a', 'st', True),\n",
-       " ('finalist', 's', 'st', True),\n",
-       " ('finalist', 'a', 'tu', True),\n",
-       " ('finalist', 't', 'tu', True),\n",
-       " ('finalist', 'a', 'uv', True),\n",
-       " ('finalist', 'u', 'uv', True),\n",
-       " ('finalist', 'a', 'vw', True),\n",
-       " ('finalist', 'v', 'vw', True),\n",
-       " ('finalist', 'a', 'wx', True),\n",
-       " ('finalist', 'w', 'wx', True),\n",
-       " ('finalist', 'a', 'xy', True),\n",
-       " ('finalist', 'x', 'xy', True),\n",
-       " ('finalist', 'a', 'yz', True),\n",
-       " ('finalist', 'y', 'yz', True),\n",
-       " ('finality', 'a', 'no', True),\n",
-       " ('finality', 'n', 'no', True),\n",
-       " ('finality', 'a', 'op', True),\n",
-       " ('finality', 'o', 'op', True),\n",
-       " ('finality', 'a', 'pq', True),\n",
-       " ('finality', 'p', 'pq', True),\n",
-       " ('finality', 'a', 'qr', True),\n",
-       " ('finality', 'q', 'qr', True),\n",
-       " ('finality', 'a', 'rs', True),\n",
-       " ('finality', 'r', 'rs', True),\n",
-       " ('finality', 'a', 'st', True),\n",
-       " ('finality', 's', 'st', True),\n",
-       " ('finality', 'a', 'tu', True),\n",
-       " ('finality', 't', 'tu', True),\n",
-       " ('finality', 'a', 'uv', True),\n",
-       " ('finality', 'u', 'uv', True),\n",
-       " ('finality', 'a', 'vw', True),\n",
-       " ('finality', 'v', 'vw', True),\n",
-       " ('finality', 'a', 'wx', True),\n",
-       " ('finality', 'w', 'wx', True),\n",
-       " ('finality', 'a', 'xy', True),\n",
-       " ('finality', 'x', 'xy', True),\n",
-       " ('finality', 'a', 'yz', True),\n",
-       " ('finality', 'y', 'yz', True),\n",
-       " ('finalists', 'a', 'no', True),\n",
-       " ('finalists', 'n', 'no', True),\n",
-       " ('finalists', 'a', 'op', True),\n",
-       " ('finalists', 'o', 'op', True),\n",
-       " ('finalists', 'a', 'pq', True),\n",
-       " ('finalists', 'p', 'pq', True),\n",
-       " ('finalists', 'a', 'qr', True),\n",
-       " ('finalists', 'q', 'qr', True),\n",
-       " ('finalists', 'a', 'rs', True),\n",
-       " ('finalists', 'r', 'rs', True),\n",
-       " ('finalists', 'a', 'st', True),\n",
-       " ('finalists', 's', 'st', True),\n",
-       " ('finalists', 'a', 'tu', True),\n",
-       " ('finalists', 't', 'tu', True),\n",
-       " ('finalists', 'a', 'uv', True),\n",
-       " ('finalists', 'u', 'uv', True),\n",
-       " ('finalists', 'a', 'vw', True),\n",
-       " ('finalists', 'v', 'vw', True),\n",
-       " ('finalists', 'a', 'wx', True),\n",
-       " ('finalists', 'w', 'wx', True),\n",
-       " ('finalists', 'a', 'xy', True),\n",
-       " ('finalists', 'x', 'xy', True),\n",
-       " ('finalists', 'a', 'yz', True),\n",
-       " ('finalists', 'y', 'yz', True)]"
-      ]
-     },
-     "execution_count": 52,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
     "[(w, s, d1+chr(ord(d1)+1), r)\n",
     " for w in hinted_keywords \n",
   },
   {
    "cell_type": "code",
-   "execution_count": 53,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "'phasennrkmffnhignsdaaojsrcisrncheentoeetueweisvhsounsucoaleyrhreitdioseotototdhsoagreeysifaglenhtlhonriuelseairscnrteameteiwnntneefefcrartataieposrlandrlvtartalvhctofnorehdpro'"
-      ]
-     },
-     "execution_count": 53,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "cadenus_decipher(first_chunk, 'filbert', make_cadenus_keycolumn(doubled_letters='lu', start='m', reverse=False))"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 54,
-   "metadata": {
-    "collapsed": false
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "['afcaeuottacthrioletcserthshtrahkyorpfrgeoadppjnglternefeofiortsddoeeumscruernfetlaafstwientrvoonerhuahravereetsvsielhlostdoaloyaesmnndignnrhohhtsnaoilncnssicreanneeiiierwtanes']"
-      ]
-     },
-     "execution_count": 54,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "chunks(first_chunk, 175)"
    ]
   {
    "cell_type": "code",
    "execution_count": null,
-   "metadata": {
-    "collapsed": false
-   },
+   "metadata": {},
    "outputs": [],
    "source": []
   }
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.4.3"
+   "version": "3.6.3"
   }
  },
  "nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
 }