{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Elements of $C_L$ as meaningful circuits"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/latex": [
       "$\\displaystyle \\left[ \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\\\\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}1 & 0\\\\0 & i\\end{matrix}\\right], \\  \\left[\\begin{matrix}1 & 0\\\\0 & 1\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\\\\\frac{\\sqrt{2} i}{2} & - \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2} i}{2}\\\\\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}1 & 0\\\\0 & -1\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2} i}{2}\\\\\\frac{\\sqrt{2} i}{2} & \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\\\\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}1 & 0\\\\0 & - i\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\\\\\frac{\\sqrt{2} i}{2} & \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2} i}{2}\\\\\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2} i}{2}\\\\\\frac{\\sqrt{2} i}{2} & - \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{1}{2} + \\frac{i}{2} & \\frac{1}{2} - \\frac{i}{2}\\\\\\frac{1}{2} - \\frac{i}{2} & \\frac{1}{2} + \\frac{i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\\\- \\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}0 & 1\\\\1 & 0\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2}}{2}\\\\- \\frac{\\sqrt{2} i}{2} & \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}0 & 1\\\\i & 0\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{1}{2} - \\frac{i}{2} & \\frac{1}{2} + \\frac{i}{2}\\\\- \\frac{1}{2} + \\frac{i}{2} & \\frac{1}{2} + \\frac{i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}0 & i\\\\1 & 0\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & \\frac{\\sqrt{2} i}{2}\\\\- \\frac{\\sqrt{2} i}{2} & - \\frac{\\sqrt{2}}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{1}{2} - \\frac{i}{2} & - \\frac{1}{2} + \\frac{i}{2}\\\\- \\frac{1}{2} + \\frac{i}{2} & - \\frac{1}{2} + \\frac{i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}0 & -1\\\\1 & 0\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{\\sqrt{2}}{2} & - \\frac{\\sqrt{2}}{2}\\\\- \\frac{\\sqrt{2} i}{2} & - \\frac{\\sqrt{2} i}{2}\\end{matrix}\\right], \\  \\left[\\begin{matrix}\\frac{1}{2} - \\frac{i}{2} & \\frac{i \\left(-1 + i\\right)}{2}\\\\- \\frac{1}{2} + \\frac{i}{2} & \\frac{i \\left(-1 + i\\right)}{2}\\end{matrix}\\right]\\right]$"
      ],
      "text/plain": [
       "⎡⎡√2   √2 ⎤                  ⎡ √2     √2  ⎤  ⎡√2   √2⋅ⅈ ⎤           ⎡ √2   √2⋅\n",
       "⎢⎢──   ── ⎥                  ⎢ ──     ──  ⎥  ⎢──   ──── ⎥           ⎢ ──   ───\n",
       "⎢⎢2    2  ⎥  ⎡1  0⎤  ⎡1  0⎤  ⎢ 2      2   ⎥  ⎢2     2   ⎥  ⎡1  0 ⎤  ⎢ 2     2 \n",
       "⎢⎢        ⎥, ⎢    ⎥, ⎢    ⎥, ⎢            ⎥, ⎢          ⎥, ⎢     ⎥, ⎢         \n",
       "⎢⎢√2  -√2 ⎥  ⎣0  ⅈ⎦  ⎣0  1⎦  ⎢√2⋅ⅈ  -√2⋅ⅈ ⎥  ⎢√2  -√2⋅ⅈ ⎥  ⎣0  -1⎦  ⎢√2⋅ⅈ   √2\n",
       "⎢⎢──  ────⎥                  ⎢────  ──────⎥  ⎢──  ──────⎥           ⎢────   ──\n",
       "⎣⎣2    2  ⎦                  ⎣ 2      2   ⎦  ⎣2     2   ⎦           ⎣ 2     2 \n",
       "\n",
       "ⅈ⎤  ⎡√2  -√2 ⎤           ⎡ √2   -√2 ⎤  ⎡√2  -√2⋅ⅈ ⎤  ⎡ √2   -√2⋅ⅈ ⎤  ⎡1   ⅈ  1\n",
       "─⎥  ⎢──  ────⎥           ⎢ ──   ────⎥  ⎢──  ──────⎥  ⎢ ──   ──────⎥  ⎢─ + ─  ─\n",
       " ⎥  ⎢2    2  ⎥  ⎡1  0 ⎤  ⎢ 2     2  ⎥  ⎢2     2   ⎥  ⎢ 2      2   ⎥  ⎢2   2  2\n",
       " ⎥, ⎢        ⎥, ⎢     ⎥, ⎢          ⎥, ⎢          ⎥, ⎢            ⎥, ⎢        \n",
       " ⎥  ⎢√2   √2 ⎥  ⎣0  -ⅈ⎦  ⎢√2⋅ⅈ  √2⋅ⅈ⎥  ⎢√2   √2⋅ⅈ ⎥  ⎢√2⋅ⅈ   -√2  ⎥  ⎢1   ⅈ  1\n",
       " ⎥  ⎢──   ── ⎥           ⎢────  ────⎥  ⎢──   ──── ⎥  ⎢────   ──── ⎥  ⎢─ - ─  ─\n",
       " ⎦  ⎣2    2  ⎦           ⎣ 2     2  ⎦  ⎣2     2   ⎦  ⎣ 2      2   ⎦  ⎣2   2  2\n",
       "\n",
       "   ⅈ⎤  ⎡ √2   √2⎤          ⎡  √2     √2 ⎤          ⎡ 1   ⅈ   1   ⅈ⎤          ⎡\n",
       " - ─⎥  ⎢ ──   ──⎥          ⎢  ──     ── ⎥          ⎢ ─ - ─   ─ + ─⎥          ⎢\n",
       "   2⎥  ⎢ 2    2 ⎥  ⎡0  1⎤  ⎢  2      2  ⎥  ⎡0  1⎤  ⎢ 2   2   2   2⎥  ⎡0  ⅈ⎤  ⎢\n",
       "    ⎥, ⎢        ⎥, ⎢    ⎥, ⎢            ⎥, ⎢    ⎥, ⎢              ⎥, ⎢    ⎥, ⎢\n",
       "   ⅈ⎥  ⎢-√2   √2⎥  ⎣1  0⎦  ⎢-√2⋅ⅈ   √2⋅ⅈ⎥  ⎣ⅈ  0⎦  ⎢  1   ⅈ  1   ⅈ⎥  ⎣1  0⎦  ⎢\n",
       " + ─⎥  ⎢────  ──⎥          ⎢──────  ────⎥          ⎢- ─ + ─  ─ + ─⎥          ⎢\n",
       "   2⎦  ⎣ 2    2 ⎦          ⎣  2      2  ⎦          ⎣  2   2  2   2⎦          ⎣\n",
       "\n",
       "  √2    √2⋅ⅈ⎤  ⎡ 1   ⅈ     1   ⅈ⎤           ⎡  √2     -√2  ⎤  ⎡ 1   ⅈ   ⅈ⋅(-1 \n",
       "  ──    ────⎥  ⎢ ─ - ─   - ─ + ─⎥           ⎢  ──     ──── ⎥  ⎢ ─ - ─   ──────\n",
       "  2      2  ⎥  ⎢ 2   2     2   2⎥  ⎡0  -1⎤  ⎢  2       2   ⎥  ⎢ 2   2       2 \n",
       "            ⎥, ⎢                ⎥, ⎢     ⎥, ⎢              ⎥, ⎢               \n",
       "-√2⋅ⅈ   -√2 ⎥  ⎢  1   ⅈ    1   ⅈ⎥  ⎣1  0 ⎦  ⎢-√2⋅ⅈ   -√2⋅ⅈ ⎥  ⎢  1   ⅈ  ⅈ⋅(-1 \n",
       "──────  ────⎥  ⎢- ─ + ─  - ─ + ─⎥           ⎢──────  ──────⎥  ⎢- ─ + ─  ──────\n",
       "  2      2  ⎦  ⎣  2   2    2   2⎦           ⎣  2       2   ⎦  ⎣  2   2      2 \n",
       "\n",
       "+ ⅈ)⎤⎤\n",
       "────⎥⎥\n",
       "    ⎥⎥\n",
       "    ⎥⎥\n",
       "+ ⅈ)⎥⎥\n",
       "────⎥⎥\n",
       "    ⎦⎦"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import sympy\n",
    "\n",
    "M = sympy.Matrix\n",
    "simplify = sympy.simplify\n",
    "sqrt = sympy.sqrt\n",
    "i = sympy.I\n",
    "\n",
    "from sympy.physics.quantum import Dagger\n",
    "\n",
    "sympy.init_printing()\n",
    "H = simplify(M([[1, 1], [1, -1]]) / sqrt(2))\n",
    "S = M([[1, 0], [0, i]])\n",
    "C_L = [H, S]\n",
    "basis_vectors = [M([1, 0]), M([0, 1])]\n",
    "\n",
    "def getitem(m, i, j):\n",
    "    # Note that sympy uses an extremely weird way to store the matrices,\n",
    "    # in particular the internal representation is vastly different from what\n",
    "    # is printed. For instance the H matrix is stored as a Mul object\n",
    "    # (even after using simplify) instead of a matrix. \n",
    "    # Therefore m[i][j] will NOT work. This is a workaround.\n",
    "    return (Dagger(basis_vectors[i]) * m * basis_vectors[j])[0]\n",
    "\n",
    "def is_known(C_L, a):\n",
    "    for c in C_L:\n",
    "        test = c * Dagger(a)\n",
    "        if(simplify(getitem(test, 0, 1)) != 0):\n",
    "            continue\n",
    "        if(simplify(getitem(test, 0, 0) / getitem(test, 1, 1)) == 1):\n",
    "            return True\n",
    "    return False\n",
    "for i in range(5):\n",
    "    for m in (H, S):\n",
    "        for c in C_L:\n",
    "            c = simplify(c*m)\n",
    "            if(is_known(C_L, c)):\n",
    "                continue\n",
    "            C_L.append(c)\n",
    "C_L"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = M([[0, 1], [1, 0]])\n",
    "Z = M([[1, 0], [0, -1]])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "s2m = {\"H\": H, \"S\": S, \"X\": X, \"Z\": Z}\n",
    "def eval_str(s):\n",
    "    result = M([[1, 0], [0, 1]])\n",
    "    for c in s:\n",
    "        result *= s2m[c]\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_product_index(a):\n",
    "    for i,c in enumerate(C_L):\n",
    "        test = c * Dagger(a)\n",
    "        if(simplify(getitem(test, 0, 1)) != 0):\n",
    "            continue\n",
    "        if(simplify(getitem(test, 0, 0) / getitem(test, 1, 1)) == 1):\n",
    "            return i\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from itertools import product\n",
    "from collections import defaultdict\n",
    "\n",
    "results = defaultdict(set)\n",
    "\n",
    "def recursive_xs_products(length):\n",
    "    if(length == 1):\n",
    "        yield \"H\"\n",
    "        yield \"S\"\n",
    "        yield \"X\"\n",
    "        yield \"Z\"\n",
    "    else:\n",
    "        for p in recursive_xs_products(length - 1):\n",
    "            yield p\n",
    "            yield p + \"H\"\n",
    "            yield p + \"S\"\n",
    "            yield p + \"X\"\n",
    "            yield p + \"Z\"\n",
    "    \n",
    "    \n",
    "for p in recursive_xs_products(5):\n",
    "    results[get_product_index(eval_str(p))] |= {p}\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "defaultdict(set,\n",
       "            {0: {'H',\n",
       "  'HHH',\n",
       "  'HHHHH',\n",
       "  'HHHXX',\n",
       "  'HHHZZ',\n",
       "  'HHXHZ',\n",
       "  'HHXXH',\n",
       "  'HHZHX',\n",
       "  'HHZZH',\n",
       "  'HSSSS',\n",
       "  'HSSZ',\n",
       "  'HSXSX',\n",
       "  'HSZS',\n",
       "  'HXHHX',\n",
       "  'HXHZH',\n",
       "  'HXSXS',\n",
       "  'HXX',\n",
       "  'HXXHH',\n",
       "  'HXXXX',\n",
       "  'HXXZZ',\n",
       "  'HXZXZ',\n",
       "  'HXZZX',\n",
       "  'HZHHZ',\n",
       "  'HZHXH',\n",
       "  'HZSS',\n",
       "  'HZXXZ',\n",
       "  'HZXZX',\n",
       "  'HZZ',\n",
       "  'HZZHH',\n",
       "  'HZZXX',\n",
       "  'HZZZZ',\n",
       "  'SHSHS',\n",
       "  'SSHX',\n",
       "  'SSSSH',\n",
       "  'SSZH',\n",
       "  'SXSHZ',\n",
       "  'SXSXH',\n",
       "  'SZSH',\n",
       "  'XHHHZ',\n",
       "  'XHHXH',\n",
       "  'XHSS',\n",
       "  'XHXXZ',\n",
       "  'XHXZX',\n",
       "  'XHZ',\n",
       "  'XHZHH',\n",
       "  'XHZXX',\n",
       "  'XHZZZ',\n",
       "  'XSXSH',\n",
       "  'XXH',\n",
       "  'XXHHH',\n",
       "  'XXHXX',\n",
       "  'XXHZZ',\n",
       "  'XXXHZ',\n",
       "  'XXXXH',\n",
       "  'XXZHX',\n",
       "  'XXZZH',\n",
       "  'XZHXZ',\n",
       "  'XZHZX',\n",
       "  'XZXHX',\n",
       "  'XZXZH',\n",
       "  'XZZHZ',\n",
       "  'XZZXH',\n",
       "  'ZHHHX',\n",
       "  'ZHHZH',\n",
       "  'ZHSXS',\n",
       "  'ZHX',\n",
       "  'ZHXHH',\n",
       "  'ZHXXX',\n",
       "  'ZHXZZ',\n",
       "  'ZHZXZ',\n",
       "  'ZHZZX',\n",
       "  'ZSSH',\n",
       "  'ZXHXZ',\n",
       "  'ZXHZX',\n",
       "  'ZXXHX',\n",
       "  'ZXXZH',\n",
       "  'ZXZHZ',\n",
       "  'ZXZXH',\n",
       "  'ZZH',\n",
       "  'ZZHHH',\n",
       "  'ZZHXX',\n",
       "  'ZZHZZ',\n",
       "  'ZZXHZ',\n",
       "  'ZZXXH',\n",
       "  'ZZZHX',\n",
       "  'ZZZZH'},\n",
       " 2: {'HH',\n",
       "  'HHHH',\n",
       "  'HHSSZ',\n",
       "  'HHSZS',\n",
       "  'HHXX',\n",
       "  'HHZSS',\n",
       "  'HHZZ',\n",
       "  'HSSHX',\n",
       "  'HSSZH',\n",
       "  'HSZSH',\n",
       "  'HXHSS',\n",
       "  'HXHZ',\n",
       "  'HXXH',\n",
       "  'HZHX',\n",
       "  'HZSSH',\n",
       "  'HZZH',\n",
       "  'SHHSZ',\n",
       "  'SHHZS',\n",
       "  'SHXHS',\n",
       "  'SSHHZ',\n",
       "  'SSHXH',\n",
       "  'SSSS',\n",
       "  'SSXXZ',\n",
       "  'SSXZX',\n",
       "  'SSZ',\n",
       "  'SSZHH',\n",
       "  'SSZXX',\n",
       "  'SSZZZ',\n",
       "  'SXSX',\n",
       "  'SXXSZ',\n",
       "  'SXXZS',\n",
       "  'SXZXS',\n",
       "  'SZHHS',\n",
       "  'SZS',\n",
       "  'SZSHH',\n",
       "  'SZSXX',\n",
       "  'SZSZZ',\n",
       "  'SZXXS',\n",
       "  'SZZSZ',\n",
       "  'SZZZS',\n",
       "  'XHHX',\n",
       "  'XHSSH',\n",
       "  'XHZH',\n",
       "  'XSSXZ',\n",
       "  'XSSZX',\n",
       "  'XSXS',\n",
       "  'XSZSX',\n",
       "  'XX',\n",
       "  'XXHH',\n",
       "  'XXSSZ',\n",
       "  'XXSZS',\n",
       "  'XXXX',\n",
       "  'XXZSS',\n",
       "  'XXZZ',\n",
       "  'XZSSX',\n",
       "  'XZXSS',\n",
       "  'XZXZ',\n",
       "  'XZZX',\n",
       "  'ZHHSS',\n",
       "  'ZHHZ',\n",
       "  'ZHXH',\n",
       "  'ZSHHS',\n",
       "  'ZSS',\n",
       "  'ZSSHH',\n",
       "  'ZSSXX',\n",
       "  'ZSSZZ',\n",
       "  'ZSXXS',\n",
       "  'ZSZSZ',\n",
       "  'ZSZZS',\n",
       "  'ZXSSX',\n",
       "  'ZXXSS',\n",
       "  'ZXXZ',\n",
       "  'ZXZX',\n",
       "  'ZZ',\n",
       "  'ZZHH',\n",
       "  'ZZSSZ',\n",
       "  'ZZSZS',\n",
       "  'ZZXX',\n",
       "  'ZZZSS',\n",
       "  'ZZZZ'},\n",
       " 4: {'HHHS',\n",
       "  'HS',\n",
       "  'HSHH',\n",
       "  'HSSSZ',\n",
       "  'HSSZS',\n",
       "  'HSXX',\n",
       "  'HSZSS',\n",
       "  'HSZZ',\n",
       "  'HXSXZ',\n",
       "  'HXSZX',\n",
       "  'HXXS',\n",
       "  'HXZSX',\n",
       "  'HZSSS',\n",
       "  'HZSZ',\n",
       "  'HZXSX',\n",
       "  'HZZS',\n",
       "  'SHSHZ',\n",
       "  'SHSXH',\n",
       "  'SSHXS',\n",
       "  'SSZHS',\n",
       "  'SZSHS',\n",
       "  'XHSSS',\n",
       "  'XHSZ',\n",
       "  'XHXSX',\n",
       "  'XHZS',\n",
       "  'XSHSH',\n",
       "  'XXHS',\n",
       "  'XZHSX',\n",
       "  'ZHSXZ',\n",
       "  'ZHSZX',\n",
       "  'ZHXS',\n",
       "  'ZHZSX',\n",
       "  'ZSSHS',\n",
       "  'ZXHSX',\n",
       "  'ZZHS'},\n",
       " 13: {'HHHX',\n",
       "  'HHSSH',\n",
       "  'HHZH',\n",
       "  'HSSXZ',\n",
       "  'HSSZX',\n",
       "  'HSXS',\n",
       "  'HSZSX',\n",
       "  'HX',\n",
       "  'HXHH',\n",
       "  'HXSSZ',\n",
       "  'HXSZS',\n",
       "  'HXXX',\n",
       "  'HXZSS',\n",
       "  'HXZZ',\n",
       "  'HZSSX',\n",
       "  'HZXSS',\n",
       "  'HZXZ',\n",
       "  'HZZX',\n",
       "  'SHHSH',\n",
       "  'SSH',\n",
       "  'SSHHH',\n",
       "  'SSHXX',\n",
       "  'SSHZZ',\n",
       "  'SSXHZ',\n",
       "  'SSXXH',\n",
       "  'SSZHX',\n",
       "  'SSZZH',\n",
       "  'SXXSH',\n",
       "  'SZSHX',\n",
       "  'SZSZH',\n",
       "  'SZZSH',\n",
       "  'XHSSX',\n",
       "  'XHXSS',\n",
       "  'XHXZ',\n",
       "  'XHZX',\n",
       "  'XSSHZ',\n",
       "  'XSSXH',\n",
       "  'XXHX',\n",
       "  'XXSSH',\n",
       "  'XXZH',\n",
       "  'XZHSS',\n",
       "  'XZHZ',\n",
       "  'XZXH',\n",
       "  'ZH',\n",
       "  'ZHHH',\n",
       "  'ZHSSZ',\n",
       "  'ZHSZS',\n",
       "  'ZHXX',\n",
       "  'ZHZSS',\n",
       "  'ZHZZ',\n",
       "  'ZSSHX',\n",
       "  'ZSSZH',\n",
       "  'ZSZSH',\n",
       "  'ZXHSS',\n",
       "  'ZXHZ',\n",
       "  'ZXXH',\n",
       "  'ZZHX',\n",
       "  'ZZSSH',\n",
       "  'ZZZH'},\n",
       " 7: {'HHHSS',\n",
       "  'HHHZ',\n",
       "  'HHXH',\n",
       "  'HSHHS',\n",
       "  'HSS',\n",
       "  'HSSHH',\n",
       "  'HSSXX',\n",
       "  'HSSZZ',\n",
       "  'HSXXS',\n",
       "  'HSZSZ',\n",
       "  'HSZZS',\n",
       "  'HXSSX',\n",
       "  'HXXSS',\n",
       "  'HXXZ',\n",
       "  'HXZX',\n",
       "  'HZ',\n",
       "  'HZHH',\n",
       "  'HZSSZ',\n",
       "  'HZSZS',\n",
       "  'HZXX',\n",
       "  'HZZSS',\n",
       "  'HZZZ',\n",
       "  'SSHXZ',\n",
       "  'SSHZX',\n",
       "  'SSXHX',\n",
       "  'SSXZH',\n",
       "  'SSZHZ',\n",
       "  'SSZXH',\n",
       "  'SXSH',\n",
       "  'SZSHZ',\n",
       "  'SZSXH',\n",
       "  'XH',\n",
       "  'XHHH',\n",
       "  'XHSSZ',\n",
       "  'XHSZS',\n",
       "  'XHXX',\n",
       "  'XHZSS',\n",
       "  'XHZZ',\n",
       "  'XSSHX',\n",
       "  'XSSZH',\n",
       "  'XSZSH',\n",
       "  'XXHSS',\n",
       "  'XXHZ',\n",
       "  'XXXH',\n",
       "  'XZHX',\n",
       "  'XZSSH',\n",
       "  'XZZH',\n",
       "  'ZHSSX',\n",
       "  'ZHXSS',\n",
       "  'ZHXZ',\n",
       "  'ZHZX',\n",
       "  'ZSSHZ',\n",
       "  'ZSSXH',\n",
       "  'ZXHX',\n",
       "  'ZXSSH',\n",
       "  'ZXZH',\n",
       "  'ZZHSS',\n",
       "  'ZZHZ',\n",
       "  'ZZXH'},\n",
       " 1: {'HHHHS',\n",
       "  'HHS',\n",
       "  'HHSHH',\n",
       "  'HHSXX',\n",
       "  'HHSZZ',\n",
       "  'HHXXS',\n",
       "  'HHZSZ',\n",
       "  'HHZZS',\n",
       "  'HXHSZ',\n",
       "  'HXHZS',\n",
       "  'HXXHS',\n",
       "  'HZHXS',\n",
       "  'HZZHS',\n",
       "  'S',\n",
       "  'SHH',\n",
       "  'SHHHH',\n",
       "  'SHHXX',\n",
       "  'SHHZZ',\n",
       "  'SHXHZ',\n",
       "  'SHXXH',\n",
       "  'SHZHX',\n",
       "  'SHZZH',\n",
       "  'SSSSS',\n",
       "  'SSSZ',\n",
       "  'SSXSX',\n",
       "  'SSZS',\n",
       "  'SXHHX',\n",
       "  'SXHZH',\n",
       "  'SXSXS',\n",
       "  'SXX',\n",
       "  'SXXHH',\n",
       "  'SXXXX',\n",
       "  'SXXZZ',\n",
       "  'SXZXZ',\n",
       "  'SXZZX',\n",
       "  'SZHHZ',\n",
       "  'SZHXH',\n",
       "  'SZSS',\n",
       "  'SZXXZ',\n",
       "  'SZXZX',\n",
       "  'SZZ',\n",
       "  'SZZHH',\n",
       "  'SZZXX',\n",
       "  'SZZZZ',\n",
       "  'XHHXS',\n",
       "  'XHZHS',\n",
       "  'XSSSX',\n",
       "  'XSXSS',\n",
       "  'XSXZ',\n",
       "  'XSZX',\n",
       "  'XXHHS',\n",
       "  'XXS',\n",
       "  'XXSHH',\n",
       "  'XXSXX',\n",
       "  'XXSZZ',\n",
       "  'XXXXS',\n",
       "  'XXZSZ',\n",
       "  'XXZZS',\n",
       "  'XZSX',\n",
       "  'XZXSZ',\n",
       "  'XZXZS',\n",
       "  'XZZXS',\n",
       "  'ZHHSZ',\n",
       "  'ZHHZS',\n",
       "  'ZHXHS',\n",
       "  'ZSHHZ',\n",
       "  'ZSHXH',\n",
       "  'ZSSS',\n",
       "  'ZSXXZ',\n",
       "  'ZSXZX',\n",
       "  'ZSZ',\n",
       "  'ZSZHH',\n",
       "  'ZSZXX',\n",
       "  'ZSZZZ',\n",
       "  'ZXSX',\n",
       "  'ZXXSZ',\n",
       "  'ZXXZS',\n",
       "  'ZXZXS',\n",
       "  'ZZHHS',\n",
       "  'ZZS',\n",
       "  'ZZSHH',\n",
       "  'ZZSXX',\n",
       "  'ZZSZZ',\n",
       "  'ZZXXS',\n",
       "  'ZZZSZ',\n",
       "  'ZZZZS'},\n",
       " 14: {'HHHHX',\n",
       "  'HHHZH',\n",
       "  'HHSXS',\n",
       "  'HHX',\n",
       "  'HHXHH',\n",
       "  'HHXXX',\n",
       "  'HHXZZ',\n",
       "  'HHZXZ',\n",
       "  'HHZZX',\n",
       "  'HSSH',\n",
       "  'HXHXZ',\n",
       "  'HXHZX',\n",
       "  'HXXHX',\n",
       "  'HXXZH',\n",
       "  'HXZHZ',\n",
       "  'HXZXH',\n",
       "  'HZH',\n",
       "  'HZHHH',\n",
       "  'HZHXX',\n",
       "  'HZHZZ',\n",
       "  'HZXHZ',\n",
       "  'HZXXH',\n",
       "  'HZZHX',\n",
       "  'HZZZH',\n",
       "  'SHHXS',\n",
       "  'SHZHS',\n",
       "  'SSSSX',\n",
       "  'SSXSS',\n",
       "  'SSXZ',\n",
       "  'SSZX',\n",
       "  'SXHHS',\n",
       "  'SXS',\n",
       "  'SXSHH',\n",
       "  'SXSXX',\n",
       "  'SXSZZ',\n",
       "  'SXXXS',\n",
       "  'SXZSZ',\n",
       "  'SXZZS',\n",
       "  'SZSX',\n",
       "  'SZXSZ',\n",
       "  'SZXZS',\n",
       "  'SZZXS',\n",
       "  'X',\n",
       "  'XHH',\n",
       "  'XHHHH',\n",
       "  'XHHXX',\n",
       "  'XHHZZ',\n",
       "  'XHXHZ',\n",
       "  'XHXXH',\n",
       "  'XHZHX',\n",
       "  'XHZZH',\n",
       "  'XSSSS',\n",
       "  'XSSZ',\n",
       "  'XSXSX',\n",
       "  'XSZS',\n",
       "  'XXHHX',\n",
       "  'XXHZH',\n",
       "  'XXSXS',\n",
       "  'XXX',\n",
       "  'XXXHH',\n",
       "  'XXXXX',\n",
       "  'XXXZZ',\n",
       "  'XXZXZ',\n",
       "  'XXZZX',\n",
       "  'XZHHZ',\n",
       "  'XZHXH',\n",
       "  'XZSS',\n",
       "  'XZXXZ',\n",
       "  'XZXZX',\n",
       "  'XZZ',\n",
       "  'XZZHH',\n",
       "  'XZZXX',\n",
       "  'XZZZZ',\n",
       "  'ZHHXZ',\n",
       "  'ZHHZX',\n",
       "  'ZHXHX',\n",
       "  'ZHXZH',\n",
       "  'ZHZHZ',\n",
       "  'ZHZXH',\n",
       "  'ZSSX',\n",
       "  'ZSXSZ',\n",
       "  'ZSXZS',\n",
       "  'ZSZXS',\n",
       "  'ZXHHZ',\n",
       "  'ZXHXH',\n",
       "  'ZXSS',\n",
       "  'ZXXXZ',\n",
       "  'ZXXZX',\n",
       "  'ZXZ',\n",
       "  'ZXZHH',\n",
       "  'ZXZXX',\n",
       "  'ZXZZZ',\n",
       "  'ZZHHX',\n",
       "  'ZZHZH',\n",
       "  'ZZSXS',\n",
       "  'ZZX',\n",
       "  'ZZXHH',\n",
       "  'ZZXXX',\n",
       "  'ZZXZZ',\n",
       "  'ZZZXZ',\n",
       "  'ZZZZX'},\n",
       " 5: {'HHHHZ',\n",
       "  'HHHXH',\n",
       "  'HHSS',\n",
       "  'HHXXZ',\n",
       "  'HHXZX',\n",
       "  'HHZ',\n",
       "  'HHZHH',\n",
       "  'HHZXX',\n",
       "  'HHZZZ',\n",
       "  'HSXSH',\n",
       "  'HXH',\n",
       "  'HXHHH',\n",
       "  'HXHXX',\n",
       "  'HXHZZ',\n",
       "  'HXXHZ',\n",
       "  'HXXXH',\n",
       "  'HXZHX',\n",
       "  'HXZZH',\n",
       "  'HZHXZ',\n",
       "  'HZHZX',\n",
       "  'HZXHX',\n",
       "  'HZXZH',\n",
       "  'HZZHZ',\n",
       "  'HZZXH',\n",
       "  'SHHS',\n",
       "  'SS',\n",
       "  'SSHH',\n",
       "  'SSSSZ',\n",
       "  'SSSZS',\n",
       "  'SSXX',\n",
       "  'SSZSS',\n",
       "  'SSZZ',\n",
       "  'SXSXZ',\n",
       "  'SXSZX',\n",
       "  'SXXS',\n",
       "  'SXZSX',\n",
       "  'SZSSS',\n",
       "  'SZSZ',\n",
       "  'SZXSX',\n",
       "  'SZZS',\n",
       "  'XHHXZ',\n",
       "  'XHHZX',\n",
       "  'XHXHX',\n",
       "  'XHXZH',\n",
       "  'XHZHZ',\n",
       "  'XHZXH',\n",
       "  'XSSX',\n",
       "  'XSXSZ',\n",
       "  'XSXZS',\n",
       "  'XSZXS',\n",
       "  'XXHHZ',\n",
       "  'XXHXH',\n",
       "  'XXSS',\n",
       "  'XXXXZ',\n",
       "  'XXXZX',\n",
       "  'XXZ',\n",
       "  'XXZHH',\n",
       "  'XXZXX',\n",
       "  'XXZZZ',\n",
       "  'XZHHX',\n",
       "  'XZHZH',\n",
       "  'XZSXS',\n",
       "  'XZX',\n",
       "  'XZXHH',\n",
       "  'XZXXX',\n",
       "  'XZXZZ',\n",
       "  'XZZXZ',\n",
       "  'XZZZX',\n",
       "  'Z',\n",
       "  'ZHH',\n",
       "  'ZHHHH',\n",
       "  'ZHHXX',\n",
       "  'ZHHZZ',\n",
       "  'ZHXHZ',\n",
       "  'ZHXXH',\n",
       "  'ZHZHX',\n",
       "  'ZHZZH',\n",
       "  'ZSSSS',\n",
       "  'ZSSZ',\n",
       "  'ZSXSX',\n",
       "  'ZSZS',\n",
       "  'ZXHHX',\n",
       "  'ZXHZH',\n",
       "  'ZXSXS',\n",
       "  'ZXX',\n",
       "  'ZXXHH',\n",
       "  'ZXXXX',\n",
       "  'ZXXZZ',\n",
       "  'ZXZXZ',\n",
       "  'ZXZZX',\n",
       "  'ZZHHZ',\n",
       "  'ZZHXH',\n",
       "  'ZZSS',\n",
       "  'ZZXXZ',\n",
       "  'ZZXZX',\n",
       "  'ZZZ',\n",
       "  'ZZZHH',\n",
       "  'ZZZXX',\n",
       "  'ZZZZZ'},\n",
       " 12: {'HHHSH',\n",
       "  'HSH',\n",
       "  'HSHHH',\n",
       "  'HSHXX',\n",
       "  'HSHZZ',\n",
       "  'HSXHZ',\n",
       "  'HSXXH',\n",
       "  'HSZHX',\n",
       "  'HSZZH',\n",
       "  'HXXSH',\n",
       "  'HZSHX',\n",
       "  'HZSZH',\n",
       "  'HZZSH',\n",
       "  'SHSX',\n",
       "  'SHXSZ',\n",
       "  'SHXZS',\n",
       "  'SHZXS',\n",
       "  'SXHXS',\n",
       "  'SXZHS',\n",
       "  'SZHSZ',\n",
       "  'SZHZS',\n",
       "  'SZXHS',\n",
       "  'XHSHX',\n",
       "  'XHSZH',\n",
       "  'XHZSH',\n",
       "  'XSHS',\n",
       "  'XXHSH',\n",
       "  'ZHXSH',\n",
       "  'ZSHSZ',\n",
       "  'ZSHZS',\n",
       "  'ZSXHS',\n",
       "  'ZZHSH'},\n",
       " 23: {'HHHSX',\n",
       "  'HSHHX',\n",
       "  'HSHZH',\n",
       "  'HSSXS',\n",
       "  'HSX',\n",
       "  'HSXHH',\n",
       "  'HSXXX',\n",
       "  'HSXZZ',\n",
       "  'HSZXZ',\n",
       "  'HSZZX',\n",
       "  'HXSSS',\n",
       "  'HXSZ',\n",
       "  'HXXSX',\n",
       "  'HXZS',\n",
       "  'HZSXZ',\n",
       "  'HZSZX',\n",
       "  'HZXS',\n",
       "  'HZZSX',\n",
       "  'SHXSH',\n",
       "  'SSHSZ',\n",
       "  'SSHZS',\n",
       "  'SSXHS',\n",
       "  'SZHSH',\n",
       "  'XHSXZ',\n",
       "  'XHSZX',\n",
       "  'XHXS',\n",
       "  'XHZSX',\n",
       "  'XSSHS',\n",
       "  'XXHSX',\n",
       "  'XZHS',\n",
       "  'ZHSSS',\n",
       "  'ZHSZ',\n",
       "  'ZHXSX',\n",
       "  'ZHZS',\n",
       "  'ZSHSH',\n",
       "  'ZXHS',\n",
       "  'ZZHSX'},\n",
       " 10: {'HHHSZ',\n",
       "  'HHHZS',\n",
       "  'HHXHS',\n",
       "  'HSHHZ',\n",
       "  'HSHXH',\n",
       "  'HSSS',\n",
       "  'HSXXZ',\n",
       "  'HSXZX',\n",
       "  'HSZ',\n",
       "  'HSZHH',\n",
       "  'HSZXX',\n",
       "  'HSZZZ',\n",
       "  'HXSX',\n",
       "  'HXXSZ',\n",
       "  'HXXZS',\n",
       "  'HXZXS',\n",
       "  'HZHHS',\n",
       "  'HZS',\n",
       "  'HZSHH',\n",
       "  'HZSXX',\n",
       "  'HZSZZ',\n",
       "  'HZXXS',\n",
       "  'HZZSZ',\n",
       "  'HZZZS',\n",
       "  'SHSH',\n",
       "  'SSHSX',\n",
       "  'SXSHS',\n",
       "  'XHHHS',\n",
       "  'XHS',\n",
       "  'XHSHH',\n",
       "  'XHSXX',\n",
       "  'XHSZZ',\n",
       "  'XHXXS',\n",
       "  'XHZSZ',\n",
       "  'XHZZS',\n",
       "  'XXHSZ',\n",
       "  'XXHZS',\n",
       "  'XXXHS',\n",
       "  'XZHXS',\n",
       "  'XZZHS',\n",
       "  'ZHSX',\n",
       "  'ZHXSZ',\n",
       "  'ZHXZS',\n",
       "  'ZHZXS',\n",
       "  'ZXHXS',\n",
       "  'ZXZHS',\n",
       "  'ZZHSZ',\n",
       "  'ZZHZS',\n",
       "  'ZZXHS'},\n",
       " 17: {'HHHXS',\n",
       "  'HHZHS',\n",
       "  'HSSSX',\n",
       "  'HSXSS',\n",
       "  'HSXZ',\n",
       "  'HSZX',\n",
       "  'HXHHS',\n",
       "  'HXS',\n",
       "  'HXSHH',\n",
       "  'HXSXX',\n",
       "  'HXSZZ',\n",
       "  'HXXXS',\n",
       "  'HXZSZ',\n",
       "  'HXZZS',\n",
       "  'HZSX',\n",
       "  'HZXSZ',\n",
       "  'HZXZS',\n",
       "  'HZZXS',\n",
       "  'SHSHX',\n",
       "  'SHSZH',\n",
       "  'SHZSH',\n",
       "  'SSHS',\n",
       "  'SXHSH',\n",
       "  'XHSX',\n",
       "  'XHXSZ',\n",
       "  'XHXZS',\n",
       "  'XHZXS',\n",
       "  'XXHXS',\n",
       "  'XXZHS',\n",
       "  'XZHSZ',\n",
       "  'XZHZS',\n",
       "  'XZXHS',\n",
       "  'ZHHHS',\n",
       "  'ZHS',\n",
       "  'ZHSHH',\n",
       "  'ZHSXX',\n",
       "  'ZHSZZ',\n",
       "  'ZHXXS',\n",
       "  'ZHZSZ',\n",
       "  'ZHZZS',\n",
       "  'ZXHSZ',\n",
       "  'ZXHZS',\n",
       "  'ZXXHS',\n",
       "  'ZZHXS',\n",
       "  'ZZZHS'},\n",
       " 20: {'HHHXZ',\n",
       "  'HHHZX',\n",
       "  'HHXHX',\n",
       "  'HHXZH',\n",
       "  'HHZHZ',\n",
       "  'HHZXH',\n",
       "  'HSSX',\n",
       "  'HSXSZ',\n",
       "  'HSXZS',\n",
       "  'HSZXS',\n",
       "  'HXHHZ',\n",
       "  'HXHXH',\n",
       "  'HXSS',\n",
       "  'HXXXZ',\n",
       "  'HXXZX',\n",
       "  'HXZ',\n",
       "  'HXZHH',\n",
       "  'HXZXX',\n",
       "  'HXZZZ',\n",
       "  'HZHHX',\n",
       "  'HZHZH',\n",
       "  'HZSXS',\n",
       "  'HZX',\n",
       "  'HZXHH',\n",
       "  'HZXXX',\n",
       "  'HZXZZ',\n",
       "  'HZZXZ',\n",
       "  'HZZZX',\n",
       "  'SSHSS',\n",
       "  'SSHZ',\n",
       "  'SSXH',\n",
       "  'SXSHX',\n",
       "  'SXSZH',\n",
       "  'SXZSH',\n",
       "  'SZXSH',\n",
       "  'XHHHX',\n",
       "  'XHHZH',\n",
       "  'XHSXS',\n",
       "  'XHX',\n",
       "  'XHXHH',\n",
       "  'XHXXX',\n",
       "  'XHXZZ',\n",
       "  'XHZXZ',\n",
       "  'XHZZX',\n",
       "  'XSSH',\n",
       "  'XXHXZ',\n",
       "  'XXHZX',\n",
       "  'XXXHX',\n",
       "  'XXXZH',\n",
       "  'XXZHZ',\n",
       "  'XXZXH',\n",
       "  'XZH',\n",
       "  'XZHHH',\n",
       "  'XZHXX',\n",
       "  'XZHZZ',\n",
       "  'XZXHZ',\n",
       "  'XZXXH',\n",
       "  'XZZHX',\n",
       "  'XZZZH',\n",
       "  'ZHHHZ',\n",
       "  'ZHHXH',\n",
       "  'ZHSS',\n",
       "  'ZHXXZ',\n",
       "  'ZHXZX',\n",
       "  'ZHZ',\n",
       "  'ZHZHH',\n",
       "  'ZHZXX',\n",
       "  'ZHZZZ',\n",
       "  'ZSXSH',\n",
       "  'ZXH',\n",
       "  'ZXHHH',\n",
       "  'ZXHXX',\n",
       "  'ZXHZZ',\n",
       "  'ZXXHZ',\n",
       "  'ZXXXH',\n",
       "  'ZXZHX',\n",
       "  'ZXZZH',\n",
       "  'ZZHXZ',\n",
       "  'ZZHZX',\n",
       "  'ZZXHX',\n",
       "  'ZZXZH',\n",
       "  'ZZZHZ',\n",
       "  'ZZZXH'},\n",
       " 3: {'HHSH',\n",
       "  'HSHSX',\n",
       "  'HXSHS',\n",
       "  'SH',\n",
       "  'SHHH',\n",
       "  'SHSSZ',\n",
       "  'SHSZS',\n",
       "  'SHXX',\n",
       "  'SHZSS',\n",
       "  'SHZZ',\n",
       "  'SSSHX',\n",
       "  'SSSZH',\n",
       "  'SSZSH',\n",
       "  'SXHSS',\n",
       "  'SXHZ',\n",
       "  'SXXH',\n",
       "  'SZHX',\n",
       "  'SZSSH',\n",
       "  'SZZH',\n",
       "  'XSHXZ',\n",
       "  'XSHZX',\n",
       "  'XSXHX',\n",
       "  'XSXZH',\n",
       "  'XSZHZ',\n",
       "  'XSZXH',\n",
       "  'XXSH',\n",
       "  'XZSHZ',\n",
       "  'XZSXH',\n",
       "  'ZHSHS',\n",
       "  'ZSHX',\n",
       "  'ZSSSH',\n",
       "  'ZSZH',\n",
       "  'ZXSHZ',\n",
       "  'ZXSXH',\n",
       "  'ZZSH'},\n",
       " 16: {'HHSX',\n",
       "  'HHXSZ',\n",
       "  'HHXZS',\n",
       "  'HHZXS',\n",
       "  'HXHXS',\n",
       "  'HXZHS',\n",
       "  'HZHSZ',\n",
       "  'HZHZS',\n",
       "  'HZXHS',\n",
       "  'SHHX',\n",
       "  'SHSSH',\n",
       "  'SHZH',\n",
       "  'SSSXZ',\n",
       "  'SSSZX',\n",
       "  'SSXS',\n",
       "  'SSZSX',\n",
       "  'SX',\n",
       "  'SXHH',\n",
       "  'SXSSZ',\n",
       "  'SXSZS',\n",
       "  'SXXX',\n",
       "  'SXZSS',\n",
       "  'SXZZ',\n",
       "  'SZSSX',\n",
       "  'SZXSS',\n",
       "  'SZXZ',\n",
       "  'SZZX',\n",
       "  'XHHSZ',\n",
       "  'XHHZS',\n",
       "  'XHXHS',\n",
       "  'XSHHZ',\n",
       "  'XSHXH',\n",
       "  'XSSS',\n",
       "  'XSXXZ',\n",
       "  'XSXZX',\n",
       "  'XSZ',\n",
       "  'XSZHH',\n",
       "  'XSZXX',\n",
       "  'XSZZZ',\n",
       "  'XXSX',\n",
       "  'XXXSZ',\n",
       "  'XXXZS',\n",
       "  'XXZXS',\n",
       "  'XZHHS',\n",
       "  'XZS',\n",
       "  'XZSHH',\n",
       "  'XZSXX',\n",
       "  'XZSZZ',\n",
       "  'XZXXS',\n",
       "  'XZZSZ',\n",
       "  'XZZZS',\n",
       "  'ZHHXS',\n",
       "  'ZHZHS',\n",
       "  'ZSSSX',\n",
       "  'ZSXSS',\n",
       "  'ZSXZ',\n",
       "  'ZSZX',\n",
       "  'ZXHHS',\n",
       "  'ZXS',\n",
       "  'ZXSHH',\n",
       "  'ZXSXX',\n",
       "  'ZXSZZ',\n",
       "  'ZXXXS',\n",
       "  'ZXZSZ',\n",
       "  'ZXZZS',\n",
       "  'ZZSX',\n",
       "  'ZZXSZ',\n",
       "  'ZZXZS',\n",
       "  'ZZZXS'},\n",
       " 8: {'HHSSS',\n",
       "  'HHSZ',\n",
       "  'HHXSX',\n",
       "  'HHZS',\n",
       "  'HSHSH',\n",
       "  'HXHS',\n",
       "  'HZHSX',\n",
       "  'SHHSS',\n",
       "  'SHHZ',\n",
       "  'SHXH',\n",
       "  'SSHHS',\n",
       "  'SSS',\n",
       "  'SSSHH',\n",
       "  'SSSXX',\n",
       "  'SSSZZ',\n",
       "  'SSXXS',\n",
       "  'SSZSZ',\n",
       "  'SSZZS',\n",
       "  'SXSSX',\n",
       "  'SXXSS',\n",
       "  'SXXZ',\n",
       "  'SXZX',\n",
       "  'SZ',\n",
       "  'SZHH',\n",
       "  'SZSSZ',\n",
       "  'SZSZS',\n",
       "  'SZXX',\n",
       "  'SZZSS',\n",
       "  'SZZZ',\n",
       "  'XHHSX',\n",
       "  'XSHHX',\n",
       "  'XSHZH',\n",
       "  'XSSXS',\n",
       "  'XSX',\n",
       "  'XSXHH',\n",
       "  'XSXXX',\n",
       "  'XSXZZ',\n",
       "  'XSZXZ',\n",
       "  'XSZZX',\n",
       "  'XXSSS',\n",
       "  'XXSZ',\n",
       "  'XXXSX',\n",
       "  'XXZS',\n",
       "  'XZSXZ',\n",
       "  'XZSZX',\n",
       "  'XZXS',\n",
       "  'XZZSX',\n",
       "  'ZHHS',\n",
       "  'ZS',\n",
       "  'ZSHH',\n",
       "  'ZSSSZ',\n",
       "  'ZSSZS',\n",
       "  'ZSXX',\n",
       "  'ZSZSS',\n",
       "  'ZSZZ',\n",
       "  'ZXSXZ',\n",
       "  'ZXSZX',\n",
       "  'ZXXS',\n",
       "  'ZXZSX',\n",
       "  'ZZSSS',\n",
       "  'ZZSZ',\n",
       "  'ZZXSX',\n",
       "  'ZZZS'},\n",
       " 18: {'HHSXZ',\n",
       "  'HHSZX',\n",
       "  'HHXS',\n",
       "  'HHZSX',\n",
       "  'HSSHS',\n",
       "  'HXHSX',\n",
       "  'HZHS',\n",
       "  'SHHXZ',\n",
       "  'SHHZX',\n",
       "  'SHXHX',\n",
       "  'SHXZH',\n",
       "  'SHZHZ',\n",
       "  'SHZXH',\n",
       "  'SSSX',\n",
       "  'SSXSZ',\n",
       "  'SSXZS',\n",
       "  'SSZXS',\n",
       "  'SXHHZ',\n",
       "  'SXHXH',\n",
       "  'SXSS',\n",
       "  'SXXXZ',\n",
       "  'SXXZX',\n",
       "  'SXZ',\n",
       "  'SXZHH',\n",
       "  'SXZXX',\n",
       "  'SXZZZ',\n",
       "  'SZHHX',\n",
       "  'SZHZH',\n",
       "  'SZSXS',\n",
       "  'SZX',\n",
       "  'SZXHH',\n",
       "  'SZXXX',\n",
       "  'SZXZZ',\n",
       "  'SZZXZ',\n",
       "  'SZZZX',\n",
       "  'XHHS',\n",
       "  'XS',\n",
       "  'XSHH',\n",
       "  'XSSSZ',\n",
       "  'XSSZS',\n",
       "  'XSXX',\n",
       "  'XSZSS',\n",
       "  'XSZZ',\n",
       "  'XXSXZ',\n",
       "  'XXSZX',\n",
       "  'XXXS',\n",
       "  'XXZSX',\n",
       "  'XZSSS',\n",
       "  'XZSZ',\n",
       "  'XZXSX',\n",
       "  'XZZS',\n",
       "  'ZHHSX',\n",
       "  'ZSHHX',\n",
       "  'ZSHZH',\n",
       "  'ZSSXS',\n",
       "  'ZSX',\n",
       "  'ZSXHH',\n",
       "  'ZSXXX',\n",
       "  'ZSXZZ',\n",
       "  'ZSZXZ',\n",
       "  'ZSZZX',\n",
       "  'ZXSSS',\n",
       "  'ZXSZ',\n",
       "  'ZXXSX',\n",
       "  'ZXZS',\n",
       "  'ZZSXZ',\n",
       "  'ZZSZX',\n",
       "  'ZZXS',\n",
       "  'ZZZSX'},\n",
       " 21: {'HHSSX',\n",
       "  'HHXSS',\n",
       "  'HHXZ',\n",
       "  'HHZX',\n",
       "  'HSSHZ',\n",
       "  'HSSXH',\n",
       "  'HXHX',\n",
       "  'HXSSH',\n",
       "  'HXZH',\n",
       "  'HZHSS',\n",
       "  'HZHZ',\n",
       "  'HZXH',\n",
       "  'SHHSX',\n",
       "  'SSHHX',\n",
       "  'SSHZH',\n",
       "  'SSSXS',\n",
       "  'SSX',\n",
       "  'SSXHH',\n",
       "  'SSXXX',\n",
       "  'SSXZZ',\n",
       "  'SSZXZ',\n",
       "  'SSZZX',\n",
       "  'SXSSS',\n",
       "  'SXSZ',\n",
       "  'SXXSX',\n",
       "  'SXZS',\n",
       "  'SZSXZ',\n",
       "  'SZSZX',\n",
       "  'SZXS',\n",
       "  'SZZSX',\n",
       "  'XHHSS',\n",
       "  'XHHZ',\n",
       "  'XHXH',\n",
       "  'XSHHS',\n",
       "  'XSS',\n",
       "  'XSSHH',\n",
       "  'XSSXX',\n",
       "  'XSSZZ',\n",
       "  'XSXXS',\n",
       "  'XSZSZ',\n",
       "  'XSZZS',\n",
       "  'XXSSX',\n",
       "  'XXXSS',\n",
       "  'XXXZ',\n",
       "  'XXZX',\n",
       "  'XZ',\n",
       "  'XZHH',\n",
       "  'XZSSZ',\n",
       "  'XZSZS',\n",
       "  'XZXX',\n",
       "  'XZZSS',\n",
       "  'XZZZ',\n",
       "  'ZHHX',\n",
       "  'ZHSSH',\n",
       "  'ZHZH',\n",
       "  'ZSSXZ',\n",
       "  'ZSSZX',\n",
       "  'ZSXS',\n",
       "  'ZSZSX',\n",
       "  'ZX',\n",
       "  'ZXHH',\n",
       "  'ZXSSZ',\n",
       "  'ZXSZS',\n",
       "  'ZXXX',\n",
       "  'ZXZSS',\n",
       "  'ZXZZ',\n",
       "  'ZZSSX',\n",
       "  'ZZXSS',\n",
       "  'ZZXZ',\n",
       "  'ZZZX'},\n",
       " 15: {'HHSHX',\n",
       "  'HHSZH',\n",
       "  'HHZSH',\n",
       "  'HSHS',\n",
       "  'HXHSH',\n",
       "  'SHHHX',\n",
       "  'SHHZH',\n",
       "  'SHSXS',\n",
       "  'SHX',\n",
       "  'SHXHH',\n",
       "  'SHXXX',\n",
       "  'SHXZZ',\n",
       "  'SHZXZ',\n",
       "  'SHZZX',\n",
       "  'SSSH',\n",
       "  'SXHXZ',\n",
       "  'SXHZX',\n",
       "  'SXXHX',\n",
       "  'SXXZH',\n",
       "  'SXZHZ',\n",
       "  'SXZXH',\n",
       "  'SZH',\n",
       "  'SZHHH',\n",
       "  'SZHXX',\n",
       "  'SZHZZ',\n",
       "  'SZXHZ',\n",
       "  'SZXXH',\n",
       "  'SZZHX',\n",
       "  'SZZZH',\n",
       "  'XSHSS',\n",
       "  'XSHZ',\n",
       "  'XSXH',\n",
       "  'XXSHX',\n",
       "  'XXSZH',\n",
       "  'XXZSH',\n",
       "  'XZXSH',\n",
       "  'ZHHSH',\n",
       "  'ZSH',\n",
       "  'ZSHHH',\n",
       "  'ZSHXX',\n",
       "  'ZSHZZ',\n",
       "  'ZSXHZ',\n",
       "  'ZSXXH',\n",
       "  'ZSZHX',\n",
       "  'ZSZZH',\n",
       "  'ZXXSH',\n",
       "  'ZZSHX',\n",
       "  'ZZSZH',\n",
       "  'ZZZSH'},\n",
       " 6: {'HHSHS',\n",
       "  'HSHX',\n",
       "  'HSSSH',\n",
       "  'HSZH',\n",
       "  'HXSHZ',\n",
       "  'HXSXH',\n",
       "  'HZSH',\n",
       "  'SHHHS',\n",
       "  'SHS',\n",
       "  'SHSHH',\n",
       "  'SHSXX',\n",
       "  'SHSZZ',\n",
       "  'SHXXS',\n",
       "  'SHZSZ',\n",
       "  'SHZZS',\n",
       "  'SXHSZ',\n",
       "  'SXHZS',\n",
       "  'SXXHS',\n",
       "  'SZHXS',\n",
       "  'SZZHS',\n",
       "  'XHSH',\n",
       "  'XSHSX',\n",
       "  'XXSHS',\n",
       "  'ZHSHZ',\n",
       "  'ZHSXH',\n",
       "  'ZSHXS',\n",
       "  'ZSZHS',\n",
       "  'ZZSHS'},\n",
       " 19: {'HSHSS',\n",
       "  'HSHZ',\n",
       "  'HSXH',\n",
       "  'HXSHX',\n",
       "  'HXSZH',\n",
       "  'HXZSH',\n",
       "  'HZXSH',\n",
       "  'SHSXZ',\n",
       "  'SHSZX',\n",
       "  'SHXS',\n",
       "  'SHZSX',\n",
       "  'SSSHS',\n",
       "  'SXHSX',\n",
       "  'SZHS',\n",
       "  'XHXSH',\n",
       "  'XSHSZ',\n",
       "  'XSHZS',\n",
       "  'XSXHS',\n",
       "  'XZHSH',\n",
       "  'ZHSHX',\n",
       "  'ZHSZH',\n",
       "  'ZHZSH',\n",
       "  'ZSHS',\n",
       "  'ZXHSH'},\n",
       " 11: {'HSHXZ',\n",
       "  'HSHZX',\n",
       "  'HSXHX',\n",
       "  'HSXZH',\n",
       "  'HSZHZ',\n",
       "  'HSZXH',\n",
       "  'HXSH',\n",
       "  'HZSHZ',\n",
       "  'HZSXH',\n",
       "  'SHSSS',\n",
       "  'SHSZ',\n",
       "  'SHXSX',\n",
       "  'SHZS',\n",
       "  'SSHSH',\n",
       "  'SXHS',\n",
       "  'SZHSX',\n",
       "  'XHSHZ',\n",
       "  'XHSXH',\n",
       "  'XSHXS',\n",
       "  'XSZHS',\n",
       "  'XZSHS',\n",
       "  'ZHSH',\n",
       "  'ZSHSX',\n",
       "  'ZXSHS'},\n",
       " 9: {'HHSHZ',\n",
       "  'HHSXH',\n",
       "  'HSHXS',\n",
       "  'HSZHS',\n",
       "  'HZSHS',\n",
       "  'SHHHZ',\n",
       "  'SHHXH',\n",
       "  'SHSS',\n",
       "  'SHXXZ',\n",
       "  'SHXZX',\n",
       "  'SHZ',\n",
       "  'SHZHH',\n",
       "  'SHZXX',\n",
       "  'SHZZZ',\n",
       "  'SSXSH',\n",
       "  'SXH',\n",
       "  'SXHHH',\n",
       "  'SXHXX',\n",
       "  'SXHZZ',\n",
       "  'SXXHZ',\n",
       "  'SXXXH',\n",
       "  'SXZHX',\n",
       "  'SXZZH',\n",
       "  'SZHXZ',\n",
       "  'SZHZX',\n",
       "  'SZXHX',\n",
       "  'SZXZH',\n",
       "  'SZZHZ',\n",
       "  'SZZXH',\n",
       "  'XHSHS',\n",
       "  'XSHX',\n",
       "  'XSSSH',\n",
       "  'XSZH',\n",
       "  'XXSHZ',\n",
       "  'XXSXH',\n",
       "  'XZSH',\n",
       "  'ZSHXZ',\n",
       "  'ZSHZX',\n",
       "  'ZSXHX',\n",
       "  'ZSXZH',\n",
       "  'ZSZHZ',\n",
       "  'ZSZXH',\n",
       "  'ZXSH',\n",
       "  'ZZSHZ',\n",
       "  'ZZSXH'},\n",
       " 22: {'HHXSH',\n",
       "  'HSHSZ',\n",
       "  'HSHZS',\n",
       "  'HSXHS',\n",
       "  'HZHSH',\n",
       "  'SHSSX',\n",
       "  'SHXSS',\n",
       "  'SHXZ',\n",
       "  'SHZX',\n",
       "  'SSSHZ',\n",
       "  'SSSXH',\n",
       "  'SXHX',\n",
       "  'SXSSH',\n",
       "  'SXZH',\n",
       "  'SZHSS',\n",
       "  'SZHZ',\n",
       "  'SZXH',\n",
       "  'XHHSH',\n",
       "  'XSH',\n",
       "  'XSHHH',\n",
       "  'XSHXX',\n",
       "  'XSHZZ',\n",
       "  'XSXHZ',\n",
       "  'XSXXH',\n",
       "  'XSZHX',\n",
       "  'XSZZH',\n",
       "  'XXXSH',\n",
       "  'XZSHX',\n",
       "  'XZSZH',\n",
       "  'XZZSH',\n",
       "  'ZSHSS',\n",
       "  'ZSHZ',\n",
       "  'ZSXH',\n",
       "  'ZXSHX',\n",
       "  'ZXSZH',\n",
       "  'ZXZSH',\n",
       "  'ZZXSH'}})"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['H',\n",
       " 'S',\n",
       " 'ZZ',\n",
       " 'SH',\n",
       " 'HS',\n",
       " 'Z',\n",
       " 'SHS',\n",
       " 'HZ',\n",
       " 'ZS',\n",
       " 'SXH',\n",
       " 'HSZ',\n",
       " 'HXSH',\n",
       " 'HSH',\n",
       " 'HX',\n",
       " 'X',\n",
       " 'ZSH',\n",
       " 'SX',\n",
       " 'HXS',\n",
       " 'XS',\n",
       " 'SZHS',\n",
       " 'ZXH',\n",
       " 'XZ',\n",
       " 'XSH',\n",
       " 'HSX']"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lookup_table = [min(v, key=lambda x:len(x)) for k,v in sorted(results.items(), key=lambda x:x[0])]\n",
    "lookup_table"
   ]
  }
 ],
 "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}