Skip to content

Instantly share code, notes, and snippets.

@mirrornerror
Created February 5, 2019 17:36
Show Gist options
  • Save mirrornerror/d1d3efe12a07e282f951e433778fc950 to your computer and use it in GitHub Desktop.
Save mirrornerror/d1d3efe12a07e282f951e433778fc950 to your computer and use it in GitHub Desktop.
Kruskal Prim Algorithm
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# Kruskal and Prim Algorithm: Minimum Spanning Tree(MST)"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.298668Z",
"end_time": "2019-02-05T17:34:24.484115Z"
},
"trusted": true
},
"cell_type": "code",
"source": "import numpy as np\nimport matplotlib.pyplot as plt\nfrom tqdm import tqdm_notebook as tqdm\n%matplotlib inline\nseed = 42\nnp.random.seed(seed=seed)",
"execution_count": 1,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Parameters"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.485453Z",
"end_time": "2019-02-05T17:34:24.489345Z"
},
"trusted": true
},
"cell_type": "code",
"source": "num = 20\npath = np.concatenate([np.arange(num), [0]])\nX = np.random.random(num)\nY = np.random.random(num)\nXY = X + Y * 1j",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Plot functions"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.490723Z",
"end_time": "2019-02-05T17:34:24.509090Z"
},
"trusted": true
},
"cell_type": "code",
"source": "def plot_list(path, plist=False, size=6):\n plt.figure(figsize=(size, size))\n cmap = plt.get_cmap(\"tab10\")\n plt.axis('equal')\n plt.plot(X[path], Y[path], alpha=0)\n plt.scatter(X[0], Y[0], s=80, c='r', marker='o')\n plt.scatter(X[1:], Y[1:], s=40, c=cmap(0), marker='o')\n if plist:\n for p in plist:\n plt.plot(X[p], Y[p])\n \n for i in range(num):\n plt.text(X[i], Y[i]+0.01, s=i, fontsize=10, color='gray')\n \ndef list_score(path):\n sc = 0\n for p in path:\n sc += np.abs(XY[p[0]] - XY[p[1]])\n return sc",
"execution_count": 3,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Kruskal MST"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.510214Z",
"end_time": "2019-02-05T17:34:24.537273Z"
},
"trusted": true
},
"cell_type": "code",
"source": "def kruskal(path):\n dist = []\n idx = []\n for i in range(len(path)):\n for j in range(i+1, len(path)):\n dist.append(np.abs(XY[i] - XY[j]))\n idx.append([i,j])\n arg = np.argsort(dist)\n edge_list = [idx[a] for a in arg]\n \n plist = []\n group = []\n for edge in edge_list:\n if set(edge) & set(sum(group, [])): # either in all groups\n merge_list = []\n for i in range(len(group)):\n if set(edge) <= set(group[i]): # both in one group\n continue\n elif set(edge) & set(group[i]): # either in one group\n merge_list.append(i)\n if len(merge_list) > 0:\n group[merge_list[0]] = list(set(sum([group[m] for m in merge_list] + [edge], [])))\n [group.pop(i) for i in merge_list[1:]]\n plist.append(edge) \n else:\n group.append(edge)\n plist.append(edge)\n return plist",
"execution_count": 4,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.538584Z",
"end_time": "2019-02-05T17:34:24.683184Z"
},
"trusted": true
},
"cell_type": "code",
"source": "edges = kruskal(path[:-1])\nplot_list(path, edges, 6)\nprint('MST Score:', list_score(edges), ' Num Edges:',len(edges))\nprint('Edges:', edges)",
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": "MST Score: 3.033652590015278 Num Edges: 19\nEdges: [[13, 14], [5, 15], [1, 11], [0, 18], [9, 12], [4, 19], [16, 19], [1, 12], [13, 15], [2, 3], [9, 17], [0, 19], [8, 18], [4, 10], [5, 10], [3, 8], [2, 9], [2, 7], [6, 16]]\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fdca2f43dd8>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Prim MST"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.684412Z",
"end_time": "2019-02-05T17:34:24.713249Z"
},
"trusted": true
},
"cell_type": "code",
"source": "def nearest_node_dist(path, index):\n best_dist = np.inf\n best_node = None\n for p in path:\n if p != index:\n d = abs(XY[p] - XY[index])\n if d < best_dist:\n best_dist = d\n best_node = p\n return best_node, best_dist\n\ndef prim(path):\n copy = list(path)\n if path[0] == path[-1]:\n copy = list(path[:-1])\n node, _ = nearest_node_dist(copy, path[0])\n plist = [[path[0], node]]\n copy.remove(path[0])\n copy.remove(node)\n \n while len(copy):\n best_dist = np.inf\n best_edge = None\n for p in set(np.ravel(plist)):\n node, dist = nearest_node_dist(copy, p)\n if dist < best_dist:\n best_dist = dist\n best_edge = [p, node]\n plist.append(best_edge)\n copy.remove(best_edge[1])\n return plist",
"execution_count": 6,
"outputs": []
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.714358Z",
"end_time": "2019-02-05T17:34:24.865289Z"
},
"trusted": true
},
"cell_type": "code",
"source": "edges = prim(path)\nplot_list(path, edges, 6)\nprint('MST Score:', list_score(edges), ' Num Edges:',len(edges))\nprint('Edges:', edges)",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "MST Score: 3.0336525900152775 Num Edges: 19\nEdges: [[0, 18], [0, 19], [19, 4], [19, 16], [18, 8], [4, 10], [10, 5], [5, 15], [15, 13], [13, 14], [8, 3], [3, 2], [2, 9], [9, 12], [12, 1], [1, 11], [9, 17], [2, 7], [16, 6]]\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fdca0e15c18>",
"image/png": "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\n"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Scipy MST"
},
{
"metadata": {
"ExecuteTime": {
"start_time": "2019-02-05T17:34:24.867166Z",
"end_time": "2019-02-05T17:34:25.060938Z"
},
"trusted": true
},
"cell_type": "code",
"source": "from scipy.sparse import csr_matrix\nfrom scipy.sparse.csgraph import minimum_spanning_tree as MSP\n\nmatrix = []\nfor i in range(num):\n matrix.append([])\n for j in range(num):\n matrix[i].append(abs(XY[i] - XY[j]))\n \nMX = csr_matrix(matrix)\nTcsr = MSP(MX)\nTcsr = Tcsr.toarray()*1000\n#Tcsr = Tcsr.astype(np.int32)\n\nedges = []\nfor i in range(num):\n for j in range(num):\n if Tcsr[i][j] > 0:\n edges.append([i, j])\n\nplot_list(path, edges, 6)\nprint('MST Score:', list_score(edges), ' Num Edges:',len(edges))\nprint('Edges:', edges)",
"execution_count": 8,
"outputs": [
{
"output_type": "stream",
"text": "MST Score: 3.0336525900152775 Num Edges: 19\nEdges: [[0, 18], [1, 12], [2, 3], [2, 7], [3, 8], [5, 15], [6, 16], [9, 2], [9, 17], [10, 4], [10, 5], [11, 1], [12, 9], [14, 13], [15, 13], [16, 19], [18, 8], [19, 0], [19, 4]]\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<matplotlib.figure.Figure at 0x7fdca0da5ac8>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAFpCAYAAABnHGgVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzs3Xl81NW9//HXmSUzyWQDEsIWEnYICAhJQNxAURG5Yl0QLa6tFqF61d721/bW9lru0l5br7a1Ku7aVharQhGkuCIqJAMKShQCISEJJCQBss/6Pb8/QlgDCWT5zkw+z8fDh5mZb2beId985sw553uO0lojhBAisljMDiCEEKLjSXEXQogIJMVdCCEikBR3IYSIQFLchRAiAklxF0KICCTFXQghIpAUdyGEiEBS3IUQIgJJcRdCiAhkM+uFk5KSdHp6ulkvL4QQYWnz5s2VWuvk1o4zrbinp6fjdrvNenkhhAhLSqmithwn3TJCCBGBWi3uSqkXlVIHlFJfn+ZxpZT6g1Jql1Jqm1JqQsfHFEIIcTba0nJ/GZhxhsevBoYd+e9e4On2xxJCCNEerRZ3rfV64OAZDpkNvKqbbAQSlVJ9OyqgEEKIs9cRA6r9geLjbpccuW9/Bzx3t7NixQp27tyJy+ViwYIFJzz22WefsW7dOn784x8TExNjUkIhRDjoiAFV1cJ9LW7vpJS6VynlVkq5KyoqOuClI8/48eOZN2/eKfdXV1dTUFBAQkKCCamEEOGmI4p7CZB63O0BwL6WDtRaL9ZaZ2qtM5OTW52m2S2lpaURHR19yv1r165l+vTpJiQSQoSjjijuK4Hbj8yamQxUa62lS6YD7dixg7i4OPr06WN2FCFEmGi1z10p9TowFUhSSpUAvwLsAFrrZ4DVwExgF9AA3NVZYbsjv9/PJ5980mJXjRBCnE6rxV1rfUsrj2tgYYclEic4ePAghw4d4plnngGgpqaGZ599lnvuuYfY2FiT0wkhQpVpyw+ItklJSeHHP/7x0dtPPPEEqampPP300yfMqPnggw/YsWMHSilcLhfXXXcdcXFxZsUWQphMinuI+fvf/05hYSENDQ08/vjjTJ06lQkTTrzod8yYMUyZMoW33nrr6H0XXnghl112GQCbNm3i448/ZtasWV2aXQgROqS4h4B6b4DyGg8p8U5uuOGGMx774IMPAnD48OET7nc4HEe/9vl8HR9SCBFWpLibKBA0WLQqjyW5xdgsioChmZuVyiOzMrBZz34i0/vvv8+2bdtwOBzccccdnZBYCBEuZFVIEy1alccydzFev0GPBo3Xb7DMXcyiVXnn9HyXX345Dz30EOeddx45OTkdnFYIEU6kuJuk3htgSW4xjX6DYX4Lt9Q5mFMfRVyjZqm7mHpv4Jyf+7zzzuObb77pwLRCiHAjxd0k5TUebJamlRt22w3ei/aRHLRwR52Tq2ps7CmqPqvnq6qqOvr1jh07SEpK6tC8QojwIn3uJkmJdxIwmpbgMRR84QiyPSrIJI+NTK+NT57cRvVlqUyckYbTZQeODbzmfriGkuK9J8yo2bVrF5WVlSilSExM5JprrjHzxxNCmEyKu0lcDhtzs1JZ5m7qmgHwKXDHGwwdncRFHjtfvreXbz7dx4QZaayoq2HJlpIjA6+xzM266oSB15OnSwohujcp7iZ6ZFYGAEvdxViVIqg1czJT+fcjRXvc9FQ+f3M3n7+5G6dFM8gB30YFQcEyd9Mqy4/OHmPmjyCECFGqafWArpeZmallg+wmx89zdzlspzw2+5H3uLDORo+6j/EG9/Fs/+9gWBROu4XNv7jilO8RQkQupdRmrXVma8fJgGoIcDlsDE6ObbFIl9d42O+EV+O8HDT24VFWjCMDsValKK/xdHVcIUQYkOIe4poHXhVBXIFKdkYfWwc/qDUp8U4T0wkhQpUU9xDXPPDazziMTQc54Ggq7tF2CzdnpkqXjBCiRVLcw8AjszKY0ccPQG1sX5x2C3MyU48OyAohxMmk2RcGbFYL2bH17HTF8deHZ9InIVpa7EKIM5IKESbKCnbRZ8hQhvSWNdqFEK2Tbpkw4Pd5qdxbSJ8hw8yOIoQIE1Lcw0BFYQHaMEiR4i6EaCMp7mGgbHc+gLTchRBtJsU9DJTvzsfVoydxPWWlRyFE20hxDwNlu/NJGTzU7BhCiDAixT3EeRsaOLi/VLpkhBBnRYp7iCsv2AVa02fIcLOjCCHCiBT3EFde0DSYKt0yQoizIcU9xJXtzic+OYWY+ASzowghwogU9xBXtjtf+tuFEGdNinsIa6ippqaiXIq7EOKsSXEPYeUFuwBIGSzFXQhxdqS4h7Cy3TtBKRlMFUKcNSnuIaxsdz49+/bHERNjdhQhRJiR4h7Cygt2SX+7EOKcSHEPUbUHK6k/dFBWghRCnBMp7iFKVoIUQrSHFPcQVb47H2WxkJw+2OwoQogwJMU9RJXtzicpNQ17lMPsKEKIMCTFPQRprWUwVQjRLlLcQ1B1eRmeulpZCVIIcc6kuIegsuaVIKXlLoQ4R1LcQ1DZ7nysdjtJqWlmRxFChCkp7iGofHc+vdMGY7XZzI4ihAhTUtxDjGEEKS/YJV0yQoh2keIeYg7tK8Xv9chMGSFEu0hxDzFyZaoQoiNIp26IWZ/rpn7E+SxduYoFCxYA8NFHH7FlyxZijqwOefnllzNsmBR/IcTpSXEPMfbDlaTZbdSfdP/kyZOZMmWKKZmEEOFHumVCSDDgp65wFymp6WZHEUKEOWm5h5DKvUUE/X6S09Ip2LH7hMdycnLYunUr/fr148orryQ6OtqklEKIcCAt9xDSPJiaPPDElSAzMzN54IEHmD9/PrGxsfzzn/80I54QIoxIcQ8h5QX5OGPjiEtKOuH+2NhYLBYLSikmTpxIaWmpSQmFEOFCinsIKdudT8rgoSilTri/trb26NfffPMNvXv37upoQogwI33uXeyJJ57A4XCglMJisXDvvfcCcLimnsriIpwpabzwwgs0NDTw+OOPM3XqVIqKiigrKwMgMTGRWbNmmfkjCCHCgBR3E9xxxx1H56wHggaLVuXx4focZhsGbxdHc8G0S3lkVgY2a9MHqwkTJpgZVwgRhqRbxmSLVuWxzF1MYkM5AKW2ZJa5i1m0Ks/kZEKIcNam4q6UmqGU2qGU2qWU+mkLjw9USn2olPpCKbVNKTWz46NGBqUUr732GosXL+azTTksyS2m0W8w3luJ3+qi3uai0W+w1F1MvTdgdlwhRJhqtVtGKWUFngKuAEqAXKXUSq318U3LXwDLtNZPK6UygNVAeifkDXt33303cXFx1NfX88JLr9BHJTGdnqQHG6l19Dl6nFUpyms8DE6ONTGtECJctaXlng3s0loXaK19wBJg9knHaCD+yNcJwL6OixhZ4uLiAHC5XIwcPpwbtYe7cFDf9waeTL7s6HFBrUmJd5oVUwgR5toyoNofKD7udgkw6aRj/gP4p1LqfsAFTO+QdBHG5/OhtcbhcNB4sI6C3DwyjYEstnh51fCCpenXEW23MCczFZdDxruFEOemLdVDtXCfPun2LcDLWuvfK6UuAF5TSo3RWhsnPJFS9wL3AgwcOPBc8oa1+vp6li5divYb+A81MjiQwnm3XMi7BeU43cVYlSKoNXMyU3lkVobZcYUQYUxpfXKdPumApmL9H1rrq47c/hmA1vp/jjtmOzBDa1185HYBMFlrfeB0z5uZmandbnf7f4IwUO8NUF7jISXeiWVPDQf/9i3KaSXpjtFE9Y895RhpsQshTkcptVlrndnacW2pIrnAMKXUIKAUmAvcetIxe4HLgZeVUqMAJ1BxdpEjT/Mc9iW5xdgsilkBGwsNB1F9XSTfORprguPosS6HTQZPhRAdptUBVa11APghsBb4hqZZMduVUr9WSl175LAfAfcopbYCrwN36tY+EnQDzXPYLQEvv/Lv4n7DwecqwHOp9hMKuxBCdLQ2ff7XWq+maXrj8ff98riv84ALOzZaeKv3BliSW4w3YLDU9jrZ1n/yvO9J/kf3IuqLEh6+ZpR0vwghOo1codpJyms8TV0xls+ZZHuXtcGZ/JfuhcGxOexCCNFZpLh3kpR4J6lGKb+xP0euMZwfBuYcfUzmsAshOpsU907iUj5eif0TPuzc77ufAMfmsN8sc9iFEJ1Mintn0Bre+RG9PXv4x9Bfc9iejCvKivPIxUkyh10I0dmk+dgZvngNtv4NNfVn3DH1bm6UOexCiC4mlaaj7d8G7/wbDJ4Gl/wYkDnsQoiuJ90yHclTDctuh5hecMPzYLGanUgI0U1Jy72jaA0rFsLhvXDXanAltf49QgjRSaS4d5SNT8M3/4Ar/xMGTjY7jRCim5NumY5QnAPrHoGRs+CCH5qdRgghpLi3W30VLL8TEgbA7KdAtbRCshBCdC3plmkPw4A374H6SvjePyE60exEQggBSHFvn09+B7vfh1lPQL/xZqcRQoijpFvmXBV8BB/+N4y9GSbeaXYaIYQ4gRT3c1GzH/7+fUgeAbP+T/rZhRAhR7plzlYwAG/cDb4GuPMdiHKZnUgIIU4hxf1sffBr2PsZXP98U8tdCCFCkHTLnI1vV8OnT0Lm3TD2JrPTCCHEaUlxb6tDhfD2fOg7Hq76H7PTCCHEGUlxbwu/B5bd0fT1nFfALrsoCSFCm/S5t8Xan8P+L2Hu69Aj3ew04jRWrFjBzp07cblcLFiwAICysjJWrVpFIBDAYrFwzTXX0L9/f5OTCtH5pOXemm3Lwf0CTHkARs40O404g/HjxzNv3rwT7lu3bh2XXnop8+fPZ9q0aaxbt86kdEJ0LSnuZ1KxA/7xrzDwArj8l2anEa1IS0sjOjr6hPuUUni9XgA8Hg9xcXFmRBOiy0m3zOn46ps23rBHw40vgtVudiJxDq666ir+8pe/sG7dOrTW3H333WZHEqJLSHFvidaw6qGmlvttb0F8P7MTiXPkdru56qqryMjIYPv27axcuZLbb7/d7FhCdDrplmnJ5pdh21KY9nMYMs3sNKIdtm7dyqhRowDIyMigtLTU5ERCdA0p7ifb9yWs+X8w5HK4+N/MTiPaKS4ujqKiIgD27NlDr169TE4kRNdQWmtTXjgzM1O73W5TXvu0Gg/D4ksh6IcffAIuKQShrt4boLzGQ0q8k3dXraCwsJCGhgZcLhdTp04lKSmJd999F8MwsNlszJw5k379pJtNhC+l1GatdWZrx0mfe7PmDa6rS+CuNVLYQ1wgaLBoVR5LcouxWRQBQzM3awSPPPgdbNYTP5Dee++9JqUUwjxS3Jt9/if4dhVc9d+Qmm12GtGKRavyWOYuxhsw8B65b5m7GIBHZ48xL5gQIUL63AH2boR1v4JR/wKTF5idRrSi3htgSW4xjX4DK0Futn2KhSCNfoOl7mLqvQGzIwphOinu9ZWw/C5IHCgbXIeJ8hoPNkvT72mhfTXRtihucWxhoOUgVtX0uBDdXfcu7kawaUelhiqY8yo4E8xOJNogJd5JwNDMsOTwkPV1+gX3UK+dXBa1m2lqO/7qA2ZHFMJ03bvPff1jUPAh/MsfoO9Ys9OINnI5bNw/JsBd3zzDF8ZQfuf/Dn5sZERVkenYz+t/eZXhw4czffp0evfubXZcIUzRfVvuu96Hj34D426BCXLFYljxVLPwwK8w7DE8qB/GHuXEYbeSOXEiP/3RQ1x22WUUFRXx9NNPs3LlSmpqasxOLESX657z3KtL4dmLwdUb7nlf9kENJ4YBS26FXevgjn9Q3yf76Dx3l+PYB9H6+nrWr19Pbm4uFouFyZMnc9FFF+F0ylr8IrzJPPfTCfrhjbsg4G3qZ5fCHl7WPwY718DV/wtpU3ABg5NjTznM5XJx9dVXM2nSJD788EM2bNjA5s2bueSSS8jKysJm636nvuheul/Lfe2/N81pv+EFOO/Grn99ce52roW/3Qxjb4bvPHNWM5v27dvHunXr2LNnD4mJiVx22WWMGTMGi6X79kyK8NTWlnv3Ku7frIKl34Ws78M1v+/a1xbtU7UbFk+DHmnwvX82LcV8lrTW7N69m3Xr1lFeXk7fvn2ZPn06Q4YM6YTAQnQOKe4nO1gAz06FXoPh7rVgc3Tda4v28dbB89Ohrhzu/aipwLeDYRh89dVXfPDBB1RXVzNkyBCmT59O3759OySuEJ1J+tyP17zBtVJw0ytS2MOJ1rDyh1C5A+a92e7CDmCxWBg3bhwZGRnk5uayfv16nn32WcaOHcu0adPo0aNHBwQXwlzdo7i/+/+gbBvcsrRDioPoQp/9Aba/BdMf7fC19e12O1OmTOH8889nw4YNbNq0ie3bt5Odnc3FF19MTExMh76eEF0p8ov71qVNm29c+CCMmGF2GnE2dn8I7/0HZFwHF/5rp71MdHQ0V1xxBdnZ2Xz44Yds3LiRLVu2cPHFFzNp0iTsdtliUYSfyO5zP/ANPHcZ9Dsfbl8J1sh/LwtHu3btOrrm+oQJE7jooovgUBEsngqxKfD998Bx6nTHzlJeXs57771Hfn4+8fHxTJs2jXHjxsnMGhESpM/dW9fUzx7lOrLBdeT+qOHMMAxWr17NbbfdRnx8PM899xwjBqeRvHJe09o/c//apYUdICUlhe9+97sUFhaybt06VqxYwWeffcb06dMZPnw4ShaXE2EgIireihUr2LlzJy6XiwULFoDWNL71EG9UjeFw3EgS317HjTfeSHT02U+fE52rtLSUnj17Hh3EHD16NN+ufILk5jGSXuZNU0xPT+f73/8+eXl5vP/++7z++uukpaVxxRVXMGDAANNyCdEWEfE5c/z48cybN+/YHe4X2PDtfgYNGsr9D/+EQYMGsWHDBvMCitOqra0lPj7+6O34is3UlhXA1J+FxBiJUorRo0ezcOFCZs6cSUVFBc8//zzLli2jqqrK7HhCnFZEFPe0tLRjrfLSLfDuz9gRNZZxsxcCMG7cOHbs2GFiQnE6J4z5FH0GXy1vWlv/kp+YF6oFVquV7Oxs/vVf/5VLL72U/Px8nnrqKd555x3q6urMjifEKSKiW+YoHYTld4CrN3W+OOISmtZnj4uLo76+3uRwoiXx8fFNqzbW7INlt1PjnEjcuFkQooOXDoeDadOmkZmZyccff4zb7Wbr1q1MmTKFCy64AIdDrqEQoSFyirvWULMf/PubNrj+6/tmJxKnU1sLb70FZWX0T0mh6uBBDv31HuK9HrYnXsD1o8eZnbBVcXFxzJo1i8mTJ/P+++/z0UcfkZuby9SpU5kwYQJWq7XDXuvzzz/niy++AJoGe2fPni0Ln4lWRc4Zsvkl8NbCjEWQmkVs7CZqa2uJi4ujtrYWl0tWfzSd1vCb38CiRWC1gseDxelk5nfS+cvgy9GxFzF+7ISw2mAjKSmJm2++meLiYtatW8c777zDxo0bufzyyxk1alS7Z9bU1NSQk5PDggULsNvtLF++nK+//prx48d30E8gIlVofvY9W4WfwqdPgiMOJs0HYPjw4WzduhWArVu3MmLECDMTCmgq7P/5n9DYCHV1EAjAMC/DBu/l/k0v8IAfLrnkErNTnpPU1FTuuusubrnlFiwWC8uWLeP555+nsLCw3c9tGAaBQADDMPD7/cTFxbU/sIh4YX0RU703QGVZMbmv/Zoiow8NKgaXy8XUqVMZOXIkb7zxBtXV1SQkJHDTTTfJVEgz1dZCSkpTYW/W3wp3xkBREP7aANExUF4OsV07r72jBYNBtm7dyocffkhtbW27t/zbuHEjH3zwAXa7nSFDhnD99dd3cGIRTiJ6VchA0GDRqjyW5RbxkvW/Gc8OXhz5HPfOmY3NGhkfRiLOq6/CwoVNLXagMd1O+b/1YMDuRmzP1EGjbirqf/4z3HabyWE7hs/nY9OmTWzYsAGfz8f48eOZOnUqCQlt34i9sbGRZcuWceONN+J0Olm+fDkZGRmMHSt7/nZXbS3ubaqESqkZSqkdSqldSqmfnuaYOUqpPKXUdqXU38428NlYtCqPZe5i5rOcyeprHgncxR/znCxaldeZLyvao6wMPJ6jN4u+n0jBCBeBtZ6mwg5Nj+/fb1LAjhcVFcXFF1/MAw88wKRJk9i6dSt//OMfee+992g8/hPMGRQUFJCYmIjL5cJqtTJq1CiKi4s7ObmIBK0Wd6WUFXgKuBrIAG5RSmWcdMww4GfAhVrr0cCDnZAVaOqKWZJbzJhAHvdb32Z54BKWB6fS6DdY6i6m3hvorJcW7dGnDxzZv9Tby8r+iS76vleLM89/7BinEyJwTXWXy8WMGTO4//77GTVqFBs2bOAPf/gDn3/+OYHAmc/XhIQESktL8fv9aK3Zs2cPSUlJXZRchLO2tNyzgV1a6wKttQ9YAsw+6Zh7gKe01ocAtNYHOjbmMeU1HmwWxZd6KI8FbuaRwF1HH7MqRXmN5wzfLUzzne9AMAjA3psS0FZF+quHTzzGMJqOi1A9evTghhtu4Ac/+AF9+/Zl7dq1/OlPf2Lbtm0YhnHCsfXeAAUVdfRI7sOoUaN49tlnefrpp9FaM3HiRJN+AhFO2jIVsj9w/OfAEmDSSccMB1BKfQpYgf/QWr/bIQlPkhLvJGBo/Nh4OnjtCY8FtSYlXna3D0lxcfDII/j+8F+UzIon5f06ovcf12qNiYFf/CLsB1Pbom/fvtx+++1Ht/x78803+eyzz7jiiitISx/EolV5LMktxmZRBAzN3KxUHrlvgYwnibPSluLe0kTdk0dhbcAwYCowAPhEKTVGa31C00wpdS9wL8DAgQPPOiyAy2FjblYqy9zFNPpPbO1cmZGCyxE5U/cjzk9/yt4BuRiOL0l/2wc2W1NXTDDYVNh/2uJwTsQaMmQIgwYN4uuvv+aDDz7gtddeQ8f15p+He+MNROM9ctwyd1Pb6tHZY8wLK8JOWyphCZB63O0BwL4WjtmotfYDe5RSO2gq9rnHH6S1XgwshqbZMuca+pFZTV3+S93FWJXCbxhYlYWcwkPsO9xIv0SZ8hiK/IEaSgbupnf8Vbj+fUrT4Gnfvk1dMd2gxd4Si8XC2LFjycjI4NPPN/Huex9ylfUA+wNOvvX2oiiq39HxpJ/MGCmNF9FmbTlTcoFhSqlBQCkwF7j1pGPeBm4BXlZKJdHUTVPQkUGPZ7NaeHT2GH4yYyTlNR5S4p0UVtVz87MbufOlHJb/YAoJMbJ7TqgpLnmVYLCO9GH/CuePNDtOSLHZbKSOHMeadYcYHCzhPPs+ehq1FNEPODaeNDi5e74JirPXaiee1joA/BBYC3wDLNNab1dK/Vop1dzpvRaoUkrlAR8CP9Zad/p6qC6HjcHJsbgcNkb3S2DxbRPZU1nPPa+58fiDnf3y4iwEArUUF79EUtJ04mKlsLckJd5Jo2FlSyCVYFER1YeOTZeU8SRxtto0QqO1Xq21Hq61HqK1/q8j9/1Sa73yyNdaa/2w1jpDa32e1npJZ4Y+nSlDk/j9nPHk7DnIQ0u/JGiYc4GWOFVJ6d8IBKoZlL7Q7Cghq3k8KdpuwRLw4w80nb/Rdgs3Z6ZKl4w4KxE3/H7tuH784ppRrPm6jF//YztmXYErjgkGG9m793l69ryY+Hi5svJMHpmVwZzMVCxorFYLTruFOZmpR8eZhGiriGwKfP/iwZRVe3h+wx76JERz31TztmoTULpvCX7/QQal/9DsKCGveTzp2XcdjB7Wh98vvEJa7OKcROxZ8/OZozhQ6+W3735LSryD6yfInpdmMAwve4ueIzFxEomJrS6HIZppg/gYhxR2cc4i9syxWBSP3TSWyjovP3ljG71iHVw6PNnsWN3Ovv1/x+srJyPjMbOjhBXDMLCE6G5UIjxE9NnjsFl59raJDEuJ476/bOarkmqzI3UrhuGnqOgZ4uPPp0ePKWbHCSvaMFBS3EU7RPzZE+e08/JdWfSIieKul3MoqpK9VLtKWfkKPJ5SBqUvbPeORN2N1lqKu2iXbnH2pMQ7eeXubAKG5o4Xc6is87b+TaJdtA5SWPg0cbGj6dVrqtlxwk5Ty13eEMW56xbFHWBo71heuCOT/dUevvdyriwN3MnKD6ymsbGQdGm1nxPpcxft1a3OnolpPfnTrRP4qrSahX/bgj9otP5N4qxpbVBY+BQu1zCSk68wO05Yamq5W82OIcJYtyruAFdkpPCf153HRzsq+PmbX8lFTp2gonId9fX5pKctQKlud4p1CG0Epc9dtEvEToU8k1snDaSsxsMf3s+nT4KTH105wuxIEUNrTWHhU0RHp9G790yz44QtrbV0y4h26ZbFHeCh6cM4UOPhjx/sIiXeybzJaWZHighVBz+mtnY7o0b+Boul255e7WYYhoxVdLDKykreeOONo7cPHTrEtGnTmDx5sompOk+3/etTSvGf142hotbLL1d8TXKcg6tG9zE7VljTWlO45084Hf3o0+c6s+OELa01yFTIDpeUlMT8+fOBpjfPxx9/nJEjI3eF0m599tisFv546/mMHZDIA69/gbvwoNmRwtqhQ59TXfMFaWnzsVhkPf1zpY/spyrFvfPs2bOHnj17kpiYaHaUTtPtz56YKBsv3plFv8RovveKm/zyWrMjha3CwqeIiupN3743mh0lrDVvlm2R2TKd5uuvv2bMmMjetrDbF3eAnq4oXr07G7vVwh0v5lBW7TE7Utg5fNjNocMbSRt4D1arw+w4YU3rI1N0pc+9UwSDQXbs2EFGRmQvoyzF/YjUnjG8fFcW1Y1+7nwph+pGv9mRwkph0Z+x23vSv/9cs6OEPX205S5/np0hPz+fvn37Ehvh+/bK2XOcMf0TeOa2iew6UMcPXnPjDchWfW1RU7ONqqqPGZj6PazWGLPjhD3pc+9c3aFLBqS4n+LiYcn87qZxbCw4yMPLtmLIVn2tKiz8MzZbPAMGfNfsKBHBkJZ7h6v3BiioqONwXSMFBQWMGjXK7EidrttOhTyT687vT3mNh/9Z8y0pcU4emTVK5hyfRl3dDioq1zEo/QFstjiz40QEabl3nEDQYNGqPJbkFmOzKAKGZm7WTGz2KLOjdTop7qdx7yWDKavx8OKne+iT4ODeS2SrvpYUFv4Zq9VFauodZkeJGEeLuyzd0G6LVuUMG9aeAAAgAElEQVSxzF2MN2DQvBbsMncxAI/OjuyuGTl7TkMpxSPXZHDN2L789+pvefuLUrMjhZz6+gLKD7zDgP7zsNsjd75wV5OWe8eo9wZYkluMz2dwbX0UfQJNn74b/QZL3cURvzKsnD1nYLEoHp8zjsmDe/LjN7ayIb/S7EghpajoaSwWBwMH3m12lIhiSHHvEOU1HmwWRabXxgi/lWh9rGvVqhTlNZE95VnOnlY4bFYW357JkORYfvCam69LZas+gMbGYsrKV9C//y1ERSWZHSeiyFTIjpES7yTar7nAY2OnPcge+7ElvoNakxLvNDFd55Ozpw3inXZeviubhGg7d76US/HBBrMjma6o6FnAysCB3zc7SsRpXoZaWu7t43LYuCUqHoAPoo9dtxJtt3BzZiouR2QPOcrZ00Z9Epq26vMHDe54MYeD9T6zI5nG49nPvv1/p1+/G3E6ZLG1jqaNpusrpLi3T9HXVTjLvXiHx+J3KFxRVpx2C3MyU3lkVmRfnQoyW+asDEuJ4/k7Mpn3/Ca+90ouf/v+ZKKjut/6H3v3Pg8YpA38gdlRIpL0ubdfwB9k/dKdJKbEMP+BLH4YNCiv8ZAS74z4FnszOXvOUlZ6T56cez5biw/zw79tIdDNturz+iop3fc6ffpcR3T0ALPjRCTpc2+/L/65l5qKRi6ZOxyrzYLLYWNwcmy3Kewgxf2czBjTh0dnj+H9bw/wi7e/7lZb9RXvfQHD8JOeNt/sKBFLpkK2T3VFI5vfLWLoxN6kjuppdhzTdJ+3sQ522+Q0yqs9/OnDpp2cHrpieJu/1zAMnnvuOeLi4rj11ls7MWXH8vsPUVL6V1JSriEmZpDZcSLW0QFVuSr6rGmt+WTZTiwWxYU3DjM7jqmkuLfDj64cTnmNhyffzycl3smtkwa26fs2bdpEUlISXq+39YNDSHHxKwSD9aSn3Wd2lIh2rOXe/cZz2qtwWyVFX1Ux5YahxPbo3ktPy+e+dlBK8d/Xn8fUEcn84u2vWJdX3ur31NTUkJ+fz4QJE7ogYccJBGopLnmZ5OQriY2VDcU7k3Fktoz0uZ8dvy/IJ0vz6dnPxdjLZDxIzp52slst/Pm7EzivfwL3v76FzUWHznj8u+++y/Tp08PuI3dJyWsEArWkpy80O0rEkz73c7N5TSG1Bz1Ng6hW+beTf4EOEBNl44U7s+gT7+R7r+Syu6KuxeN27tyJy+WiX79+XZywfYLBBvYWv0ivXlOJj4vsxZZCgTbkIqazdbi8gS/W7WX4pBT6D+9hdpyQIH3uHSQp1sErd2dzw9OfcfsLOby1YAq9T7q8ee/evezYsYP8/HwCgQBer5c333yT66+/3qTUp7dixYqjb0azZjnw+w8R65rHCy+8gM/nIzExkeuvvx6Ho3v3a3aGY6tChtenO7NorVm/dCc2m4Up1w81O07IkKZBB0rr5eLFO7M41ODjjpdyqfWcuFXf9OnTefjhh3nwwQe58cYbGTRoUEgWdoDx48czb948QFO09zl69LiADz/cxeWXX859993HyJEj+fTTT82OGZFks46zs3tLBcV5B8m+djCuBGlsNJOzp4ONHZDI0/Mmkl9ey/y/bMYXCM+LnNLS0oiOjsbvr8bnqyA9fSGVlZWkpaUBMHjwYL755huTU0Ym6XNvO58nwIbl+fQaEMt5l/Y3O05IkbOnE1w6PJnf3jCWT3dV8W/Lt1Lb6Kegou6E9aPT09NDfo67Yfjw+w+RkDCRHomT6d27Nzt27AAgLy+PmpoakxNGpmNry8hUyNa4VxdSf9jLpbeMwCKDqCeQPvdOcsPEAeyvbuR3/9zJO9v24bRbj2zx1bRokS0MTsSKin+itZ9B6QtRSjF79mzWrFnD+vXrGT58OFarFJ/O0HwRk3TLnNnBffVsfa+YkVP60ndIgtlxQo4U9050oMaD1QIBu4XaaCvKE2Tp5vDY4sswApSU/hWLZRw9e14CQFJSErfddhsAVVVV5OfnmxkxYhkyoNoqrTXrl+zA7rQy5TuyBWZLpLh3knpvgKXuEoIGBFOiCYxq2obOa2gW+zxsdu9kYIyD/g47/Z1R9HfYGeCMYoAzijib+S3iAwfeweMpJSpq2tEiU19fj8vlavrDWr+ezMxMk1NGJulzb12+u5zSnYe59JbhRMdF/mbX50KKeydp3uLLC1jLGlH1AXS0Fe20YouxY/TSbK6u5x9eP/6TFh6Lt1no74g6peg3vxGkRNmxWTqvVae1wYoV6zh46F8I+L08/vjjTJ06FZ/PR25uLgCjRo1i/PjxnZahO5Pifma+xgCfvrGL3mlxZFwsg6inI8W9k6TEOwk0X4ziM7BWHVtHxmm3sPyGLFwOG0GtqfAFKPX4KPH6KPX4KfX4KPX6KPH42Vxdz6FA8ITntiroE9VU9Ps7oxjQ3Po/7s3gXFv/9d4ABcX/YOiwNYwZ/SQpKbNOeHzy5Mnn9Lyi7bSWqZBnkvOPPTTU+Jh531gsndjICXdS3DuJy2FjblYqy9zFNPqPTYeMPrITTPO60lal6OOw08dhZyKuFp+rPhCk1Ntc9Jv+X3zkDcBdXc9Kr4/ASasON7f+B5xU9E/X+g8EDRatymNJ7l5+nv1/2FVv1m9M5ZFZRlgM/kYS2azj9CpL6tj2UQkZF/UjJT3e7DghTYp7J2reymupuxirUgS1Pqctvlw2K8NtVoa7Wt7Q9+TWf8lxrf9Sjx/3GVr/qUeK/+69h9m57zAZA8uwxMKqr6/gi4p9gDXkB38jjXTLtKx5ENURbeOC2TKI2hop7p3IZrXw6Owx/GTGyE7d4utsW//N3T8lR94Acg7XUWw3YGQCbiZQFezFgf2KoDZY6i7mJzNGdqsdbMwmxb1lOzaWsX9XNdNuG4kz1m52nJAnf7FdoHmLL1MznKH1X1BRx6w/bqBeae5K8JEW1cCjuukjr1Upyms8pufvTmT5gVN5G/x89uYuUgbFM+qCvmbHCQty9ghS4p0EDY3yGjgPuJhacmwGQlBrUuJb7g4SnaN5QFVa7sdsWlGAp87PpbeMQMkgapvI2SOODv5G2y1UobGjiEcRbbdw83GDv6JrHFsVUv48ASr21vL1+lLGXDqA5IFxZscJG/JXK4Bjg7/lOfshCP1sViZl9j/rwV/RftLnfow2NB+/vgNnrJ1J18q+vWdDirsAjg3+Hh7Zj7qXtrPk1okkZiSZHatbkj73Y775bD/le2q4/M5ROGJkEPVsyNkjTuDqFQ2A3RNs5UjRWaTl3sRT5+fzt3bTd2gCIyb1MTtO2OneZ484hTWuqXVk1PpbOVJ0Ftlmr8nnK3bjbQw0DaLKImpnrXufPeIUFocNFWUhWOszO0q3dXQ99248oFq+p4a8DfsYO20AvfrLNNxz0aazRyk1Qym1Qym1Syn10zMcd6NSSiulZLnAMGaJi5LibqLu3uduHBlEjYmPInuWDKKeq1bPHqWUFXgKuBrIAG5RSp0yhUIpFQc8AGzq6JCia1njojCkuJumu/e5531SSsXeWi68cShR0TLn41y15ezJBnZprQu01j5gCTC7heMWAf8LeDownzCBVVrupmreiak7FveGGh8bVxTQf0QiwzJTzI4T1tpy9vQHio+7XXLkvqOUUucDqVrrVR2YTZhEiru5jrXcu98g4udv7cLvCXLJXBlEba+2fOZp6V/46AKzqmnU5/+AO1t9IqXuBe4FGDhwYNsSii5niYtCe4JofxBlN39XqO6muc89GDR44YUXCQaDGIbBqFGjmDZtmsnpOs/+XYf59vMyzr9yID37trwAnmi7thT3EiD1uNsDgH3H3Y4DxgAfHXmn7QOsVEpdq7V2H/9EWuvFwGKAzMzMk1YgF6GieTpksNaPracU966mDQOlLNhsNu644w6ioqIIBoO89NJLDBs2jAEDBpgdscMZQYOPX99JbA8HmTPTzY4TEdrSLZMLDFNKDVJKRQFzgZXND2qtq7XWSVrrdK11OrAROKWwi/BhPbInpXTNmEMbQZTFglKKqKim34VhGASDkXth2VcflVJVWsdFNw0jyimDqB2h1X9FrXVAKfVDYC1gBV7UWm9XSv0acGutV575GUS4sRwp7jJjxhxa66PTIA3DYPHixRw8eJCsrKyIbLXXV3vJ+UcBqRk9GXx+stlxIkab3iK11quB1Sfd98vTHDu1/bGEmaTlbi7DMODIYKrFYmH+/Pl4PB6WLl3KgQMH6N27t8kJO9Znf99FIGBwyc3DZRC1A3W/uVaiVRaXHSwQrJHibgZtGKdcwOR0OklLS2PXrl0mpeocpTsOsTOnnAlXppGYEmN2nIgixV2cQlkUFpdMhzSLNgyUxUJ9fT0eT9NlI36/nz179pCUFDkrdQaDBh8v2UlcTycTZqSZHSfiyMiFaJE1Xq5SNYvPH0BjoeLgYdauXoVhGGitGT16NMOHDzc7XofZ9n4Jh/bXM/O+87BHyaysjibFXbTIGmsnWCcrQ3alQNBg0ao8Stx7GeQJcNWz25ibdSGPzMrAZo2sD9l1hzzkvLOH9PN6MWicDKJ2hsg6Y0SHscRFSZ97F1u0Ko9l7mJUIICBwhswWOYuZtGqPLOjdbhP39iFNjQXzYmcTyKhRoq7aJE1Lgqjznd0bXHRueq9AZbkFtPoNxhaXUKCt57xB3bS6DdY6i6m3hswO2KHKf7mILs2H2DijDQSkqPNjhOxpLiLFlnjo0CDUS9dM12hvMaD7cj0x1JHP3rVePifzxbz68+fJ62mjPKayFiPL+g3WL9kJ/HJ0Zx/pSxB0pmkuIsWyVz3rpUS7yRw5FPSPwZO59Hx9/P86GsYVVXI79c+hv2J3xKorDQ5Zft9+f5eDpc3cMnNw7HJukWdSoq7aJFcpdq1XA4bc7NSibY3/Un6rXb+PmwaC2f+nN1TZlC34m12X3kVlU8/jdHYaHLac1NT1Yj7nUIGj08mbUwvs+NEPCnuokXScu96j8zKYE5mKk67BVeUFafdwtUXjuKa537H4H+sxHXhFCqe/AO7r57J4bffPro0cLjYsCwfgIvmDDM5SfcgUyFFi45fGVJ0DZvVwqOzx/CTGSMpr/GQEu/E5Wj6E7UNGsSAP/6Rhtxcyn/7v+z/6c84+OqrpPzk/+GaPMnk5K0r/KqSPVsrmXzdYOJ6Os2O0y1Iy120SNmtKKdVumVM4HLYGJwce7SwHy8mK4v0ZUvp99hjBA8fZu+dd1I8/z68u3ebkLRtAv4gnyzLJzElhvHTZRC1q0hxF6clOzKFJmWxkPAvsxiyZg3JP3qYBrebgmtns//RRwlUVZkd7xRb1u6lpqKRS+YOx2qTktNV5F9anJYU99BmcThIuucehvxzLT1uvpnDy5Y3Dbo+uxjDExpTJ6srGtnybhFDJ/YmdVRPs+N0K9LnLk7LEheFr6QWgBUrVrBz505cLhcLFiw4esymTZvIzc3FYrEwbNgwrrjiCrPidlu2nj3p88tH6DFvHgd+9zsq/u//OLRkCb0fepD4WbNM22hba80ny3ZisSouvFEGUbuatNzFaVnjji0eNn78eObNm3fC43v27GHHjh3Mnz+fBQsWMGXKFDNiiiMcgweR+uenGPjKK9h69GDfT/4fhTfNoT4nx5Q8e7ZWUvRVFVmzBhHbw2FKhu5Mirs4LWtcFNpnYHgDpKWlER194qXibrebiy66CJut6QOgyyWbGocC16Rs0t9YTr///S2BgwfZe/sdFC9YiLdgT5dl8PuCbFiWT89+LsZeFnm7R4UDKe7itCytTIesqqqiqKiI559/npdffpnS0tKujCfOQFksJFx7LUPWrCb5oYdo2LSJgmuvpWzRfxI4eLDTX3/zmkJqD3qaBlEjbEXLcCF97uK0mi9kMmp8kHTqAk+GYeDxePje977Hvn37eOONN3jggQdkq7QQYnE6SfrBvSTeeAMVf/oTh5YsoXrFCpLm/4Aet92GxdH+7pLq6mrefvtt6urqUEoxath5fLsuwPBJKfQf3qMDfgpxLuQtVZyWNf7MV6nGx8czatQolFL0798fpRQNDQ1dGVG0ka1XL/r+6lcMXrmCmMxMDvzu9xRcPZPqVe+0+0pXi8XClVdeycKFC7n77rvZtHETOqqRKdcP7aD04lxIcRenZYk9c3EfOXIke/Y09eNWVVURDAaJiZF9MEOZY8gQUp95moEvvYglIYF9//ZvFN48lwa3+5yfMy4ujr59+wJQsr0G3eBg2IU9cSXIIKqZlNbmrNedmZmp3e04oUTn01pT+otPCU5IZmNwGyXFe2loaMDlcjF16lTGjRvHihUrKCsrw2q1cuWVVzJo0CCzY4s20oZB9YqVVDzxBIHycuKumE7vH/2IqPT0c3o+nyfAq49+RLlzMw//+AGiY2St9s6glNqstc5s9Tgp7qIlzVu+Xft5FVstQX5r8TI3KzUit3zr7ozGRg6+/DKVzz2P9vnoccstJC24D1uPs+svX7/8G9ZvXc1ll09lyrSJnZRWtLW4y1+paFHzlm9VaBKMyN7yrbuzREeTdN99DF37LonXX8+hv/6V3VdeRdULL2L42naFckVJDZ9+sY6BKUOksIcIKe7iFMdv+VaLn34EASJyyzdxjC05mb6/fpTBK94m+vzxHHjsMQqunknN6tWc6RO+YRi8/spy7Li46c6ZXZhYnIkUd3GKfYfqGWSpYmZUHvHWSnqhsNA0o8KqVMRs+SZa5hg2jIGLF5P6wvNYYmMpffhHFM29hYYtX5xwXL03QEFFHR+v+ZJDgRKsPet55a8v8swzz5Cfn29SetFM5rmLo2pra3G73bjdm5lsqaPacPCM9rKbegyatkQLak1KvKzH3R3EXnghrjcnU/32CiqeeIKiW28l7qqr6Pngg/x2Wx1LcouJRnHLQTsJcdNY8PMLiZKt80KGFPduTmtNSUkJOTk5bN++HcMwGDZsGDuNFN7d6aPROPZxPNpuYU5maovrjIvIpKxWEm+4nvirZ1D10ktUvfAih997j5jBF2EfdjnnBxNwGbBcNXBo9Tc8OnuM2ZHFEfJX2k0FAgG+/vprcnJy2LdvHw6Hg6ysLLKzs+nVqxeBoAGr8ljqLsaqFEGtmZPZNFtGdD+WmBiSFy7EMft6XrrnZ1yTv57smB3sn5TFJ4WXUIRiqbuYn8wYKW/+IUJ+C91MTU0Nubm5bN68mYaGBpKSkpg5cybjxo3Dcdyl6Gfa8k10X5WOOBZnzeWt9Iu4f/Bqeo99i5ziLCDm6HjM4ORYs2MKpLh3C1pr9u7dS05ODnl5eWitGTFiBNnZ2QwePPiMa8E0b/kmBEBKvJOAoSlM6Mv2Pg7GeOKocjRdlSzjMaFFinsE8/v9fPXVV+Tk5FBWVobT6WTy5MlkZWXRs6fsiiPOnsthY25WKsvcxSQ6qqnyJwAyHhOK5DcRgQ4fPkxubi5btmyhsbGR3r17M2vWLMaOHUtUVJTZ8USYax53SVQ1HPQk4TxS2GU8JrRIcY8QWmsKCwvJycnh22+/BZoW9srOziY9PV2W4RUdpnk85uP1jYyMH8E9s6+QFnsIkt9ImPP5fGzbto2cnBwOHDhAdHQ0U6ZMISsri8TERLPjiQhlGD4CgcMkJfSXwh6i5LcSpg4dOkROTg5ffPEFHo+HPn36cO2113Leeedht9vNjicinM9XCYAjKtnkJOJ0pLiHEa01BQUFbNq0iZ07d6KUIiMjg+zsbAYOHChdL6LLeH0VAEQ5epucRJyOFPcw4PV62bp1Kzk5OVRWVhITE8PFF19MZmYmCQkJZscT3ZDPewCQlnsok+IewqqqqsjJyeHLL7/E6/XSr18/rrvuOkaPHi1dL8JU0nIPfVLcQ4xhGOzevZucnBzy8/OxWCyMHj2a7OxsBgwYIF0vIiQ0tdwVUfYks6OI05DiHiI8Hg9ffvklOTk5HDx4kNjYWKZOncrEiROJi4szO54QJ/D6DmC398RikRISquQ3Y7KKigpycnLYunUrPp+PAQMGMHXqVDIyMrDZ5NcjQpPPW4FDumRCmlQPExiGQX5+Pjk5OezevRur1cqYMWPIzs6mf//+ZscTolVe3wGioqRLJpRJce9CjY2NfPHFF+Tm5nLo0CHi4uKYNm0aEydOJDZWFucS4cPnrSDWNcLsGOIMpLh3gQMHDrBp0ya2bduG3+9n4MCBXH755YwaNQqrVXauEeFF6yA+f6XMlAlxUtw7iWEY7Nixg5ycHPbs2YPNZuO8884jOzubvn37mh1PiHPm8x9C66DMcQ9xUtw7WENDA1u2bCE3N5fq6mri4+OZPn06EyZMICYmxux4QrRb8wVM0nIPbd2yuHs8HlauXMmBAwdQSnHttdeSmprarucsKytj06ZNfPXVVwQCAdLT07nqqqsYMWKEdL2IiOL1ydWp4aBbFvd3332XoUOHMmfOHILBIH6//5yeJxgM8u2335KTk0NRURE2m41x48aRnZ1NSkpKB6cWIjT4vEcWDZOWe0jrdsXd6/VSVFTE7NmzAbBarWfdsq6vr2fz5s243W5qampITEzkyiuv5Pzzzyc6OrozYgsRMnxHWu5RUVLcQ1m3K+6HDh0iJiaGFStWUF5eTt++fZkxY0abdijat28fmzZt4uuvvyYYDDJ48GBmzpzJ8OHDsVgsXZBeCPN5fQew2eKwWmW/1FDW7Yq7YRjs37+fq6++mgEDBrBmzRo2bNjAZZdd1uLxwWCQvLw8cnJyKC4uxm63M2HCBLKzs0lOlj5H0f14vRXSag8D3a64x8fHEx8fz4ABAwDIyMjg008/PeW4uro63G43breburo6evbsyYwZMxg/fjxOp7RYRPfl8x2QwdQw0O2Ke2xsLAkJCVRWVpKUlMSePXtISjp2GXVJSQmbNm1i+/btGIbB0KFDyc7OZujQodL1IgRNLfeEhPPNjiFa0abirpSaATwJWIHntda/Oenxh4HvAwGgArhba13UwVnbpd4boLzGQ0q8k6uvvpo333yTYDBIjx49uOaaa45uhlFaWkpUVBRZWVlkZWWdUPiF6O601tJyDxOtFnellBV4CrgCKAFylVIrtdZ5xx32BZCptW5QSt0H/C9wc2cEPluBoMGiVXksyS3GZlEEDM3crFQe+d73aahv6np55plnqK+vJykpiZkzZzJu3DgcDofZ0YUIOYFALYbhlQuYwkBbWu7ZwC6tdQGAUmoJMBs4Wty11h8ed/xGYF5HhmyPRavyWOYuxhsw8AKged+dB3s2Yq3Zh2EYDB8+nEmTJjF48GDZDEOIM/AdvYBJinuoa0tx7w8UH3e7BJh0huO/B6xpT6iOUu8NsCS3qbBbMRhkPchIazlJlgZ8h6xkTcpiyuRJ9OzZ0+yoQoQFb/PSA7Lc7zlbsWIFO3fuxOVysWDBAgC2b9/Oxx9/TEVFBffccw/9+vVr9+u0ZYSwpaasbvFApeYBmcBjp3n8XqWUWynlrqioaHvKc1Re48FmaYo/xFrJRfY9WNF85k9jlZ5ARtbFUtiFOAu+I3unytWp5278+PHMm3di50bv3r2ZM2cOaWlpHfY6bWm5lwDHL7wyANh38kFKqenAvwOXaq29LT2R1noxsBggMzOzxTeIjpQS7yRgNL1MQbAXNdpJmREHKJwWCynxMqVRiLPhlatT2y0tLY3Dhw+fcF9nXDPTlpZ7LjBMKTVIKRUFzAVWHn+AUup84FngWq31gQ5PeY5cDhtzs1KJtlsIYKXMiAcU0XYLN2em4nJ0u5mgQrSLz1uBxeLAZpN9fUNdq9VNax1QSv0QWEvTVMgXtdbblVK/Btxa65U0dcPEAsuPDEju1Vpf24m52+yRWRkALHUXY1WKoNbMyUw9er8Qou28vqarU2XiQehrU9NVa70aWH3Sfb887uvpHZyrw9isFh6dPYafzBh5dJ67tNiFODc+7wEcDpnjHg66zSWXLoeNwcmxUtiFaIfmlrsIfVLphBBt5vMdoGfPKWbHCDvHXyH/7qoVFBYW0tDQwOOPP87UqVOJjo5mzZo1NDQ08Le//Y0+ffqcMqPmbElxF0K0STDoIRColQuYzkLLV8iP4JEHv4PNemLHyahRozr0taW4CyHaRDbpaLvmC5XqDRvL6kbiDQTx2Q+hAz1Z5m66JvTR2WM6NUO36XMXQrRP89WpMqDauvHjx3PDnLlUN/pp9BvYEjbjGvx7LM4SGv0GS93F1HsDnZpBirsQok28R65OlZZ769LS0qgLWFCAstbj6L0awzMAw9O0rIBVKcprPJ2aQYq7EKJNfNJyPytJsQ40ENV7DcrqwVP2HZpLblDrTr9CXoq7EKJNvL4KlLJit8t6TG0R47AR6zSISnTjq7oYw9sHoMuukJcBVSFEm/i8B4iyJ6GUtAnbwh/041eHiVZJ+KuvwBVl7dIr5KW4CyHaxOs7QJR0ybTZ3/P/ji/o43+n/Yqsmy/q8ivkpbgLIdrE56vE6ehrdoyQ1nyx0vp1b1JUUES8Ec+W5VuInxrPhAkTujSLFHchRJt4vQeIjx9rdoyQdOLFSkCff2BP3cOq76xkQHz7N944F9J5JoRolWEE8PsPytWpp3HCdp6OrVhc3+KrvILnPjxoWiYp7kKIVvn8lYCWjbFb0LydZ6PfAGsdjj5vEvT0paHigi65WOl0pLgLIVp1dI57lAyonqx5O09rzG5cgx9HWRvxVk4DrF1ysdLpSJ+7EKJVR69OlZb7KZwODzppKTEJbgxfD7wHLyJY2zQ20RUXK52OFHchRKuk5X4qrTWrClbxWO5j2BJqCB6aRn35NNBRQNPFSnNM3M5TirsQ7dC8+p/L5WLBggUAvPHGG1RWVgLg8XhwOp3Mnz/fzJjtdmxdmSSTk4SG4ppiFm1cxOf7P2ds8liezf4lSz71s7QqdLbzlOIuRDuMHz+e7Oxs3nrrraP33XjjjUe/Xrt2LU6nOR/LO5LPewC7vScWSyL+2e8AAA6xSURBVJTZUUzlN/y8sv0Vntn6DDaLjX+f9O/cNPwmrBYrj84mpLbzlOIuRDukpaVx+PDhFh/TWpOXl8ftt9/exak6ntdX0e27ZLZWbOXRzx8l/1A+0wdO56fZPyXFlXLCMc3beYYCKe5CdJK9e/ficrno1auX2VHazec90G0HU2t9tTy55UmW7VhG75je/GHaH5g2cJrZsVolxV2ITvLVV18xZkzn7rbTVby+A7hcQ82O0aW01ry39z1+s+k3VDRW8N1R3+WH5/8Ql91ldrQ2keIuRCcwDINvv/2We++91+wo7aa1gc9X1a1a7mX1ZfzXxv/io5KPGNlzJE9e9iRjksLrjVqKuxCdoOD/t3f3wVHXdwLH3599ysNmd7NLIISnJMRapehhTBTQwYTKSZE2tsdQ7Di9mzK9K+112qnnzc209Y4yzo066o036umMzlkYUe+8B7xrPRWSwfGkNhZOUSgGEiQgeWAhCdlkd5P93h+/DeUhkF9Csk/5vGYy2U1+k/188ls+fPP7fr+f35EjlJSU4Pf70x3KVYvHz2BMfFqslBlODLP94Hae3PskAPfffD/3LboPlyP7SmX2RaxUBhjp/vfbxl/TfuwzIpEIjz/+OHV1dVRXV7N///6cuSQTSy6DzPW+MgdOHWDze5v5+NTH3D73dn629GfMLZqb7rAmTIu7UuNwYfc/YShRxIbau/j52kW4nH/o5nHPPfekMcrJNXJj7Fy9LBOJR3h639NsO7CN4rxiHl3xKHdV3IWIpDu0q6LFXalxGOn+N+gAYsMI8GrzMQA2N+TGSP1isVju7k7d3b6bh/Y8xIn+E6y7dh0/rv4xgbxAusOaFFrclbJppPvf4FCCaP1sGDY4u6MMnxpk+752/nr1dWnfuDIVotHkZZkMHbmPtkv4zTff5NChQzidTkKhEA0NDRdsJuse6Obh9x/mjbY3WBhYyIurX6S6NLU305hqufdOVGqKjHT/Q8D1aS+JknyGZxcwPN9LPGH4+r4WvlJaTF3Izx/5CnBk+Z/1I6KxTpzOIpzOwnSHMqrRdglXVVVx55134nA4eOutt3jnnXdYtWoVCZPgtU9f44kPnmBwaJAfLPkB31n8HTzO3Nt5q8VdKZtK/fkMJQxiwNUegfYIRsAEPEhpPuZLhTzcepKHW08Scju5I+ijfoafuqCPWXnudIc/YbFYF3kZfO/U0XYJV1VVnXs8b948Dhw4wOEzh9n83mb2du6ldnYtDy59kIpARYqjTR0t7krZ5M1zsaF2Pq82J2/MAIiBwv4h1oeCbL7li3THhth9uo9dp3ppCvfx751W0VlcVEB9yEddyEdtwIvHkT23UohGO/Fk8UqZD/Z+wMmik2x5fQtet5ctt22hoaoh6ydMx6LFXalxGOny90rz6N3/SjwuvlEa5BulQRLG8PHZAZrCfewK9/LMsU7+8bNOvE4HtweLqA/5qQ/5KC/IS2dKY4rFOvH7svPeqS/990s0dzSzM7aTtVVreaD2AUL5oXSHlRJa3JUaB5fTweaGxba6/zlEuMFXyA2+Qn5YXkrf0DDvnj7LrnAvjeE+/qe7F4CFBXnUhXzUh3wsDxbhdTpTmdIVGWOIRrvwlGTXyP3M4Bkee/0xeg73cOSaIzy7/FmWz1me7rBSSou7UhMwke5/PpeT1TMDrJ4ZwBjDkYEojeE+Gk/1sf3zMC8c78Yjwq3FXupCflaGfFznzU/r5YPh4bMkEgMcbink7beeBqC6upqlS5emLaYrGbmBxvNNz1PVUUVlfSWP1D5Cviv72y6Plxhj0vLCNTU1prm5OS2vrVSmGRxO8H5PP43JUf3Bfuu+m7M9buqS1+rvCPkIulM7HotEWnl75zraWtezadNPcDqdbNu2jbvvvjvt3S4v3iXcH+kn7oqzz7ePG8/eSLG7GJ/XB1iTqmvXrk1rvJNFRD4wxtSMdZyO3JXKAPlOBytCPlaEfPwtcGIwRtPpPprCfbzR3cPLJ8M4gJv8hdSFfKwM+VniL8Q5xaP6aLSTgUiAsrIQbre14qe8vJyDBw9y2223TelrX86lu4TzWXLDAIfjO3A73Pyo+kes/+J6HJI9k9ZTQYu7UhloTr6Hb5XN4FtlMxg2hn29EXaFrRU4T7R18FhbB8UuJyuSo/r6kI+yvMlfqx2NdVLoPUPrkT4ikQhut5uWlhbKysom/bXsGtklHB1KEC84Sv7cf+OTwQ7muG9h6z1/z6zC7JofmCpa3JXKcE4Rbg54uTng5YHKMk7HreWWjaeskf2O5HLL67z51Id81If83FrsJW8SllvGol0UFvawbNmtbN26FY/HQ2lpKY4UL+U0xjAcDtNzqIXuV3/Fvb2dzI9/SEfpGbbODRI59m2ORhfj/ZPpsRLGDi3uSmWZoNtFw6wgDbOCGGM42D9oTcyGe3m+vZtnjnVR4HCwvLiI+hnWqH5hQd6EJmajsU4cDg81NcuprbUuw+zcuXPKWhknIhFibW3E2tqItrURa2079zzR1wfAXwJxh5MTgTxO+ufQf2QTJPLI9wgdvYMZc5u7dNPirlQWExGuLyrg+qICvr9gFv3Dw/zv6bM0hftoDPex81NrueWCfM+5a/W3B4soctlbbhmLduHxzCQSieD1eunp6eHAgQNs3LhxwjGbeJz48eNW8b6ogA91dFxwrGtOGXkVlQS++lU8FRUk5i3g668f47gnQEIEELD2kzFsDKX+6bcq5nK0uCuVQ7xOJ6tKAqwqsTobHk0ut2wK9/Jax2l+eeIULoHagJeVIT91IR9fKrp8H5zIYAdGZrD95VeIDg7gdDpZs2YNBQUFV4zDGMNQV9clxTvW1kbs2DEYGjp3rDMQwFNZiXfZMjwVFXgqK63P5Qtw5F9arFf27b9glzBAgdvB+pr5Odm4baJ0KaRS00QskaC5J3JuueX+swMAzPS4uCPoY+UMPyuCPko8rnMrUq6Rv6BroJRnP/ouG2rnX9K3fvjsWWJtR4m1tl5YwNvaSPT3nztO8vLwlJdbRftcAbeeu4LBceUxEtv5u4S/WXNpbLnK7lJILe5KTVOd0fi55ZZN4V7Ccas//Y2+Ahzdg7Ts7+KRG+7nd+03sut3K6ka7GZ1IE69d5BYayvRo20Md3X/4QeK4J4797wCbn3Oq6jAVVaGTPIk7Mg69yvtEs5FWtyVUrYljOHDvgEaw73s7O6luaefQH8fTz36c2Z3d+E8r044giHyKi8t4O4FC3DkZXafnFygm5iUUrY5RFjiL2SJv5AGbxF3P/MuQ74hTsydwb7KhXwyVMnxohLOBEvZ/ld3UaErUjKeFnel1AVK/fkkYgniHfBgxYWrYvLdDl2RkiVyf/ZBKTUuI33rC9wXlocCt4Nv6oqUrKFnSSl1ibH61qvMpxOqSqnLmq4rUjKZTqgqpa7aRPrWq8yg19yVUioHaXFXSqkcpMVdKaVykBZ3pZTKQVrclVIqB9kq7iKyWkR+LyItIvI3o3w/T0ReSX7/NyJSMdmBKqWUsm/M4i4iTuAp4CvAIuBeEbl4J8NG4LQx5hrgCeDhyQ5UKaWUfXZG7rcALcaYI8aYGPAy0HDRMQ3Ai8nH/wp8WSZyTy+llFKTwk5xnwscO+95e/Jrox5jjBkCeoAZkxGgUkqp8bNT3EcbgV/cs8DOMYjIn4tIs4g0d3V12YlPKaXUBNgp7u3A/POezwNOXO4YEXEBASB88Q8yxjxnjKkxxtTMnDlzYhErpZQak53i/lvgCyJSKSIeYAOw46JjdgB/mny8Dthl0tWRTCmllL2ukCKyBvgHwAm8YIx5SER+ATQbY3aISD6wFbgJa8S+wRhzZIyf2QUctRlnCdA95lG5SXOfvqZz/pr75ZUbY8a89JG2lr/jISLNdlpc5iLNfXrmDtM7f8396nPXHapKKZWDtLgrpVQOypbi/ly6A0gjzX36ms75a+5XKSuuuSullBqfbBm5K6WUGoeMKu7Tufukjdx/IiKfiMiHIrJTRMrTEedUGCv3845bJyJGRHJmFYWd3EVkffLcfywiL6U6xqli4z2/QEQaRWRv8n2/Jh1xTgUReUFEOkVk/2W+LyLyZPJ386GIVI/7RYwxGfGBtYb+MLAQ8AD/Byy66JjvA/+UfLwBeCXdcacw93qgMPl403TKPXmcD9gN7AFq0h13Cs/7F4C9QDD5fFa6405h7s8Bm5KPFwFt6Y57EvNfAVQD+y/z/TXAr7FauywFfjPe18ikkft07j45Zu7GmEZjTCT5dA9WG4hcYOe8A2wBHgEGUxncFLOT+3eBp4wxpwGMMZ0pjnGq2MndAP7k4wCXtj3JWsaY3YzSouU8DcAvjWUPUCwiZeN5jUwq7tO5+6Sd3M+3Eet/9VwwZu4ichMw3xjzX6kMLAXsnPdrgWtF5F0R2SMiq1MW3dSyk/vfAfeJSDvwK+CHqQktI4y3JlzCNanhXJ1J6z6ZhWznJSL3ATXAHVMaUepcMXcRcWDdAObPUhVQCtk57y6sSzN1WH+tvSMii40xZ6Y4tqlmJ/d7gX82xjwmIsuArcncE1MfXtpdda3LpJH7pHWfzEJ2ckdE7gR+CnzNGBNNUWxTbazcfcBioElE2rCuP+7IkUlVu+/5/zTGxI0xrcDvsYp9trOT+0bgVQBjzHtAPlbflenAVk24kkwq7tO5++SYuScvTTyLVdhz5borjJG7MabHGFNijKkwxlRgzTd8zRjTnJ5wJ5Wd9/x/YE2mIyIlWJdprtiUL0vYyf0z4MsAInI9VnGfLjeC2AF8O7lqZinQY4z5fFw/Id2zxqPMEB/CmkX/afJrv8D6xwzWyf0XoAV4H1iY7phTmPvbQAewL/mxI90xpyr3i45tIkdWy9g87wI8DnwCfITVcTXtcaco90XAu1grafYBf5zumCcx9+3A50Aca5S+Efge8L3zzvtTyd/NRxN5z+sOVaWUykGZdFlGKaXUJNHirpRSOUiLu1JK5SAt7koplYO0uCulVA7S4q6UUjlIi7tSSuUgLe5KKZWD/h8cKxgflJX/NgAAAABJRU5ErkJggg==\n"
},
"metadata": {}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"kernelspec": {
"name": "py36",
"display_name": "py36",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.4",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"gist": {
"id": "",
"data": {
"description": "Kruskal Prim Algorithm",
"public": true
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment