diff --git a/lecture_material/09-Graph-Search-1/solution.ipynb b/lecture_material/09-Graph-Search-1/solution.ipynb
index 8b53eb9cc198a5cab6fbb78e62c916b883c98c18..0e38c5c8ff069703626e8bd8a20e861600be29be 100644
--- a/lecture_material/09-Graph-Search-1/solution.ipynb
+++ b/lecture_material/09-Graph-Search-1/solution.ipynb
@@ -304,107 +304,107 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "17\n",
-      " 13 (ROOT)\n",
-      "\t 1 (LEFT)\n",
-      "\t\t 0 (LEFT)\n",
-      "\t\t 10 (RIGHT)\n",
+      "11\n",
+      " 21 (ROOT)\n",
+      "\t 13 (LEFT)\n",
+      "\t\t 8 (LEFT)\n",
       "\t\t\t 6 (LEFT)\n",
-      "\t\t\t\t 3 (LEFT)\n",
+      "\t\t\t\t 4 (LEFT)\n",
       "\t\t\t\t\t 2 (LEFT)\n",
-      "\t\t\t\t\t 4 (RIGHT)\n",
-      "\t\t\t\t\t\t 5 (RIGHT)\n",
-      "\t\t\t\t 9 (RIGHT)\n",
-      "\t\t\t\t\t 8 (LEFT)\n",
-      "\t\t\t\t\t\t 7 (LEFT)\n",
-      "\t\t\t 12 (RIGHT)\n",
-      "\t\t\t\t 11 (LEFT)\n",
-      "\t 67 (RIGHT)\n",
-      "\t\t 52 (LEFT)\n",
+      "\t\t\t\t\t\t 0 (LEFT)\n",
+      "\t\t\t\t\t\t\t 1 (RIGHT)\n",
+      "\t\t\t\t\t\t 3 (RIGHT)\n",
+      "\t\t\t\t\t 5 (RIGHT)\n",
+      "\t\t\t\t 7 (RIGHT)\n",
+      "\t\t\t 10 (RIGHT)\n",
+      "\t\t\t\t 9 (LEFT)\n",
+      "\t\t\t\t 11 (RIGHT)\n",
+      "\t\t\t\t\t 12 (RIGHT)\n",
+      "\t\t 16 (RIGHT)\n",
+      "\t\t\t 14 (LEFT)\n",
+      "\t\t\t\t 15 (RIGHT)\n",
+      "\t\t\t 20 (RIGHT)\n",
+      "\t\t\t\t 19 (LEFT)\n",
+      "\t\t\t\t\t 17 (LEFT)\n",
+      "\t\t\t\t\t\t 18 (RIGHT)\n",
+      "\t 45 (RIGHT)\n",
+      "\t\t 34 (LEFT)\n",
+      "\t\t\t 32 (LEFT)\n",
+      "\t\t\t\t 28 (LEFT)\n",
+      "\t\t\t\t\t 27 (LEFT)\n",
+      "\t\t\t\t\t\t 22 (LEFT)\n",
+      "\t\t\t\t\t\t\t 25 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 24 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t 23 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 26 (RIGHT)\n",
+      "\t\t\t\t\t 30 (RIGHT)\n",
+      "\t\t\t\t\t\t 29 (LEFT)\n",
+      "\t\t\t\t\t\t 31 (RIGHT)\n",
+      "\t\t\t\t 33 (RIGHT)\n",
+      "\t\t\t 38 (RIGHT)\n",
+      "\t\t\t\t 37 (LEFT)\n",
+      "\t\t\t\t\t 36 (LEFT)\n",
+      "\t\t\t\t\t\t 35 (LEFT)\n",
+      "\t\t\t\t 44 (RIGHT)\n",
+      "\t\t\t\t\t 43 (LEFT)\n",
+      "\t\t\t\t\t\t 42 (LEFT)\n",
+      "\t\t\t\t\t\t\t 39 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 41 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t 40 (LEFT)\n",
+      "\t\t 60 (RIGHT)\n",
       "\t\t\t 50 (LEFT)\n",
