From 55f602f3ca4d1297233e471706caaad9c7a99b5e Mon Sep 17 00:00:00 2001
From: Neil Smith <neil.git@njae.me.uk>
Date: Fri, 21 Jul 2017 10:43:06 +0100
Subject: [PATCH] Various changes to day 4

---
 .../04-lines.txt                              |   0
 .../04-small.txt                              |   0
 .../amidakuji-creation.ipynb                  |   0
 .../amidakuji-solution-1-slow.ipynb           |   0
 .../amidakuji-solution-1.ipynb                | 254 ++++++-
 .../amidakuji-solution-2.ipynb                | 145 +++-
 {04-08-amidakuji => 04-amidakuji}/day4.clj    |   0
 04-amidakuji/packing-variants.svg             | 675 ++++++++++++++++++
 04-amidakuji/packing-variants.svg.png         | Bin 0 -> 14504 bytes
 04-amidakuji/permutations.txt                 |  23 +
 .../small-expanded-trace.svg                  |   0
 .../small-expanded-trace.svg.png              | Bin
 .../small-expanded.svg                        |   0
 .../small-expanded.svg.png                    | Bin
 .../small-packed.svg                          |   0
 .../small-packed.svg.png                      | Bin
 .../small-unpaired.svg                        |   0
 .../small-untriple-1.svg                      |   0
 .../small-untriple-1.svg.png                  | Bin
 .../small-untriple-2.svg                      |   0
 .../untriple-general.svg                      |   0
 .../untriple-general.svg.png                  | Bin
 22 files changed, 1039 insertions(+), 58 deletions(-)
 rename {04-08-amidakuji => 04-amidakuji}/04-lines.txt (100%)
 rename {04-08-amidakuji => 04-amidakuji}/04-small.txt (100%)
 rename {04-08-amidakuji => 04-amidakuji}/amidakuji-creation.ipynb (100%)
 rename {04-08-amidakuji => 04-amidakuji}/amidakuji-solution-1-slow.ipynb (100%)
 rename {04-08-amidakuji => 04-amidakuji}/amidakuji-solution-1.ipynb (62%)
 rename {04-08-amidakuji => 04-amidakuji}/amidakuji-solution-2.ipynb (94%)
 rename {04-08-amidakuji => 04-amidakuji}/day4.clj (100%)
 create mode 100644 04-amidakuji/packing-variants.svg
 create mode 100644 04-amidakuji/packing-variants.svg.png
 create mode 100644 04-amidakuji/permutations.txt
 rename {04-08-amidakuji => 04-amidakuji}/small-expanded-trace.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-expanded-trace.svg.png (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-expanded.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-expanded.svg.png (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-packed.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-packed.svg.png (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-unpaired.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-untriple-1.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-untriple-1.svg.png (100%)
 rename {04-08-amidakuji => 04-amidakuji}/small-untriple-2.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/untriple-general.svg (100%)
 rename {04-08-amidakuji => 04-amidakuji}/untriple-general.svg.png (100%)

diff --git a/04-08-amidakuji/04-lines.txt b/04-amidakuji/04-lines.txt
similarity index 100%
rename from 04-08-amidakuji/04-lines.txt
rename to 04-amidakuji/04-lines.txt
diff --git a/04-08-amidakuji/04-small.txt b/04-amidakuji/04-small.txt
similarity index 100%
rename from 04-08-amidakuji/04-small.txt
rename to 04-amidakuji/04-small.txt
diff --git a/04-08-amidakuji/amidakuji-creation.ipynb b/04-amidakuji/amidakuji-creation.ipynb
similarity index 100%
rename from 04-08-amidakuji/amidakuji-creation.ipynb
rename to 04-amidakuji/amidakuji-creation.ipynb
diff --git a/04-08-amidakuji/amidakuji-solution-1-slow.ipynb b/04-amidakuji/amidakuji-solution-1-slow.ipynb
similarity index 100%
rename from 04-08-amidakuji/amidakuji-solution-1-slow.ipynb
rename to 04-amidakuji/amidakuji-solution-1-slow.ipynb
diff --git a/04-08-amidakuji/amidakuji-solution-1.ipynb b/04-amidakuji/amidakuji-solution-1.ipynb
similarity index 62%
rename from 04-08-amidakuji/amidakuji-solution-1.ipynb
rename to 04-amidakuji/amidakuji-solution-1.ipynb
index 7f149b4..df69a1f 100644
--- a/04-08-amidakuji/amidakuji-solution-1.ipynb
+++ b/04-amidakuji/amidakuji-solution-1.ipynb
@@ -2,7 +2,7 @@
  "cells": [
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 44,
    "metadata": {
     "collapsed": true
    },
@@ -16,7 +16,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 45,
    "metadata": {
     "collapsed": true
    },
@@ -27,7 +27,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 46,
    "metadata": {
     "collapsed": true
    },
@@ -39,7 +39,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 47,
    "metadata": {
     "collapsed": true
    },
@@ -51,23 +51,26 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 48,
    "metadata": {
     "collapsed": true
    },
    "outputs": [],
    "source": [
-    "def read_net(filename):\n",
+    "def read_net(filename, rev=False):\n",
     "    with open(filename) as f:\n",
     "        pairs = [re.split('\\D+', p.strip()) for p in f.readlines()]\n",
-    "        lrs = [(int(lr[1]), int(lr[2])) for lr in pairs]\n",
+    "        if rev:\n",
+    "            lrs = [(int(lr[1]), int(lr[2])) for lr in reversed(pairs)]\n",
+    "        else:\n",
+    "            lrs = [(int(lr[1]), int(lr[2])) for lr in pairs]\n",
     "        return [Link(h, l, r) \n",
     "                for h, (l, r) in enumerate(lrs)]"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -90,7 +93,7 @@
        " Link(height=14, left=1, right=4)]"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -102,7 +105,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -111,7 +114,7 @@
        "10135"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -123,7 +126,49 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 36,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "23"
+      ]
+     },
+     "execution_count": 36,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "permnet = read_net('permutations.txt')\n",
+    "len(permnet)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 41,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "23"
+      ]
+     },
+     "execution_count": 41,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rpermnet = read_net('permutations.txt', rev=True)\n",
+    "len(rpermnet)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
    "metadata": {
     "collapsed": true
    },
@@ -135,7 +180,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 19,
    "metadata": {
     "collapsed": true
    },
@@ -147,7 +192,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
+   "execution_count": 20,
    "metadata": {
     "collapsed": true
    },
@@ -166,7 +211,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 21,
    "metadata": {
     "collapsed": true
    },
@@ -185,7 +230,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
+   "execution_count": 22,
    "metadata": {},
    "outputs": [
     {
@@ -194,7 +239,7 @@
        "14"
       ]
      },
-     "execution_count": 38,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -205,7 +250,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
+   "execution_count": 23,
    "metadata": {},
    "outputs": [
     {
@@ -214,7 +259,7 @@
        "10"
       ]
      },
-     "execution_count": 39,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -225,7 +270,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 40,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -234,7 +279,7 @@
        "10134"
       ]
      },
