From 557217689a42a9043d7e65a7721a21560c36518c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kn=C3=BCttel?= Date: Tue, 31 Dec 2019 16:03:41 +0100 Subject: [PATCH] added C_L as circuits --- computations/C_L_as_circuits.ipynb | 1630 ++++++++++++++++++++++++++++ 1 file changed, 1630 insertions(+) create mode 100644 computations/C_L_as_circuits.ipynb diff --git a/computations/C_L_as_circuits.ipynb b/computations/C_L_as_circuits.ipynb new file mode 100644 index 0000000..9307810 --- /dev/null +++ b/computations/C_L_as_circuits.ipynb @@ -0,0 +1,1630 @@ +{ + "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 +}