Done challenge 7, updated Amsco implementation to match
authorNeil Smith <neil.git@njae.me.uk>
Wed, 6 Jan 2016 18:45:44 +0000 (18:45 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Wed, 6 Jan 2016 18:45:44 +0000 (18:45 +0000)
2015-challenge7.ipynb [new file with mode: 0644]
2015/7a.ciphertext [new file with mode: 0644]
2015/7b.ciphertext [new file with mode: 0644]
SIGNED.md
cipher-training.sublime-project [new file with mode: 0644]
cipher.py
cipherbreak.py

diff --git a/2015-challenge7.ipynb b/2015-challenge7.ipynb
new file mode 100644 (file)
index 0000000..23259d8
--- /dev/null
@@ -0,0 +1,1575 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from cipherbreak import *\n",
+    "\n",
+    "c7a = sanitise(open('2015/7a.ciphertext').read())\n",
+    "c7b = sanitise(open('2015/7b.ciphertext').read())"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(('annmarie', <KeywordWrapAlphabet.from_largest: 3>), -1865.8708508162845)"
+      ]
+     },
+     "execution_count": 8,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(key_a_word, key_a_wrap), score = keyword_break_mp(c7a)\n",
+    "(key_a_word, key_a_wrap), score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "dhorlieithinkiknacchotisgainganfutineewtadhedkobecthingsfebareirepartcemoyhoveonappartunityhereidhedkewthedipherdlerksfodkgraunwonwitturnsautsheischiterussionherbomilylebtmasdacinfutshehosrelotivesinthegulogotpermshedleorlyhosnalavebarthesavietgavernmentsaiomstillnatsurechashecoscarkingbarfutithinkthisiskeyintelligendeinthemeontimeihovefeencotdhingthefritstheyseemtahovefeenindantodtcithaurbrienwsinthereidhswaktaronwtheyinturnhovefeencotdhingthebrendhitseemslikeceoreollcarkingogoinstaneonatherchidhireollywiwntexpedtonwgivenchotcereowinthebrendhwadumentlostceekiwantthinkthotisodaindiwendemyacnguessisthottherussionsknacchotisgainganonwthotaurfesthapeabundaveringitistafreokintatheirhqonwtrytabinwsamethingthereunbartunotelyoddarwingtamysaurdeyuritheyhovetokentausingonecdiphersalitoirebarordhivestarogeabtapsedretbilessaevenibcemonogetasteoltherelevontbileitcilltokeolatabdamputingtafreokthedipheriottodhofriebmessogebramyuriendryptewusingonomsdadipherkeycarwlengthissixinchidhhewesdrifesthedipheritisverydleversimpletaimplementfutoweviltadrodkonwmyanehapeisthotcedonolsabinwthedipherkeychileinthehqarotleostportabitiplontaenterintcaceeksanwedemfersixteenththerussionsorehastingolorgeprapogonwoeventosportabtheinternotianolefouousstellungcithleowingpalitfuramemfersinottenwondemastabthesedurityteomcillfeaddupiewciththotonwhqseduritycillferelotivelylightcithludkicillgetinonwautciththebilesceneewthotnightonwthencedongettathefattamabthechalereidhswaktarstrotogemollthefesthorry\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(keyword_decipher(c7a, key_a_word, wrap_alphabet=key_a_wrap))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false,
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'A': 'a',\n",
+       " 'B': 'o',\n",
+       " 'C': 'p',\n",
+       " 'D': 'q',\n",
+       " 'E': 'f',\n",
+       " 'F': 'r',\n",
+       " 'G': 's',\n",
+       " 'H': 't',\n",
+       " 'I': 'e',\n",
+       " 'J': 'u',\n",
+       " 'K': 'v',\n",
+       " 'L': 'w',\n",
+       " 'M': 'c',\n",
+       " 'N': 'b',\n",
+       " 'O': 'x',\n",
+       " 'P': 'y',\n",
+       " 'Q': 'z',\n",
+       " 'R': 'd',\n",
+       " 'S': 'g',\n",
+       " 'T': 'h',\n",
+       " 'U': 'i',\n",
+       " 'V': 'j',\n",
+       " 'W': 'k',\n",
+       " 'X': 'l',\n",
+       " 'Y': 'm',\n",
+       " 'Z': 'n'}"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "trans_a = {p.upper(): c for p, c in zip(keyword_cipher_alphabet_of(key_a_word, wrap_alphabet=key_a_wrap), string.ascii_lowercase, )}\n",
+    "trans_a"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'charlie i think i know what is going on but i need to check a few things before i report we may have an opportunity here i checked the cipher clerks background and it turns out she is white russian her family left moscow in but she has relatives in the gulag at perm she clearly has no love for the soviet government so i am still not sure who she was working for but i think this is key intelligence in the meantime i have been watching the brits they seem to have been in contact with our friends in the reichs doktor and they in turn have been watching the french it seems like we are all working against one another which i really didnt expect and given what we read in the french document last week i dont think that is a coincidence my own guess is that the russians know what is going on and that our best hope of uncovering it is to break into their hq and try to find something there unfortunately according to my source yuri they have taken to using a new cipher solitaire for archive storage of top secret files so even if we manage to steal the relevant file it will take alot of computing to break the cipher i attach a brief message from yuri encrypted using an amsco cipher keyword length is six in which he describes the cipher it is very clever simple to implement but a devil to crack and my one hope is that we can also find the cipher key while in the hq or atleast part of it i plan to enter in two weeks on december sixteenth the russians are hosting a large propaganda event as part of the international ebau ausstellung with leading politburo members in attendance most of the security team will be occupied with that and hq security will be relatively light with luck i will get in and out with the files we need that night and then we can get to the bottom of the whole reichs doktor stratagem all the best harry'"
+      ]
+     },
+     "execution_count": 11,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "translations = {\n",
+    " 'A': 'o',\n",
+    " 'B': 'a',\n",
+    " 'C': 'p',\n",
+    " 'D': 'q',\n",
+    " 'E': 'b',\n",
+    " 'F': 'r',\n",
+    " 'G': 's',\n",
+    " 'H': 't',\n",
+    " 'I': 'e',\n",
+    " 'J': 'u',\n",
+    " 'K': 'v',\n",
+    " 'L': 'd',\n",
+    " 'M': 'w',\n",
+    " 'N': 'f',\n",
+    " 'O': 'x',\n",
+    " 'P': 'y',\n",
+    " 'Q': 'z',\n",
+    " 'R': 'c',\n",
+    " 'S': 'g',\n",
+    " 'T': 'h',\n",
+    " 'U': 'i',\n",
+    " 'V': 'j',\n",
+    " 'W': 'k',\n",
+    " 'X': 'l',\n",
+    " 'Y': 'm',\n",
+    " 'Z': 'n'}\n",
+    "translation_table = ''.maketrans(translations)\n",
+    "plaintext = ' '.join(segment(c7a.upper().translate(translation_table)))\n",
+    "plaintext"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'oapqbrsteuvdwfxyzcghijklmn'"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "''.join(translations[l] for l in sorted(translations))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'BERLINSTUVWXYZACDFGHJKMOPQ'"
+      ]
+     },
+     "execution_count": 13,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "inverted_translations = {translations[a]: a for a in translations}\n",
+    "''.join(inverted_translations[l] for l in sorted(inverted_translations))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 14,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'berlinstuvwxyzacdfghjkmopq'"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "keyword_cipher_alphabet_of('berlin', wrap_alphabet=KeywordWrapAlphabet.from_largest)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 15,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "charlie i think i know what is going on but i need to check a few things before i report we may have an opportunity here i checked the cipher clerks background and it turns out she is white russian her family left moscow in but she has relatives in the gulag at perm she clearly has no love for the soviet government so i am still not sure who she was working for but i think this is key intelligence in the meantime i have been watching the brits they seem to have been in contact with our friends in the reichs doktor and they in turn have been watching the french it seems like we are all working against one another which i really didnt expect and given what we read in the french document last week i dont think that is a coincidence my own guess is that the russians know what is going on and that our best hope of uncovering it is to break into their hq and try to find something there unfortunately according to my source yuri they have taken to using a new cipher solitaire for archive storage of top secret files so even if we manage to steal the relevant file it will take alot of computing to break the cipher i attach a brief message from yuri encrypted using an amsco cipher keyword length is six in which he describes the cipher it is very clever simple to implement but a devil to crack and my one hope is that we can also find the cipher key while in the hq or atleast part of it i plan to enter in two weeks on december sixteenth the russians are hosting a large propaganda event as part of the international ebau ausstellung with leading politburo members in attendance most of the security team will be occupied with that and hq security will be relatively light with luck i will get in and out with the files we need that night and then we can get to the bottom of the whole reichs doktor stratagem all the best harry\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(' '.join(segment(keyword_decipher(c7a, 'berlin', wrap_alphabet=KeywordWrapAlphabet.from_largest))))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 16,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{(0, 1, 2, 3, 4, 5): (0, 1, 2, 3, 4, 5),\n",
+       " (0, 1, 2, 3, 5, 4): (0, 1, 2, 3, 5, 4),\n",
+       " (0, 1, 2, 4, 3, 5): (0, 1, 2, 4, 3, 5),\n",
+       " (0, 1, 2, 4, 5, 3): (0, 1, 2, 4, 5, 3),\n",
+       " (0, 1, 2, 5, 3, 4): (0, 1, 2, 5, 3, 4),\n",
+       " (0, 1, 2, 5, 4, 3): (0, 1, 2, 5, 4, 3),\n",
+       " (0, 1, 3, 2, 4, 5): (0, 1, 3, 2, 4, 5),\n",
+       " (0, 1, 3, 2, 5, 4): (0, 1, 3, 2, 5, 4),\n",
+       " (0, 1, 3, 4, 2, 5): (0, 1, 3, 4, 2, 5),\n",
+       " (0, 1, 3, 4, 5, 2): (0, 1, 3, 4, 5, 2),\n",
+       " (0, 1, 3, 5, 2, 4): (0, 1, 3, 5, 2, 4),\n",
+       " (0, 1, 3, 5, 4, 2): (0, 1, 3, 5, 4, 2),\n",
+       " (0, 1, 4, 2, 3, 5): (0, 1, 4, 2, 3, 5),\n",
+       " (0, 1, 4, 2, 5, 3): (0, 1, 4, 2, 5, 3),\n",
+       " (0, 1, 4, 3, 2, 5): (0, 1, 4, 3, 2, 5),\n",
+       " (0, 1, 4, 3, 5, 2): (0, 1, 4, 3, 5, 2),\n",
+       " (0, 1, 4, 5, 2, 3): (0, 1, 4, 5, 2, 3),\n",
+       " (0, 1, 4, 5, 3, 2): (0, 1, 4, 5, 3, 2),\n",
+       " (0, 1, 5, 2, 3, 4): (0, 1, 5, 2, 3, 4),\n",
+       " (0, 1, 5, 2, 4, 3): (0, 1, 5, 2, 4, 3),\n",
+       " (0, 1, 5, 3, 2, 4): (0, 1, 5, 3, 2, 4),\n",
+       " (0, 1, 5, 3, 4, 2): (0, 1, 5, 3, 4, 2),\n",
+       " (0, 1, 5, 4, 2, 3): (0, 1, 5, 4, 2, 3),\n",
+       " (0, 1, 5, 4, 3, 2): (0, 1, 5, 4, 3, 2),\n",
+       " (0, 2, 1, 3, 4, 5): (0, 2, 1, 3, 4, 5),\n",
+       " (0, 2, 1, 3, 5, 4): (0, 2, 1, 3, 5, 4),\n",
+       " (0, 2, 1, 4, 3, 5): (0, 2, 1, 4, 3, 5),\n",
+       " (0, 2, 1, 4, 5, 3): (0, 2, 1, 4, 5, 3),\n",
+       " (0, 2, 1, 5, 3, 4): (0, 2, 1, 5, 3, 4),\n",
+       " (0, 2, 1, 5, 4, 3): (0, 2, 1, 5, 4, 3),\n",
+       " (0, 2, 3, 1, 4, 5): (0, 2, 3, 1, 4, 5),\n",
+       " (0, 2, 3, 1, 5, 4): (0, 2, 3, 1, 5, 4),\n",
+       " (0, 2, 3, 4, 1, 5): (0, 2, 3, 4, 1, 5),\n",
+       " (0, 2, 3, 4, 5, 1): (0, 2, 3, 4, 5, 1),\n",
+       " (0, 2, 3, 5, 1, 4): (0, 2, 3, 5, 1, 4),\n",
+       " (0, 2, 3, 5, 4, 1): (0, 2, 3, 5, 4, 1),\n",
+       " (0, 2, 4, 1, 3, 5): (0, 2, 4, 1, 3, 5),\n",
+       " (0, 2, 4, 1, 5, 3): (0, 2, 4, 1, 5, 3),\n",
+       " (0, 2, 4, 3, 1, 5): (0, 2, 4, 3, 1, 5),\n",
+       " (0, 2, 4, 3, 5, 1): (0, 2, 4, 3, 5, 1),\n",
+       " (0, 2, 4, 5, 1, 3): (0, 2, 4, 5, 1, 3),\n",
+       " (0, 2, 4, 5, 3, 1): (0, 2, 4, 5, 3, 1),\n",
+       " (0, 2, 5, 1, 3, 4): (0, 2, 5, 1, 3, 4),\n",
+       " (0, 2, 5, 1, 4, 3): (0, 2, 5, 1, 4, 3),\n",
+       " (0, 2, 5, 3, 1, 4): (0, 2, 5, 3, 1, 4),\n",
+       " (0, 2, 5, 3, 4, 1): (0, 2, 5, 3, 4, 1),\n",
+       " (0, 2, 5, 4, 1, 3): (0, 2, 5, 4, 1, 3),\n",
+       " (0, 2, 5, 4, 3, 1): (0, 2, 5, 4, 3, 1),\n",
+       " (0, 3, 1, 2, 4, 5): (0, 3, 1, 2, 4, 5),\n",
+       " (0, 3, 1, 2, 5, 4): (0, 3, 1, 2, 5, 4),\n",
+       " (0, 3, 1, 4, 2, 5): (0, 3, 1, 4, 2, 5),\n",
+       " (0, 3, 1, 4, 5, 2): (0, 3, 1, 4, 5, 2),\n",
+       " (0, 3, 1, 5, 2, 4): (0, 3, 1, 5, 2, 4),\n",
+       " (0, 3, 1, 5, 4, 2): (0, 3, 1, 5, 4, 2),\n",
+       " (0, 3, 2, 1, 4, 5): (0, 3, 2, 1, 4, 5),\n",
+       " (0, 3, 2, 1, 5, 4): (0, 3, 2, 1, 5, 4),\n",
+       " (0, 3, 2, 4, 1, 5): (0, 3, 2, 4, 1, 5),\n",
+       " (0, 3, 2, 4, 5, 1): (0, 3, 2, 4, 5, 1),\n",
+       " (0, 3, 2, 5, 1, 4): (0, 3, 2, 5, 1, 4),\n",
+       " (0, 3, 2, 5, 4, 1): (0, 3, 2, 5, 4, 1),\n",
+       " (0, 3, 4, 1, 2, 5): (0, 3, 4, 1, 2, 5),\n",
+       " (0, 3, 4, 1, 5, 2): (0, 3, 4, 1, 5, 2),\n",
+       " (0, 3, 4, 2, 1, 5): (0, 3, 4, 2, 1, 5),\n",
+       " (0, 3, 4, 2, 5, 1): (0, 3, 4, 2, 5, 1),\n",
+       " (0, 3, 4, 5, 1, 2): (0, 3, 4, 5, 1, 2),\n",
+       " (0, 3, 4, 5, 2, 1): (0, 3, 4, 5, 2, 1),\n",
+       " (0, 3, 5, 1, 2, 4): (0, 3, 5, 1, 2, 4),\n",
+       " (0, 3, 5, 1, 4, 2): (0, 3, 5, 1, 4, 2),\n",
+       " (0, 3, 5, 2, 1, 4): (0, 3, 5, 2, 1, 4),\n",
+       " (0, 3, 5, 2, 4, 1): (0, 3, 5, 2, 4, 1),\n",
+       " (0, 3, 5, 4, 1, 2): (0, 3, 5, 4, 1, 2),\n",
+       " (0, 3, 5, 4, 2, 1): (0, 3, 5, 4, 2, 1),\n",
+       " (0, 4, 1, 2, 3, 5): (0, 4, 1, 2, 3, 5),\n",
+       " (0, 4, 1, 2, 5, 3): (0, 4, 1, 2, 5, 3),\n",
+       " (0, 4, 1, 3, 2, 5): (0, 4, 1, 3, 2, 5),\n",
+       " (0, 4, 1, 3, 5, 2): (0, 4, 1, 3, 5, 2),\n",
+       " (0, 4, 1, 5, 2, 3): (0, 4, 1, 5, 2, 3),\n",
+       " (0, 4, 1, 5, 3, 2): (0, 4, 1, 5, 3, 2),\n",
+       " (0, 4, 2, 1, 3, 5): (0, 4, 2, 1, 3, 5),\n",
+       " (0, 4, 2, 1, 5, 3): (0, 4, 2, 1, 5, 3),\n",
+       " (0, 4, 2, 3, 1, 5): (0, 4, 2, 3, 1, 5),\n",
+       " (0, 4, 2, 3, 5, 1): (0, 4, 2, 3, 5, 1),\n",
+       " (0, 4, 2, 5, 1, 3): (0, 4, 2, 5, 1, 3),\n",
+       " (0, 4, 2, 5, 3, 1): (0, 4, 2, 5, 3, 1),\n",
+       " (0, 4, 3, 1, 2, 5): (0, 4, 3, 1, 2, 5),\n",
+       " (0, 4, 3, 1, 5, 2): (0, 4, 3, 1, 5, 2),\n",
+       " (0, 4, 3, 2, 1, 5): (0, 4, 3, 2, 1, 5),\n",
+       " (0, 4, 3, 2, 5, 1): (0, 4, 3, 2, 5, 1),\n",
+       " (0, 4, 3, 5, 1, 2): (0, 4, 3, 5, 1, 2),\n",
+       " (0, 4, 3, 5, 2, 1): (0, 4, 3, 5, 2, 1),\n",
+       " (0, 4, 5, 1, 2, 3): (0, 4, 5, 1, 2, 3),\n",
+       " (0, 4, 5, 1, 3, 2): (0, 4, 5, 1, 3, 2),\n",
+       " (0, 4, 5, 2, 1, 3): (0, 4, 5, 2, 1, 3),\n",
+       " (0, 4, 5, 2, 3, 1): (0, 4, 5, 2, 3, 1),\n",
+       " (0, 4, 5, 3, 1, 2): (0, 4, 5, 3, 1, 2),\n",
+       " (0, 4, 5, 3, 2, 1): (0, 4, 5, 3, 2, 1),\n",
+       " (0, 5, 1, 2, 3, 4): (0, 5, 1, 2, 3, 4),\n",
+       " (0, 5, 1, 2, 4, 3): (0, 5, 1, 2, 4, 3),\n",
+       " (0, 5, 1, 3, 2, 4): (0, 5, 1, 3, 2, 4),\n",
+       " (0, 5, 1, 3, 4, 2): (0, 5, 1, 3, 4, 2),\n",
+       " (0, 5, 1, 4, 2, 3): (0, 5, 1, 4, 2, 3),\n",
+       " (0, 5, 1, 4, 3, 2): (0, 5, 1, 4, 3, 2),\n",
+       " (0, 5, 2, 1, 3, 4): (0, 5, 2, 1, 3, 4),\n",
+       " (0, 5, 2, 1, 4, 3): (0, 5, 2, 1, 4, 3),\n",
+       " (0, 5, 2, 3, 1, 4): (0, 5, 2, 3, 1, 4),\n",
+       " (0, 5, 2, 3, 4, 1): (0, 5, 2, 3, 4, 1),\n",
+       " (0, 5, 2, 4, 1, 3): (0, 5, 2, 4, 1, 3),\n",
+       " (0, 5, 2, 4, 3, 1): (0, 5, 2, 4, 3, 1),\n",
+       " (0, 5, 3, 1, 2, 4): (0, 5, 3, 1, 2, 4),\n",
+       " (0, 5, 3, 1, 4, 2): (0, 5, 3, 1, 4, 2),\n",
+       " (0, 5, 3, 2, 1, 4): (0, 5, 3, 2, 1, 4),\n",
+       " (0, 5, 3, 2, 4, 1): (0, 5, 3, 2, 4, 1),\n",
+       " (0, 5, 3, 4, 1, 2): (0, 5, 3, 4, 1, 2),\n",
+       " (0, 5, 3, 4, 2, 1): (0, 5, 3, 4, 2, 1),\n",
+       " (0, 5, 4, 1, 2, 3): (0, 5, 4, 1, 2, 3),\n",
+       " (0, 5, 4, 1, 3, 2): (0, 5, 4, 1, 3, 2),\n",
+       " (0, 5, 4, 2, 1, 3): (0, 5, 4, 2, 1, 3),\n",
+       " (0, 5, 4, 2, 3, 1): (0, 5, 4, 2, 3, 1),\n",
+       " (0, 5, 4, 3, 1, 2): (0, 5, 4, 3, 1, 2),\n",
+       " (0, 5, 4, 3, 2, 1): (0, 5, 4, 3, 2, 1),\n",
+       " (1, 0, 2, 3, 4, 5): (1, 0, 2, 3, 4, 5),\n",
+       " (1, 0, 2, 3, 5, 4): (1, 0, 2, 3, 5, 4),\n",
+       " (1, 0, 2, 4, 3, 5): (1, 0, 2, 4, 3, 5),\n",
+       " (1, 0, 2, 4, 5, 3): (1, 0, 2, 4, 5, 3),\n",
+       " (1, 0, 2, 5, 3, 4): (1, 0, 2, 5, 3, 4),\n",
+       " (1, 0, 2, 5, 4, 3): (1, 0, 2, 5, 4, 3),\n",
+       " (1, 0, 3, 2, 4, 5): (1, 0, 3, 2, 4, 5),\n",
+       " (1, 0, 3, 2, 5, 4): (1, 0, 3, 2, 5, 4),\n",
+       " (1, 0, 3, 4, 2, 5): (1, 0, 3, 4, 2, 5),\n",
+       " (1, 0, 3, 4, 5, 2): (1, 0, 3, 4, 5, 2),\n",
+       " (1, 0, 3, 5, 2, 4): (1, 0, 3, 5, 2, 4),\n",
+       " (1, 0, 3, 5, 4, 2): (1, 0, 3, 5, 4, 2),\n",
+       " (1, 0, 4, 2, 3, 5): (1, 0, 4, 2, 3, 5),\n",
+       " (1, 0, 4, 2, 5, 3): (1, 0, 4, 2, 5, 3),\n",
+       " (1, 0, 4, 3, 2, 5): (1, 0, 4, 3, 2, 5),\n",
+       " (1, 0, 4, 3, 5, 2): (1, 0, 4, 3, 5, 2),\n",
+       " (1, 0, 4, 5, 2, 3): (1, 0, 4, 5, 2, 3),\n",
+       " (1, 0, 4, 5, 3, 2): (1, 0, 4, 5, 3, 2),\n",
+       " (1, 0, 5, 2, 3, 4): (1, 0, 5, 2, 3, 4),\n",
+       " (1, 0, 5, 2, 4, 3): (1, 0, 5, 2, 4, 3),\n",
+       " (1, 0, 5, 3, 2, 4): (1, 0, 5, 3, 2, 4),\n",
+       " (1, 0, 5, 3, 4, 2): (1, 0, 5, 3, 4, 2),\n",
+       " (1, 0, 5, 4, 2, 3): (1, 0, 5, 4, 2, 3),\n",
+       " (1, 0, 5, 4, 3, 2): (1, 0, 5, 4, 3, 2),\n",
+       " (1, 2, 0, 3, 4, 5): (1, 2, 0, 3, 4, 5),\n",
+       " (1, 2, 0, 3, 5, 4): (1, 2, 0, 3, 5, 4),\n",
+       " (1, 2, 0, 4, 3, 5): (1, 2, 0, 4, 3, 5),\n",
+       " (1, 2, 0, 4, 5, 3): (1, 2, 0, 4, 5, 3),\n",
+       " (1, 2, 0, 5, 3, 4): (1, 2, 0, 5, 3, 4),\n",
+       " (1, 2, 0, 5, 4, 3): (1, 2, 0, 5, 4, 3),\n",
+       " (1, 2, 3, 0, 4, 5): (1, 2, 3, 0, 4, 5),\n",
+       " (1, 2, 3, 0, 5, 4): (1, 2, 3, 0, 5, 4),\n",
+       " (1, 2, 3, 4, 0, 5): (1, 2, 3, 4, 0, 5),\n",
+       " (1, 2, 3, 4, 5, 0): (1, 2, 3, 4, 5, 0),\n",
+       " (1, 2, 3, 5, 0, 4): (1, 2, 3, 5, 0, 4),\n",
+       " (1, 2, 3, 5, 4, 0): (1, 2, 3, 5, 4, 0),\n",
+       " (1, 2, 4, 0, 3, 5): (1, 2, 4, 0, 3, 5),\n",
+       " (1, 2, 4, 0, 5, 3): (1, 2, 4, 0, 5, 3),\n",
+       " (1, 2, 4, 3, 0, 5): (1, 2, 4, 3, 0, 5),\n",
+       " (1, 2, 4, 3, 5, 0): (1, 2, 4, 3, 5, 0),\n",
+       " (1, 2, 4, 5, 0, 3): (1, 2, 4, 5, 0, 3),\n",
+       " (1, 2, 4, 5, 3, 0): (1, 2, 4, 5, 3, 0),\n",
+       " (1, 2, 5, 0, 3, 4): (1, 2, 5, 0, 3, 4),\n",
+       " (1, 2, 5, 0, 4, 3): (1, 2, 5, 0, 4, 3),\n",
+       " (1, 2, 5, 3, 0, 4): (1, 2, 5, 3, 0, 4),\n",
+       " (1, 2, 5, 3, 4, 0): (1, 2, 5, 3, 4, 0),\n",
+       " (1, 2, 5, 4, 0, 3): (1, 2, 5, 4, 0, 3),\n",
+       " (1, 2, 5, 4, 3, 0): (1, 2, 5, 4, 3, 0),\n",
+       " (1, 3, 0, 2, 4, 5): (1, 3, 0, 2, 4, 5),\n",
+       " (1, 3, 0, 2, 5, 4): (1, 3, 0, 2, 5, 4),\n",
+       " (1, 3, 0, 4, 2, 5): (1, 3, 0, 4, 2, 5),\n",
+       " (1, 3, 0, 4, 5, 2): (1, 3, 0, 4, 5, 2),\n",
+       " (1, 3, 0, 5, 2, 4): (1, 3, 0, 5, 2, 4),\n",
+       " (1, 3, 0, 5, 4, 2): (1, 3, 0, 5, 4, 2),\n",
+       " (1, 3, 2, 0, 4, 5): (1, 3, 2, 0, 4, 5),\n",
+       " (1, 3, 2, 0, 5, 4): (1, 3, 2, 0, 5, 4),\n",
+       " (1, 3, 2, 4, 0, 5): (1, 3, 2, 4, 0, 5),\n",
+       " (1, 3, 2, 4, 5, 0): (1, 3, 2, 4, 5, 0),\n",
+       " (1, 3, 2, 5, 0, 4): (1, 3, 2, 5, 0, 4),\n",
+       " (1, 3, 2, 5, 4, 0): (1, 3, 2, 5, 4, 0),\n",
+       " (1, 3, 4, 0, 2, 5): (1, 3, 4, 0, 2, 5),\n",
+       " (1, 3, 4, 0, 5, 2): (1, 3, 4, 0, 5, 2),\n",
+       " (1, 3, 4, 2, 0, 5): (1, 3, 4, 2, 0, 5),\n",
+       " (1, 3, 4, 2, 5, 0): (1, 3, 4, 2, 5, 0),\n",
+       " (1, 3, 4, 5, 0, 2): (1, 3, 4, 5, 0, 2),\n",
+       " (1, 3, 4, 5, 2, 0): (1, 3, 4, 5, 2, 0),\n",
+       " (1, 3, 5, 0, 2, 4): (1, 3, 5, 0, 2, 4),\n",
+       " (1, 3, 5, 0, 4, 2): (1, 3, 5, 0, 4, 2),\n",
+       " (1, 3, 5, 2, 0, 4): (1, 3, 5, 2, 0, 4),\n",
+       " (1, 3, 5, 2, 4, 0): (1, 3, 5, 2, 4, 0),\n",
+       " (1, 3, 5, 4, 0, 2): (1, 3, 5, 4, 0, 2),\n",
+       " (1, 3, 5, 4, 2, 0): (1, 3, 5, 4, 2, 0),\n",
+       " (1, 4, 0, 2, 3, 5): (1, 4, 0, 2, 3, 5),\n",
+       " (1, 4, 0, 2, 5, 3): (1, 4, 0, 2, 5, 3),\n",
+       " (1, 4, 0, 3, 2, 5): (1, 4, 0, 3, 2, 5),\n",
+       " (1, 4, 0, 3, 5, 2): (1, 4, 0, 3, 5, 2),\n",
+       " (1, 4, 0, 5, 2, 3): (1, 4, 0, 5, 2, 3),\n",
+       " (1, 4, 0, 5, 3, 2): (1, 4, 0, 5, 3, 2),\n",
+       " (1, 4, 2, 0, 3, 5): (1, 4, 2, 0, 3, 5),\n",
+       " (1, 4, 2, 0, 5, 3): (1, 4, 2, 0, 5, 3),\n",
+       " (1, 4, 2, 3, 0, 5): (1, 4, 2, 3, 0, 5),\n",
+       " (1, 4, 2, 3, 5, 0): (1, 4, 2, 3, 5, 0),\n",
+       " (1, 4, 2, 5, 0, 3): (1, 4, 2, 5, 0, 3),\n",
+       " (1, 4, 2, 5, 3, 0): (1, 4, 2, 5, 3, 0),\n",
+       " (1, 4, 3, 0, 2, 5): (1, 4, 3, 0, 2, 5),\n",
+       " (1, 4, 3, 0, 5, 2): (1, 4, 3, 0, 5, 2),\n",
+       " (1, 4, 3, 2, 0, 5): (1, 4, 3, 2, 0, 5),\n",
+       " (1, 4, 3, 2, 5, 0): (1, 4, 3, 2, 5, 0),\n",
+       " (1, 4, 3, 5, 0, 2): (1, 4, 3, 5, 0, 2),\n",
+       " (1, 4, 3, 5, 2, 0): (1, 4, 3, 5, 2, 0),\n",
+       " (1, 4, 5, 0, 2, 3): (1, 4, 5, 0, 2, 3),\n",
+       " (1, 4, 5, 0, 3, 2): (1, 4, 5, 0, 3, 2),\n",
+       " (1, 4, 5, 2, 0, 3): (1, 4, 5, 2, 0, 3),\n",
+       " (1, 4, 5, 2, 3, 0): (1, 4, 5, 2, 3, 0),\n",
+       " (1, 4, 5, 3, 0, 2): (1, 4, 5, 3, 0, 2),\n",
+       " (1, 4, 5, 3, 2, 0): (1, 4, 5, 3, 2, 0),\n",
+       " (1, 5, 0, 2, 3, 4): (1, 5, 0, 2, 3, 4),\n",
+       " (1, 5, 0, 2, 4, 3): (1, 5, 0, 2, 4, 3),\n",
+       " (1, 5, 0, 3, 2, 4): (1, 5, 0, 3, 2, 4),\n",
+       " (1, 5, 0, 3, 4, 2): (1, 5, 0, 3, 4, 2),\n",
+       " (1, 5, 0, 4, 2, 3): (1, 5, 0, 4, 2, 3),\n",
+       " (1, 5, 0, 4, 3, 2): (1, 5, 0, 4, 3, 2),\n",
+       " (1, 5, 2, 0, 3, 4): (1, 5, 2, 0, 3, 4),\n",
+       " (1, 5, 2, 0, 4, 3): (1, 5, 2, 0, 4, 3),\n",
+       " (1, 5, 2, 3, 0, 4): (1, 5, 2, 3, 0, 4),\n",
+       " (1, 5, 2, 3, 4, 0): (1, 5, 2, 3, 4, 0),\n",
+       " (1, 5, 2, 4, 0, 3): (1, 5, 2, 4, 0, 3),\n",
+       " (1, 5, 2, 4, 3, 0): (1, 5, 2, 4, 3, 0),\n",
+       " (1, 5, 3, 0, 2, 4): (1, 5, 3, 0, 2, 4),\n",
+       " (1, 5, 3, 0, 4, 2): (1, 5, 3, 0, 4, 2),\n",
+       " (1, 5, 3, 2, 0, 4): (1, 5, 3, 2, 0, 4),\n",
+       " (1, 5, 3, 2, 4, 0): (1, 5, 3, 2, 4, 0),\n",
+       " (1, 5, 3, 4, 0, 2): (1, 5, 3, 4, 0, 2),\n",
+       " (1, 5, 3, 4, 2, 0): (1, 5, 3, 4, 2, 0),\n",
+       " (1, 5, 4, 0, 2, 3): (1, 5, 4, 0, 2, 3),\n",
+       " (1, 5, 4, 0, 3, 2): (1, 5, 4, 0, 3, 2),\n",
+       " (1, 5, 4, 2, 0, 3): (1, 5, 4, 2, 0, 3),\n",
+       " (1, 5, 4, 2, 3, 0): (1, 5, 4, 2, 3, 0),\n",
+       " (1, 5, 4, 3, 0, 2): (1, 5, 4, 3, 0, 2),\n",
+       " (1, 5, 4, 3, 2, 0): (1, 5, 4, 3, 2, 0),\n",
+       " (2, 0, 1, 3, 4, 5): (2, 0, 1, 3, 4, 5),\n",
+       " (2, 0, 1, 3, 5, 4): (2, 0, 1, 3, 5, 4),\n",
+       " (2, 0, 1, 4, 3, 5): (2, 0, 1, 4, 3, 5),\n",
+       " (2, 0, 1, 4, 5, 3): (2, 0, 1, 4, 5, 3),\n",
+       " (2, 0, 1, 5, 3, 4): (2, 0, 1, 5, 3, 4),\n",
+       " (2, 0, 1, 5, 4, 3): (2, 0, 1, 5, 4, 3),\n",
+       " (2, 0, 3, 1, 4, 5): (2, 0, 3, 1, 4, 5),\n",
+       " (2, 0, 3, 1, 5, 4): (2, 0, 3, 1, 5, 4),\n",
+       " (2, 0, 3, 4, 1, 5): (2, 0, 3, 4, 1, 5),\n",
+       " (2, 0, 3, 4, 5, 1): (2, 0, 3, 4, 5, 1),\n",
+       " (2, 0, 3, 5, 1, 4): (2, 0, 3, 5, 1, 4),\n",
+       " (2, 0, 3, 5, 4, 1): (2, 0, 3, 5, 4, 1),\n",
+       " (2, 0, 4, 1, 3, 5): (2, 0, 4, 1, 3, 5),\n",
+       " (2, 0, 4, 1, 5, 3): (2, 0, 4, 1, 5, 3),\n",
+       " (2, 0, 4, 3, 1, 5): (2, 0, 4, 3, 1, 5),\n",
+       " (2, 0, 4, 3, 5, 1): (2, 0, 4, 3, 5, 1),\n",
+       " (2, 0, 4, 5, 1, 3): (2, 0, 4, 5, 1, 3),\n",
+       " (2, 0, 4, 5, 3, 1): (2, 0, 4, 5, 3, 1),\n",
+       " (2, 0, 5, 1, 3, 4): (2, 0, 5, 1, 3, 4),\n",
+       " (2, 0, 5, 1, 4, 3): (2, 0, 5, 1, 4, 3),\n",
+       " (2, 0, 5, 3, 1, 4): (2, 0, 5, 3, 1, 4),\n",
+       " (2, 0, 5, 3, 4, 1): (2, 0, 5, 3, 4, 1),\n",
+       " (2, 0, 5, 4, 1, 3): (2, 0, 5, 4, 1, 3),\n",
+       " (2, 0, 5, 4, 3, 1): (2, 0, 5, 4, 3, 1),\n",
+       " (2, 1, 0, 3, 4, 5): (2, 1, 0, 3, 4, 5),\n",
+       " (2, 1, 0, 3, 5, 4): (2, 1, 0, 3, 5, 4),\n",
+       " (2, 1, 0, 4, 3, 5): (2, 1, 0, 4, 3, 5),\n",
+       " (2, 1, 0, 4, 5, 3): (2, 1, 0, 4, 5, 3),\n",
+       " (2, 1, 0, 5, 3, 4): (2, 1, 0, 5, 3, 4),\n",
+       " (2, 1, 0, 5, 4, 3): (2, 1, 0, 5, 4, 3),\n",
+       " (2, 1, 3, 0, 4, 5): (2, 1, 3, 0, 4, 5),\n",
+       " (2, 1, 3, 0, 5, 4): (2, 1, 3, 0, 5, 4),\n",
+       " (2, 1, 3, 4, 0, 5): (2, 1, 3, 4, 0, 5),\n",
+       " (2, 1, 3, 4, 5, 0): (2, 1, 3, 4, 5, 0),\n",
+       " (2, 1, 3, 5, 0, 4): (2, 1, 3, 5, 0, 4),\n",
+       " (2, 1, 3, 5, 4, 0): (2, 1, 3, 5, 4, 0),\n",
+       " (2, 1, 4, 0, 3, 5): (2, 1, 4, 0, 3, 5),\n",
+       " (2, 1, 4, 0, 5, 3): (2, 1, 4, 0, 5, 3),\n",
+       " (2, 1, 4, 3, 0, 5): (2, 1, 4, 3, 0, 5),\n",
+       " (2, 1, 4, 3, 5, 0): (2, 1, 4, 3, 5, 0),\n",
+       " (2, 1, 4, 5, 0, 3): (2, 1, 4, 5, 0, 3),\n",
+       " (2, 1, 4, 5, 3, 0): (2, 1, 4, 5, 3, 0),\n",
+       " (2, 1, 5, 0, 3, 4): (2, 1, 5, 0, 3, 4),\n",
+       " (2, 1, 5, 0, 4, 3): (2, 1, 5, 0, 4, 3),\n",
+       " (2, 1, 5, 3, 0, 4): (2, 1, 5, 3, 0, 4),\n",
+       " (2, 1, 5, 3, 4, 0): (2, 1, 5, 3, 4, 0),\n",
+       " (2, 1, 5, 4, 0, 3): (2, 1, 5, 4, 0, 3),\n",
+       " (2, 1, 5, 4, 3, 0): (2, 1, 5, 4, 3, 0),\n",
+       " (2, 3, 0, 1, 4, 5): (2, 3, 0, 1, 4, 5),\n",
+       " (2, 3, 0, 1, 5, 4): (2, 3, 0, 1, 5, 4),\n",
+       " (2, 3, 0, 4, 1, 5): (2, 3, 0, 4, 1, 5),\n",
+       " (2, 3, 0, 4, 5, 1): (2, 3, 0, 4, 5, 1),\n",
+       " (2, 3, 0, 5, 1, 4): (2, 3, 0, 5, 1, 4),\n",
+       " (2, 3, 0, 5, 4, 1): (2, 3, 0, 5, 4, 1),\n",
+       " (2, 3, 1, 0, 4, 5): (2, 3, 1, 0, 4, 5),\n",
+       " (2, 3, 1, 0, 5, 4): (2, 3, 1, 0, 5, 4),\n",
+       " (2, 3, 1, 4, 0, 5): (2, 3, 1, 4, 0, 5),\n",
+       " (2, 3, 1, 4, 5, 0): (2, 3, 1, 4, 5, 0),\n",
+       " (2, 3, 1, 5, 0, 4): (2, 3, 1, 5, 0, 4),\n",
+       " (2, 3, 1, 5, 4, 0): (2, 3, 1, 5, 4, 0),\n",
+       " (2, 3, 4, 0, 1, 5): (2, 3, 4, 0, 1, 5),\n",
+       " (2, 3, 4, 0, 5, 1): (2, 3, 4, 0, 5, 1),\n",
+       " (2, 3, 4, 1, 0, 5): (2, 3, 4, 1, 0, 5),\n",
+       " (2, 3, 4, 1, 5, 0): (2, 3, 4, 1, 5, 0),\n",
+       " (2, 3, 4, 5, 0, 1): (2, 3, 4, 5, 0, 1),\n",
+       " (2, 3, 4, 5, 1, 0): (2, 3, 4, 5, 1, 0),\n",
+       " (2, 3, 5, 0, 1, 4): (2, 3, 5, 0, 1, 4),\n",
+       " (2, 3, 5, 0, 4, 1): (2, 3, 5, 0, 4, 1),\n",
+       " (2, 3, 5, 1, 0, 4): (2, 3, 5, 1, 0, 4),\n",
+       " (2, 3, 5, 1, 4, 0): (2, 3, 5, 1, 4, 0),\n",
+       " (2, 3, 5, 4, 0, 1): (2, 3, 5, 4, 0, 1),\n",
+       " (2, 3, 5, 4, 1, 0): (2, 3, 5, 4, 1, 0),\n",
+       " (2, 4, 0, 1, 3, 5): (2, 4, 0, 1, 3, 5),\n",
+       " (2, 4, 0, 1, 5, 3): (2, 4, 0, 1, 5, 3),\n",
+       " (2, 4, 0, 3, 1, 5): (2, 4, 0, 3, 1, 5),\n",
+       " (2, 4, 0, 3, 5, 1): (2, 4, 0, 3, 5, 1),\n",
+       " (2, 4, 0, 5, 1, 3): (2, 4, 0, 5, 1, 3),\n",
+       " (2, 4, 0, 5, 3, 1): (2, 4, 0, 5, 3, 1),\n",
+       " (2, 4, 1, 0, 3, 5): (2, 4, 1, 0, 3, 5),\n",
+       " (2, 4, 1, 0, 5, 3): (2, 4, 1, 0, 5, 3),\n",
+       " (2, 4, 1, 3, 0, 5): (2, 4, 1, 3, 0, 5),\n",
+       " (2, 4, 1, 3, 5, 0): (2, 4, 1, 3, 5, 0),\n",
+       " (2, 4, 1, 5, 0, 3): (2, 4, 1, 5, 0, 3),\n",
+       " (2, 4, 1, 5, 3, 0): (2, 4, 1, 5, 3, 0),\n",
+       " (2, 4, 3, 0, 1, 5): (2, 4, 3, 0, 1, 5),\n",
+       " (2, 4, 3, 0, 5, 1): (2, 4, 3, 0, 5, 1),\n",
+       " (2, 4, 3, 1, 0, 5): (2, 4, 3, 1, 0, 5),\n",
+       " (2, 4, 3, 1, 5, 0): (2, 4, 3, 1, 5, 0),\n",
+       " (2, 4, 3, 5, 0, 1): (2, 4, 3, 5, 0, 1),\n",
+       " (2, 4, 3, 5, 1, 0): (2, 4, 3, 5, 1, 0),\n",
+       " (2, 4, 5, 0, 1, 3): (2, 4, 5, 0, 1, 3),\n",
+       " (2, 4, 5, 0, 3, 1): (2, 4, 5, 0, 3, 1),\n",
+       " (2, 4, 5, 1, 0, 3): (2, 4, 5, 1, 0, 3),\n",
+       " (2, 4, 5, 1, 3, 0): (2, 4, 5, 1, 3, 0),\n",
+       " (2, 4, 5, 3, 0, 1): (2, 4, 5, 3, 0, 1),\n",
+       " (2, 4, 5, 3, 1, 0): (2, 4, 5, 3, 1, 0),\n",
+       " (2, 5, 0, 1, 3, 4): (2, 5, 0, 1, 3, 4),\n",
+       " (2, 5, 0, 1, 4, 3): (2, 5, 0, 1, 4, 3),\n",
+       " (2, 5, 0, 3, 1, 4): (2, 5, 0, 3, 1, 4),\n",
+       " (2, 5, 0, 3, 4, 1): (2, 5, 0, 3, 4, 1),\n",
+       " (2, 5, 0, 4, 1, 3): (2, 5, 0, 4, 1, 3),\n",
+       " (2, 5, 0, 4, 3, 1): (2, 5, 0, 4, 3, 1),\n",
+       " (2, 5, 1, 0, 3, 4): (2, 5, 1, 0, 3, 4),\n",
+       " (2, 5, 1, 0, 4, 3): (2, 5, 1, 0, 4, 3),\n",
+       " (2, 5, 1, 3, 0, 4): (2, 5, 1, 3, 0, 4),\n",
+       " (2, 5, 1, 3, 4, 0): (2, 5, 1, 3, 4, 0),\n",
+       " (2, 5, 1, 4, 0, 3): (2, 5, 1, 4, 0, 3),\n",
+       " (2, 5, 1, 4, 3, 0): (2, 5, 1, 4, 3, 0),\n",
+       " (2, 5, 3, 0, 1, 4): (2, 5, 3, 0, 1, 4),\n",
+       " (2, 5, 3, 0, 4, 1): (2, 5, 3, 0, 4, 1),\n",
+       " (2, 5, 3, 1, 0, 4): (2, 5, 3, 1, 0, 4),\n",
+       " (2, 5, 3, 1, 4, 0): (2, 5, 3, 1, 4, 0),\n",
+       " (2, 5, 3, 4, 0, 1): (2, 5, 3, 4, 0, 1),\n",
+       " (2, 5, 3, 4, 1, 0): (2, 5, 3, 4, 1, 0),\n",
+       " (2, 5, 4, 0, 1, 3): (2, 5, 4, 0, 1, 3),\n",
+       " (2, 5, 4, 0, 3, 1): (2, 5, 4, 0, 3, 1),\n",
+       " (2, 5, 4, 1, 0, 3): (2, 5, 4, 1, 0, 3),\n",
+       " (2, 5, 4, 1, 3, 0): (2, 5, 4, 1, 3, 0),\n",
+       " (2, 5, 4, 3, 0, 1): (2, 5, 4, 3, 0, 1),\n",
+       " (2, 5, 4, 3, 1, 0): (2, 5, 4, 3, 1, 0),\n",
+       " (3, 0, 1, 2, 4, 5): (3, 0, 1, 2, 4, 5),\n",
+       " (3, 0, 1, 2, 5, 4): (3, 0, 1, 2, 5, 4),\n",
+       " (3, 0, 1, 4, 2, 5): (3, 0, 1, 4, 2, 5),\n",
+       " (3, 0, 1, 4, 5, 2): (3, 0, 1, 4, 5, 2),\n",
+       " (3, 0, 1, 5, 2, 4): (3, 0, 1, 5, 2, 4),\n",
+       " (3, 0, 1, 5, 4, 2): (3, 0, 1, 5, 4, 2),\n",
+       " (3, 0, 2, 1, 4, 5): (3, 0, 2, 1, 4, 5),\n",
+       " (3, 0, 2, 1, 5, 4): (3, 0, 2, 1, 5, 4),\n",
+       " (3, 0, 2, 4, 1, 5): (3, 0, 2, 4, 1, 5),\n",
+       " (3, 0, 2, 4, 5, 1): (3, 0, 2, 4, 5, 1),\n",
+       " (3, 0, 2, 5, 1, 4): (3, 0, 2, 5, 1, 4),\n",
+       " (3, 0, 2, 5, 4, 1): (3, 0, 2, 5, 4, 1),\n",
+       " (3, 0, 4, 1, 2, 5): (3, 0, 4, 1, 2, 5),\n",
+       " (3, 0, 4, 1, 5, 2): (3, 0, 4, 1, 5, 2),\n",
+       " (3, 0, 4, 2, 1, 5): (3, 0, 4, 2, 1, 5),\n",
+       " (3, 0, 4, 2, 5, 1): (3, 0, 4, 2, 5, 1),\n",
+       " (3, 0, 4, 5, 1, 2): (3, 0, 4, 5, 1, 2),\n",
+       " (3, 0, 4, 5, 2, 1): (3, 0, 4, 5, 2, 1),\n",
+       " (3, 0, 5, 1, 2, 4): (3, 0, 5, 1, 2, 4),\n",
+       " (3, 0, 5, 1, 4, 2): (3, 0, 5, 1, 4, 2),\n",
+       " (3, 0, 5, 2, 1, 4): (3, 0, 5, 2, 1, 4),\n",
+       " (3, 0, 5, 2, 4, 1): (3, 0, 5, 2, 4, 1),\n",
+       " (3, 0, 5, 4, 1, 2): (3, 0, 5, 4, 1, 2),\n",
+       " (3, 0, 5, 4, 2, 1): (3, 0, 5, 4, 2, 1),\n",
+       " (3, 1, 0, 2, 4, 5): (3, 1, 0, 2, 4, 5),\n",
+       " (3, 1, 0, 2, 5, 4): (3, 1, 0, 2, 5, 4),\n",
+       " (3, 1, 0, 4, 2, 5): (3, 1, 0, 4, 2, 5),\n",
+       " (3, 1, 0, 4, 5, 2): (3, 1, 0, 4, 5, 2),\n",
+       " (3, 1, 0, 5, 2, 4): (3, 1, 0, 5, 2, 4),\n",
+       " (3, 1, 0, 5, 4, 2): (3, 1, 0, 5, 4, 2),\n",
+       " (3, 1, 2, 0, 4, 5): (3, 1, 2, 0, 4, 5),\n",
+       " (3, 1, 2, 0, 5, 4): (3, 1, 2, 0, 5, 4),\n",
+       " (3, 1, 2, 4, 0, 5): (3, 1, 2, 4, 0, 5),\n",
+       " (3, 1, 2, 4, 5, 0): (3, 1, 2, 4, 5, 0),\n",
+       " (3, 1, 2, 5, 0, 4): (3, 1, 2, 5, 0, 4),\n",
+       " (3, 1, 2, 5, 4, 0): (3, 1, 2, 5, 4, 0),\n",
+       " (3, 1, 4, 0, 2, 5): (3, 1, 4, 0, 2, 5),\n",
+       " (3, 1, 4, 0, 5, 2): (3, 1, 4, 0, 5, 2),\n",
+       " (3, 1, 4, 2, 0, 5): (3, 1, 4, 2, 0, 5),\n",
+       " (3, 1, 4, 2, 5, 0): (3, 1, 4, 2, 5, 0),\n",
+       " (3, 1, 4, 5, 0, 2): (3, 1, 4, 5, 0, 2),\n",
+       " (3, 1, 4, 5, 2, 0): (3, 1, 4, 5, 2, 0),\n",
+       " (3, 1, 5, 0, 2, 4): (3, 1, 5, 0, 2, 4),\n",
+       " (3, 1, 5, 0, 4, 2): (3, 1, 5, 0, 4, 2),\n",
+       " (3, 1, 5, 2, 0, 4): (3, 1, 5, 2, 0, 4),\n",
+       " (3, 1, 5, 2, 4, 0): (3, 1, 5, 2, 4, 0),\n",
+       " (3, 1, 5, 4, 0, 2): (3, 1, 5, 4, 0, 2),\n",
+       " (3, 1, 5, 4, 2, 0): (3, 1, 5, 4, 2, 0),\n",
+       " (3, 2, 0, 1, 4, 5): (3, 2, 0, 1, 4, 5),\n",
+       " (3, 2, 0, 1, 5, 4): (3, 2, 0, 1, 5, 4),\n",
+       " (3, 2, 0, 4, 1, 5): (3, 2, 0, 4, 1, 5),\n",
+       " (3, 2, 0, 4, 5, 1): (3, 2, 0, 4, 5, 1),\n",
+       " (3, 2, 0, 5, 1, 4): (3, 2, 0, 5, 1, 4),\n",
+       " (3, 2, 0, 5, 4, 1): (3, 2, 0, 5, 4, 1),\n",
+       " (3, 2, 1, 0, 4, 5): (3, 2, 1, 0, 4, 5),\n",
+       " (3, 2, 1, 0, 5, 4): (3, 2, 1, 0, 5, 4),\n",
+       " (3, 2, 1, 4, 0, 5): (3, 2, 1, 4, 0, 5),\n",
+       " (3, 2, 1, 4, 5, 0): (3, 2, 1, 4, 5, 0),\n",
+       " (3, 2, 1, 5, 0, 4): (3, 2, 1, 5, 0, 4),\n",
+       " (3, 2, 1, 5, 4, 0): (3, 2, 1, 5, 4, 0),\n",
+       " (3, 2, 4, 0, 1, 5): (3, 2, 4, 0, 1, 5),\n",
+       " (3, 2, 4, 0, 5, 1): (3, 2, 4, 0, 5, 1),\n",
+       " (3, 2, 4, 1, 0, 5): (3, 2, 4, 1, 0, 5),\n",
+       " (3, 2, 4, 1, 5, 0): (3, 2, 4, 1, 5, 0),\n",
+       " (3, 2, 4, 5, 0, 1): (3, 2, 4, 5, 0, 1),\n",
+       " (3, 2, 4, 5, 1, 0): (3, 2, 4, 5, 1, 0),\n",
+       " (3, 2, 5, 0, 1, 4): (3, 2, 5, 0, 1, 4),\n",
+       " (3, 2, 5, 0, 4, 1): (3, 2, 5, 0, 4, 1),\n",
+       " (3, 2, 5, 1, 0, 4): (3, 2, 5, 1, 0, 4),\n",
+       " (3, 2, 5, 1, 4, 0): (3, 2, 5, 1, 4, 0),\n",
+       " (3, 2, 5, 4, 0, 1): (3, 2, 5, 4, 0, 1),\n",
+       " (3, 2, 5, 4, 1, 0): (3, 2, 5, 4, 1, 0),\n",
+       " (3, 4, 0, 1, 2, 5): (3, 4, 0, 1, 2, 5),\n",
+       " (3, 4, 0, 1, 5, 2): (3, 4, 0, 1, 5, 2),\n",
+       " (3, 4, 0, 2, 1, 5): (3, 4, 0, 2, 1, 5),\n",
+       " (3, 4, 0, 2, 5, 1): (3, 4, 0, 2, 5, 1),\n",
+       " (3, 4, 0, 5, 1, 2): (3, 4, 0, 5, 1, 2),\n",
+       " (3, 4, 0, 5, 2, 1): (3, 4, 0, 5, 2, 1),\n",
+       " (3, 4, 1, 0, 2, 5): (3, 4, 1, 0, 2, 5),\n",
+       " (3, 4, 1, 0, 5, 2): (3, 4, 1, 0, 5, 2),\n",
+       " (3, 4, 1, 2, 0, 5): (3, 4, 1, 2, 0, 5),\n",
+       " (3, 4, 1, 2, 5, 0): (3, 4, 1, 2, 5, 0),\n",
+       " (3, 4, 1, 5, 0, 2): (3, 4, 1, 5, 0, 2),\n",
+       " (3, 4, 1, 5, 2, 0): (3, 4, 1, 5, 2, 0),\n",
+       " (3, 4, 2, 0, 1, 5): (3, 4, 2, 0, 1, 5),\n",
+       " (3, 4, 2, 0, 5, 1): (3, 4, 2, 0, 5, 1),\n",
+       " (3, 4, 2, 1, 0, 5): (3, 4, 2, 1, 0, 5),\n",
+       " (3, 4, 2, 1, 5, 0): (3, 4, 2, 1, 5, 0),\n",
+       " (3, 4, 2, 5, 0, 1): (3, 4, 2, 5, 0, 1),\n",
+       " (3, 4, 2, 5, 1, 0): (3, 4, 2, 5, 1, 0),\n",
+       " (3, 4, 5, 0, 1, 2): (3, 4, 5, 0, 1, 2),\n",
+       " (3, 4, 5, 0, 2, 1): (3, 4, 5, 0, 2, 1),\n",
+       " (3, 4, 5, 1, 0, 2): (3, 4, 5, 1, 0, 2),\n",
+       " (3, 4, 5, 1, 2, 0): (3, 4, 5, 1, 2, 0),\n",
+       " (3, 4, 5, 2, 0, 1): (3, 4, 5, 2, 0, 1),\n",
+       " (3, 4, 5, 2, 1, 0): (3, 4, 5, 2, 1, 0),\n",
+       " (3, 5, 0, 1, 2, 4): (3, 5, 0, 1, 2, 4),\n",
+       " (3, 5, 0, 1, 4, 2): (3, 5, 0, 1, 4, 2),\n",
+       " (3, 5, 0, 2, 1, 4): (3, 5, 0, 2, 1, 4),\n",
+       " (3, 5, 0, 2, 4, 1): (3, 5, 0, 2, 4, 1),\n",
+       " (3, 5, 0, 4, 1, 2): (3, 5, 0, 4, 1, 2),\n",
+       " (3, 5, 0, 4, 2, 1): (3, 5, 0, 4, 2, 1),\n",
+       " (3, 5, 1, 0, 2, 4): (3, 5, 1, 0, 2, 4),\n",
+       " (3, 5, 1, 0, 4, 2): (3, 5, 1, 0, 4, 2),\n",
+       " (3, 5, 1, 2, 0, 4): (3, 5, 1, 2, 0, 4),\n",
+       " (3, 5, 1, 2, 4, 0): (3, 5, 1, 2, 4, 0),\n",
+       " (3, 5, 1, 4, 0, 2): (3, 5, 1, 4, 0, 2),\n",
+       " (3, 5, 1, 4, 2, 0): (3, 5, 1, 4, 2, 0),\n",
+       " (3, 5, 2, 0, 1, 4): (3, 5, 2, 0, 1, 4),\n",
+       " (3, 5, 2, 0, 4, 1): (3, 5, 2, 0, 4, 1),\n",
+       " (3, 5, 2, 1, 0, 4): (3, 5, 2, 1, 0, 4),\n",
+       " (3, 5, 2, 1, 4, 0): (3, 5, 2, 1, 4, 0),\n",
+       " (3, 5, 2, 4, 0, 1): (3, 5, 2, 4, 0, 1),\n",
+       " (3, 5, 2, 4, 1, 0): (3, 5, 2, 4, 1, 0),\n",
+       " (3, 5, 4, 0, 1, 2): (3, 5, 4, 0, 1, 2),\n",
+       " (3, 5, 4, 0, 2, 1): (3, 5, 4, 0, 2, 1),\n",
+       " (3, 5, 4, 1, 0, 2): (3, 5, 4, 1, 0, 2),\n",
+       " (3, 5, 4, 1, 2, 0): (3, 5, 4, 1, 2, 0),\n",
+       " (3, 5, 4, 2, 0, 1): (3, 5, 4, 2, 0, 1),\n",
+       " (3, 5, 4, 2, 1, 0): (3, 5, 4, 2, 1, 0),\n",
+       " (4, 0, 1, 2, 3, 5): (4, 0, 1, 2, 3, 5),\n",
+       " (4, 0, 1, 2, 5, 3): (4, 0, 1, 2, 5, 3),\n",
+       " (4, 0, 1, 3, 2, 5): (4, 0, 1, 3, 2, 5),\n",
+       " (4, 0, 1, 3, 5, 2): (4, 0, 1, 3, 5, 2),\n",
+       " (4, 0, 1, 5, 2, 3): (4, 0, 1, 5, 2, 3),\n",
+       " (4, 0, 1, 5, 3, 2): (4, 0, 1, 5, 3, 2),\n",
+       " (4, 0, 2, 1, 3, 5): (4, 0, 2, 1, 3, 5),\n",
+       " (4, 0, 2, 1, 5, 3): (4, 0, 2, 1, 5, 3),\n",
+       " (4, 0, 2, 3, 1, 5): (4, 0, 2, 3, 1, 5),\n",
+       " (4, 0, 2, 3, 5, 1): (4, 0, 2, 3, 5, 1),\n",
+       " (4, 0, 2, 5, 1, 3): (4, 0, 2, 5, 1, 3),\n",
+       " (4, 0, 2, 5, 3, 1): (4, 0, 2, 5, 3, 1),\n",
+       " (4, 0, 3, 1, 2, 5): (4, 0, 3, 1, 2, 5),\n",
+       " (4, 0, 3, 1, 5, 2): (4, 0, 3, 1, 5, 2),\n",
+       " (4, 0, 3, 2, 1, 5): (4, 0, 3, 2, 1, 5),\n",
+       " (4, 0, 3, 2, 5, 1): (4, 0, 3, 2, 5, 1),\n",
+       " (4, 0, 3, 5, 1, 2): (4, 0, 3, 5, 1, 2),\n",
+       " (4, 0, 3, 5, 2, 1): (4, 0, 3, 5, 2, 1),\n",
+       " (4, 0, 5, 1, 2, 3): (4, 0, 5, 1, 2, 3),\n",
+       " (4, 0, 5, 1, 3, 2): (4, 0, 5, 1, 3, 2),\n",
+       " (4, 0, 5, 2, 1, 3): (4, 0, 5, 2, 1, 3),\n",
+       " (4, 0, 5, 2, 3, 1): (4, 0, 5, 2, 3, 1),\n",
+       " (4, 0, 5, 3, 1, 2): (4, 0, 5, 3, 1, 2),\n",
+       " (4, 0, 5, 3, 2, 1): (4, 0, 5, 3, 2, 1),\n",
+       " (4, 1, 0, 2, 3, 5): (4, 1, 0, 2, 3, 5),\n",
+       " (4, 1, 0, 2, 5, 3): (4, 1, 0, 2, 5, 3),\n",
+       " (4, 1, 0, 3, 2, 5): (4, 1, 0, 3, 2, 5),\n",
+       " (4, 1, 0, 3, 5, 2): (4, 1, 0, 3, 5, 2),\n",
+       " (4, 1, 0, 5, 2, 3): (4, 1, 0, 5, 2, 3),\n",
+       " (4, 1, 0, 5, 3, 2): (4, 1, 0, 5, 3, 2),\n",
+       " (4, 1, 2, 0, 3, 5): (4, 1, 2, 0, 3, 5),\n",
+       " (4, 1, 2, 0, 5, 3): (4, 1, 2, 0, 5, 3),\n",
+       " (4, 1, 2, 3, 0, 5): (4, 1, 2, 3, 0, 5),\n",
+       " (4, 1, 2, 3, 5, 0): (4, 1, 2, 3, 5, 0),\n",
+       " (4, 1, 2, 5, 0, 3): (4, 1, 2, 5, 0, 3),\n",
+       " (4, 1, 2, 5, 3, 0): (4, 1, 2, 5, 3, 0),\n",
+       " (4, 1, 3, 0, 2, 5): (4, 1, 3, 0, 2, 5),\n",
+       " (4, 1, 3, 0, 5, 2): (4, 1, 3, 0, 5, 2),\n",
+       " (4, 1, 3, 2, 0, 5): (4, 1, 3, 2, 0, 5),\n",
+       " (4, 1, 3, 2, 5, 0): (4, 1, 3, 2, 5, 0),\n",
+       " (4, 1, 3, 5, 0, 2): (4, 1, 3, 5, 0, 2),\n",
+       " (4, 1, 3, 5, 2, 0): (4, 1, 3, 5, 2, 0),\n",
+       " (4, 1, 5, 0, 2, 3): (4, 1, 5, 0, 2, 3),\n",
+       " (4, 1, 5, 0, 3, 2): (4, 1, 5, 0, 3, 2),\n",
+       " (4, 1, 5, 2, 0, 3): (4, 1, 5, 2, 0, 3),\n",
+       " (4, 1, 5, 2, 3, 0): (4, 1, 5, 2, 3, 0),\n",
+       " (4, 1, 5, 3, 0, 2): (4, 1, 5, 3, 0, 2),\n",
+       " (4, 1, 5, 3, 2, 0): (4, 1, 5, 3, 2, 0),\n",
+       " (4, 2, 0, 1, 3, 5): (4, 2, 0, 1, 3, 5),\n",
+       " (4, 2, 0, 1, 5, 3): (4, 2, 0, 1, 5, 3),\n",
+       " (4, 2, 0, 3, 1, 5): (4, 2, 0, 3, 1, 5),\n",
+       " (4, 2, 0, 3, 5, 1): (4, 2, 0, 3, 5, 1),\n",
+       " (4, 2, 0, 5, 1, 3): (4, 2, 0, 5, 1, 3),\n",
+       " (4, 2, 0, 5, 3, 1): (4, 2, 0, 5, 3, 1),\n",
+       " (4, 2, 1, 0, 3, 5): (4, 2, 1, 0, 3, 5),\n",
+       " (4, 2, 1, 0, 5, 3): (4, 2, 1, 0, 5, 3),\n",
+       " (4, 2, 1, 3, 0, 5): (4, 2, 1, 3, 0, 5),\n",
+       " (4, 2, 1, 3, 5, 0): (4, 2, 1, 3, 5, 0),\n",
+       " (4, 2, 1, 5, 0, 3): (4, 2, 1, 5, 0, 3),\n",
+       " (4, 2, 1, 5, 3, 0): (4, 2, 1, 5, 3, 0),\n",
+       " (4, 2, 3, 0, 1, 5): (4, 2, 3, 0, 1, 5),\n",
+       " (4, 2, 3, 0, 5, 1): (4, 2, 3, 0, 5, 1),\n",
+       " (4, 2, 3, 1, 0, 5): (4, 2, 3, 1, 0, 5),\n",
+       " (4, 2, 3, 1, 5, 0): (4, 2, 3, 1, 5, 0),\n",
+       " (4, 2, 3, 5, 0, 1): (4, 2, 3, 5, 0, 1),\n",
+       " (4, 2, 3, 5, 1, 0): (4, 2, 3, 5, 1, 0),\n",
+       " (4, 2, 5, 0, 1, 3): (4, 2, 5, 0, 1, 3),\n",
+       " (4, 2, 5, 0, 3, 1): (4, 2, 5, 0, 3, 1),\n",
+       " (4, 2, 5, 1, 0, 3): (4, 2, 5, 1, 0, 3),\n",
+       " (4, 2, 5, 1, 3, 0): (4, 2, 5, 1, 3, 0),\n",
+       " (4, 2, 5, 3, 0, 1): (4, 2, 5, 3, 0, 1),\n",
+       " (4, 2, 5, 3, 1, 0): (4, 2, 5, 3, 1, 0),\n",
+       " (4, 3, 0, 1, 2, 5): (4, 3, 0, 1, 2, 5),\n",
+       " (4, 3, 0, 1, 5, 2): (4, 3, 0, 1, 5, 2),\n",
+       " (4, 3, 0, 2, 1, 5): (4, 3, 0, 2, 1, 5),\n",
+       " (4, 3, 0, 2, 5, 1): (4, 3, 0, 2, 5, 1),\n",
+       " (4, 3, 0, 5, 1, 2): (4, 3, 0, 5, 1, 2),\n",
+       " (4, 3, 0, 5, 2, 1): (4, 3, 0, 5, 2, 1),\n",
+       " (4, 3, 1, 0, 2, 5): (4, 3, 1, 0, 2, 5),\n",
+       " (4, 3, 1, 0, 5, 2): (4, 3, 1, 0, 5, 2),\n",
+       " (4, 3, 1, 2, 0, 5): (4, 3, 1, 2, 0, 5),\n",
+       " (4, 3, 1, 2, 5, 0): (4, 3, 1, 2, 5, 0),\n",
+       " (4, 3, 1, 5, 0, 2): (4, 3, 1, 5, 0, 2),\n",
+       " (4, 3, 1, 5, 2, 0): (4, 3, 1, 5, 2, 0),\n",
+       " (4, 3, 2, 0, 1, 5): (4, 3, 2, 0, 1, 5),\n",
+       " (4, 3, 2, 0, 5, 1): (4, 3, 2, 0, 5, 1),\n",
+       " (4, 3, 2, 1, 0, 5): (4, 3, 2, 1, 0, 5),\n",
+       " (4, 3, 2, 1, 5, 0): (4, 3, 2, 1, 5, 0),\n",
+       " (4, 3, 2, 5, 0, 1): (4, 3, 2, 5, 0, 1),\n",
+       " (4, 3, 2, 5, 1, 0): (4, 3, 2, 5, 1, 0),\n",
+       " (4, 3, 5, 0, 1, 2): (4, 3, 5, 0, 1, 2),\n",
+       " (4, 3, 5, 0, 2, 1): (4, 3, 5, 0, 2, 1),\n",
+       " (4, 3, 5, 1, 0, 2): (4, 3, 5, 1, 0, 2),\n",
+       " (4, 3, 5, 1, 2, 0): (4, 3, 5, 1, 2, 0),\n",
+       " (4, 3, 5, 2, 0, 1): (4, 3, 5, 2, 0, 1),\n",
+       " (4, 3, 5, 2, 1, 0): (4, 3, 5, 2, 1, 0),\n",
+       " (4, 5, 0, 1, 2, 3): (4, 5, 0, 1, 2, 3),\n",
+       " (4, 5, 0, 1, 3, 2): (4, 5, 0, 1, 3, 2),\n",
+       " (4, 5, 0, 2, 1, 3): (4, 5, 0, 2, 1, 3),\n",
+       " (4, 5, 0, 2, 3, 1): (4, 5, 0, 2, 3, 1),\n",
+       " (4, 5, 0, 3, 1, 2): (4, 5, 0, 3, 1, 2),\n",
+       " (4, 5, 0, 3, 2, 1): (4, 5, 0, 3, 2, 1),\n",
+       " (4, 5, 1, 0, 2, 3): (4, 5, 1, 0, 2, 3),\n",
+       " (4, 5, 1, 0, 3, 2): (4, 5, 1, 0, 3, 2),\n",
+       " (4, 5, 1, 2, 0, 3): (4, 5, 1, 2, 0, 3),\n",
+       " (4, 5, 1, 2, 3, 0): (4, 5, 1, 2, 3, 0),\n",
+       " (4, 5, 1, 3, 0, 2): (4, 5, 1, 3, 0, 2),\n",
+       " (4, 5, 1, 3, 2, 0): (4, 5, 1, 3, 2, 0),\n",
+       " (4, 5, 2, 0, 1, 3): (4, 5, 2, 0, 1, 3),\n",
+       " (4, 5, 2, 0, 3, 1): (4, 5, 2, 0, 3, 1),\n",
+       " (4, 5, 2, 1, 0, 3): (4, 5, 2, 1, 0, 3),\n",
+       " (4, 5, 2, 1, 3, 0): (4, 5, 2, 1, 3, 0),\n",
+       " (4, 5, 2, 3, 0, 1): (4, 5, 2, 3, 0, 1),\n",
+       " (4, 5, 2, 3, 1, 0): (4, 5, 2, 3, 1, 0),\n",
+       " (4, 5, 3, 0, 1, 2): (4, 5, 3, 0, 1, 2),\n",
+       " (4, 5, 3, 0, 2, 1): (4, 5, 3, 0, 2, 1),\n",
+       " (4, 5, 3, 1, 0, 2): (4, 5, 3, 1, 0, 2),\n",
+       " (4, 5, 3, 1, 2, 0): (4, 5, 3, 1, 2, 0),\n",
+       " (4, 5, 3, 2, 0, 1): (4, 5, 3, 2, 0, 1),\n",
+       " (4, 5, 3, 2, 1, 0): (4, 5, 3, 2, 1, 0),\n",
+       " (5, 0, 1, 2, 3, 4): (5, 0, 1, 2, 3, 4),\n",
+       " (5, 0, 1, 2, 4, 3): (5, 0, 1, 2, 4, 3),\n",
+       " (5, 0, 1, 3, 2, 4): (5, 0, 1, 3, 2, 4),\n",
+       " (5, 0, 1, 3, 4, 2): (5, 0, 1, 3, 4, 2),\n",
+       " (5, 0, 1, 4, 2, 3): (5, 0, 1, 4, 2, 3),\n",
+       " (5, 0, 1, 4, 3, 2): (5, 0, 1, 4, 3, 2),\n",
+       " (5, 0, 2, 1, 3, 4): (5, 0, 2, 1, 3, 4),\n",
+       " (5, 0, 2, 1, 4, 3): (5, 0, 2, 1, 4, 3),\n",
+       " (5, 0, 2, 3, 1, 4): (5, 0, 2, 3, 1, 4),\n",
+       " (5, 0, 2, 3, 4, 1): (5, 0, 2, 3, 4, 1),\n",
+       " (5, 0, 2, 4, 1, 3): (5, 0, 2, 4, 1, 3),\n",
+       " (5, 0, 2, 4, 3, 1): (5, 0, 2, 4, 3, 1),\n",
+       " (5, 0, 3, 1, 2, 4): (5, 0, 3, 1, 2, 4),\n",
+       " (5, 0, 3, 1, 4, 2): (5, 0, 3, 1, 4, 2),\n",
+       " (5, 0, 3, 2, 1, 4): (5, 0, 3, 2, 1, 4),\n",
+       " (5, 0, 3, 2, 4, 1): (5, 0, 3, 2, 4, 1),\n",
+       " (5, 0, 3, 4, 1, 2): (5, 0, 3, 4, 1, 2),\n",
+       " (5, 0, 3, 4, 2, 1): (5, 0, 3, 4, 2, 1),\n",
+       " (5, 0, 4, 1, 2, 3): (5, 0, 4, 1, 2, 3),\n",
+       " (5, 0, 4, 1, 3, 2): (5, 0, 4, 1, 3, 2),\n",
+       " (5, 0, 4, 2, 1, 3): (5, 0, 4, 2, 1, 3),\n",
+       " (5, 0, 4, 2, 3, 1): (5, 0, 4, 2, 3, 1),\n",
+       " (5, 0, 4, 3, 1, 2): (5, 0, 4, 3, 1, 2),\n",
+       " (5, 0, 4, 3, 2, 1): (5, 0, 4, 3, 2, 1),\n",
+       " (5, 1, 0, 2, 3, 4): (5, 1, 0, 2, 3, 4),\n",
+       " (5, 1, 0, 2, 4, 3): (5, 1, 0, 2, 4, 3),\n",
+       " (5, 1, 0, 3, 2, 4): (5, 1, 0, 3, 2, 4),\n",
+       " (5, 1, 0, 3, 4, 2): (5, 1, 0, 3, 4, 2),\n",
+       " (5, 1, 0, 4, 2, 3): (5, 1, 0, 4, 2, 3),\n",
+       " (5, 1, 0, 4, 3, 2): (5, 1, 0, 4, 3, 2),\n",
+       " (5, 1, 2, 0, 3, 4): (5, 1, 2, 0, 3, 4),\n",
+       " (5, 1, 2, 0, 4, 3): (5, 1, 2, 0, 4, 3),\n",
+       " (5, 1, 2, 3, 0, 4): (5, 1, 2, 3, 0, 4),\n",
+       " (5, 1, 2, 3, 4, 0): (5, 1, 2, 3, 4, 0),\n",
+       " (5, 1, 2, 4, 0, 3): (5, 1, 2, 4, 0, 3),\n",
+       " (5, 1, 2, 4, 3, 0): (5, 1, 2, 4, 3, 0),\n",
+       " (5, 1, 3, 0, 2, 4): (5, 1, 3, 0, 2, 4),\n",
+       " (5, 1, 3, 0, 4, 2): (5, 1, 3, 0, 4, 2),\n",
+       " (5, 1, 3, 2, 0, 4): (5, 1, 3, 2, 0, 4),\n",
+       " (5, 1, 3, 2, 4, 0): (5, 1, 3, 2, 4, 0),\n",
+       " (5, 1, 3, 4, 0, 2): (5, 1, 3, 4, 0, 2),\n",
+       " (5, 1, 3, 4, 2, 0): (5, 1, 3, 4, 2, 0),\n",
+       " (5, 1, 4, 0, 2, 3): (5, 1, 4, 0, 2, 3),\n",
+       " (5, 1, 4, 0, 3, 2): (5, 1, 4, 0, 3, 2),\n",
+       " (5, 1, 4, 2, 0, 3): (5, 1, 4, 2, 0, 3),\n",
+       " (5, 1, 4, 2, 3, 0): (5, 1, 4, 2, 3, 0),\n",
+       " (5, 1, 4, 3, 0, 2): (5, 1, 4, 3, 0, 2),\n",
+       " (5, 1, 4, 3, 2, 0): (5, 1, 4, 3, 2, 0),\n",
+       " (5, 2, 0, 1, 3, 4): (5, 2, 0, 1, 3, 4),\n",
+       " (5, 2, 0, 1, 4, 3): (5, 2, 0, 1, 4, 3),\n",
+       " (5, 2, 0, 3, 1, 4): (5, 2, 0, 3, 1, 4),\n",
+       " (5, 2, 0, 3, 4, 1): (5, 2, 0, 3, 4, 1),\n",
+       " (5, 2, 0, 4, 1, 3): (5, 2, 0, 4, 1, 3),\n",
+       " (5, 2, 0, 4, 3, 1): (5, 2, 0, 4, 3, 1),\n",
+       " (5, 2, 1, 0, 3, 4): (5, 2, 1, 0, 3, 4),\n",
+       " (5, 2, 1, 0, 4, 3): (5, 2, 1, 0, 4, 3),\n",
+       " (5, 2, 1, 3, 0, 4): (5, 2, 1, 3, 0, 4),\n",
+       " (5, 2, 1, 3, 4, 0): (5, 2, 1, 3, 4, 0),\n",
+       " (5, 2, 1, 4, 0, 3): (5, 2, 1, 4, 0, 3),\n",
+       " (5, 2, 1, 4, 3, 0): (5, 2, 1, 4, 3, 0),\n",
+       " (5, 2, 3, 0, 1, 4): (5, 2, 3, 0, 1, 4),\n",
+       " (5, 2, 3, 0, 4, 1): (5, 2, 3, 0, 4, 1),\n",
+       " (5, 2, 3, 1, 0, 4): (5, 2, 3, 1, 0, 4),\n",
+       " (5, 2, 3, 1, 4, 0): (5, 2, 3, 1, 4, 0),\n",
+       " (5, 2, 3, 4, 0, 1): (5, 2, 3, 4, 0, 1),\n",
+       " (5, 2, 3, 4, 1, 0): (5, 2, 3, 4, 1, 0),\n",
+       " (5, 2, 4, 0, 1, 3): (5, 2, 4, 0, 1, 3),\n",
+       " (5, 2, 4, 0, 3, 1): (5, 2, 4, 0, 3, 1),\n",
+       " (5, 2, 4, 1, 0, 3): (5, 2, 4, 1, 0, 3),\n",
+       " (5, 2, 4, 1, 3, 0): (5, 2, 4, 1, 3, 0),\n",
+       " (5, 2, 4, 3, 0, 1): (5, 2, 4, 3, 0, 1),\n",
+       " (5, 2, 4, 3, 1, 0): (5, 2, 4, 3, 1, 0),\n",
+       " (5, 3, 0, 1, 2, 4): (5, 3, 0, 1, 2, 4),\n",
+       " (5, 3, 0, 1, 4, 2): (5, 3, 0, 1, 4, 2),\n",
+       " (5, 3, 0, 2, 1, 4): (5, 3, 0, 2, 1, 4),\n",
+       " (5, 3, 0, 2, 4, 1): (5, 3, 0, 2, 4, 1),\n",
+       " (5, 3, 0, 4, 1, 2): (5, 3, 0, 4, 1, 2),\n",
+       " (5, 3, 0, 4, 2, 1): (5, 3, 0, 4, 2, 1),\n",
+       " (5, 3, 1, 0, 2, 4): (5, 3, 1, 0, 2, 4),\n",
+       " (5, 3, 1, 0, 4, 2): (5, 3, 1, 0, 4, 2),\n",
+       " (5, 3, 1, 2, 0, 4): (5, 3, 1, 2, 0, 4),\n",
+       " (5, 3, 1, 2, 4, 0): (5, 3, 1, 2, 4, 0),\n",
+       " (5, 3, 1, 4, 0, 2): (5, 3, 1, 4, 0, 2),\n",
+       " (5, 3, 1, 4, 2, 0): (5, 3, 1, 4, 2, 0),\n",
+       " (5, 3, 2, 0, 1, 4): (5, 3, 2, 0, 1, 4),\n",
+       " (5, 3, 2, 0, 4, 1): (5, 3, 2, 0, 4, 1),\n",
+       " (5, 3, 2, 1, 0, 4): (5, 3, 2, 1, 0, 4),\n",
+       " (5, 3, 2, 1, 4, 0): (5, 3, 2, 1, 4, 0),\n",
+       " (5, 3, 2, 4, 0, 1): (5, 3, 2, 4, 0, 1),\n",
+       " (5, 3, 2, 4, 1, 0): (5, 3, 2, 4, 1, 0),\n",
+       " (5, 3, 4, 0, 1, 2): (5, 3, 4, 0, 1, 2),\n",
+       " (5, 3, 4, 0, 2, 1): (5, 3, 4, 0, 2, 1),\n",
+       " (5, 3, 4, 1, 0, 2): (5, 3, 4, 1, 0, 2),\n",
+       " (5, 3, 4, 1, 2, 0): (5, 3, 4, 1, 2, 0),\n",
+       " (5, 3, 4, 2, 0, 1): (5, 3, 4, 2, 0, 1),\n",
+       " (5, 3, 4, 2, 1, 0): (5, 3, 4, 2, 1, 0),\n",
+       " (5, 4, 0, 1, 2, 3): (5, 4, 0, 1, 2, 3),\n",
+       " (5, 4, 0, 1, 3, 2): (5, 4, 0, 1, 3, 2),\n",
+       " (5, 4, 0, 2, 1, 3): (5, 4, 0, 2, 1, 3),\n",
+       " (5, 4, 0, 2, 3, 1): (5, 4, 0, 2, 3, 1),\n",
+       " (5, 4, 0, 3, 1, 2): (5, 4, 0, 3, 1, 2),\n",
+       " (5, 4, 0, 3, 2, 1): (5, 4, 0, 3, 2, 1),\n",
+       " (5, 4, 1, 0, 2, 3): (5, 4, 1, 0, 2, 3),\n",
+       " (5, 4, 1, 0, 3, 2): (5, 4, 1, 0, 3, 2),\n",
+       " (5, 4, 1, 2, 0, 3): (5, 4, 1, 2, 0, 3),\n",
+       " (5, 4, 1, 2, 3, 0): (5, 4, 1, 2, 3, 0),\n",
+       " (5, 4, 1, 3, 0, 2): (5, 4, 1, 3, 0, 2),\n",
+       " (5, 4, 1, 3, 2, 0): (5, 4, 1, 3, 2, 0),\n",
+       " (5, 4, 2, 0, 1, 3): (5, 4, 2, 0, 1, 3),\n",
+       " (5, 4, 2, 0, 3, 1): (5, 4, 2, 0, 3, 1),\n",
+       " (5, 4, 2, 1, 0, 3): (5, 4, 2, 1, 0, 3),\n",
+       " (5, 4, 2, 1, 3, 0): (5, 4, 2, 1, 3, 0),\n",
+       " (5, 4, 2, 3, 0, 1): (5, 4, 2, 3, 0, 1),\n",
+       " (5, 4, 2, 3, 1, 0): (5, 4, 2, 3, 1, 0),\n",
+       " (5, 4, 3, 0, 1, 2): (5, 4, 3, 0, 1, 2),\n",
+       " (5, 4, 3, 0, 2, 1): (5, 4, 3, 0, 2, 1),\n",
+       " (5, 4, 3, 1, 0, 2): (5, 4, 3, 1, 0, 2),\n",
+       " (5, 4, 3, 1, 2, 0): (5, 4, 3, 1, 2, 0),\n",
+       " (5, 4, 3, 2, 0, 1): (5, 4, 3, 2, 0, 1),\n",
+       " (5, 4, 3, 2, 1, 0): (5, 4, 3, 2, 1, 0)}"
+      ]
+     },
+     "execution_count": 16,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "transpositions6 = {t: t for t in set(itertools.permutations(list(range(6))))}\n",
+    "transpositions6"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(((2, 4, 3, 5, 0, 1), (1, 2), <AmscoFillStyle.reverse_each_row: 3>),\n",
+       " -1437.9908206760847)"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "key_b, score = amsco_break(c7b, translist=transpositions6)\n",
+    "key_b, score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[[AmscoSlice(index=0, start=0, end=1),\n",
+       "  AmscoSlice(index=1, start=1, end=3),\n",
+       "  AmscoSlice(index=2, start=3, end=4),\n",
+       "  AmscoSlice(index=3, start=4, end=6),\n",
+       "  AmscoSlice(index=4, start=6, end=7),\n",
+       "  AmscoSlice(index=5, start=7, end=9)],\n",
+       " [AmscoSlice(index=6, start=9, end=11),\n",
+       "  AmscoSlice(index=7, start=11, end=12),\n",
+       "  AmscoSlice(index=8, start=12, end=14),\n",
+       "  AmscoSlice(index=9, start=14, end=15),\n",
+       "  AmscoSlice(index=10, start=15, end=17),\n",
+       "  AmscoSlice(index=11, start=17, end=18)],\n",
+       " [AmscoSlice(index=12, start=18, end=19),\n",
+       "  AmscoSlice(index=13, start=19, end=21),\n",
+       "  AmscoSlice(index=14, start=21, end=22),\n",
+       "  AmscoSlice(index=15, start=22, end=24),\n",
+       "  AmscoSlice(index=16, start=24, end=25),\n",
+       "  AmscoSlice(index=17, start=25, end=27)],\n",
+       " [AmscoSlice(index=18, start=27, end=29),\n",
+       "  AmscoSlice(index=19, start=29, end=30),\n",
+       "  AmscoSlice(index=20, start=30, end=32),\n",
+       "  AmscoSlice(index=21, start=32, end=33),\n",
+       "  AmscoSlice(index=22, start=33, end=35),\n",
+       "  AmscoSlice(index=23, start=35, end=36)],\n",
+       " [AmscoSlice(index=24, start=36, end=37),\n",
+       "  AmscoSlice(index=25, start=37, end=39),\n",
+       "  AmscoSlice(index=26, start=39, end=40),\n",
+       "  AmscoSlice(index=27, start=40, end=42),\n",
+       "  AmscoSlice(index=28, start=42, end=43),\n",
+       "  AmscoSlice(index=29, start=43, end=45)],\n",
+       " [AmscoSlice(index=30, start=45, end=47),\n",
+       "  AmscoSlice(index=31, start=47, end=48),\n",
+       "  AmscoSlice(index=32, start=48, end=50),\n",
+       "  AmscoSlice(index=33, start=50, end=51),\n",
+       "  AmscoSlice(index=34, start=51, end=53),\n",
+       "  AmscoSlice(index=35, start=53, end=54)],\n",
+       " [AmscoSlice(index=36, start=54, end=55),\n",
+       "  AmscoSlice(index=37, start=55, end=57),\n",
+       "  AmscoSlice(index=38, start=57, end=58),\n",
+       "  AmscoSlice(index=39, start=58, end=60),\n",
+       "  AmscoSlice(index=40, start=60, end=61),\n",
+       "  AmscoSlice(index=41, start=61, end=63)],\n",
+       " [AmscoSlice(index=42, start=63, end=65),\n",
+       "  AmscoSlice(index=43, start=65, end=66),\n",
+       "  AmscoSlice(index=44, start=66, end=68),\n",
+       "  AmscoSlice(index=45, start=68, end=69),\n",
+       "  AmscoSlice(index=46, start=69, end=71),\n",
+       "  AmscoSlice(index=47, start=71, end=72)],\n",
+       " [AmscoSlice(index=48, start=72, end=73),\n",
+       "  AmscoSlice(index=49, start=73, end=75),\n",
+       "  AmscoSlice(index=50, start=75, end=76),\n",
+       "  AmscoSlice(index=51, start=76, end=78),\n",
+       "  AmscoSlice(index=52, start=78, end=79),\n",
+       "  AmscoSlice(index=53, start=79, end=81)],\n",
+       " [AmscoSlice(index=54, start=81, end=83),\n",
+       "  AmscoSlice(index=55, start=83, end=84),\n",
+       "  AmscoSlice(index=56, start=84, end=86),\n",
+       "  AmscoSlice(index=57, start=86, end=87),\n",
+       "  AmscoSlice(index=58, start=87, end=89),\n",
+       "  AmscoSlice(index=59, start=89, end=90)],\n",
+       " [AmscoSlice(index=60, start=90, end=91),\n",
+       "  AmscoSlice(index=61, start=91, end=93),\n",
+       "  AmscoSlice(index=62, start=93, end=94),\n",
+       "  AmscoSlice(index=63, start=94, end=96),\n",
+       "  AmscoSlice(index=64, start=96, end=97),\n",
+       "  AmscoSlice(index=65, start=97, end=99)],\n",
+       " [AmscoSlice(index=66, start=99, end=101),\n",
+       "  AmscoSlice(index=67, start=101, end=102),\n",
+       "  AmscoSlice(index=68, start=102, end=104),\n",
+       "  AmscoSlice(index=69, start=104, end=105),\n",
+       "  AmscoSlice(index=70, start=105, end=107),\n",
+       "  AmscoSlice(index=71, start=107, end=108)],\n",
+       " [AmscoSlice(index=72, start=108, end=109),\n",
+       "  AmscoSlice(index=73, start=109, end=111),\n",
+       "  AmscoSlice(index=74, start=111, end=112),\n",
+       "  AmscoSlice(index=75, start=112, end=114),\n",
+       "  AmscoSlice(index=76, start=114, end=115),\n",
+       "  AmscoSlice(index=77, start=115, end=117)],\n",
+       " [AmscoSlice(index=78, start=117, end=119),\n",
+       "  AmscoSlice(index=79, start=119, end=120),\n",
+       "  AmscoSlice(index=80, start=120, end=122),\n",
+       "  AmscoSlice(index=81, start=122, end=123),\n",
+       "  AmscoSlice(index=82, start=123, end=125),\n",
+       "  AmscoSlice(index=83, start=125, end=126)],\n",
+       " [AmscoSlice(index=84, start=126, end=127),\n",
+       "  AmscoSlice(index=85, start=127, end=129),\n",
+       "  AmscoSlice(index=86, start=129, end=130),\n",
+       "  AmscoSlice(index=87, start=130, end=132),\n",
+       "  AmscoSlice(index=88, start=132, end=133),\n",
+       "  AmscoSlice(index=89, start=133, end=135)],\n",
+       " [AmscoSlice(index=90, start=135, end=137),\n",
+       "  AmscoSlice(index=91, start=137, end=138),\n",
+       "  AmscoSlice(index=92, start=138, end=140),\n",
+       "  AmscoSlice(index=93, start=140, end=141),\n",
+       "  AmscoSlice(index=94, start=141, end=143),\n",
+       "  AmscoSlice(index=95, start=143, end=144)],\n",
+       " [AmscoSlice(index=96, start=144, end=145),\n",
+       "  AmscoSlice(index=97, start=145, end=147),\n",
+       "  AmscoSlice(index=98, start=147, end=148),\n",
+       "  AmscoSlice(index=99, start=148, end=150),\n",
+       "  AmscoSlice(index=100, start=150, end=151),\n",
+       "  AmscoSlice(index=101, start=151, end=153)],\n",
+       " [AmscoSlice(index=102, start=153, end=155),\n",
+       "  AmscoSlice(index=103, start=155, end=156),\n",
+       "  AmscoSlice(index=104, start=156, end=158),\n",
+       "  AmscoSlice(index=105, start=158, end=159),\n",
+       "  AmscoSlice(index=106, start=159, end=161),\n",
+       "  AmscoSlice(index=107, start=161, end=162)],\n",
+       " [AmscoSlice(index=108, start=162, end=163),\n",
+       "  AmscoSlice(index=109, start=163, end=165),\n",
+       "  AmscoSlice(index=110, start=165, end=166),\n",
+       "  AmscoSlice(index=111, start=166, end=168),\n",
+       "  AmscoSlice(index=112, start=168, end=169),\n",
+       "  AmscoSlice(index=113, start=169, end=171)],\n",
+       " [AmscoSlice(index=114, start=171, end=173),\n",
+       "  AmscoSlice(index=115, start=173, end=174),\n",
+       "  AmscoSlice(index=116, start=174, end=176),\n",
+       "  AmscoSlice(index=117, start=176, end=177),\n",
+       "  AmscoSlice(index=118, start=177, end=179),\n",
+       "  AmscoSlice(index=119, start=179, end=180)],\n",
+       " [AmscoSlice(index=120, start=180, end=181),\n",
+       "  AmscoSlice(index=121, start=181, end=183),\n",
+       "  AmscoSlice(index=122, start=183, end=184),\n",
+       "  AmscoSlice(index=123, start=184, end=186),\n",
+       "  AmscoSlice(index=124, start=186, end=187),\n",
+       "  AmscoSlice(index=125, start=187, end=189)],\n",
+       " [AmscoSlice(index=126, start=189, end=191),\n",
+       "  AmscoSlice(index=127, start=191, end=192),\n",
+       "  AmscoSlice(index=128, start=192, end=194),\n",
+       "  AmscoSlice(index=129, start=194, end=195),\n",
+       "  AmscoSlice(index=130, start=195, end=197),\n",
+       "  AmscoSlice(index=131, start=197, end=198)],\n",
+       " [AmscoSlice(index=132, start=198, end=199),\n",
+       "  AmscoSlice(index=133, start=199, end=201),\n",
+       "  AmscoSlice(index=134, start=201, end=202),\n",
+       "  AmscoSlice(index=135, start=202, end=204),\n",
+       "  AmscoSlice(index=136, start=204, end=205),\n",
+       "  AmscoSlice(index=137, start=205, end=207)],\n",
+       " [AmscoSlice(index=138, start=207, end=209),\n",
+       "  AmscoSlice(index=139, start=209, end=210),\n",
+       "  AmscoSlice(index=140, start=210, end=212),\n",
+       "  AmscoSlice(index=141, start=212, end=213),\n",
+       "  AmscoSlice(index=142, start=213, end=215),\n",
+       "  AmscoSlice(index=143, start=215, end=216)],\n",
+       " [AmscoSlice(index=144, start=216, end=217),\n",
+       "  AmscoSlice(index=145, start=217, end=219),\n",
+       "  AmscoSlice(index=146, start=219, end=220),\n",
+       "  AmscoSlice(index=147, start=220, end=222),\n",
+       "  AmscoSlice(index=148, start=222, end=223),\n",
+       "  AmscoSlice(index=149, start=223, end=225)],\n",
+       " [AmscoSlice(index=150, start=225, end=227),\n",
+       "  AmscoSlice(index=151, start=227, end=228),\n",
+       "  AmscoSlice(index=152, start=228, end=230),\n",
+       "  AmscoSlice(index=153, start=230, end=231),\n",
+       "  AmscoSlice(index=154, start=231, end=233),\n",
+       "  AmscoSlice(index=155, start=233, end=234)],\n",
+       " [AmscoSlice(index=156, start=234, end=235),\n",
+       "  AmscoSlice(index=157, start=235, end=237),\n",
+       "  AmscoSlice(index=158, start=237, end=238),\n",
+       "  AmscoSlice(index=159, start=238, end=240),\n",
+       "  AmscoSlice(index=160, start=240, end=241),\n",
+       "  AmscoSlice(index=161, start=241, end=243)],\n",
+       " [AmscoSlice(index=162, start=243, end=245),\n",
+       "  AmscoSlice(index=163, start=245, end=246),\n",
+       "  AmscoSlice(index=164, start=246, end=248),\n",
+       "  AmscoSlice(index=165, start=248, end=249),\n",
+       "  AmscoSlice(index=166, start=249, end=251),\n",
+       "  AmscoSlice(index=167, start=251, end=252)],\n",
+       " [AmscoSlice(index=168, start=252, end=253),\n",
+       "  AmscoSlice(index=169, start=253, end=255),\n",
+       "  AmscoSlice(index=170, start=255, end=256),\n",
+       "  AmscoSlice(index=171, start=256, end=258),\n",
+       "  AmscoSlice(index=172, start=258, end=259),\n",
+       "  AmscoSlice(index=173, start=259, end=261)],\n",
+       " [AmscoSlice(index=174, start=261, end=263),\n",
+       "  AmscoSlice(index=175, start=263, end=264),\n",
+       "  AmscoSlice(index=176, start=264, end=266),\n",
+       "  AmscoSlice(index=177, start=266, end=267),\n",
+       "  AmscoSlice(index=178, start=267, end=269),\n",
+       "  AmscoSlice(index=179, start=269, end=270)],\n",
+       " [AmscoSlice(index=180, start=270, end=271),\n",
+       "  AmscoSlice(index=181, start=271, end=273),\n",
+       "  AmscoSlice(index=182, start=273, end=274),\n",
+       "  AmscoSlice(index=183, start=274, end=276),\n",
+       "  AmscoSlice(index=184, start=276, end=277),\n",
+       "  AmscoSlice(index=185, start=277, end=279)],\n",
+       " [AmscoSlice(index=186, start=279, end=281),\n",
+       "  AmscoSlice(index=187, start=281, end=282),\n",
+       "  AmscoSlice(index=188, start=282, end=284),\n",
+       "  AmscoSlice(index=189, start=284, end=285),\n",
+       "  AmscoSlice(index=190, start=285, end=287),\n",
+       "  AmscoSlice(index=191, start=287, end=288)],\n",
+       " [AmscoSlice(index=192, start=288, end=289),\n",
+       "  AmscoSlice(index=193, start=289, end=291),\n",
+       "  AmscoSlice(index=194, start=291, end=292),\n",
+       "  AmscoSlice(index=195, start=292, end=294),\n",
+       "  AmscoSlice(index=196, start=294, end=295),\n",
+       "  AmscoSlice(index=197, start=295, end=297)],\n",
+       " [AmscoSlice(index=198, start=297, end=299),\n",
+       "  AmscoSlice(index=199, start=299, end=300),\n",
+       "  AmscoSlice(index=200, start=300, end=302),\n",
+       "  AmscoSlice(index=201, start=302, end=303),\n",
+       "  AmscoSlice(index=202, start=303, end=305),\n",
+       "  AmscoSlice(index=203, start=305, end=306)],\n",
+       " [AmscoSlice(index=204, start=306, end=307),\n",
+       "  AmscoSlice(index=205, start=307, end=309),\n",
+       "  AmscoSlice(index=206, start=309, end=310),\n",
+       "  AmscoSlice(index=207, start=310, end=312),\n",
+       "  AmscoSlice(index=208, start=312, end=313),\n",
+       "  AmscoSlice(index=209, start=313, end=315)],\n",
+       " [AmscoSlice(index=210, start=315, end=317),\n",
+       "  AmscoSlice(index=211, start=317, end=318),\n",
+       "  AmscoSlice(index=212, start=318, end=320),\n",
+       "  AmscoSlice(index=213, start=320, end=321),\n",
+       "  AmscoSlice(index=214, start=321, end=323),\n",
+       "  AmscoSlice(index=215, start=323, end=324)],\n",
+       " [AmscoSlice(index=216, start=324, end=325),\n",
+       "  AmscoSlice(index=217, start=325, end=327),\n",
+       "  AmscoSlice(index=218, start=327, end=328),\n",
+       "  AmscoSlice(index=219, start=328, end=330),\n",
+       "  AmscoSlice(index=220, start=330, end=331),\n",
+       "  AmscoSlice(index=221, start=331, end=333)],\n",
+       " [AmscoSlice(index=222, start=333, end=335),\n",
+       "  AmscoSlice(index=223, start=335, end=336),\n",
+       "  AmscoSlice(index=224, start=336, end=338),\n",
+       "  AmscoSlice(index=225, start=338, end=339),\n",
+       "  AmscoSlice(index=226, start=339, end=341),\n",
+       "  AmscoSlice(index=227, start=341, end=342)],\n",
+       " [AmscoSlice(index=228, start=342, end=343),\n",
+       "  AmscoSlice(index=229, start=343, end=345),\n",
+       "  AmscoSlice(index=230, start=345, end=346),\n",
+       "  AmscoSlice(index=231, start=346, end=348),\n",
+       "  AmscoSlice(index=232, start=348, end=349),\n",
+       "  AmscoSlice(index=233, start=349, end=351)],\n",
+       " [AmscoSlice(index=234, start=351, end=353),\n",
+       "  AmscoSlice(index=235, start=353, end=354),\n",
+       "  AmscoSlice(index=236, start=354, end=356),\n",
+       "  AmscoSlice(index=237, start=356, end=357),\n",
+       "  AmscoSlice(index=238, start=357, end=359),\n",
+       "  AmscoSlice(index=239, start=359, end=360)],\n",
+       " [AmscoSlice(index=240, start=360, end=361),\n",
+       "  AmscoSlice(index=241, start=361, end=363),\n",
+       "  AmscoSlice(index=242, start=363, end=364),\n",
+       "  AmscoSlice(index=243, start=364, end=366),\n",
+       "  AmscoSlice(index=244, start=366, end=367),\n",
+       "  AmscoSlice(index=245, start=367, end=369)],\n",
+       " [AmscoSlice(index=246, start=369, end=371),\n",
+       "  AmscoSlice(index=247, start=371, end=372),\n",
+       "  AmscoSlice(index=248, start=372, end=374),\n",
+       "  AmscoSlice(index=249, start=374, end=375),\n",
+       "  AmscoSlice(index=250, start=375, end=377),\n",
+       "  AmscoSlice(index=251, start=377, end=378)],\n",
+       " [AmscoSlice(index=252, start=378, end=379),\n",
+       "  AmscoSlice(index=253, start=379, end=381),\n",
+       "  AmscoSlice(index=254, start=381, end=382),\n",
+       "  AmscoSlice(index=255, start=382, end=384),\n",
+       "  AmscoSlice(index=256, start=384, end=385),\n",
+       "  AmscoSlice(index=257, start=385, end=387)],\n",
+       " [AmscoSlice(index=258, start=387, end=389),\n",
+       "  AmscoSlice(index=259, start=389, end=390),\n",
+       "  AmscoSlice(index=260, start=390, end=392),\n",
+       "  AmscoSlice(index=261, start=392, end=393),\n",
+       "  AmscoSlice(index=262, start=393, end=395),\n",
+       "  AmscoSlice(index=263, start=395, end=396)],\n",
+       " [AmscoSlice(index=264, start=396, end=397),\n",
+       "  AmscoSlice(index=265, start=397, end=399),\n",
+       "  AmscoSlice(index=266, start=399, end=400),\n",
+       "  AmscoSlice(index=267, start=400, end=402),\n",
+       "  AmscoSlice(index=268, start=402, end=403),\n",
+       "  AmscoSlice(index=269, start=403, end=405)],\n",
+       " [AmscoSlice(index=270, start=405, end=407),\n",
+       "  AmscoSlice(index=271, start=407, end=408),\n",
+       "  AmscoSlice(index=272, start=408, end=410),\n",
+       "  AmscoSlice(index=273, start=410, end=411),\n",
+       "  AmscoSlice(index=274, start=411, end=413),\n",
+       "  AmscoSlice(index=275, start=413, end=414)],\n",
+       " [AmscoSlice(index=276, start=414, end=415),\n",
+       "  AmscoSlice(index=277, start=415, end=417),\n",
+       "  AmscoSlice(index=278, start=417, end=418),\n",
+       "  AmscoSlice(index=279, start=418, end=420),\n",
+       "  AmscoSlice(index=280, start=420, end=421),\n",
+       "  AmscoSlice(index=281, start=421, end=423)],\n",
+       " [AmscoSlice(index=282, start=423, end=425),\n",
+       "  AmscoSlice(index=283, start=425, end=426),\n",
+       "  AmscoSlice(index=284, start=426, end=428),\n",
+       "  AmscoSlice(index=285, start=428, end=429),\n",
+       "  AmscoSlice(index=286, start=429, end=431),\n",
+       "  AmscoSlice(index=287, start=431, end=432)],\n",
+       " [AmscoSlice(index=288, start=432, end=433),\n",
+       "  AmscoSlice(index=289, start=433, end=435),\n",
+       "  AmscoSlice(index=290, start=435, end=436),\n",
+       "  AmscoSlice(index=291, start=436, end=438),\n",
+       "  AmscoSlice(index=292, start=438, end=439),\n",
+       "  AmscoSlice(index=293, start=439, end=441)],\n",
+       " [AmscoSlice(index=294, start=441, end=443),\n",
+       "  AmscoSlice(index=295, start=443, end=444),\n",
+       "  AmscoSlice(index=296, start=444, end=446),\n",
+       "  AmscoSlice(index=297, start=446, end=447),\n",
+       "  AmscoSlice(index=298, start=447, end=449),\n",
+       "  AmscoSlice(index=299, start=449, end=450)],\n",
+       " [AmscoSlice(index=300, start=450, end=451),\n",
+       "  AmscoSlice(index=301, start=451, end=453),\n",
+       "  AmscoSlice(index=302, start=453, end=454),\n",
+       "  AmscoSlice(index=303, start=454, end=456),\n",
+       "  AmscoSlice(index=304, start=456, end=457),\n",
+       "  AmscoSlice(index=305, start=457, end=459)],\n",
+       " [AmscoSlice(index=306, start=459, end=461),\n",
+       "  AmscoSlice(index=307, start=461, end=462),\n",
+       "  AmscoSlice(index=308, start=462, end=464),\n",
+       "  AmscoSlice(index=309, start=464, end=465),\n",
+       "  AmscoSlice(index=310, start=465, end=467),\n",
+       "  AmscoSlice(index=311, start=467, end=468)],\n",
+       " [AmscoSlice(index=312, start=468, end=469),\n",
+       "  AmscoSlice(index=313, start=469, end=471),\n",
+       "  AmscoSlice(index=314, start=471, end=472),\n",
+       "  AmscoSlice(index=315, start=472, end=474),\n",
+       "  AmscoSlice(index=316, start=474, end=475),\n",
+       "  AmscoSlice(index=317, start=475, end=477)],\n",
+       " [AmscoSlice(index=318, start=477, end=479),\n",
+       "  AmscoSlice(index=319, start=479, end=480),\n",
+       "  AmscoSlice(index=320, start=480, end=482),\n",
+       "  AmscoSlice(index=321, start=482, end=483),\n",
+       "  AmscoSlice(index=322, start=483, end=485),\n",
+       "  AmscoSlice(index=323, start=485, end=486)],\n",
+       " [AmscoSlice(index=324, start=486, end=487),\n",
+       "  AmscoSlice(index=325, start=487, end=489),\n",
+       "  AmscoSlice(index=326, start=489, end=490),\n",
+       "  AmscoSlice(index=327, start=490, end=492),\n",
+       "  AmscoSlice(index=328, start=492, end=493),\n",
+       "  AmscoSlice(index=329, start=493, end=495)],\n",
+       " [AmscoSlice(index=330, start=495, end=497),\n",
+       "  AmscoSlice(index=331, start=497, end=498),\n",
+       "  AmscoSlice(index=332, start=498, end=500),\n",
+       "  AmscoSlice(index=333, start=500, end=501),\n",
+       "  AmscoSlice(index=334, start=501, end=503),\n",
+       "  AmscoSlice(index=335, start=503, end=504)],\n",
+       " [AmscoSlice(index=336, start=504, end=505),\n",
+       "  AmscoSlice(index=337, start=505, end=507),\n",
+       "  AmscoSlice(index=338, start=507, end=508),\n",
+       "  AmscoSlice(index=339, start=508, end=510),\n",
+       "  AmscoSlice(index=340, start=510, end=511),\n",
+       "  AmscoSlice(index=341, start=511, end=513)],\n",
+       " [AmscoSlice(index=342, start=513, end=515),\n",
+       "  AmscoSlice(index=343, start=515, end=516),\n",
+       "  AmscoSlice(index=344, start=516, end=518),\n",
+       "  AmscoSlice(index=345, start=518, end=519),\n",
+       "  AmscoSlice(index=346, start=519, end=521),\n",
+       "  AmscoSlice(index=347, start=521, end=522)],\n",
+       " [AmscoSlice(index=348, start=522, end=523),\n",
+       "  AmscoSlice(index=349, start=523, end=525),\n",
+       "  AmscoSlice(index=350, start=525, end=526),\n",
+       "  AmscoSlice(index=351, start=526, end=528),\n",
+       "  AmscoSlice(index=352, start=528, end=529),\n",
+       "  AmscoSlice(index=353, start=529, end=531)],\n",
+       " [AmscoSlice(index=354, start=531, end=533),\n",
+       "  AmscoSlice(index=355, start=533, end=534),\n",
+       "  AmscoSlice(index=356, start=534, end=536),\n",
+       "  AmscoSlice(index=357, start=536, end=537),\n",
+       "  AmscoSlice(index=358, start=537, end=539),\n",
+       "  AmscoSlice(index=359, start=539, end=540)],\n",
+       " [AmscoSlice(index=360, start=540, end=541),\n",
+       "  AmscoSlice(index=361, start=541, end=543),\n",
+       "  AmscoSlice(index=362, start=543, end=544),\n",
+       "  AmscoSlice(index=363, start=544, end=546),\n",
+       "  AmscoSlice(index=364, start=546, end=547),\n",
+       "  AmscoSlice(index=365, start=547, end=549)],\n",
+       " [AmscoSlice(index=366, start=549, end=551),\n",
+       "  AmscoSlice(index=367, start=551, end=552),\n",
+       "  AmscoSlice(index=368, start=552, end=554),\n",
+       "  AmscoSlice(index=369, start=554, end=555),\n",
+       "  AmscoSlice(index=370, start=555, end=557),\n",
+       "  AmscoSlice(index=371, start=557, end=558)],\n",
+       " [AmscoSlice(index=372, start=558, end=559),\n",
+       "  AmscoSlice(index=373, start=559, end=561),\n",
+       "  AmscoSlice(index=374, start=561, end=562),\n",
+       "  AmscoSlice(index=375, start=562, end=564),\n",
+       "  AmscoSlice(index=376, start=564, end=565),\n",
+       "  AmscoSlice(index=377, start=565, end=567)],\n",
+       " [AmscoSlice(index=378, start=567, end=569),\n",
+       "  AmscoSlice(index=379, start=569, end=570),\n",
+       "  AmscoSlice(index=380, start=570, end=572),\n",
+       "  AmscoSlice(index=381, start=572, end=573),\n",
+       "  AmscoSlice(index=382, start=573, end=575),\n",
+       "  AmscoSlice(index=383, start=575, end=576)],\n",
+       " [AmscoSlice(index=384, start=576, end=577),\n",
+       "  AmscoSlice(index=385, start=577, end=579),\n",
+       "  AmscoSlice(index=386, start=579, end=580),\n",
+       "  AmscoSlice(index=387, start=580, end=582),\n",
+       "  AmscoSlice(index=388, start=582, end=583),\n",
+       "  AmscoSlice(index=389, start=583, end=585)],\n",
+       " [AmscoSlice(index=390, start=585, end=587),\n",
+       "  AmscoSlice(index=391, start=587, end=588),\n",
+       "  AmscoSlice(index=392, start=588, end=590),\n",
+       "  AmscoSlice(index=393, start=590, end=591),\n",
+       "  AmscoSlice(index=394, start=591, end=593),\n",
+       "  AmscoSlice(index=395, start=593, end=594)],\n",
+       " [AmscoSlice(index=396, start=594, end=595),\n",
+       "  AmscoSlice(index=397, start=595, end=597),\n",
+       "  AmscoSlice(index=398, start=597, end=598),\n",
+       "  AmscoSlice(index=399, start=598, end=600),\n",
+       "  AmscoSlice(index=400, start=600, end=601),\n",
+       "  AmscoSlice(index=401, start=601, end=603)],\n",
+       " [AmscoSlice(index=402, start=603, end=605),\n",
+       "  AmscoSlice(index=403, start=605, end=606),\n",
+       "  AmscoSlice(index=404, start=606, end=608),\n",
+       "  AmscoSlice(index=405, start=608, end=609),\n",
+       "  AmscoSlice(index=406, start=609, end=611),\n",
+       "  AmscoSlice(index=407, start=611, end=612)]]"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "amsco_transposition_positions(c7b, 'abcdef', \n",
+    "      fillpattern=(1, 2),\n",
+    "      fillstyle=AmscoFillStyle.reverse_each_row)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "metadata": {
+    "collapsed": false,
+    "scrolled": true
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['stager',\n",
+       " 'staler',\n",
+       " 'stalin',\n",
+       " 'stamen',\n",
+       " 'sucker',\n",
+       " 'tucker',\n",
+       " 'twangs',\n",
+       " 'twerps',\n",
+       " 'twirls',\n",
+       " 'staffer',\n",
+       " 'stagers',\n",
+       " 'stagger',\n",
+       " 'stalins',\n",
+       " 'stamens',\n",
+       " 'stamina',\n",
+       " 'stammer',\n",
+       " 'statler',\n",
+       " 'suckers',\n",
+       " 'sudsier',\n",
+       " 'swagger',\n",
+       " 'tubbier',\n",
+       " 'tycoons',\n",
+       " 'loadable',\n",
+       " 'noblemen',\n",
+       " 'rubidium',\n",
+       " 'staffers',\n",
+       " 'staggers',\n",
+       " 'staminas',\n",
+       " 'stammers',\n",
+       " 'standard',\n",
+       " 'steelier',\n",
+       " 'submerse',\n",
+       " 'swaggers',\n",
+       " 'tubbiest',\n",
+       " 'tuitions',\n",
+       " 'twenties',\n",
+       " 'stalemate',\n",
+       " 'staleness',\n",
+       " 'stalinist',\n",
+       " 'stammerer',\n",
+       " 'standards',\n",
+       " 'submerses',\n",
+       " 'swaggerer',\n",
+       " 'stalemates',\n",
+       " 'stalenesss',\n",
+       " 'stammerers',\n",
+       " 'stepsister',\n",
+       " 'succulence',\n",
+       " 'statistical',\n",
+       " 'stepsisters',\n",
+       " 'succulences',\n",
+       " 'statistician',\n",
+       " 'statisticians']"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "transpositions[key_b[0]]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "security protocol solitaire comrades under a decree from moscow we are confined to using a new high security stream cipher stolen from the americans the solitaire cipher all files classified top secret and above are to be archived using this method this new field cipher has been tested and proven to match the security of the fi alka machine without the overhead of the technology you will need only a deck of cards to implement the cipher the key to be used will be provided and distributed on a one time pad and you must destroy the key as you use it the key consists of a random shuffle of a full deck of cards together with two distinguishable jokers agents should be freely able to carry this equipment without arousing suspicion\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(' '.join(segment(sanitise(\n",
+    "                amsco_transposition_decipher(sanitise(c7b), \n",
+    "                                             keyword=transpositions[key_b[0]][0], \n",
+    "                                             fillpattern=key_b[1],\n",
+    "                                             fillstyle=key_b[2])\n",
+    "            ))))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": []
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.4.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/2015/7a.ciphertext b/2015/7a.ciphertext
new file mode 100644 (file)
index 0000000..3df8fa8
--- /dev/null
@@ -0,0 +1 @@
+RTBFX UIUHT UZWUW ZAMMT BHUGS AUZSA ZEJHU ZIILH ARTIR WBNIM HTUZS GEINA FIUFI CAFHM IYBPT BKIBZ ACCAF HJZUH PTIFI URTIR WILHT IRUCT IFRXI FWGEB RWSFA JZLBZ LUHHJ FZGAJ HGTIU GMTUH IFJGG UBZTI FNBYU XPXIN HYAGR AMUZE JHGTI TBGFI XBHUK IGUZH TISJX BSBHC IFYGT IRXIB FXPTB GZAXA KINAF HTIGA KUIHS AKIFZ YIZHG AUBYG HUXXZ AHGJF IMTAG TIMBG MAFWU ZSNAF EJHUH TUZWH TUGUG WIPUZ HIXXU SIZRI UZHTI YIBZH UYIUT BKIEI IZMBH RTUZS HTIEF UHGHT IPGII YHATB KIEII ZUZRA ZHBRH MUHTA JFNFU IZLGU ZHTIF IURTG LAWHA FBZLH TIPUZ HJFZT BKIEI IZMBH RTUZS HTINF IZRTU HGIIY GXUWI MIBFI BXXMA FWUZS BSBUZ GHAZI BZAHT IFMTU RTUFI BXXPL ULZHI OCIRH BZLSU KIZMT BHMIF IBLUZ HTINF IZRTL ARJYI ZHXBG HMIIW ULAZH HTUZW HTBHU GBRAU ZRULI ZRIYP AMZSJ IGGUG HTBHH TIFJG GUBZG WZAMM TBHUG SAUZS AZBZL HTBHA JFEIG HTACI ANJZR AKIFU ZSUHU GHAEF IBWUZ HAHTI UFTDB ZLHFP HANUZ LGAYI HTUZS HTIFI JZNAF HJZBH IXPBR RAFLU ZSHAY PGAJF RIPJF UHTIP TBKIH BWIZH AJGUZ SBZIM RUCTI FGAXU HBUFI NAFBF RTUKI GHAFB SIANH ACGIR FIHNU XIGGA IKIZU NMIYB ZBSIH AGHIB XHTIF IXIKB ZHNUX IUHMU XXHBW IBXAH ANRAY CJHUZ SHAEF IBWHT IRUCT IFUBH HBRTB EFUIN YIGGB SINFA YPJFU IZRFP CHILJ GUZSB ZBYGR ARUCT IFWIP MAFLX IZSHT UGGUO UZMTU RTTIL IGRFU EIGHT IRUCT IFUHU GKIFP RXIKI FGUYC XIHAU YCXIY IZHEJ HBLIK UXHAR FBRWB ZLYPA ZITAC IUGHT BHMIR BZBXG ANUZL HTIRU CTIFW IPMTU XIUZH TITDA FBHXI BGHCB FHANU HUCXB ZHAIZ HIFUZ HMAMI IWGAZ LIRIY EIFGU OHIIZ HTHTI FJGGU BZGBF ITAGH UZSBX BFSIC FACBS BZLBI KIZHB GCBFH ANHTI UZHIF ZBHUA ZBXIE BJBJG GHIXX JZSMU HTXIB LUZSC AXUHE JFAYI YEIFG UZBHH IZLBZ RIYAG HANHT IGIRJ FUHPH IBYMU XXEIA RRJCU ILMUH THTBH BZLTD GIRJF UHPMU XXEIF IXBHU KIXPX USTHM UHTXJ RWUMU XXSIH UZBZL AJHMU HTHTI NUXIG MIZII LHTBH ZUSTH BZLHT IZMIR BZSIH HAHTI EAHHA YANHT IMTAX IFIUR TGLAW HAFGH FBHBS IYBXX HTIEI GHTBF FP
diff --git a/2015/7b.ciphertext b/2015/7b.ciphertext
new file mode 100644 (file)
index 0000000..fa2cf28
--- /dev/null
@@ -0,0 +1 @@
+UOCAD EDMMA EDAEC RRSOI COIPI IFEBO BDUSI SDSBE ENTTY ANETA DCOUD KOOTT RBELE DRAOA USYYO HISNL EDDSR ISHRS HEEOS ETROS TLSEU NRSCC OUWRI MOLHN STERS EDEEA RINTE WPENN OMSFT AITOF TOILL CAPEC ESEPN DUETN DEEUS ESOMF AKOGT INLGE LYARU ITSIC RIOIR SECOR ETNEU EATMT ALIHL EICRV EASME NCIED ATHEO LKWHE OHNWO NFIMH THUBE AIBND ATTHU EKTDO OECTW ITABA OULCA QWIUP IYPOC ODEEO ONSHI TCIEE ATAIA CLTTA RCHGH OFHET DPAEC HMAHV EHLOL YARLE IKEDR ODTEI DYSKE EYCFS HFOFE HTGEJ NDBBR YPHON IOSRO LMREF RWFII GHYPH NMEHR ELASO NDEIV TDTIR HEROT URECH ORHEG YNDED MEPYT WVIID OMOUT YAION AUFUC ATWOU OKTEF LTHMU TGNEC TITAR AOWEN NGSST EFRRE SCLFS PSATO EHIHE LASTV CHIFI IUTET EYEEC STNHE OILDS TNEPM ROSTT SRAFL LRHED ISESS RETIE NASU
index 250650b181d2c92f14f8c8b6ab6697d6ce7a2158..00e585e9bf03622142a13bf6d000e589496a27df 100644 (file)
--- a/SIGNED.md
+++ b/SIGNED.md
@@ -3,19 +3,19 @@
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v2
 
-iQIcBAABCAAGBQJWWJa0AAoJEJPB2e07PgbqOFkP/jmfCjzYoLGLAcbfUNDTl+kB
-5M81aiy73fMNJV2+GoGBflZpJ1Br0/yi+kSMFmK2Vv68jpHNuGaL+ihncVhE2TbE
-2LvhwbFYGugkKNBYt8nDDb2VMMKoaTU9xqpPxYTI1FAIKTDVCimZw3BurzJsd8P1
-Ow9OEA6LwzP2wJksOj+W+f0i4eATPbq8S3/1uoccgoWLmMgwq2GenDKqZIYs1H0a
-PFPld3Q/WC5BsMt7+Cn4JPQfe+IlfKrfWKTCx0ycs2zONWljvxrNf16qt9681sDm
-FKMsBGjB5yfvUAXs1iMhxWrXFY+dZlBkMeQmyDy/4BGzJMu3XlJOcMG0JaDCaeHW
-+JTUIl7cRMj/DsKbZO4ENFIHe8RL5rrgW1gVOlhT3WJVY9WAi57PDnAvo1CQTjXe
-3w7/KVu5YU7YiAZnF6p1W3DU1N0VyD7zTWgltj0r85CWAalJgqzat1Uyku5MWLbA
-KGof90lYreYrhFbQ8lLepKEI2c5MyBkrW4CO6/IPJlRAT2qQNLZBRNbz3FQK8bWz
-QOg7LeRtrBaKDAFaOV2tkfCS41XxipEVlSlHCS4R0M7Lwl91FWKQ9+60cAVUcUEJ
-NPyCUseKkemvEYp6I3NKjEzB2VNJbaobEWXMff33xvoZqc46+oCyrLsvutdr/Zwj
-8fTRls78YF61wxgZsLa0
-=++sq
+iQIcBAABCAAGBQJWjWDiAAoJEJPB2e07PgbqTQYP/1p/mIWKco0sY82X/5qVzeED
+BC90G90sl0hijCLVIWOJX1lQNAjShUDFb/jw9EXP1eZBInfSrkXVwTX6WkoXzkyz
+FOc4D1EN2IsSsvcI9HMMyxsu4Bnrj24/r0vbLoiNt2KCiEosN5h/ZQR43ZTcVwjB
+HLe8izsuBLjhkOi2bSOGGRKDRn52figwO9x2+fCGFpWskJR2BWL2tJM6wp4OihVF
+hqAhY7VdTOPM51dc4xVvP09kJf/jhaTILPi6WJhO09PwURPyfZ5dZr3te0IxLwmL
+IxBOx9aLDSbfoYeWhpNqIEpXyu626hYESppLnIcTItlLxf7EqXnRJquw8ipbeFae
+MAd26KcRl4/ox4isXBPPJo70MtsrDlg8Sdq5o4iWu2gAyVR9OMRtyPMpcFWYwFc3
+9LQY/BSxFUcFF7ROHQwvNy+4AlaaGvADgywY1TU3M/7wwPFfSxQIvJeSt/PCSqRU
+rIU8dQE4n3LyNPY3xnoWx/pSbz6EiZ4Lpq+E8N0GzORF7WgYdZaCLd2p3SAT/fCy
+u8Xw3R3+Wvn7L+tQFpMRrTnQBbtqVyec1wqmvevIeSRQBV5ukbmdRaeAhlROVsAp
+yrDLbwMIv2JqQMz+5EzpeE9Nj3pwwiTNLi1e+65werspyTIPSIEd2XqO3WXO816U
+hJywA30EPavQXyfxxRrx
+=6EPA
 -----END PGP SIGNATURE-----
 
 ```
@@ -125,12 +125,15 @@ size     exec  file                                               contents
 840                5b.ciphertext                                  69f3e64a2fa925a84f1f0b09b30bf901564436519f1c8b515121219fcd544638                                                                 
 2114               6a.ciphertext                                  64834f6db2055a3c1944d0c22e635fc411cb210ca71a7d737008f42de4febab9                                                                 
 867                6b.ciphertext                                  abc25188099a927323379ff6e3abad85312aca3cd01338848437c654f6ee5f72                                                                 
+1779               7a.ciphertext                                  e519e7120bc68dc433723b1408a5b50780ce15413dae6af3e6874e2b44993dfc                                                                 
+725                7b.ciphertext                                  9376b3432de0b238d17704cee5ebc029142018233339161c64b3f6ade9b7df04                                                                 
 3620             2015-challenge1.ipynb                            2ab544f48c22a3a2e665b03ae094ac2de04aee8bdb37366209276a937d248d6a                                                                 
 4092             2015-challenge2.ipynb                            58c2aeca6c73a8fef71d0cc8321469358803f392c02fd44631dd0b25c2755f4a                                                                 
 3987             2015-challenge3.ipynb                            dfec26ba881c7ad0af54d072aeba4d08162661e863266936963130548ff86b65                                                                 
 8030             2015-challenge4.ipynb                            f77ead0eae7fcd67039d500a31ad1748a4df115905adecd0e93e56f72bbdcfa0                                                                 
 5039             2015-challenge5.ipynb                            b0c28829c329d7a2752f4991006e6d78a10415d7609b893b80b3bdb788d6e533                                                                 
 14079            2015-challenge6.ipynb                            7bd1dcff4b764d75e002622ce6a4cc3c00625aa311ef886e5a436822660c565c                                                                 
+76275            2015-challenge7.ipynb                            c48d71ef5c105dff987981c05ce4a9d2cce382e6d54358d7e2a3b6fe9fc74f10                                                                 
 18025            LICENSE                                          a01259a1b522cf0de95824f9860613b453153eebac468e96196d5d7dba84786c                                                                 
 7999             LJ!-Qt!-Fghxft-dferts%3B-hsjeukaxxn-sfedw.ipynb  429b6c6995096ff19c28a5ee342bef8ea4774200bdf9aaf6268de3cb8b28df28                                                                 
 61               README.md                                        277247b410300ee16477b12ca54ad878d81c8061f6134e2e1cadccaf299de3a3                                                                 
@@ -138,8 +141,9 @@ size     exec  file                                               contents
 6488666          big.txt                                          fa066c7d40f0f201ac4144e652aa62430e58a6b3805ec70650f678da5804e87b                                                                 
 16832            cadenus-ciphers.ipynb                            50e49b3ec5e6440b86fe13472b9f4ab9e133e5665c7280b2abf7a6b57bb8a89a                                                                 
 514              caesar_break_parameter_trials.csv                6586223bcc00e06e3ff79d107202d6c29ef962a6dd544add00610c5907407e85|1cb7cc77831ef3ef4f994a9ea77e82a841b38acdde45ede9cedbe7a54f1e8e46
-41380            cipher.py                                        39536843924325b9acdc6aad387c55240fc12a9c23caeaee6ef67e0d7b94e95c                                                                 
-28349            cipherbreak.py                                   2a4cdf810302d5645064e460a4409f32173b02fc4e7c7ce0a84d1458a04007bc                                                                 
+318              cipher-training.sublime-project                  58e5d5b4e54fb29abecaef2d41266e3355adccb8b6a70bd595e509bd07c16587                                                                 
+42052            cipher.py                                        4ae3835f58782e76f8dc747ce46ae461c11236cf3397ee32adec8e974cf06153                                                                 
+28736            cipherbreak.py                                   cbda3e76773ad3125e00360622d1e01eccf376d4e783617c925cc4c557e97d86                                                                 
 11564            count_1edit.txt                                  3bf563ef032ba151ec1a4b2d1f33f50c49f4a47e4dc5b8152394bc5b63f57655|b5fbacbebcc25f5011ce97bc9ac967a09c50eef28b4aa98379a6c426df6ac08b
 223              count_1l.txt                                     335388d457db6ef1da05d8b55ab879e9be7d4e021085efc8d9dfeac0e4a79aa9                                                                 
 4956241          count_1w.txt                                     51df159fd3de12b20e403c108f526e96dbd723d9cabdd5f17955cdc16059e690                                                                 
diff --git a/cipher-training.sublime-project b/cipher-training.sublime-project
new file mode 100644 (file)
index 0000000..23662f1
--- /dev/null
@@ -0,0 +1,23 @@
+{
+       "folders":
+       [
+               {       "file_exclude_patterns":
+                       [
+                               "*.png",
+                               "*.jpg",
+                               "*.ipynb"
+                       ],
+                       "folder_exclude_patterns":
+                       [
+                               "*.ipynb_checkpoints",
+                               "__pycache__"
+                       ],
+                       "follow_symlinks": true,
+                       "path": "/home/neil/Documents/programming/cipher-training"
+               }
+       ],
+       "settings":
+       {
+               "tab_size": 4
+       }
+}
index 83700a538cec2cd55f01b390967565e21e7afbd3..eb0a169162851fff86bd6dfe6be3cf8064608dbe 100644 (file)
--- a/cipher.py
+++ b/cipher.py
@@ -763,8 +763,14 @@ def hill_decipher(matrix, message, fillvalue='a'):
 # from 'start' to 'end'
 AmscoSlice = collections.namedtuple('AmscoSlice', ['index', 'start', 'end'])
 
+class AmscoFillStyle(Enum):
+    continuous = 1
+    same_each_row = 2
+    reverse_each_row = 3
+
 def amsco_transposition_positions(message, keyword, 
       fillpattern=(1, 2),
+      fillstyle=AmscoFillStyle.continuous,
       fillcolumnwise=False,
       emptycolumnwise=True):
     """Creates the grid for the AMSCO transposition cipher. Each element in the
@@ -801,17 +807,25 @@ def amsco_transposition_positions(message, keyword,
 
     current_position = 0
     grid = []
+    current_fillpattern = fillpattern
     while current_position < message_length:
         row = []
+        if fillstyle == AmscoFillStyle.same_each_row:
+            fill_iterator = cycle(fillpattern)
+        if fillstyle == AmscoFillStyle.reverse_each_row:
+            fill_iterator = cycle(current_fillpattern)
         for _ in range(len(transpositions)):
             index = next(indices)
             gap = next(fill_iterator)
             row += [AmscoSlice(index, current_position, current_position + gap)]
             current_position += gap
         grid += [row]
+        if fillstyle == AmscoFillStyle.reverse_each_row:
+            current_fillpattern = list(reversed(current_fillpattern))
     return [transpose(r, transpositions) for r in grid]
 
-def amsco_transposition_encipher(message, keyword, fillpattern=(1,2)):
+def amsco_transposition_encipher(message, keyword, 
+    fillpattern=(1,2), fillstyle=AmscoFillStyle.reverse_each_row):
     """AMSCO transposition encipher.
 
     >>> amsco_transposition_encipher('hellothere', 'abc', fillpattern=(1, 2))
@@ -829,12 +843,14 @@ def amsco_transposition_encipher(message, keyword, fillpattern=(1,2)):
     >>> amsco_transposition_encipher('hereissometexttoencipher', 'cipher', fillpattern=(1, 3, 2))
     'hxomeiphscerettoisenteer'
     """
-    grid = amsco_transposition_positions(message, keyword, fillpattern=fillpattern)
+    grid = amsco_transposition_positions(message, keyword, 
+        fillpattern=fillpattern, fillstyle=fillstyle)
     ct_as_grid = [[message[s.start:s.end] for s in r] for r in grid]
     return combine_every_nth(ct_as_grid)
 
 
-def amsco_transposition_decipher(message, keyword, fillpattern=(1,2)):
+def amsco_transposition_decipher(message, keyword, 
+    fillpattern=(1,2), fillstyle=AmscoFillStyle.reverse_each_row):
     """AMSCO transposition decipher
 
     >>> amsco_transposition_decipher('hoteelhler', 'abc', fillpattern=(1, 2))
@@ -853,7 +869,8 @@ def amsco_transposition_decipher(message, keyword, fillpattern=(1,2)):
     'hereissometexttoencipher'
     """
 
-    grid = amsco_transposition_positions(message, keyword, fillpattern=fillpattern)
+    grid = amsco_transposition_positions(message, keyword, 
+        fillpattern=fillpattern, fillstyle=fillstyle)
     transposed_sections = [s for c in [l for l in zip(*grid)] for s in c]
     plaintext_list = [''] * len(transposed_sections)
     current_pos = 0
index 8a4d7b14942f2e9873eeb73b6ca270ba7ac21af7..120a89e4f82ec07561a0fa2ced9940344eafc60c 100644 (file)
@@ -465,6 +465,9 @@ def railfence_break(message, max_key_length=20,
     return max(results, key=lambda k: k[1])
 
 def amsco_break(message, translist=transpositions, patterns = [(1, 2), (2, 1)],
+                                  fillstyles = [AmscoFillStyle.continuous, 
+                                                AmscoFillStyle.same_each_row, 
+                                                AmscoFillStyle.reverse_each_row],
                                   fitness=Pbigrams, 
                                   chunksize=500):
     """Breaks an AMSCO transposition cipher using a dictionary and
@@ -498,24 +501,26 @@ def amsco_break(message, translist=transpositions, patterns = [(1, 2), (2, 1)],
     (((2, 0, 5, 3, 1, 4, 6), (2, 1)), -997.0129085...)
     """
     with Pool() as pool:
-        helper_args = [(message, trans, pattern, fitness)
+        helper_args = [(message, trans, pattern, fillstyle, fitness)
                        for trans in translist.keys()
-                       for pattern in patterns]
+                       for pattern in patterns
+                       for fillstyle in fillstyles]
         # Gotcha: the helper function here needs to be defined at the top level
         #   (limitation of Pool.starmap)
         breaks = pool.starmap(amsco_break_worker, helper_args, chunksize) 
         return max(breaks, key=lambda k: k[1])
 
 def amsco_break_worker(message, transposition,
-        pattern, fitness):
+        pattern, fillstyle, fitness):
     plaintext = amsco_transposition_decipher(message, transposition,
-        fillpattern=pattern)
+        fillpattern=pattern, fillstyle=fillstyle)
     fit = fitness(sanitise(plaintext))
     logger.debug('AMSCO transposition break attempt using key {0} and pattern'
-                         '{1} gives fit of {2} and decrypt starting: {3}'.format(
-                             transposition, pattern, fit, 
+                         '{1} ({2}) gives fit of {3} and decrypt starting: '
+                         '{4}'.format(
+                             transposition, pattern, fillstyle, fit, 
                              sanitise(plaintext)[:50]))
-    return (transposition, pattern), fit
+    return (transposition, pattern, fillstyle), fit
 
 
 def hill_break(message, matrix_size=2, fitness=Pletters,