-      "\t\t\t\t 18 (LEFT)\n",
-      "\t\t\t\t\t 16 (LEFT)\n",
-      "\t\t\t\t\t\t 15 (LEFT)\n",
-      "\t\t\t\t\t\t\t 14 (LEFT)\n",
-      "\t\t\t\t\t\t 17 (RIGHT)\n",
-      "\t\t\t\t\t 22 (RIGHT)\n",
-      "\t\t\t\t\t\t 21 (LEFT)\n",
-      "\t\t\t\t\t\t\t 20 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t 19 (LEFT)\n",
+      "\t\t\t\t 46 (LEFT)\n",
+      "\t\t\t\t\t 48 (RIGHT)\n",
+      "\t\t\t\t\t\t 47 (LEFT)\n",
       "\t\t\t\t\t\t 49 (RIGHT)\n",
-      "\t\t\t\t\t\t\t 23 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t 39 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t 35 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t 31 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 24 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t 25 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t 27 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t\t 26 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t\t 28 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 30 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 29 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 32 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t 33 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t 34 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t 37 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 36 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 38 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t 41 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t 40 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t 44 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 43 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t 42 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t 47 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t 46 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t\t 45 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t\t\t 48 (RIGHT)\n",
-      "\t\t\t\t 51 (RIGHT)\n",
-      "\t\t\t 55 (RIGHT)\n",
-      "\t\t\t\t 54 (LEFT)\n",
-      "\t\t\t\t\t 53 (LEFT)\n",
-      "\t\t\t\t 58 (RIGHT)\n",
-      "\t\t\t\t\t 56 (LEFT)\n",
-      "\t\t\t\t\t\t 57 (RIGHT)\n",
-      "\t\t\t\t\t 60 (RIGHT)\n",
-      "\t\t\t\t\t\t 59 (LEFT)\n",
-      "\t\t\t\t\t\t 62 (RIGHT)\n",
-      "\t\t\t\t\t\t\t 61 (LEFT)\n",
-      "\t\t\t\t\t\t\t 63 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t 66 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t 64 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t\t 65 (RIGHT)\n",
-      "\t\t 82 (RIGHT)\n",
-      "\t\t\t 80 (LEFT)\n",
-      "\t\t\t\t 69 (LEFT)\n",
-      "\t\t\t\t\t 68 (LEFT)\n",
-      "\t\t\t\t\t 79 (RIGHT)\n",
-      "\t\t\t\t\t\t 74 (LEFT)\n",
-      "\t\t\t\t\t\t\t 73 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t 71 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t 70 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t 72 (RIGHT)\n",
-      "\t\t\t\t\t\t\t 75 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t 77 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t\t 76 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t\t 78 (RIGHT)\n",
-      "\t\t\t\t 81 (RIGHT)\n",
-      "\t\t\t 94 (RIGHT)\n",
-      "\t\t\t\t 83 (LEFT)\n",
-      "\t\t\t\t\t 88 (RIGHT)\n",
-      "\t\t\t\t\t\t 85 (LEFT)\n",
-      "\t\t\t\t\t\t\t 84 (LEFT)\n",
-      "\t\t\t\t\t\t\t 86 (RIGHT)\n",
-      "\t\t\t\t\t\t\t\t 87 (RIGHT)\n",
-      "\t\t\t\t\t\t 91 (RIGHT)\n",
-      "\t\t\t\t\t\t\t 90 (LEFT)\n",
-      "\t\t\t\t\t\t\t\t 89 (LEFT)\n",
-      "\t\t\t\t\t\t\t 92 (RIGHT)\n",
+      "\t\t\t\t 52 (RIGHT)\n",
+      "\t\t\t\t\t 51 (LEFT)\n",
+      "\t\t\t\t\t 53 (RIGHT)\n",
+      "\t\t\t\t\t\t 56 (RIGHT)\n",
+      "\t\t\t\t\t\t\t 54 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 55 (RIGHT)\n",
+      "\t\t\t\t\t\t\t 57 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 58 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t 59 (RIGHT)\n",
+      "\t\t\t 74 (RIGHT)\n",
+      "\t\t\t\t 66 (LEFT)\n",
+      "\t\t\t\t\t 65 (LEFT)\n",
+      "\t\t\t\t\t\t 64 (LEFT)\n",
+      "\t\t\t\t\t\t\t 62 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 61 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 63 (RIGHT)\n",
+      "\t\t\t\t\t 72 (RIGHT)\n",
+      "\t\t\t\t\t\t 67 (LEFT)\n",
+      "\t\t\t\t\t\t\t 71 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 68 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t 69 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t\t 70 (RIGHT)\n",
+      "\t\t\t\t\t\t 73 (RIGHT)\n",
+      "\t\t\t\t 78 (RIGHT)\n",
+      "\t\t\t\t\t 75 (LEFT)\n",
+      "\t\t\t\t\t\t 76 (RIGHT)\n",
+      "\t\t\t\t\t\t\t 77 (RIGHT)\n",
+      "\t\t\t\t\t 91 (RIGHT)\n",
+      "\t\t\t\t\t\t 84 (LEFT)\n",
+      "\t\t\t\t\t\t\t 81 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t 79 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t 80 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 82 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t 83 (RIGHT)\n",
+      "\t\t\t\t\t\t\t 88 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 87 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t 85 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t\t 86 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 89 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t 90 (RIGHT)\n",
+      "\t\t\t\t\t\t 94 (RIGHT)\n",
+      "\t\t\t\t\t\t\t 92 (LEFT)\n",
       "\t\t\t\t\t\t\t\t 93 (RIGHT)\n",