-     "execution_count": 40,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -245,7 +290,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
+   "execution_count": 25,
    "metadata": {
     "collapsed": true
    },
@@ -256,7 +301,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
+   "execution_count": 26,
    "metadata": {},
    "outputs": [
     {
@@ -265,7 +310,7 @@
        "2286"
       ]
      },
-     "execution_count": 42,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -276,7 +321,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 43,
+   "execution_count": 27,
    "metadata": {
     "collapsed": true
    },
@@ -288,7 +333,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 44,
+   "execution_count": 28,
    "metadata": {
     "collapsed": true
    },
@@ -305,7 +350,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 45,
+   "execution_count": 29,
    "metadata": {},
    "outputs": [
     {
@@ -314,7 +359,7 @@
        "'acfbed'"
       ]
      },
-     "execution_count": 45,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -325,14 +370,91 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 46,
+   "execution_count": 69,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      " 0        ['0', '1', '2', '3', '4', '5']\n",
+      " 1 (2, 5) ['0', '1', '5', '3', '4', '2']\n",
+      " 2 (1, 4) ['0', '4', '5', '3', '1', '2']\n",
+      " 3 (0, 3) ['3', '4', '5', '0', '1', '2']\n",
+      " 4 (0, 3) ['0', '4', '5', '3', '1', '2']\n",
+      " 5 (0, 5) ['2', '4', '5', '3', '1', '0']\n",
+      " 6 (3, 5) ['2', '4', '5', '0', '1', '3']\n",
+      " 7 (0, 2) ['5', '4', '2', '0', '1', '3']\n",
+      " 8 (3, 4) ['5', '4', '2', '1', '0', '3']\n",
+      " 9 (2, 4) ['5', '4', '0', '1', '2', '3']\n",
+      "10 (1, 2) ['5', '0', '4', '1', '2', '3']\n",
+      "11 (0, 4) ['2', '0', '4', '1', '5', '3']\n",
+      "12 (1, 2) ['2', '4', '0', '1', '5', '3']\n",
+      "13 (2, 4) ['2', '4', '5', '1', '0', '3']\n",
+      "14 (0, 4) ['0', '4', '5', '1', '2', '3']\n",
+      "15 (1, 4) ['0', '2', '5', '1', '4', '3']\n"
+     ]
+    }
+   ],
+   "source": [
+    "for i in range(len(small_net)+1):\n",
+    "    pre_net = small_net[:i]\n",
+    "    if i == 0:\n",
+    "        print('{:2}'.format(i), \n",
+    "          \"      \".format(small_net[i-1].left, small_net[i-1].right),\n",
+    "          follow_many(\"012345\", pre_net))\n",
+    "    else:\n",
+    "        print('{:2}'.format(i), \n",
+    "          \"({}, {})\".format(small_net[i-1].left, small_net[i-1].right),\n",
+    "          follow_many(\"012345\", pre_net))\n",
+    "\n",
+    "        "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 66,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[Link(height=0, left=2, right=5),\n",
+       " Link(height=1, left=1, right=4),\n",
+       " Link(height=2, left=0, right=3),\n",
+       " Link(height=3, left=0, right=3),\n",
+       " Link(height=4, left=0, right=5),\n",
+       " Link(height=5, left=3, right=5),\n",
+       " Link(height=6, left=0, right=2),\n",
+       " Link(height=7, left=3, right=4),\n",
+       " Link(height=8, left=2, right=4),\n",
+       " Link(height=9, left=1, right=2),\n",
+       " Link(height=10, left=0, right=4),\n",
+       " Link(height=11, left=1, right=2),\n",
+       " Link(height=12, left=2, right=4),\n",
+       " Link(height=13, left=0, right=4),\n",
+       " Link(height=14, left=1, right=4)]"
+      ]
+     },
+     "execution_count": 66,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "small_net[:15]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "10000 loops, best of 3: 39.5 µs per loop\n"
+      "10000 loops, best of 3: 42 µs per loop\n"
      ]
     }
    ],
@@ -343,7 +465,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 47,
+   "execution_count": 37,
    "metadata": {},
    "outputs": [
     {
@@ -352,7 +474,7 @@
        "'doqzmbishkwunvltpcexyjgfra'"
       ]
      },
-     "execution_count": 47,
+     "execution_count": 37,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -363,14 +485,74 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 48,
+   "execution_count": 39,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'zfrasxwigvjoembqcyhplnktud'"
+      ]
+     },
+     "execution_count": 39,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "''.join(follow_many(string.ascii_lowercase, permnet))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 42,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'doqzmbishkwunvltpcexyjgfra'"
+      ]
+     },
+     "execution_count": 42,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "''.join(follow_many(string.ascii_lowercase, rpermnet))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 43,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "True"
+      ]
+     },
+     "execution_count": 43,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "follow_many(string.ascii_lowercase, net) == follow_many(string.ascii_lowercase, rpermnet)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 32,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "10 loops, best of 3: 19.7 ms per loop\n"
+      "10 loops, best of 3: 19.3 ms per loop\n"
      ]
     }
    ],
@@ -381,14 +563,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
+   "execution_count": 33,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "100 loops, best of 3: 18.6 ms per loop\n"
+      "100 loops, best of 3: 18.7 ms per loop\n"
      ]
     }
    ],
diff --git a/04-08-amidakuji/amidakuji-solution-2.ipynb b/04-amidakuji/amidakuji-solution-2.ipynb
similarity index 94%
rename from 04-08-amidakuji/amidakuji-solution-2.ipynb
rename to 04-amidakuji/amidakuji-solution-2.ipynb
index 3bc37db..3745c3c 100644
--- a/04-08-amidakuji/amidakuji-solution-2.ipynb
+++ b/04-amidakuji/amidakuji-solution-2.ipynb
@@ -57,10 +57,29 @@
    },
    "outputs": [],
    "source": [
-    "def read_net(filename):\n",
+    "# def read_net(filename):\n",
+    "#     with open(filename) as f:\n",
+    "#         pairs = [re.split('\\D+', p.strip()) for p in f.readlines()]\n",
+    "#         lrs = [(int(lr[1]), int(lr[2])) for lr in pairs]\n",
+    "#         return [Link(h, l, r) \n",
+    "#                 for h, (l, r) in enumerate(lrs)]"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 28,
+   "metadata": {
+    "collapsed": true
+   },
+   "outputs": [],
+   "source": [
+    "def read_net(filename, rev=False):\n",
     "    with open(filename) as f:\n",
     "        pairs = [re.split('\\D+', p.strip()) for p in f.readlines()]\n",
-    "        lrs = [(int(lr[1]), int(lr[2])) for lr in pairs]\n",
+    "        if rev:\n",
+    "            lrs = [(int(lr[1]), int(lr[2])) for lr in reversed(pairs)]\n",
+    "        else:\n",
+    "            lrs = [(int(lr[1]), int(lr[2])) for lr in pairs]\n",
     "        return [Link(h, l, r) \n",
     "                for h, (l, r) in enumerate(lrs)]"
    ]
@@ -123,7 +142,49 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "23"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "permnet = read_net('permutations.txt')\n",
+    "len(permnet)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "23"
+      ]
+     },
+     "execution_count": 29,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "rpermnet = read_net('permutations.txt', rev=True)\n",
+    "len(rpermnet)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 9,
    "metadata": {
     "collapsed": true
    },
@@ -135,7 +196,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 10,
    "metadata": {
     "collapsed": true
    },
@@ -147,7 +208,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 11,
    "metadata": {
     "collapsed": true
    },
@@ -166,7 +227,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 12,
    "metadata": {
     "collapsed": true
    },
@@ -185,7 +246,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
@@ -194,7 +255,7 @@
        "14"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -205,7 +266,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [
     {
@@ -214,7 +275,7 @@
        "10"
       ]
      },
-     "execution_count": 13,
+     "execution_count": 14,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -225,7 +286,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
@@ -234,7 +295,7 @@
        "10134"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -245,7 +306,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 16,
    "metadata": {},
    "outputs": [
     {
@@ -254,7 +315,7 @@
        "2286"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 16,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -265,7 +326,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 17,
    "metadata": {
     "collapsed": true
    },
@@ -277,7 +338,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 18,
    "metadata": {
     "collapsed": true
    },
@@ -294,7 +355,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 19,
    "metadata": {},
    "outputs": [
     {
@@ -303,7 +364,7 @@
        "'acfbedghij'"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -314,14 +375,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 20,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "10000 loops, best of 3: 38.1 µs per loop\n"
+      "10000 loops, best of 3: 40.1 µs per loop\n"
      ]
     }
    ],
@@ -332,7 +393,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 24,
    "metadata": {},
    "outputs": [
     {
@@ -341,7 +402,7 @@
        "'doqzmbishkwunvltpcexyjgfra'"
       ]
      },
-     "execution_count": 20,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -350,6 +411,46 @@
     "''.join(follow_many(string.ascii_lowercase, net))"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'zfrasxwigvjoembqcyhplnktud'"
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "''.join(follow_many(string.ascii_lowercase, permnet))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'doqzmbishkwunvltpcexyjgfra'"
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "''.join(follow_many(string.ascii_lowercase, rpermnet))"
+   ]
+  },
   {
    "cell_type": "code",
    "execution_count": 21,
diff --git a/04-08-amidakuji/day4.clj b/04-amidakuji/day4.clj
similarity index 100%
rename from 04-08-amidakuji/day4.clj
rename to 04-amidakuji/day4.clj
diff --git a/04-amidakuji/packing-variants.svg b/04-amidakuji/packing-variants.svg
new file mode 100644
index 0000000..07c4963
--- /dev/null
+++ b/04-amidakuji/packing-variants.svg
@@ -0,0 +1,675 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:ooo="http://xml.openoffice.org/svg/export"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.2"
+   width="210mm"
+   height="297mm"
+   viewBox="0 0 21000 29700"
+   preserveAspectRatio="xMidYMid"
+   fill-rule="evenodd"
+   clip-path="url(#presentation_clip_path)"
+   stroke-width="28.222"
+   stroke-linejoin="round"
+   xml:space="preserve"
+   id="svg3643"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="packing-variants.svg"
+   inkscape:export-filename="/home/neil/Documents/programming/ou-programming-quiz/04-08-amidakuji/packing-variants.svg.png"
+   inkscape:export-xdpi="195.49001"
+   inkscape:export-ydpi="195.49001"><metadata
+     id="metadata3910"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="1137"
+     id="namedview3908"
+     showgrid="false"
+     inkscape:zoom="1.6260819"
+     inkscape:cx="334.5511"
+     inkscape:cy="765.44801"
+     inkscape:window-x="1200"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g3695" /><defs
+     class="ClipPathGroup"
+     id="defs3645"><clipPath
+       id="presentation_clip_path"
+       clipPathUnits="userSpaceOnUse"><rect
+         x="0"
+         y="0"
+         width="21000"
+         height="29700"
+         id="rect3648" /></clipPath></defs><defs
+     class="TextShapeIndex"
+     id="defs3650"><g
+       ooo:slide="id1"
+       ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10 id11 id12 id13 id14 id15 id16 id17 id18 id19 id20 id21 id22 id23 id24 id25 id26 id27 id28 id29"
+       id="g3652" /></defs><defs
+     class="EmbeddedBulletChars"
+     id="defs3654"><g
+       id="bullet-char-template(57356)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"
+         id="path3657" /></g><g
+       id="bullet-char-template(57354)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"
+         id="path3660" /></g><g
+       id="bullet-char-template(10146)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"
+         id="path3663" /></g><g
+       id="bullet-char-template(10132)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"
+         id="path3666" /></g><g
+       id="bullet-char-template(10007)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"
+         id="path3669" /></g><g
+       id="bullet-char-template(10004)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"
+         id="path3672" /></g><g
+       id="bullet-char-template(9679)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"
+         id="path3675" /></g><g
+       id="bullet-char-template(8226)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"
+         id="path3678" /></g><g
+       id="bullet-char-template(8211)"
+       transform="scale(0.00048828125,-0.00048828125)"><path
+         d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"
+         id="path3681" /></g></defs><defs
+     class="TextEmbeddedBitmaps"
+     id="defs3683" /><g
+     id="g3685"><g
+       id="id2"
+       class="Master_Slide"><g
+         id="bg-id2"
+         class="Background" /><g
+         id="bo-id2"
+         class="BackgroundObjects" /></g></g><g
+     id="id1"
+     class="Slide"
+     clip-path="url(#presentation_clip_path)"><g
+       class="Page"
+       id="g3695"><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3697"
+         transform="matrix(0,0.29584363,-1,0,9360.3158,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id3"><path
+             d="m 3000,4000 14000,0"
+             id="path3700"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3702"
+         transform="matrix(0,0.29584363,-1,0,9360.3158,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id4"><path
+             d="m 3000,7000 14000,0"
+             id="path3705"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3707"
+         transform="matrix(0,0.29584363,-1,0,9360.3158,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id5"><path
+             d="m 3000,6000 14000,0"
+             id="path3710"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3712"
+         transform="matrix(0,0.29584363,-1,0,9360.3158,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id6"><path
+             d="m 3000,5000 14000,0"
+             id="path3715"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726"
+         transform="matrix(0,1,-1,0,7347.0234,-2449.9998)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8"><path
+             d="m 5000,4130 0,1740"
+             id="path3729"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3762"
+         transform="matrix(0,0.29584363,-1,0,9360.3158,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id12"><path
+             d="m 3000,8000 14000,0"
+             id="path3765"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         transform="matrix(0,1,-1,0,9348.9528,-12450)"
+         id="g5026"
+         class="com.sun.star.drawing.LineShape"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5028"><path
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round"
+             inkscape:connector-curvature="0"
+             id="path5030"
+             d="m 16000,7140 0,740" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5032"
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5034"
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z" /></g></g><g
+         transform="matrix(0,1,-1,0,12373.829,-11450)"
+         class="com.sun.star.drawing.LineShape"
+         id="g5056"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5058"><path
+             d="m 16000,7140 0,740"
+             id="path5060"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path5062"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path5064"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="1265.2094"
+         y="1834.2767"
+         id="text5088"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5090"
+           x="1265.2094"
+           y="1834.2767">1</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="2247.4307"
+         y="1834.2767"
+         id="text5092"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5094"
+           x="2247.4307"
+           y="1834.2767">2</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="3247.8535"
+         y="1827.9266"
+         id="text5096"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5098"
+           x="3247.8535"
+           y="1827.9266">3</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="4244.043"
+         y="1834.2767"
+         id="text5100"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5102"
+           x="4244.043"
+           y="1834.2767">4</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="5245.3135"
+         y="1827.9266"
+         id="text5104"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5106"
+           x="5245.3135"
+           y="1827.9266">5</tspan></text>
+<g
+         class="com.sun.star.drawing.LineShape"
+         id="g3697-1"
+         transform="matrix(0,0.29584363,-1,0,16379.176,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id3-1"><path
+             d="m 3000,4000 14000,0"
+             id="path3700-3"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3702-5"
+         transform="matrix(0,0.29584363,-1,0,16379.176,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id4-9"><path
+             d="m 3000,7000 14000,0"
+             id="path3705-3"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3707-4"
+         transform="matrix(0,0.29584363,-1,0,16379.176,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id5-1"><path
+             d="m 3000,6000 14000,0"
+             id="path3710-5"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3712-0"
+         transform="matrix(0,0.29584363,-1,0,16379.176,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id6-8"><path
+             d="m 3000,5000 14000,0"
+             id="path3715-3"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726-5"
+         transform="matrix(0,1,-1,0,14365.884,-2449.9998)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8-6"><path
+             d="m 5000,4130 0,1740"
+             id="path3729-5"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731-9"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733-9"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3762-0"
+         transform="matrix(0,0.29584363,-1,0,16379.176,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id12-7"><path
+             d="m 3000,8000 14000,0"
+             id="path3765-6"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         transform="matrix(0,1,-1,0,16367.813,-12450)"
+         id="g5026-3"
+         class="com.sun.star.drawing.LineShape"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5028-7"><path
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round"
+             inkscape:connector-curvature="0"
+             id="path5030-6"
+             d="m 16000,7140 0,740" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5032-1"
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5034-5"
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z" /></g></g><g
+         transform="matrix(0,1,-1,0,19392.69,-12450)"
+         class="com.sun.star.drawing.LineShape"
+         id="g5056-0"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5058-6"><path
+             d="m 16000,7140 0,740"
+             id="path5060-5"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path5062-0"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path5064-8"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="8284.0693"
+         y="1834.2767"
+         id="text5088-1"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5090-0"
+           x="8284.0693"
+           y="1834.2767">1</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="9266.291"
+         y="1834.2767"
+         id="text5092-4"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5094-2"
+           x="9266.291"
+           y="1834.2767">2</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="10266.714"
+         y="1827.9266"
+         id="text5096-7"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5098-4"
+           x="10266.714"
+           y="1827.9266">3</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="11262.903"
+         y="1834.2767"
+         id="text5100-0"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5102-3"
+           x="11262.903"
+           y="1834.2767">4</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="12264.174"
+         y="1827.9266"
+         id="text5104-2"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5106-8"
+           x="12264.174"
+           y="1827.9266">5</tspan></text>
+<g
+         class="com.sun.star.drawing.LineShape"
+         id="g3697-3"
+         transform="matrix(0,0.29584363,-1,0,23398.037,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id3-7"><path
+             d="m 3000,4000 14000,0"
+             id="path3700-0"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3702-0"
+         transform="matrix(0,0.29584363,-1,0,23398.037,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id4-3"><path
+             d="m 3000,7000 14000,0"
+             id="path3705-4"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3707-9"
+         transform="matrix(0,0.29584363,-1,0,23398.037,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id5-2"><path
+             d="m 3000,6000 14000,0"
+             id="path3710-7"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3712-4"
+         transform="matrix(0,0.29584363,-1,0,23398.037,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id6-2"><path
+             d="m 3000,5000 14000,0"
+             id="path3715-5"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726-2"
+         transform="matrix(0,1,-1,0,21384.744,-2449.9998)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8-4"><path
+             d="m 5000,4130 0,1740"
+             id="path3729-4"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731-3"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733-8"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3762-6"
+         transform="matrix(0,0.29584363,-1,0,23398.037,1248.6849)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id12-0"><path
+             d="m 3000,8000 14000,0"
+             id="path3765-8"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /></g></g><g
+         transform="matrix(0,1,-1,0,23386.673,-12450)"
+         id="g5026-9"
+         class="com.sun.star.drawing.LineShape"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5028-2"><path
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round"
+             inkscape:connector-curvature="0"
+             id="path5030-2"
+             d="m 16000,7140 0,740" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5032-3"
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z" /><path
+             style="fill:#000000;stroke:none"
+             inkscape:connector-curvature="0"
+             id="path5034-1"
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z" /></g></g><g
+         transform="matrix(0,1,-1,0,26411.55,-13450)"
+         class="com.sun.star.drawing.LineShape"
+         id="g5056-8"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="g5058-3"><path
+             d="m 16000,7140 0,740"
+             id="path5060-4"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 15973,7157 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path5062-2"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 16027,7863 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path5064-2"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="15302.931"
+         y="1834.2767"
+         id="text5088-7"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5090-1"
+           x="15302.931"
+           y="1834.2767">1</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="16285.152"
+         y="1834.2767"
+         id="text5092-6"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5094-9"
+           x="16285.152"
+           y="1834.2767">2</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="17285.574"
+         y="1827.9266"
+         id="text5096-8"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5098-1"
+           x="17285.574"
+           y="1827.9266">3</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="18281.764"
+         y="1834.2767"
+         id="text5100-3"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5102-33"
+           x="18281.764"
+           y="1834.2767">4</tspan></text>
+<text
+         xml:space="preserve"
+         style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:423.33337402px;line-height:125%;font-family:Ubuntu;-inkscape-font-specification:'Ubuntu, Normal';text-align:start;letter-spacing:27.94000435px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         x="19283.035"
+         y="1827.9266"
+         id="text5104-7"
+         sodipodi:linespacing="125%"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><tspan
+           sodipodi:role="line"
+           id="tspan5106-9"
+           x="19283.035"
+           y="1827.9266">5</tspan></text>
+<g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726-6"
+         transform="matrix(0,1,-1,0,9350.0002,550.00032)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8-7"><path
+             d="m 5000,4130 0,1740"
+             id="path3729-0"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731-4"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733-84"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726-6-8"
+         transform="matrix(0,1,-1,0,16390.001,-449.99974)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8-7-1"><path
+             d="m 5000,4130 0,1740"
+             id="path3729-0-6"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731-4-8"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733-84-5"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g><g
+         class="com.sun.star.drawing.LineShape"
+         id="g3726-6-2"
+         transform="matrix(0,1,-1,0,23400.001,-1449.9998)"
+         inkscape:export-xdpi="195.49001"
+         inkscape:export-ydpi="195.49001"><g
+           id="id8-7-19"><path
+             d="m 5000,4130 0,1740"
+             id="path3729-0-9"
+             inkscape:connector-curvature="0"
+             style="fill:none;stroke:#000000;stroke-width:100;stroke-linejoin:round" /><path
+             d="m 4973,4147 -28,-8 -27,-14 -24,-19 -19,-24 -14,-27 -8,-28 -3,-27 3,-27 8,-29 14,-27 19,-23 24,-19 27,-14 28,-9 28,-2 26,2 29,9 26,14 24,19 19,23 14,27 8,29 3,27 -3,27 -8,28 -14,27 -19,24 -24,19 -26,14 -29,8 -26,3 -28,-3 z"
+             id="path3731-4-6"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /><path
+             d="m 5027,5853 28,8 27,14 24,19 19,24 14,27 8,28 3,27 -3,27 -8,29 -14,27 -19,23 -24,19 -27,14 -28,9 -28,2 -26,-2 -29,-9 -26,-14 -24,-19 -19,-23 -14,-27 -8,-29 -3,-27 3,-27 8,-28 14,-27 19,-24 24,-19 26,-14 29,-8 26,-3 28,3 z"
+             id="path3733-84-0"
+             inkscape:connector-curvature="0"
+             style="fill:#000000;stroke:none" /></g></g></g></g></svg>
\ No newline at end of file
diff --git a/04-amidakuji/packing-variants.svg.png b/04-amidakuji/packing-variants.svg.png
new file mode 100644
index 0000000000000000000000000000000000000000..a696960c2496c32498dcca0e50632f62d09165b8
GIT binary patch
literal 14504
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

literal 0
HcmV?d00001

diff --git a/04-amidakuji/permutations.txt b/04-amidakuji/permutations.txt
new file mode 100644
index 0000000..576ae5d
--- /dev/null
+++ b/04-amidakuji/permutations.txt
@@ -0,0 +1,23 @@
+(0, 3)
+(0, 25)
+(1, 14)
+(1, 11)
+(1, 20)
+(1, 24)
+(1, 17)
+(1, 2)
+(1, 16)
+(1, 15)
+(1, 19)
+(1, 23)
+(1, 5)
+(4, 12)
+(4, 13)
+(4, 21)
+(4, 9)
+(4, 10)
+(4, 22)
+(4, 6)
+(4, 8)
+(4, 7)
+(4, 18)
diff --git a/04-08-amidakuji/small-expanded-trace.svg b/04-amidakuji/small-expanded-trace.svg
similarity index 100%
rename from 04-08-amidakuji/small-expanded-trace.svg
rename to 04-amidakuji/small-expanded-trace.svg
diff --git a/04-08-amidakuji/small-expanded-trace.svg.png b/04-amidakuji/small-expanded-trace.svg.png
similarity index 100%
rename from 04-08-amidakuji/small-expanded-trace.svg.png
rename to 04-amidakuji/small-expanded-trace.svg.png
diff --git a/04-08-amidakuji/small-expanded.svg b/04-amidakuji/small-expanded.svg
similarity index 100%
rename from 04-08-amidakuji/small-expanded.svg
rename to 04-amidakuji/small-expanded.svg
diff --git a/04-08-amidakuji/small-expanded.svg.png b/04-amidakuji/small-expanded.svg.png
similarity index 100%
rename from 04-08-amidakuji/small-expanded.svg.png
rename to 04-amidakuji/small-expanded.svg.png
diff --git a/04-08-amidakuji/small-packed.svg b/04-amidakuji/small-packed.svg
similarity index 100%
rename from 04-08-amidakuji/small-packed.svg
rename to 04-amidakuji/small-packed.svg
diff --git a/04-08-amidakuji/small-packed.svg.png b/04-amidakuji/small-packed.svg.png
similarity index 100%
rename from 04-08-amidakuji/small-packed.svg.png
rename to 04-amidakuji/small-packed.svg.png
diff --git a/04-08-amidakuji/small-unpaired.svg b/04-amidakuji/small-unpaired.svg
similarity index 100%
rename from 04-08-amidakuji/small-unpaired.svg
rename to 04-amidakuji/small-unpaired.svg
diff --git a/04-08-amidakuji/small-untriple-1.svg b/04-amidakuji/small-untriple-1.svg
similarity index 100%
rename from 04-08-amidakuji/small-untriple-1.svg
rename to 04-amidakuji/small-untriple-1.svg
diff --git a/04-08-amidakuji/small-untriple-1.svg.png b/04-amidakuji/small-untriple-1.svg.png
similarity index 100%
rename from 04-08-amidakuji/small-untriple-1.svg.png
rename to 04-amidakuji/small-untriple-1.svg.png
diff --git a/04-08-amidakuji/small-untriple-2.svg b/04-amidakuji/small-untriple-2.svg
similarity index 100%
rename from 04-08-amidakuji/small-untriple-2.svg
rename to 04-amidakuji/small-untriple-2.svg
diff --git a/04-08-amidakuji/untriple-general.svg b/04-amidakuji/untriple-general.svg
similarity index 100%
rename from 04-08-amidakuji/untriple-general.svg
rename to 04-amidakuji/untriple-general.svg
diff --git a/04-08-amidakuji/untriple-general.svg.png b/04-amidakuji/untriple-general.svg.png
similarity index 100%
rename from 04-08-amidakuji/untriple-general.svg.png
rename to 04-amidakuji/untriple-general.svg.png
-- 
2.43.0