-      "\t\t\t\t 97 (RIGHT)\n",
-      "\t\t\t\t\t 95 (LEFT)\n",
-      "\t\t\t\t\t\t 96 (RIGHT)\n",
-      "\t\t\t\t\t 99 (RIGHT)\n",
-      "\t\t\t\t\t\t 98 (LEFT)\n"
+      "\t\t\t\t\t\t\t 97 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 95 (LEFT)\n",
+      "\t\t\t\t\t\t\t\t\t 96 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t 98 (RIGHT)\n",
+      "\t\t\t\t\t\t\t\t\t 99 (RIGHT)\n"
      ]
     }
    ],
@@ -703,7 +703,7 @@
        "</svg>\n"
       ],
       "text/plain": [
-       "<__main__.Graph at 0x7f875c333b80>"
+       "<__main__.Graph at 0x7ff53065d420>"
       ]
      },
      "execution_count": 14,
@@ -744,6 +744,18 @@
     "                g.edge(n, child.name)\n",
     "        return g._repr_image_svg_xml()\n",
     "    \n",
+    "    def dfs_search_v1(self, src_name, dst_name):\n",
+    "        \"\"\"\n",
+    "        Clears the visited set and invokes dfs_search using Node object instance\n",
+    "        with name src_name.\n",
+    "        \"\"\"\n",
+    "        # Q: is this method recursive?\n",
+    "        # A: no, it is just invoking dfs_search method for Node object instance\n",
+    "        #    dfs_search method in Node class is recursive\n",
+    "        #    These methods in two different classes just happen to share the same name\n",
+    "        self.visited.clear()\n",
+    "        return self.nodes[src_name].dfs_search_v1(self.nodes[dst_name])\n",
+    "\n",
     "    def dfs_search(self, src_name, dst_name):\n",
     "        \"\"\"\n",
     "        Clears the visited set and invokes dfs_search using Node object instance\n",
@@ -814,7 +826,7 @@
    "id": "c83e9993-765c-42a0-97f6-6277627acf95",
    "metadata": {},
    "source": [
-    "### Testcases for DFS"
+    "### Testcases for DFS with True/False"
    ]
   },
   {
@@ -827,14 +839,14 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "None\n",
-      "(B, C, D)\n"
+      "False\n",
+      "True\n"
      ]
     }
    ],
    "source": [
-    "print(g.dfs_search(\"B\", \"A\")) # should return False\n",
-    "print(g.dfs_search(\"B\", \"D\")) # should return True"
+    "print(g.dfs_search_v1(\"B\", \"A\")) # should return False\n",
+    "print(g.dfs_search_v1(\"B\", \"D\")) # should return True"
    ]
   },
   {
@@ -877,6 +889,127 @@
     "print(g.dfs_search(\"B\", \"D\")) # should return (B, C, D)"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "a54b6599",
+   "metadata": {},
+   "source": [
+    "### `tuple` review\n",
+    "\n",
+    "- similar to lists, but immutable\n",
+    "- defined using `()`\n",
+    "- `*` operator represents replication and not multiplication for lists and tuples\n",
+    "- `+` operator represents concatenation and not additional for lists and tuples"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 18,
+   "id": "7da7bccc",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(5,)"
+      ]
+     },
+     "execution_count": 18,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(3+2,) # this is a tuple containing 5"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 19,
+   "id": "b05a563a",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "5"
+      ]
+     },
+     "execution_count": 19,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(3+2) # order precedence"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 20,
+   "id": "778a76d7",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(5, 5, 5)"
+      ]
+     },
+     "execution_count": 20,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# replicates item 5 three times and returns a new tuple\n",
+    "(3+2,) * 3"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "id": "b8cc1b36",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "15"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(3+2) * 3 # gives us 15"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "a9e31d22",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(3, 5)"
+      ]
+     },
+     "execution_count": 22,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "# returns a new tuple containing all items in the first tuple and \n",
+    "# the second tuple\n",
+    "(3, ) + (5, )"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "43c566a5",
@@ -904,7 +1037,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 23,
    "id": "4480be3c",
    "metadata": {},
    "outputs": [
@@ -986,10 +1119,10 @@
        "</svg>\n"
       ],
       "text/plain": [
-       "<__main__.Graph at 0x7f87581aead0>"
+       "<__main__.Graph at 0x7ff5306d9f00>"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 23,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1001,7 +1134,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 24,
    "id": "9467f6cf",
    "metadata": {},
    "outputs": [
@@ -1018,127 +1151,6 @@
     "print(g.dfs_search(\"A\", \"E\")) # should return (A, B, C, D, E)\n",
     "print(g.dfs_search(\"E\", \"A\")) # should return None"
    ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "a54b6599",
-   "metadata": {},
-   "source": [
-    "### `tuple` review\n",
-    "\n",
-    "- similar to lists, but immutable\n",
-    "- defined using `()`\n",
-    "- `*` operator represents replication and not multiplication for lists and tuples\n",
-    "- `+` operator represents concatenation and not additional for lists and tuples"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 20,
-   "id": "7da7bccc",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(5,)"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "(3+2,) # this is a tuple containing 5"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 21,
-   "id": "b05a563a",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "5"
-      ]
-     },
-     "execution_count": 21,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "(3+2) # order precedence"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
-   "id": "778a76d7",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(5, 5, 5)"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# replicates item 5 three times and returns a new tuple\n",
-    "(3+2,) * 3"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 23,
-   "id": "b8cc1b36",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "15"
-      ]
-     },
-     "execution_count": 23,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "(3+2) * 3 # gives us 15"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 24,
-   "id": "a9e31d22",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(3, 5)"
-      ]
-     },
-     "execution_count": 24,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "# returns a new tuple containing all items in the first tuple and \n",
-    "# the second tuple\n",
-    "(3, ) + (5, )"
-   ]
   }
  ],
  "metadata": {
diff --git a/lecture_material/09-Graph-Search-1/template_lec_001.ipynb b/lecture_material/09-Graph-Search-1/template_lec_001.ipynb
index 9d56986e71a14c5968cb232bc04a85ba8ac0ea3d..1ccdeba7b60d705c997e2378fa70f2c2717bbf56 100644
--- a/lecture_material/09-Graph-Search-1/template_lec_001.ipynb
+++ b/lecture_material/09-Graph-Search-1/template_lec_001.ipynb
@@ -486,7 +486,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "ab522b80",
+   "id": "d2b5e4a3",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -496,7 +496,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "6cfbd94e",
+   "id": "c5d9affc",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -506,7 +506,7 @@
   },
   {
    "cell_type": "markdown",
-   "id": "ec42d30a",
+   "id": "da658c4d",
    "metadata": {},
    "source": [
     "### Testcases for DFS"
@@ -515,7 +515,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "b42891f0",
+   "id": "32d1fa4f",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -525,7 +525,7 @@
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "e8a47ce4",
+   "id": "a9dfbc1e",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -535,115 +535,115 @@
   },
   {
    "cell_type": "markdown",
-   "id": "9e72414d",
+   "id": "f521b9da",
    "metadata": {},
    "source": [
-    "### DFS search\n",
+    "### `tuple` review\n",
     "\n",
-    "- return the actual path rather than just returning True / False\n",
-    "- for example, path between B and D should be (B, C, D)"
+    "- similar to lists, but immutable\n",
+    "- `*` operator represents replication and not multiplication for lists and tuples\n",
+    "- `+` operator represents concatenation and not additional for lists and tuples"
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "dd6ea22f",
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "6802d98e",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "### Why is it called \"*Depth* First Search\"?\n",
-    "\n",
-    "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n",
-    "- we need a `Stack` data structure:\n",
-    "    - Last-In-First-Out (LIFO)\n",
-    "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n",
-    "- might not give us the shortest possible path"
+    "# this is a tuple containing 5\n",
+    "(3+2,)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "80171185",
+   "id": "696d0755",
    "metadata": {},
    "outputs": [],
    "source": [
-    "g = example(2)\n",
-    "g"
+    "(3+2) # order precedence"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "e429ba1d",
+   "id": "3046fe4a",
    "metadata": {},
    "outputs": [],
    "source": [
-    "print(g.dfs_search(\"A\", \"E\")) # should return\n",
-    "print(g.dfs_search(\"E\", \"A\")) # should return "
+    "# replicates item 5 three times and returns a new tuple\n",
+    "(3+2,) * 3"
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "0b4f0cce",
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "aed44ea1",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "### `tuple` review\n",
-    "\n",
-    "- similar to lists, but immutable\n",
-    "- `*` operator represents replication and not multiplication for lists and tuples\n",
-    "- `+` operator represents concatenation and not additional for lists and tuples"
+    "(3+2) * 3 # gives us 15"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "39abbaa1",
+   "id": "d8806544",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# this is a tuple containing 5\n",
-    "(3+2,)"
+    "# returns a new tuple containing all items in the first tuple and \n",
+    "# the second tuple\n",
+    "(3, ) + (5, )"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "78b4949d",
+   "cell_type": "markdown",
+   "id": "9aabb4fb",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "(3+2) # order precedence"
+    "### DFS search\n",
+    "\n",
+    "- return the actual path rather than just returning True / False\n",
+    "- for example, path between B and D should be (B, C, D)"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "67c0dafe",
+   "cell_type": "markdown",
+   "id": "eb9a6595",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "# replicates item 5 three times and returns a new tuple\n",
-    "(3+2,) * 3"
+    "### Why is it called \"*Depth* First Search\"?\n",
+    "\n",
+    "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n",
+    "- we need a `Stack` data structure:\n",
+    "    - Last-In-First-Out (LIFO)\n",
+    "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n",
+    "- might not give us the shortest possible path"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "e2fca58d",
+   "id": "c934d86d",
    "metadata": {},
    "outputs": [],
    "source": [
-    "(3+2) * 3 # gives us 15"
+    "g = example(2)\n",
+    "g"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "221b772b",
+   "id": "8c8dc14a",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# returns a new tuple containing all items in the first tuple and \n",
-    "# the second tuple\n",
-    "(3, ) + (5, )"
+    "print(g.dfs_search(\"A\", \"E\")) # should return\n",
+    "print(g.dfs_search(\"E\", \"A\")) # should return "
    ]
   }
  ],
diff --git a/lecture_material/09-Graph-Search-1/template_lec_002.ipynb b/lecture_material/09-Graph-Search-1/template_lec_002.ipynb
index f2b336b1944116e50898a826f6bc679b27b30887..1ccdeba7b60d705c997e2378fa70f2c2717bbf56 100644
--- a/lecture_material/09-Graph-Search-1/template_lec_002.ipynb
+++ b/lecture_material/09-Graph-Search-1/template_lec_002.ipynb
@@ -535,115 +535,115 @@
   },
   {
    "cell_type": "markdown",
-   "id": "9aabb4fb",
+   "id": "f521b9da",
    "metadata": {},
    "source": [
-    "### DFS search\n",
+    "### `tuple` review\n",
     "\n",
-    "- return the actual path rather than just returning True / False\n",
-    "- for example, path between B and D should be (B, C, D)"
+    "- similar to lists, but immutable\n",
+    "- `*` operator represents replication and not multiplication for lists and tuples\n",
+    "- `+` operator represents concatenation and not additional for lists and tuples"
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "eb9a6595",
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "6802d98e",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "### Why is it called \"*Depth* First Search\"?\n",
-    "\n",
-    "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n",
-    "- we need a `Stack` data structure:\n",
-    "    - Last-In-First-Out (LIFO)\n",
-    "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n",
-    "- might not give us the shortest possible path"
+    "# this is a tuple containing 5\n",
+    "(3+2,)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "c934d86d",
+   "id": "696d0755",
    "metadata": {},
    "outputs": [],
    "source": [
-    "g = example(2)\n",
-    "g"
+    "(3+2) # order precedence"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "8c8dc14a",
+   "id": "3046fe4a",
    "metadata": {},
    "outputs": [],
    "source": [
-    "print(g.dfs_search(\"A\", \"E\")) # should return\n",
-    "print(g.dfs_search(\"E\", \"A\")) # should return "
+    "# replicates item 5 three times and returns a new tuple\n",
+    "(3+2,) * 3"
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "f521b9da",
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "aed44ea1",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "### `tuple` review\n",
-    "\n",
-    "- similar to lists, but immutable\n",
-    "- `*` operator represents replication and not multiplication for lists and tuples\n",
-    "- `+` operator represents concatenation and not additional for lists and tuples"
+    "(3+2) * 3 # gives us 15"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "6802d98e",
+   "id": "d8806544",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# this is a tuple containing 5\n",
-    "(3+2,)"
+    "# returns a new tuple containing all items in the first tuple and \n",
+    "# the second tuple\n",
+    "(3, ) + (5, )"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "696d0755",
+   "cell_type": "markdown",
+   "id": "9aabb4fb",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "(3+2) # order precedence"
+    "### DFS search\n",
+    "\n",
+    "- return the actual path rather than just returning True / False\n",
+    "- for example, path between B and D should be (B, C, D)"
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "3046fe4a",
+   "cell_type": "markdown",
+   "id": "eb9a6595",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "# replicates item 5 three times and returns a new tuple\n",
-    "(3+2,) * 3"
+    "### Why is it called \"*Depth* First Search\"?\n",
+    "\n",
+    "- we start at the starting node and go as deep as possible because recursion always goes as deep as possible before coming back to the other children in the previous level\n",
+    "- we need a `Stack` data structure:\n",
+    "    - Last-In-First-Out (LIFO)\n",
+    "- recursion naturally uses `Stack`, which is why we don't have to explicitly use a `Stack` data structure\n",
+    "- might not give us the shortest possible path"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "aed44ea1",
+   "id": "c934d86d",
    "metadata": {},
    "outputs": [],
    "source": [
-    "(3+2) * 3 # gives us 15"
+    "g = example(2)\n",
+    "g"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": null,
-   "id": "d8806544",
+   "id": "8c8dc14a",
    "metadata": {},
    "outputs": [],
    "source": [
-    "# returns a new tuple containing all items in the first tuple and \n",
-    "# the second tuple\n",
-    "(3, ) + (5, )"
+    "print(g.dfs_search(\"A\", \"E\")) # should return\n",
+    "print(g.dfs_search(\"E\", \"A\")) # should return "
    ]
   }
  ],