{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 55"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
""
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import IPython; IPython.display.HTML('''''')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 829. Consecutive Numbers Sum\n",
"Hard\n",
"\n",
"Given a positive integer N, how many ways can we write it as a sum of consecutive positive integers?\n",
"\n",
"Example 1:\n",
"\n",
" Input: 5\n",
" Output: 2\n",
" Explanation: 5 = 5 = 2 + 3"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from math import sqrt, ceil, floor, isclose\n",
"\n",
"def consecutiveNumbersSum(N):\n",
" '''\n",
" Answer is number of odd divisors of N\n",
" \n",
" range(1, ceil(sqrt(N)), 2) is all odd numbers up to floor(sqrt(N)) \n",
" when N is not a perfect square, in which case ceil = floor + 1. \n",
" \n",
" If N is a perfect square, on the other hand, ceil(sqrt(N)) and floor(sqrt(N)) are equal,\n",
" and range(1, ceil(sqrt(N)), 2) is all odd numbers up to sqrt(N) - 1\n",
" '''\n",
" while N%2 == 0:\n",
" N /= 2\n",
"\n",
" if isclose(floor(sqrt(N))**2, N):\n",
" \n",
" return 2*sum(1 for i in range(1, ceil(sqrt(N)), 2) if N%i == 0) + 1\n",
"\n",
" else:\n",
" return 2*sum(1 for i in range(1, ceil(sqrt(N)), 2) if N%i == 0)\n",
"\n",
"consecutiveNumbersSum(5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 752. Open the Lock\n",
"\n",
"Medium\n",
"\n",
"You have a lock in front of you with 4 circular wheels. Each wheel has 10 slots: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'. The wheels can rotate freely and wrap around: for example we can turn '9' to be '0', or '0' to be '9'. Each move consists of turning one wheel one slot.\n",
"\n",
"The lock initially starts at '0000', a string representing the state of the 4 wheels.\n",
"\n",
"You are given a list deadends of dead ends, meaning if the lock displays any of these codes, the wheels of the lock will stop turning and you will be unable to open it.\n",
"\n",
"Given a target representing the value of the wheels that will unlock the lock, return the minimum total number of turns required to open the lock, or -1 if it is impossible.\n",
" \n",
"\n",
"Example 1:\n",
"\n",
" Input: deadends = [\"0201\",\"0101\",\"0102\",\"1212\",\"2002\"], target = \"0202\"\n",
" Output: 6\n",
" Explanation:\n",
" A sequence of valid moves would be \"0000\" -> \"1000\" -> \"1100\" -> \"1200\" -> \"1201\" -> \"1202\" -> \"0202\".\n",
" Note that a sequence like \"0000\" -> \"0001\" -> \"0002\" -> \"0102\" -> \"0202\" would be invalid,\n",
" because the wheels of the lock become stuck after the display becomes the dead end \"0102\".\n",
" \n",
"\n",
"Constraints:\n",
"\n",
" 1 <= deadends.length <= 500\n",
" deadends[i].length == 4\n",
" target.length == 4\n",
" target will not be in the list deadends.\n",
" target and deadends[i] consist of digits only.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# partially from LeetCode official solution\n",
"\n",
"from collections import deque\n",
"\n",
"deadends = [\"0201\",\"0101\",\"0102\",\"1212\",\"2002\"]\n",
"target = \"0202\"\n",
"\n",
"def openLock(deadends, target):\n",
" def neighbors(state):\n",
" for i, c in enumerate(state):\n",
" yield state[:i] + str((int(c)+1)%10) + state[i+1:]\n",
" yield state[:i] + str((int(c)-1)%10) + state[i+1:]\n",
" \n",
" queue = deque([('0000', 0)])\n",
" dead = set(deadends)\n",
" seen = set(['0000'])\n",
" \n",
" while queue:\n",
" state, n_moves = queue.popleft()\n",
" if state == target: return n_moves\n",
" if state in dead: continue # 一定要放這裡,不能放在下面的 if,不然遇到 deadends = ['0000'] 會錯\n",
" for neighbor in neighbors(state):\n",
" if neighbor not in seen:\n",
" seen.add(neighbor)\n",
" queue.append((neighbor, n_moves+1))\n",
" return -1\n",
"\n",
"openLock(deadends, target)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1248. Count Number of Nice Subarrays\n",
"\n",
"Medium\n",
"\n",
"Given an array of integers nums and an integer k. A continuous subarray is called nice if there are k odd numbers on it.\n",
"\n",
"Return the number of nice sub-arrays.\n",
"\n",
" \n",
"\n",
"Example 1:\n",
"\n",
" Input: nums = [1,1,2,1,1], k = 3\n",
" Output: 2\n",
" Explanation: The only sub-arrays with 3 odd numbers are [1,1,2,1] and [1,2,1,1].\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"nums = [1, 1, 2, 1, 1]\n",
"k = 3\n",
"\n",
"def numberOfSubarrays(nums, k):\n",
" nums = [1] + nums + [1]\n",
" oddIdxDiff = np.diff([i for i, n in enumerate(nums) if n%2==1])\n",
" return oddIdxDiff[k:] @ oddIdxDiff[:-k]\n",
"\n",
"numberOfSubarrays(nums, k)"
]
},
{
"attachments": {
"af380930-7eff-4625-b38c-dcb77dc75f57.png": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABqIAAAM2CAYAAACdWJKQAAAgAElEQVR4nOzd6V8TV///8e//NCgKKlbcN+p2WaUuda3iJZdbvap1qdRS69q6tXq1tmq1VVusVFGp4r5RpYqKFndUVBRQZDPA53fDX8YkM0kmySQ5jK/n4/G+ocxMZpKTyTnzyZz8nwAAAAAAAAAAAABR8H/x3gEAAAAAAAAAAAA4E4UoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARAWFKAAAAAAAAAAAAEQFhSgAAAAAAAAAAABEBYUoAAAAAAAAAAAARIUjClF//fUXIYQQQgghhBBCCCGEEEKIo+IEFKIIIYQQQgghhBBCCCGEEEIUjBM4qhAFAAAAddFng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSi81V68eCFFRUXS2NgY710BAMDx6LNBdbTR6CkoKPDKhQsX4r1LrV5JSYncv38/3rsBAACAKHHS+IRCVJS5XC65c+eOVFZWxntX4GPlypXStm1b0TRNOnToIHv37o33LgEA4Ggq99mqqqrk9u3b4nK54r0riCOV22hrp2maV8aOHRvvXWq1ysrKpGfPnvpzmZ6ezrkLAADAgZw0PqEQZbPHjx/L+vXrZdasWTJo0CBJTEzUBwipqakybtw4Wbx4sezfvz/eu/pWe/nypSQnJ3sNhkeMGBHv3QIAwNFU6rMdOHBAFi9eLOPGjZPU1FS9P9C2bVsZNGiQzJo1S9avXy+PHj2K964ihuLVRh8/fiwDBw4MOa9evYr5voaLQpR91q1bZ3g+jx8/Hu/dAgAAgM1UGkNHikKUjXJyciQlJcUwKPCXKVOmcHHDRnfu3JFr167JtWvX5OXLlwGXrampkfbt23u9Hunp6THaUwAA3k4q9NnKy8slIyPDcn8tJSVFdu/eHdd9rqmp0fs4d+/ejeu+2E21Y4tXG3348KHlNumZ1jS9NIUo/0J9H6xevdrwfB49ejQGewoAAIBYUmEMbRcKUTZ4/PixTJo0KazBY0pKiuTm5sZt352ipqZGkpKS9Of15MmTQdfJzs7Wl09KSuJ1AAAgyuLdZ8vJyZGOHTuG1WebMmWKVFRUxGW/16xZo+/HqFGj4rIP0aLasVGIih4KUf6F+j64ffu2vPPOO/o6Q4cOZWo+AAAAB4r3GNpOFKJsEOxbtb169TJMA+ebK1euxG3/neC3337zej6tFKJERCoqKuTUqVNSV1cX5T0EAADx7LNdvHgxYF8sKSlJevfuHXCZzMzMmO93c3Oz136pUKyxi4rHRiEqeihEmQv3fdDU1CRFRUVy8+bN6O4gAAAA4ibedQ87UYiK0PHjx00HhYMGDZJTp05JdXW1iLweYNy+fVvWr18vCQkJDMRsNmbMmLAKUQAAIHbi1WdraWmRkSNHmvbZ1qxZIzdv3pSmpiYREXn+/LmcOXNGBg8ebLr8mTNnYrrvZ86c8Xp8FYo1dlHx2FQqRI0fP14ePnwYMK0J4x9zKr4PAAAAoAYKUYqJ1wvicrlkwIABhkHVv//9b6mpqfG73vHjx72mkXMnPz/fsGxRUZFs2rRJz+XLl/W/3b59W3bu3Cnz5s2TjIwMWbt2rRw9ejSkaRkqKyvlzz//lG+++UZmzZolEydOlOzsbNm+fbsUFxcHXd9z3woKCrz+VlhYKIsWLZLx48fLpEmT5OLFi4b1a2trZe/evbJ69WqZO3eujB8/XkaNGiWzZ8+WVatWSUFBgbS0tATch6NHjxqey4ULF3rt26ZNm6Sqqsrvvm/atEn27dsX9HhramqkoKBAvv/+e/nkk09k7NixMnPmTFm+fLkUFhYG3Vff19Nzip9//vlHdu3aJVlZWTJ+/HiZP3++fPfdd3L79u2g+wUAQGsQrz5bbm6u6R1QR44c8btObW2tZGZmGtYbOnSoXrTydOrUqaB9D7dHjx4ZljV7Xl68eCEffvih1+P37t3bsK5vH8zzb1u3btX/v76+Xo4dOyZr1qyRyZMny4IFC2Tnzp1y7969gM+fSscWbSoVoqZMmWJ5/evXrxueuy1btvgdF1y6dMmw/Pbt2736sna3o1ALUXaMEzyPwXOsVVNTI0ePHpX169fL1KlTZerUqbJixQrZu3ev6fs7WvsX7vvAd0yxadOmoIXJSMcxItF9PgEAAGBEIUox8XpBdu/ebRhQJSYmWvr9gCVLlhjWHTBggGG5b7/91muZ2bNni4jIH3/8IW3atDH9pu7kyZMDFsLcDh486DW3uFkWLFig39VlxvcuMJHX3zr+9NNPA36D+MaNGzJv3rygUxa6L/icPn3a8Njl5eUya9asoOu7U1pa6nffrQyGjx49Kj169Aj4GAMGDJDz58/73Ybv6/nLL7+IiMg333zjd5vt2rWTDRs2MIgDALR68eqzmU25t2TJkqDrVVRUSGJiomHdvLw8w7Kff/65YbkbN26YbreoqMiw7OrVq72Wyc3Nla5du1rq48yaNctrXd+/37p1S54/fy6jRo0yXT8pKUn+/PNPv8+DSscWba21EFVXVyf9+/c3bGPLli2my/bp08ew7Pbt272Ws7sdWe172zFOMHvMrl27SktLi9y7d0/S0tL8bjM9PV3++ecfv9u0a/8ieR/4jik0TZOzZ8/63Wc7xjHRej4BAADgH4UoxcTrBTErJi1cuNDSumVlZaZT9NXW1not5zvISElJkR9//DHoYGXIkCHy4sUL08duaWmRuXPnWhr0uAcZDx48MN2W77KVlZWyYsUK0+1cv35dX+/GjRuWH989sPWd/3zs2LEhbSPcQlRLS4ssWLDA8uO0bdtWdu3aZbot39dzwoQJlrfte3EAAIDWJh59tqqqKsNnaps2beT+/fuW1p8/f75h/ZUrVxqWs7NYc+7cuZD6OMEKUUuXLpWhQ4cG3c6vv/5qur8qHVu0tdZClMjr2Qh8t9GhQwd5/Pix13KrVq0y7Qf73hFjdzuy2ve2Y5zg7zE3b94sqampQbfZu3dvqa+vj9r+Rfo+sFqIsnMcE63nEwAAAP5RiFJMvF6QKVOmGDrZgb6R5ys9Pd2wvmexRsR8kGE13333nenj7tmzx7BscnKyZGRkyJw5c0ynG/T349xmA0p/+/PkyROvdX3vZurWrZuMGTNG+vbta7r+0KFDvdYPtRDle8HEbN/NmE3nY2UQ5zmNoh2vZ0pKit9pcAAAaA3i0WcrLi42fKaOHj3a8vrHjh0zrD9jxgzDcnYWa86ePRtSH+Gjjz7y2n64fY3OnTsbvhSl2rFFW2suRImYv1aez2Fpaam0bdvW6+/Jycmm0+rZ3Y6s9r1FIh8nRHoMmqbJ+vXro7Z/kb4PrBai7BzHRPP5BAAAgDkKUYqJ1wtiNgXBrVu3LK8/Y8YMw/q+01n4K1yMHj1aioqK5Pnz51JSUiKzZ882LNOtWzdpbGz02l5dXZ1hWoa+ffvK3bt39WWam5tl7dq1hu2ZzdEfaLCRlJQk7733nkyfPl3GjRsnr1698lr3+vXrkp6eLlu2bDFMZ3j16lXTaQM9i1mVlZXy+PFj02917t27Vx4/fuwV3znyrQyGX758Kd27dzcsm5WVJZcuXZKKigo5e/asTJgwwbDMkCFDDNvz93qmpqZKXl6ePHz4UCoqKmT79u2mUwEdOnTIsE0AAFqLePTZ9u3bZ/g8dU91bMX169cN6//rX/8yLGdnsaaxsVHvv/hOxTx8+HBDH8d3GmWzvkZiYqJs2bJFysrK5OnTp5KXlyedOnUyLPfTTz8pfWzRplIhKjk5WdLS0vwmJyfHsJ2XL1+aTrt36tQpaWlpMf0i17Zt20z3ye52ZKXv7RbpOCHQMWiaJvPmzZPi4mJ58eKFXLlyxXS6QX/FLTv2L9L3gZVClN3jmGg+nwAAADBHIUox8XhBXC6X4duEmqbJy5cvLW/jiy++MKz/ww8/eC1jNsjo2rWrNDQ0eC3X3Nxs2uHfv3+/13I//PCDYRmzudybm5sNU2+YTTvobzCydOlSv1MDWpWVlWXYrtkdZ//73/9MB9vBWBkMf//994blzJ6HV69emd7hVlxc7LWc2euZkJAgt2/fNmwzOzvbsOymTZuCHhcAAKqKR5/N7LN3xYoVltc3m9ovOTnZMI2Z3b+j5Obb3xw1alTQfTbrm23dutWw3PHjxw3LDRw40LCcSscWbSoVooLF7PefREROnTplWDYtLU127Nhh2v9tbm423Y7d7chK39sqq+MEs2OYO3euYbknT54YvgRm9j63e/9EwnsfWClE2T2OEYnf8wkAAPC2ohClmHi8IE+ePDF0wtu3bx/SNjZs2GDYxpdffum1jNkgw+x3CUREfvvtN8Oy3377rdcyH3/8sdff27Rp43e+7mXLlnktazaNjdlgJDs7O6TnwZ/8/HzDtnfu3GlYLpqFKLM7zXynT3TLyckJ+lqZvZ4ZGRmm2zt9+rRh2c8++yzocQEAoKp49NnMLgiH8sWOlpYW09/19L1DQaVije+227RpIzU1NYblmpubpVevXl7Ltm3bVpqampQ9tmhzQiFKRGThwoVB109KSvKaFcGX3e3ISt/bKqvjBLPjvnjxouk2R48ebVjW924nu/dPJHqFKLvHMSLxez4BAADeVhSiFKPSHVGh/Ajrl19+aVj/+++/91rGbJBhNg2HiEhJSYlh2UWLFnkt8/7773v9PTExUTIyMkzj+1tRnTt3Njym2WDEbIDqT3V1teTm5sr69etl3rx5Mm7cOBk+fLgMGjTIdCqJX375xbCNaBaihg8f7rVMcnKy3+3dunXLsE3f39Yyez1//PFH0+2VlpYall2wYEHQ4wIAQFXx6LN98803hs/TVatWWV6/urrasH779u1b1R1RPXv29LvstGnTDMs/evRI2WOLNqcUol68eGGYjts3ZtPnebK7HVnpe3uyY5zgu0ygvrzv7z5pmiYPHz6M6v6JRK8QZfc4RiS6zycAAACMKEQpJl4vSP/+/Q2d6zt37lhef+bMmYb18/PzvZYxG2QcP37cdHuPHz82LDt58mSvZVJSUkIe5HrG9zenfP/er18/S8f+8OFDWbhwobRv3z6kx//5558N24pmIapDhw5ey/Tv39/v9p4/f27YZnp6utcyZq9nbm6u6fbKysoMy1KIAgC0ZvHos/3xxx+Gz9M5c+ZYXt/siyGDBw82LKdSscZ32yNGjPC7rNkdY3///beyxxZtKhWiJkyYYPitIM/U1tYG3ObRo0f99qnHjBnjd0o+N7vbkZW+t/u5sGuc4LtM3759/R7DJ598YljerHBi5/6JRK8QZfc4RiQ6zycAAAD8oxClmHi9IBkZGYbO9blz5yyvP3LkSMP6JSUlXsuEUogy+w2DkSNH6n9/9epVSIMls/j+NpXZoDaY6upqw91WnklISJCOHTua/vBxLAtRjY2NhmXMfpw80PK+P/QbyutJIQoA4DTx6LNdvHjR8gVwMydOnDCsP23aNMNyoRRrjh07Zlj266+/Nl022oWoJUuWGJY/ceKEsscWbSoVoqZMmRLRNouLi02nldQ0TWbOnBl0fbvbkZX3od3jhFCOwUrhxO79E4lOISoa4xgR+59PAAAABEYhSjHxekGys7MNnWvf33jyp7y83HRqP99p7cwGGXv27DHdptmUCv/+97+9lvGdv71Hjx6yefNmy7Fjrnff36nSNE369OkjO3fulPv374vL5RIRkYKCAsNysZ6az/cOstTUVL/bKy8vN2xz+vTpXstY+faiG4UoAIDTxKPPVllZafg8TUxMtPxbJYsXLzasv3z5csNyZsWa0tJS023+/vvvhmWjWYjq06eP32XNfkemuLhY2WOLNqcUohobG2XQoEGmxRJ3Dh48GHAbdrcjK31vu8cJoYxVrBRO7N4/kejdEWX3OEbE/ucTAAAAgVGIUky8XpBdu3YZOtfJycny/PnzoOuuXLnSsK7Z1AZmg4yNGzeabtPsG7vz58/3WmbSpEmG/Q02LUcgoQxG3Hznq09MTJR79+4ZlsvLy7M0gItmIWrIkCFeyyQkJMjLly9Nt3fhwgXDNn1/g4JCFADgbRavPpvZb+WsWbMm6HpVVVWSlJRkWNdsWl2zYo2/Y127dq1h2WhOzde+fXv9Arkvszv079+/r+yxRZtTClGrV682bM83qamp8uzZM7/bsLsdWel72z1OCGWsYqVwYvf+iUSvEGX3OEaEQhQAAECsUYhSTLxekMbGRunXr5+hg/3JJ5/Iq1ev/K5XVFQkHTt2tHRRw2yQ8d5775lud+HChYZlt2/f7rWM2bQZp0+fDvs5CGUwIiLy9OlTwzrDhg0zXdZsAG02pcWmTZsMyx06dMiWfV+6dKlhuZycHNPtmd0h57sshSgAwNssXn22X3/91fCZmpKSIhcvXvS7TmNjo+ndDwMGDDC9GL9+/XrDsjt37jQs19LSYvo7o/7uGmrXrp3XckOHDg16vL7b1jRNDh8+bFjOrPiRmppq+JKSSscWbU4oRF2+fFnatGnjta0ePXqYvo6zZs3yux2721Gwvnc0xgmhjFWCFU6isX8i4b0PrIwp7B7HiFCIAgAAiDUKUYqJ5wuSn59vOkj74IMP5Nq1a14XKiorK2Xbtm2SmJhoWP7999+XlpYWw/bNBhmapsm2bdu8ljt37pzpD+bevn3ba7nCwkLDMmlpaQGnp6mqqpIdO3ZIY2Oj4W+hDEZERGpraw3rdOjQQerq6ryWKy8vN0wn4W8At3fvXsNyVn6E3Mq+X7p0ybBc7969Dc/r2bNnJTk52Wu5Tp06GZ5XClEAgLdZvPpsTU1NMnToUMPnamJiovz8889SWVmpL+tyuaSkpMT0Dg9N0+To0aOmj5Gbm2tYdsiQIYZpl82KAZrmv1iTlpZmWPbOnTsBj9ds+0OGDJHHjx/ry7x69UoyMzMNy3388cdKH1u0tfZC1KtXrwx3wmiaJvn5+eJyuUzfBwcOHDDdlt3tKFjfOxrjhFDGKsEKJ9HYP5Hw3gdWxhR2j2Psfj4BAAAQHIUoxcT7BRk7dqzpQE3TXk9hMXz4cNMpYTxTVFRkum1/hShN0yQ9PV2ysrIkIyPD8E06TdNkzJgxpttcsGCBYdmUlBRZt26d5Ofny6lTp2T37t2yYcMGyczM1AtntbW1hm2FMhhx69mzp2G96dOnS35+vpw/f142b94sXbp0MT1mswFcUVGRYbmEhAQZO3asrFq1SqZNmyZ9+/aVffv2hbXvU6ZMMSzbsWNHyczMlKVLl8qkSZNMi4tbtmyx9HpSiAIAvC3i2Wc7e/ZswL5Yr169ZNiwYaZ9KncmTZrkd/slJSWm6/Tv31+WLFki2dnZkp6e7nfb/oo1vtMqa5omXbt2laysLPnss89k1KhRhrvl/T3GO++8I9OmTZOFCxeaXvzWNE3OnDmj9LFFm0qFKCvx/aLYmjVrDMt4FrTM+s3+puizux1Z6XvbPU6w2t8XsVY4sXv/RMJ7H1gdU9g5jonG8wkAAIDA4l33sBOFKBvcu3cv4OA7UNq1aydbt271u+1Ahahg8TfdTFVVlaSmpoa8PbsKUcuWLbP0eB06dJBu3boFHcA1NDRIr169gm5v7969Ye37kydP/A4o/WXQoEGm0/ZQiAIAvM3i3WfbtGmT6UVXKxk1apQ8ePAg4PanTp1qaVtJSUmGOyb8FWt++eWXoNtLS0vzWifcvmNGRobyxxZtrbkQdfXqVcPvDbVv317Kysq8HmvRokWG7ZhN0Wd3O7LS97Z7nGDlMd2sFE7s3j+R8N4HVscUdo5jovF8AgAAILB4j6HtRCHKJi6XSzZu3BjSxY2RI0fKrVu3Am7XbJCRl5cnnTt3DrjtXbt2BdxuWVmZ6TfkAsWuQtTLly+ld+/eAR8rKSlJCgsLZePGjZYGcGZTxvgm3EKUiMjdu3dNpzkxy+zZs6Wqqsp0OxSiAABvMxX6bKWlpSF9gahdu3ayadMmaWpqCrrtO3fuBP2yT2pqqly6dEmWL1/u9f/+ijUul0sGDBgQ0kVqs/7D7NmzA25j6NChfvsvKh1btLXWQtSrV69Mp93buHGj4bGqqqpMixO+U/TZ3Y6s9L3tHieE0t+3UjiJxjgmnPdBKGMKu8Yx0Xg+AQAAEJgKY2i7UIiyWWlpqXz66acyatQo6dSpk1fHOyEhQdLS0mTatGmyfft2Sxc0zAYZN27ckLKyMpkwYYLhd6HS09PlxIkTlvc3Pz9fRo0aZTqPuaa9nrLv008/lTNnzpj+hlUogxFPlZWVpoOT1NRUmTZtmj53+aNHjyQhISHoAE5E5OjRo9KnTx/DNhMSEmT06NFy5cqViPa9rq5Otm7dKoMGDTKs27FjRxk1apTk5+cH3AaFKADA20yVPpvL5ZItW7ZIZmam9O/f36uv4e7/jB49WrKysoJ+achXVVWVfPLJJ4YvJ6WmpkpmZqZ+d8qZM2e8/u6vWCMiUl1dLQsWLDDsp3u7K1as8Fred5mPPvpIRF7fEeZ7ET05OVmWL18u1dXVreLYoq21FqLMfp9r4MCB8urVK9PH2717t+nz7TlFn93tyGrf285xQjQKJ9EYx4T6PghlTCFizzhGhEIUAABArKkyhrYDhagoe/TokZw9e1auX78uDQ0NIa9vNsgoLCzU/+5yueTatWtSWFgo5eXlEe1rRUWF/PXXX3Lu3DkpLS2VyspKaW5ujmibwdTX10tJSYkUFhbK06dPbdlmRUWFXLhwQc6cOSPXr1+X58+f27Jd38coLi6W06dPS3l5uWmRDgAAeFO1z+buj5w7d06ePHliyzabmprk3r17cubMmaBT+lnV2NgoN27ckJMnT8rff/8t9+7dM+2r+fYdx48f7/X3Z8+e6f3T+vr6kPcjnscWbaq20XiIdjsKJhrjBDtFY/9i8T5gHAMAANB6OGl8QiFKcaF+2w0AAEBVTu6zqSSUuxbgjTb6Bu0IAAAAiC8njU8oRCmOQhQAAHAKJ/fZVEIBIXy00TdoRwAAAEB8OWl8QiFKcRSiAACAUzi5z6YSCgjho42+QTsCAAAA4stJ4xMKUYqjEAUAAJzCyX02lVBACB9t9A3aEQAAABBfThqfUIhSHIUoAADgFE7us6mEAkL4aKNv0I4AAACA+HLS+IRClOIoRAEAAKdwcp9NJRQQwkcbfYN2BAAAAMSXk8YnFKIUd+DAAZkxY4ZX/vnnn3jvFgAAQMic3GdTiW/fcfXq1fHepVaDNvoG7QgAAACILyeNTyhEAQAAICbos0F1tFEAAAAAqnDS+IRCFAAAAGKCPhtURxsFAAAAoAonjU8oRAEAACAm6LNBdbRRAAAAAKpw0viEQhQAAABigj4bVEcbBQAAAKAKJ41PKEQBAAAgJuizQXW0UQAAAACqcNL4hEIUAAAAYoI+G1RHGwUAAACgCieNTyhEAQAAICbos0F1tFEAAAAAqnDS+IRCFAAAAGKCPhtURxsFAAAAoAonjU8oRAEAACAm6LNBdbRRAAAAAKpw0viEQhQAAABigj4bVEcbBQAAAKAKJ41PKEQBAAAgJuizQXW0UQAAAACqcNL4hEIUAAAAYoI+G1RHGwUAAACgCieNTyhEAQAAICbos0F1tFEAAAAAqnDS+IRCFAAAAGKCPhtURxsFAAAAoAonjU8oRAEAACAm6LNBdbRRAAAAAKpw0viEQhQAAABigj4bVEcbBQAAAKAKJ41PKEQBAAAgJuizQXW0UQAAAACqcNL4hEIUAAAAYoI+G1RHGwUAAACgCieNTxxViCKEEEIIIYQQQgghhBBCCHFKnIBCFCGEEEIIIYQQQgghhBBCiIJxAkcVogAAAKAu+mxQHW0UAAAAgCqcND6hEAUAAICYoM8G1dFGAQAAAKjCSeMTClEAAACICfpsUB1tFAAAAIAqnDQ+oRAFAACAmKDPBtXRRgEAAACowknjEwpRAAAAiAn6bFAdbRQAAACAKpw0PqEQBbJ04ZYAACAASURBVAAAgJigzwbV0UYBAAAAqMJJ4xMKUQAAAIgJ+mxQHW0UAAAAgCqcND6hEAUAAICYoM8G1dFGAQAAAKjCSeMTClEAAACICfpsUB1tFAAAAIAqnDQ+oRAFAACAmKDPBtXRRgEAAACowknjEwpRAAAAiAn6bFAdbRQAAACAKpw0PqEQBQAAgJigzwbV0UYBAAAAqMJJ4xMKUQAAAIgJ+mxQHW0UAAAAgCqcND6hEAUAAICYoM8G1dFGAQAAAKjCSeMTClEAAACICfpsUB1tFAAAAIAqnDQ+oRAFAACAmKDPBtXRRgEAAACowknjEwpRAAAAiAn6bFAdbRQAAACAKpw0PqEQBQAAgJigzwbV0UYBAAAAqMJJ4xMKUQAAAIgJ+mxQHW0UAAAAgCqcND6hEAUAAICYoM8G1dFGAQAAAKjCSeMTClEAAACICfpsUB1tFAAAAIAqnDQ+oRAFAACAmKDPBtXRRgEAAACowknjEwpRAAAAiAn6bFAdbRQAAACAKpw0PqEQpbiioiIpKCiQs2fPxntX0IrduXNHCgoKZOvWrXL48GG5e/euNDc3x3u34BCcpwBY5eQ+W7iCnUM5x8ZWa2+jtBcAQCBVVVVSUFAgBQUF8vjx43jvDgAgiNY+PvFEISrOnj59Kjk5OVJeXm769wkTJoimaTJo0KAY75nIq1evpKysTCoqKihatFJVVVUye/Zs0TTNkKVLl8Z799BKcJ4CYJfW3GeLlmDn0HieY99Grb2N0l4AAIH89ddf+jWBAwcORLy9YGNFAEBkWvv4xBOFqAhlZGTIwIEDLWfixImG9VW6+HDr1i2ZO3eu9OnTRxISEvQOSps2baR79+4yffp02bNnj1RVVcVkfxC+lpYWGT58uP4avvvuu5KZmSkDBgyQhIQEKSwsjPcuIkY4TyGeWlpaZNasWTJw4ECZN2+e/v///e9/ZeDAgTJnzpw47h1izUmdaLtQiFJLrNtoVlZWSJ/RZvG8kEh7AQAEYnchKthYEQAQGSeNoSlERSgtLc30bhN/6du3r+n6ycnJ8urVK8P2YzmY/PLLL70u6gbKiBEjor4/4airq5OKiop474YSDhw4oL9eq1ev9vpbXV0dd4+8RThPqeVtO09t27ZNLxSWlJTo/19cXKy/lrt27YrjHiKWnNSJtguFKLXEuo1OmTIlpM9os3ieQ2kvzvP06VOpra2N927ExNt0rNH0tvU18YaV95DdhahgY0UAQGScNIamEBUh94dujx49ZN26dUGzZcsWr/VzcnKkX79+8t1335luP1aDyR9++EHvjHTo0EGWLVsmBw8elKKiIjl27Jjs3LlTli5dKv369RNN02Tr1q1R3Z9wzZ07VzRNk4aGhnjvStxNmzZNNE2TLl26SGNjY7x3B3HEeUotb9N56vbt25KUlCSapsny5csNf8/OztZfz7KysjjsIWLNSZ1ou1CIUkus22hubq7fz+Px48frn3ufffaZ3+UuX76sb4/24ix3794VTdPk66+/jveuRN3bdKzR9jb1NfGG1feQ3YWoYGNFAEBknDSGphAVIfcF3vfffz8q24/FYPLJkyf6t9J79OgRdG7fa9euSXV1ddT2J1xNTU3SuXNnOt3/39ChQ0XTNJk8eXK8dwVxxnlKHW/beSozM1M0TZOUlBTTb2e+ePFCOnToIJqmyaxZs+Kwh4g1J3Wi7UIhSi0qtdH//e9/+sXCGzduWFqH9uIsW7ZseWuKM2/TsUbT29bXxBtW30N2F6IAANGl0vgkUhSiIuSEC7yHDx/WOyK7d++O2uNE2/nz5/XjoNMt0qlTJ9E0TT755JN47wrijPOUOt6m85T7W5mapsnSpUv9Lrd48WJ96r6HDx/GcA8RD07qRNuFQpRaVGqjFKIwceLEt6Y48zYdazS9TX1NeLP6HqIQBQCti0rjk0hRiIpQpBd4Kyoq5MGDB/L48WPTv4c6mHS5XFJaWiq5ublSUFAgDx48CLrOt99+q3dEPH+/w6ry8nJ58OCBPHnyxPI6z549kwcPHsiDBw9Mf6vowYMHcvbsWdmzZ4/k5OTIiRMnpLS01O/vGj1//lxmz56tH8ft27f17bsTSDjPm8ib16+urs7r/58+fSp//vmnHDp0KOjz8ujRI9m/f7/s379fSkpKpL6+3tJjB1JVVSVt2rQRTdPkv//9r9fz4O9Cb319vVy5ckUOHz4sO3fu1Kc8q6ysjHh/YsHfa1FbWyuFhYXy22+/yalTp+TevXvS0tIS8vattpGmpib9ua6qqgq4zZqaGn3Zly9fBly2srLSUls2w3nKGecpkdfv7dOnT8vu3bvl0qVLhvZuJl7nqS+++MLrWP25fv26vtzKlSuDbhetW7z6bHZ+Rnieu638FoL7XPLo0SPTv1OIUotKAz07C1ENDQ1SVFQke/fulQsXLoT0eegp3D5zqFpaWuT+/fty5MgR2bVrlxw5ckSuXbsmTU1NltZ/+fKlXLx4UXbv3i3Hjx+3fLwNDQ1++zx3796Vffv2yf79++Xy5ctSU1Nj+XjC6WcXFhZK27ZtRdM0+fzzzw19hhcvXngt7z7P+d6BfPPmTcnLy5PffvtNjhw5Ii6XS/+bu3/07NmzoMfw6tUr/bGt/o5TbW2tFBcXy+7du2Xfvn1SWFho+lihHquvlpYWKSsrk4KCAsnNzZWSkhLLU5O7X3Pfc3R9fb2cPHlSdu3aJXl5eXLz5k1L27Nrm+G810Lta9r9eRZOG4zWGC7UfroV0To/uEXSjkN5DwUqRD18+FDy8/OloKBASktLLfX5g40Vo/m8VVRUyIULF2TPnj2yd+9eKSoqkrKyMsPxP3jwgMIsgFZLpfFJpChERSjSC7x2XXyora2VefPmSfv27Q0/YJyamir5+fl+1925c6e+7MGDB0M+BvePLCcmJga98C7y+kJ9jx49RNM0GTBggNffzp07p3+Txyxdu3aVrKwsuXv3roi87qxlZ2dLcnKy33XcMRPJ8yby5vXZtGmTiIgcPXpUbxOe6d27t/z000/6ei0tLbJ69Wrp06ePYdl33nlHcnJyQi6WNDU1yZYtW2TcuHF6Ecos7dq181qvpqZG1q1bJ126dDFdPiEhQcaMGSM7d+4MaX9izfe1KC4ulvfee8/0uUhPT5eioiJL2w21jbhcLunYsaNomiYTJ04MuO0FCxbo28rOzg64bHp6umiaJn379rW03544T7Xu85SIyMmTJ/XfvvJ9f86cOTPgMcXjPFVfX69PuTd+/Pigz/eoUaNE015P4ed5cQLOE68+m52fEdu2bdOXvX79etDHdk9R2atXr4D7RiFKDSoN9CIpRA0dOlRERIqKimTEiBGSmJhoaOtjx46Vq1evWtpupH1mq+rr6wN+Znbt2jXgndEXLlyQwYMHm66bmpoq27dvD/j47gu0SUlJ0tzcLC6XS5YsWWLaT27fvr2sWbMmYFEmnH72+fPnZfjw4UH7DN98843XY7lfe/dvfVZXV+v9H3cSExO9PmdTUlJE0zSZMWNGwOdFROTq1av6dnJycoI+j/5eh4SEBBk7dqzU1dWFfaxu9fX1smTJEtP20rZtW5k4cWLQAo77Ne/YsaP+f7m5uZKamuq1vW+//Tboc2THNsN5r4Xb14zW51kobdDuMVyo/fRQ2H1+cIukHYfzHvIsRB0+fFhcLpd88cUX0r17d8N6HTp0kO+++y5gESdYPyUaz1tZWZnMmjUr6HF75syZM0FfCwBQkUrjk0hRiIqQChd4b9y4IYMGDdI/YJOTk+X999+X/v37e33wZmVlmV40LCws1JcJZxq3goICff1t27YFXf706dP68p4/aHn06FGvDmdaWpqMGTNG3nvvPX2ea3fn1f2txqamJunVq5f06tVLv+ipaZr07NlT/3937H7eRN68PnPmzJG8vDz9W0idOnWS4cOHGwYbf/zxhzQ1Ncn8+fP1/3vnnXdk+PDh8s4773gt+/3334f0OtTX13sdr+dxef5/Wlqavk5jY6OMHTtWX7ZTp04ybNgwGTt2rPTt21c/Hk0LXijxVVVVJStXrgwrxcXFIT2WiPdrUVBQIElJSXrnfcCAATJ48GBp166d13N8+vTpgNsMt4385z//0TvS/r7F5nK5vF7znj17+m1n1dXV+u8jLV68OOTnhvNU6z1PNTc3y/r1672eoz59+sjIkSO9ttWjRw+5dOmS6bHE4zzl+Xq5LywE4nnH28WLF4Muj9Yr3oUoOz4jKEQ5m0oDvUgKUWPHjpXDhw/rF7MDtfVgx2tHn9mKq1evysCBA7222a5dO8PF0ePHjxvWdblcsnr1ar2/pGmvL3q+9957hs+uzMxMv1/g8LxAe+XKFcnIyPD6LExPT5du3bp5bW/s2LGmxx1uP/vHH3+UXr166V+I0bTXBQ3fPsPWrVu9Hs/92q9atUrq6+vlgw8+8OqXuNuAJ7sLUS6XS7766iuv10HTNOnWrZvXRXZ3nzTcYxURKSkp8WqX7j7SoEGDvPpqKSkpsn//fr/H5fma19fXy+HDhw3tSNM0ycvLC/ocRbrNcN9r4fY1o/V5FkobtPPzOZx+eijsPD+4RdqOw3kPeR5HQUGBTJo0KehxfPjhh36PwWohyq7nrbS0VP9sS0xMlNmzZ8v69etlxYoVMn78eK/tpKWlSUZGhmRlZcm9e/f8HgMAqEyl8UmkKERFKN4XeOvr6/VOR6dOnSQ3N9frdvOKigqvjsWePXsM22hqapIhQ4boyyxbtiykQaTL5dL3wf3ty0DmzZsnmvb623Du2/pdLpfeaU5PTzedxunevXuyadMmWb9+vel2ly1bph9DsFvY7XjeRN68Ph06dJCEhARJT0+X0tJSr2XOnTunP1ZiYqLeOZo8ebLcv3/fa9kjR47oneSOHTtamibDH/fgNisry+8ymzZt0l+L7du3G563hoYGOXLkiMyfP1/u3LkT0uOXlZV5dQJDSbBvWZrxfS169+4tx48f9/rGncvlkk2bNumd+oEDB/qdhiKSNvLzzz/r/19YWGi6/XPnzukDTPeyly9fNl32zz//1Jc5dOhQyM8N56nWeZ4SEdm+fbu+/JQpU7ymtGhpaZHc3Fy9Db377rumdxPF4zzlWViycvfh2bNn9eWtFK7QesW7EGXHZwSFKGdTaaAXSSEqJSVFEhISpFevXkHb+uDBg/3ejWpXnzmY2tparwuRn332mdy4cUPfr8bGRikqKpK1a9ea7uuWLVv0dYcMGSKXL1/2msavvLzca8qyjIwM0/3wvGDqLtJkZWXJ06dPvZYrLS3V71bXNE1yc3MN24q0n11TU6Nvf/Xq1UGfQ/drP3fuXJk+fbpomibTp0+XS5cuSWNjozQ1NRmmArS7EPXjjz/qy/Ts2VMKCgq8in6PHz+WnJwcOXr0aETHWldXp7fLhIQE2bhxo1RXV+t/r6+vl0OHDnkVIf190cXzNc/NzZX27dtLSkqK5OTk6H3AmpqakKZPD2ebdr3XQulrRuvzLJQ2aNfnsx399GDsPD+I2NuOQ3kPeR6He9tZWVlSUVER8Dj8FWNDKURF+ry5XC79DrDu3bubvs55eXn6NoLdBQsArYFK45NIUYiKULwv8LoHOJqmyYULF0yXaWpq0r9d2KNHD9PbnM+ePes1ZcewYcMkPz/f8hRJ69at09e9cuWK3+Xq6ur0DqLnALC4uDiki5ZmQul02/W8uV8fTXs9fZe/x/XsDGna6ynb/F1E97zw7K/TaoWVQtS///1v0TRNJk2aFPbj+FNZWSmff/55WAmnDXi+FqmpqQHnkl+8eHHQ1z+SNnLnzh19XX8DHffv58yYMUMvsKxZs8Z02ezsbNG0198MDGe+cc5Tr7W281Rtba1+t9KkSZP8njP27dunb9M9FYqneJyn3FOitGvXzlLBrba2Vr+4kJmZGXR5tF7xLkTZ8RlBIcrZVBroRVKIcrf158+f+13Ws637+1yz6zM8GM+7f3fs2BHSutXV1frFzVGjRgX8/cRVq1bpj3PixAnD3z0vmGqa913Rvh48eKDfqWE2HXOk/exwC1GefdBgX9qxsxDl+ToMGTIkpN+ZDfVYPdtLoGkhHzx4oPelRo0aZfp8+L7mffv2jfjOiXC2add7TYVCVCht0K7PZzv66cHYeX4Qsbcdh1uI0jRNNm7caOk4/N0VFUohKtLn7dKlS/p2Ak3T6i6E+murANCaqDQ+iRSFqAi5L/AOHTrU9AcRg/1AYiQXH168eKF/K33u3LkB9zM3N1f/wP7jjz9MlykqKjLcEt2tWzdZs2aN3x+edHv48KE+3UCgKdw8L5h63lp+4cIF/f99vyFnldVOt53Pm2fHOdCg2eVyeU3HEKi9Pnv2TF/O33zoVlgpRLkvFqenp4f9OKrwfC2C3VHhOVD5/fffDX+3o424f1dn7NixhnVaWlr0b7/99NNP8uWXX+qDdjPuAeeYMWMC7os/nKdea03nKRGRDRs26MuafdvPrbm5WX+N+/fvb/h7PM5T7tc8lOLnv/71L/3CCpxLhUJUpJ8RFKKcTaWBXqSFqEAX+0S827rZ3RV2f4b7U1lZqd/d+69//Svk6f1WrlypP/bJkycDLvvy5Uv9mAYPHmx4LM8Lpl26dAlY1BJ58xuUffr0Mfwt0n52JIWoESNGWHoe7SxEeRb5Qv3NsFCO9dmzZ3p7GTVqVNBte76PDhw4YPi770XyY8eOhbTvZkLdpp3vNVUKUVbboF2fz3b004Ox8/xgdzuO5I6oYF8eCHQcIqEVoiJ93nJycvRtlZWV+d2G592ZVn4fGABUptL4JFIUoiJk9oPvgXL27Fmv9SO5+HDq1CnLnf1bt27py65du9bvcpWVlbJmzRqvOZQ17fVUTXPmzJGbN2/6Xdf9rb+UlBS/Uxe4OxUpKSleF7sbGxv1eX4HDhwY8jRwItY73XY+b54dZ99b2X25f7epffv2QY/FPTf2ggULgi7rj5VClOf0WRs2bIhoXv9483wtysvLAy7reRF93bp1hr/b0UaysrL0945vZ9vzm1zXr1/3+v0i329LPn78WP9boG+rBcJ56o3Wcp4SERk1apRo2usLZcG4pxtKSEgwbDfW5ymXy6U/Xih3N3344Yf66wjnUqEQFelnBIUoZ1NpoBdpIerhw4cBl41Ff8iK48eP6+uGMz3ziBEjRNM0r99BDcSzcOX7JRbPC6YLFy4Mui33XesJCQmGqcIi7WdHUog6c+aMpcewsxDlfh369OnjNaWcFaEcq2d72bdvX9Btv3jxIuC4yPM1D/dLX5Fu0873miqFKKtt0K7PZzv66cHYeX6wux2HW4iycr0h0HGIhFaIivR587yLLNBMIbt379aXCzQ2BIDWQKXxSaQoREUonhd4f/nlF327BQUFcuXKFb85f/68vuzs2bODHlddXZ388ssvMmzYMK/9T0pKkt9++810Hc+L6WadqadPn+pTL33++eeGv2/dutXrcbKzsy0PukWsd7rtfN7cr0/btm2DDrjcP0JqZZDsvvX+o48+Cn7gflgpRFVUVMiAAQP0Y3zvvfckNzc3pDnQVeF+LRISEoJO1dbY2Kgf87Jlywx/t6ON5Ofn6/9/6tQpr+1/9dVXomlv7vx4+fKlPuXc5s2bvZb9448/9O0UFxeH9dxwnnqjtZynRN6cB6ZOnRrwebty5YrMnTvX72Ar1ucpz4sEoRTT//vf/1oaWKJ1i3chyo7PCApRzqbSQC+SQpQq/SErPH9b09/vZQbi/mLKf/7zH0vL79mzR38839/y9LxgauV3ZFavXu33syvSfnYkhSirn6N2FqK6dOmi91tCFcqxek4PXFJSYmn77pkKxo8fb/ib52u+YsWKkPfdTKjbtPO9pkohymobtPOcFWk/PRg7zw92t+NwC1GRHodIaIWoSB9v165d+t+uXr3qdxtr1qwRTXs9TbjVadwBQFUqjU8iRSEqQu4LvAMHDpSioqKg8f0gjeTiw/Lly0O6uOzO6NGjQzrG4uJivdPpzs6dOw3LuVwufboxs/l8PTtb/i6o//zzz/ot6p77u3///qAdCKudbjufN/frY2UqKfcFXrOp2nzFqhAlIvLkyRP9zgt3UlJSZOnSpQFvdw/G5XLJ7du3w0o4F6FDeS2CDWLsaCPV1dX6NGdfffWV1/bd543PPvtM/z/33SC+35pcsGCBaNrraRNC/Xap7+Nxnmo95ynPwWSoOX36tNe2Yn2e8vymbigXdNzfftQ0Te7fv295PbQu8S5E2fEZQSHK2VQa6EVSiOrevXvQZWPRH7LC87Mx2J27vqqrq/V1A0276+ns2bP6Or5fXPG8YPrrr78G3VawC7SR9LPDLUSFMsWtXYUoz3317N9aFcqxuqe01jRNnj17Zmn7Y8eO9fvceL7m/r7IFKpQt2nne02FQlQobdDOz2eRyPrpwdh5frC7HYdbiNq1a1dExyESWiEq0uetrKxMH2P7m8aytrZWn+XBrGgHAK2NSuOTSFGIipD7Am8ov4PhKZKLD+6pmDTt9W+kWE0431IT8f4B1c6dO0t1dbVhGc9bpX0vJLqnawg2zVRFRYWsXr1aunbt6tWB7Nmzp+n89W5WO912Pm+hXBxyX+CdMGFC0GVjWYhyO3LkiEyePNnrOU9ISJCZM2eGfFFA5HUnMZwBldng1opQXotggxi72sjIkSNF017Pke5WWlqqb9uzYOD+NnBCQoLXYKR3796iaaF/u9gT5ylvreE8dfPmTX25Dh06hPTc+X67O9bnqZKSEssDYU+eF2Fu3bpleT20LvEuRNnxGUEhytlUGuhFUohSqT8UzEcffaQ/TlNTU0jrevarzKYXNHP9+nV9nQ0bNnj9zfOCqdnvsPgKdoHWLZx+driFqFDOFaEUoq5cueK3r37jxo2QXwdPoRzrrFmz9GWtFhZmzJghmqZJmzZtAv4umJXX3IpQt2nne02FQlQobdDOc5ZbuP30YOw8P9jdjsMtRNlxngulEGXH43mOGT7++GO5fPmyvHz5Up49eyanTp2S9PR00TRNkpOTA/7OLgC0FiqNTyJFISpC8bzAu3TpUv0DOFY/wOj5jfUjR44Y/l5eXq5/Q8Xztuu7d+/q6/3www+WHsvlckleXp7hW4Tz5883Xd5qp9vO581JhSi3u3fvytKlS6VTp07685SamhryVCllZWXStm3bsLJ79+6QHkvE3kGMXW1k3bp1+mDB3YnesGGDXiTxHHSUl5cbBvf37t3T/y+c58SN85S31nCeevHihb7cF198YWlf/In1eerhw4f6vofyrej58+fr6z19+tTyemhd3sZC1AcffKBfAAtn3yhExZZKA714F6Ji9RnueWdAqF9+qqio0Ne12uf1/D0e34vS0SpEuYXSz1atEHX69GlDX9XN8860xYsXW358t1CO9bPPPtOX9f2NL3/c/bQ+ffoY/qZCIcrO91o0C1GRfp5Fuo7VQpRbqP30YOw8P9jdjt+mQpSIyA8//OD1mvomLS3NMEsEALRWKo1PIkUhKkLxvMC7Y8cO/YO2qKgorMcP1aFDh4JeqJ06dar+4e/m/rHeNm3ahHV3zenTp71+52b//v2GZax2uu183pxYiHKrqamRJUuW6M/V4MGDQ/6WaizZOYixq414zuF+/PhxERH9G1pmAyD336ZPny4iIr/99pu+/qNHj8LeD85TRqqfp0TenAc+/PDDkPfFU6zPU3V1dfoxzpw50/J+ul8TTbP+zVC0Pm9jIcr9mw4UoloHlQZ68S5Exeoz3PM9FeoXn5qamvQvl2RkZFhaJycnx+9xRbsQ5Waln61aIer333/X98ds9gL3tqL9G1Ged7ZfunTJ0vZ79uzpt0+lQiHKzvdaNAtRkX6eRbpOqIUoT1b66cHYeX6wux2/bYWoFy9eyJAhQ0TTXk9tn56eLpMnT5bs7GzJyclhLAHAUVQan0SKQlSE4nmB13N+823btoX1+KEqKirSH9Ps91dEXk894TuYHDhwoGiaJpmZmWE/dnl5uXTs2FE07fUt2L6sdrrtfN6cXIhy83xeVb613c5BjF1txOVySYcOHUTTNPn666+9vrVrdqfOxo0bRdNeTyPQ2NgoH3/8sX5xIhKcp4xUP0+JvJkHvmvXrhENpuJxnmrXrp1omibjxo2zvJ/uqSxTUlIsr4PWxwmFqD179uh/950K05fL5ZLExETRNKbmay1UGujFuxAVq8/wY8eOBf3cDsR9l0CPHj0sfV563jnt+8WTWBWi3AL1s2NRiHIXFqx8Xn/zzTcBC1HuL1T17Nkz5H5LKMfqeUfbjh07gm67oqJCL1aa3a2lQiHKzvdaKH3NWH+eRbpOJIUokeD99GDsPD/Y3Y7fpkJUdXW1DB48WDQtsllDAKC1UGl8EikKURGK5wXempoa6dKliz7wqqurC2sfQrFlyxbDxVtfTU1N+rd1Vq5c6TV3e35+fkSP774wO3HiRMPfPL9VVFJS4ncbdj5vb0MhynNgdOHChYi2FU12DmLsbCP/+c9/RNNef1Nr7969ommvf/OnoaHBsKzne+XcuXPSo0cP0TRNli9fHvbji3CeMqP6eUrkTWFS0zTZunVr2PsTj/OUeztdunQxzGFvpqmpSb8wMHz48KDLo/VyQiHqwoULAS/GevK8g4A7oloHlQZ68S5Exeoz/NmzZ5KcnCyapsmAAQOkubk5pPU9P/f/+OOPgMtWVVXpj5Wenm74e6wLUYH62S6XS9q0aSOapsm0adOCbiucc8XEiRMDnp/cmpqapH///gHPfStXrtT/vm/fPsv7IBLasbpcLnnnnXdE017f2R6svaxatUrfr6NHjxr+rkIhys73Wih9zVh/nkW6TqSFKJHA/fRg7Dw/2N2OQ3kPtfZClPuu1iFDhgTdFgA4gUrjk0hRiIpQPC/wioj8+uuv+of0okWL5NWr8Es3JgAAIABJREFUVwEfr6mpyXBR8N69e5b29datW/qUC507dw74DSt3B3jIkCH6dFddunTxu38NDQ1BL1bW19frHfSVK1ca/p6bm6s/F56/+2LGjudNpPUXourr64Nux3P+5XAG2LFi9yDGrjby888/68WnrKws0TRNZs+e7Xc77nOK53Qtp06dCnpMgXCeMqf6eaqhoUH69esnmvb6LqGrV68GXF5ETL+BHI/z1OLFi0O6eHr16lV9+aVLlwZdHq2XEwpRT5480f+enp7u97xQU1Mj7777LoWoVkalgV68C1Ei9vWHgvG8eP6///0vpHWrqqr0z6S0tDS/v7ficrlkwYIF+uOcP3/esIydF0zt6Ge7+wFJSUlBtxfOucLzd2rM7tZ385w6zl/Rorq6Wu+DpaWlycOHDy3vh0hox+r+zVVN02TTpk1+lyspKdG/6OKv8KBCIUrEvvdaKH3NWH+eRbpOoHOWHf30YOwuqNjZjkWsv4daeyHq66+/1sdHlZWVQbdnpra2Vr799lv5+OOPlf6yLQCIqDU+iRSFqAjF+wJvc3OzPg2CpmkydOhQOXz4sJSVlUlzc7PU1tbK7du35ciRI/Lpp59Kamqq1NbWem1j0KBB0rt3b/niiy8kPz9fLl68KOXl5VJfXy8PHz6UoqIi+fLLL/VvD7Zp0yboDz+Wl5frt467p3xYsmSJ3+WPHz8u/fr1k2+++Ub++ecfQ8epuLhYfy4SEhJMX+/bt297PabngL2hocHrAq0dz5tI6y9EjR49WqZPny6HDh2SJ0+eeHXeX7x4Idu3b9enYAjnW2OxZPeFF7vayJ07d/RtuN9DBw8e9Ltv7m+TJiUliaZp0r59e0sXMgLhPGVO9fOUiPcUgm3btpXVq1dLcXGxvHz5UpqamuTJkydy+fJl2bx5s4wePVpWrVpleMx4nKfy8vL0/bYyzdJPP/2kL3/48OGgy6P1ckIhSkRkxowZ+jIfffSR3L9/X/9bVVWVFBQUSO/evUXTNOnevTuFqFZEpYGeCoUou/pDwdTW1urvFU3TZM6cOfLXX39JTU2NNDU1yePHj+XUqVOSnZ1teiHz4MGD+rrdunWTP//8U79AWV9f7/UZrWn+fxPJzgumdvSz586dq2//q6++8vodKd/nOZxzRUlJid4vSU1Nlby8PP2ufZfLJbdv39a/SOW+U99fIUpEZPPmzfoyqampsmfPHrlz5440NzdLTU2N3LhxQ7Zv3y6zZs2K6FhdLpcMHTpUX37BggVSWlqq96PKy8tlx44den86ISFBrl27ZrrPqhSi7HqvhdrXjOXnWaTrBDpn2dFPD8bugoqd7VjE+nuotRei/v77b/3vHTt2lA8++EAyMjL0TJ8+Xb788kvZunWrPH361PQxPAu2/fr1C7pPABBPKo1PIkUhKkLxvsAr8no6i1mzZukfpJ4XLX3/T9M00wu8ZsuZJTk5WXbt2mXp2DIzM73WDTQ1wPHjxw2P1b17d+nfv79+YdmdzZs3+92Oe6DkTu/evaV3796SmJgoDx48sPV5E2n9haj333/f6xjbt28vaWlp0rVrV30A4+6chftto1iJxrQOdrQRkTfz77uf40AXaDx/30jTNJk8eXLwgw+C85R/qp+nRF5fXHOfEzzjnn7DM2bf7ozHecrzG7aB7gB0c09hqWmaVFVVBV0erZdTClEPHz6UTp06eb3/Onbs6PVeTUxMlLy8PP0bzxSiWgeVBnoqFKJE7OsPBXPjxg0ZNmyYYXuefVJN0+Tnn382XT8nJ0cv7LjTtWtXw+dlVlaW332084KpHf3ssrIyr2NKTk6Wd999Vzp37iwLFizwWjbcc8XSpUsNz3ePHj28HnfcuHHy7Nkz/f/8FaKamppk48aNhrbh++8uXbpEdKwiIk+fPpXRo0cbnmP3dGfu9OrVS86ePev3+FUpRInY914Lpa8Zy8+zSNcJVoiyo58eSDSm7rSrHYtYfw+19kKUiOizWQRLUlKSbNiwwbD+V1995XXOU3nmFwBQaXwSKQpREVLhAq/bgQMHJD09Xf/GjGcSExNl6tSp8vvvvxvmH87Pz5fZs2frUymYpWvXrrJ69eqQihFHjx7V1x86dGjAZSsrK2Xt2rX67eRmyczMDPo6NzQ0yJo1awyD0Hbt2vmdpiPc502k9Reijh07JtOmTTM8X56d9++++06eP38e9n7ESjTnF4+kjYh4DwaDzdnd3NwsXbt21ZffsmVL0P0LhvOUf63lPPXs2TOZN2+e9OrVy/Rx+/XrJytXrpRbt24Z1o3XeWrSpEn6cQV6TZ48eaKfrzIzM4M+Llo3pxSiRF7/cPjChQsNFwg7duwoEyZM0I8zPz9fNI1CVGuh0kBPlUKUW6T9IStevXola9as0fsunklISJCJEyf6/f1Hkdd3+MyZM8fwGZuUlCTvv/++FBQUBHx8Oy+Y2tXPLi4u9rprwp0vvvjCa7lIzhX5+fmmz/m7774rS5cu1ac6HjJkiGha8N8TunLliowfP16fTswzPXr0kK+++iqiY3VrbGyUn376yXTfe/fuLQsXLgz6/KpUiHKL9L0Wal8zVp9nka4T6JxlVz89kGj9hpwd7djNynuoNReibt26pd852KVLF8nIyJCFCxfKokWLZNGiRbJw4UKZMWOGjBw50qvg7/v7gZ77ZGXcAwDxpNL4JFIUohyoublZ7t69K6dOnZKLFy9KWVmZpam9mpqapKKiQkpLS+X8+fNy8uRJKS0tDftbjRcvXtQ/3Ldu3Wp5vWfPnklpaamcOXNGCgsL5d69e/oUEVY1NDRIaWmpnDx5UoqLiy0df7jPmxPU19dLWVmZXLp0SU6cOCFXr16VZ8+ehTXHv5O9zW3EbpynwjtPibyep//vv/+WM2fOyD///ON3yol4O3HihP7cBpr33nN+/HPnzsVuBxEXTuyzuVwuKSsrk7Nnz8rNmzcjugiP+HNiG7VbrPpDdXV1cvnyZTl9+rT8888/8uLFC8vr1tbWSmlpqZw+fVqfGi5e7OpnV1RUyF9//SXnzp2TsrKyqOzr8+fP5cqVK1JYWBjS8x3Iw4cP5fTp0/L333/r08wFE+qxtrS0SHl5uRQVFcmFCxds2/d4i/S9Fmpf0ymfZ3b00+PBznYci/NFrJWXl+t37y1YsEBevnwZcPmysjJ9StERI0YY/n79+nX5888/A/6mMACowEnjEwpRiJpFixbp39p69uxZvHcHAAw4T0VPS0uLfodVv379TC9mNDU1Sc+ePUXTNBk2bFgc9hKxRp8NqqONAgCgHvcsI71797ZcPFq2bJl+V2xrLawCgJPGJxSiEBWVlZXSoUMH0TRrvw8CALHGeSr6CgoK9LudzH63a/v27frfT5w4EYc9RKzRZ4PqaKMAAKjHPeXgzJkzLa/j/g28Hj16RHHPACC6nDQ+oRCFqPD8kdWSkpJ47w4AGHCeio1PP/1UNE2Tzp07e9119uTJE/23I7Kzs+O4h4gl+mxQHW0UAAD1jBs3TjRNk7Fjx1pavr6+Xv/drVmzZkV57wAgepw0PqEQBVu1tLTIr7/+ql/cnTp1arx3CQC8cJ6KrdraWn0Q+Mknn+j/P3v2bP2HjfmttbcHfTaojjYKAIB6Vq9eLZqmSZs2beTQoUMBl338+LFMmDBBH+8VFBTEZicBIAqcND6hEIWI/fDDD/L1119Ldna2/mOQ7tufnzx5Eu/dAwDOU3HW0NAgNTU1UlNTo/+f+9+t4cejYR/6bFAdbRQAAPVUVVXpvz+raZpMnDhRNm/eLPv27ZP8/HzZuXOnfPvttzJp0iRJSEjQl9uxY0e8dx0AIuKk8QmFKETM85sm7gwaNEiuXbsW710DABHhPAWogj4bVEcbBQBATeXl5TJz5kxp06aNYWznmTZt2khmZqacPHky3rsMABFz0viEQhQilpeXJ0uXLpWPP/5YVq5cKXl5eeJyueK9WwCg4zwFqIE+G1RHGwUAQG3l5eWyc+dOWbt2rSxYsEDmzp0rK1as0O+QevToUbx3EQBs46TxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxCYUoAAAAxAR9NqiONgoAAABAFU4an1CIAgAAQEzQZ4PqaKMAAAAAVOGk8QmFKAAAAMQEfTaojjYKAAAAQBVOGp9QiAIAAEBM0GeD6mijAAAAAFThpPEJhSgAAADEBH02qI42CgAAAEAVThqfUIgCAABATNBng+poowAAAABU4aTxiaMKUYQQQgghhBBCCCGEEEIIIU6JE1CIIoQQQgghhBBCCCGEEEIIUTBO4KhCVENDAyGEEEIIUTT02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQgghhBBCVAmFKMUwYCSEEEIIUT/02YjqoY0SQlRKfX29PH36VO7duye3bt2SmzdvRi23bt2Se/fuydOnT6W+vj7ux04IIYQQClHKYcBICCGEEKJ+6LMR1UMbVTuPHj2SgwcPysGDB+X/sXfm/zVc/x//o06EIMSeoNTSBVVLqCptfVRVqaLWVqtqaSktLaWqhMYarVBLYg1RUWSVRsjqRm5yv7W8vz/kMaf3JneZu58kz+fj8Xz0UTN35tyZMydnzuvOmfLy8qCXtycvXbokWVlZcubMmbiXBeNjY2OjlJWVRTV88mVZWZk0NjYGVd6OdP11Ri9cuCBZWVly9uzZuJcFERH/kyDKMLhhRERERDRf+mxoup2pjt6/f1/27t0rpaWlEdnen3/+KVlZWeJ0OqNW5pycHFFKiVJKDh06FPTy9uS0adNEKSXDhg2LyflDs2xubtYhVFlZmdTX10tTU1NU99nU1CT19fUe+w3myaiOdP11RqdMmSJKKRkxYkREtheLvwntxQcPHkhhYaHU19fHvSyI2P4kiDKMznTDiIiIiNhepc+GphvPOjp9+nQZMWKEvPfeezHbn1JKRo4cGfa2Ll26pAegDx8+HLUyE0RF5/yhedbU1OgwKNoBVGubmpp0GFVTU2P7cx3p+uuMRjKIitXfBFNtbGyUn3/+WcaMGSPJycn6WCilpGfPnvLSSy/JmjVr5PLly0yDiYgBJYgyDAY1EBEREc2XPhuabjzr6LBhw0QpJePGjYvp/rp37y6PHz/2uk59fb1UVFQE3NaBAwf0INumTZuiVmaCqODOX3vVbr3ryN67d0+Kiori9gRFfX29FBUVyb1792x/piNdfx3J+/fvS11dXcD1IhlExepvgonm5+fLkCFDPMInf548eTLuZY6ntPcYjHbbs44mQZRhMKiBiIiIaL702dB0O1MQtXfvXhk6dKhs3rzZ5zrz5s0TpZQ4HA6/26qurpYpU6bIuHHjpLi4OGplJogK7vy1V+3Wu45scXGxFBUVxfxpKMumpiYpKioK6nruSNdfR/Hu3builJI1a9YEXDeSQVSs/iaYZmVlpQwePFhfB6+99prs3r1bTp8+LTk5OfLbb7/J1q1bZcaMGdK1a1fp06dP0O9i62jS3qNdg2nPOpoEUYbBoAYiIiKi+dJnQ9PtTEFUIJ1Op6SkpBg1QEQQ1fE1sd7Fw6KiIikqKorY9q5fvy7Hjx+XvLy8qJWhI11/HcVt27bFJYjqrH7yySf6Gli3bp3fdWtra4O6HjuitPcYjMG0Zx1NgijDYFADERER0Xzps6HpEkT9Z25urh5QM2WAiCCq42tivYuHkQyinE6npKWliVJK9u/fH7UydKTrr6M4depUgqgY+vLLL4tSSgYPHsy7n2xIe4/BGEx71tEkiDIMBjUQERERzZc+G5quyUGUw+GQkpISKS8vb7Ps7t27cvDgQTl06JDk5eVJTU1NwP1VVFT43F5VVZXMmTNHDxDdvn1bSkpKPPRWtpKSElvvtKmtrZX8/Hw5fvy4HDhwQHJzc72Wo7WhBlGlpaU+v6svKysr9XeKxvRoTU1N8vfff8vBgwclKyurTdkCBVH+zp/78tbvUrh165b89ttvsmfPHjlx4oTfaaEePHggp0+fll9//VUuX74c8vuK6urq5MqVK/Lrr7/KwYMH5fz581JZWRl2vWttc3OzFBYWSlZWluzfv1+uX78uDQ0Ntspo1eHW70R69OiRnDp1Sn7++WfJzMyUW7duxaQ+RTKIOn78uCilpG/fvkEN9kYyiCotLZUjR45IVlaWFBQUBD3o7HQ6pbS0VM6fPy8ZGRny+++/B70dh8MheXl5cvz4cdm9e7ccPnxYLly44LUuBrPNSLbLkazT58+fl8TERFFKydKlS9tcS9XV1R7r+wqiHA6HXLx4Mai2OtDfhGget4qKCsnNzZV9+/bJgQMH5OLFi1JUVNTm+5eUlEQ0/HA6ndKlSxdRSsk777wTse2GWw/sHrNw/l40NjbKzZs3JSMjQ7KysgK21S5X8O19bW2t/nc770W02lxf77kL5Ttbn2ldp+vq6uTcuXOyZ88eOX36tBQWFkYliAzlOPsr9/379+Xo0aNy7NixgNf1vXv35NChQ3Lo0CG5fv26PHr0KOT9VlZWysmTJ2X//v2Sn59va3pKO+2Zex2xUz6XyyWPHz/Wn6mqqor4OYuUBFGGwaAGIiIiovnSZ0PTNTmIsgZ5k5KSpKmpSRobG2XFihXSp0+fNi8/T0pKkq+++srvC529DTo2NzfLsmXLpHv37gFfsO6tbP6ehHj06JFkZGTI5MmTfW5zxowZcvPmTZ9lDjWIeuutt0QpJV27dpUHDx4EPBdOp1MGDhwoSil58cUXI3qem5qaZO3atdKjR48233/gwIFy4MABcblcMmvWLL9BVKCnF6zl27ZtE5erZdDPOg6WiYmJXgeATp06JUOHDm1TvoSEBJk9e7Y8fPjQ1nfNycmRUaNGeT3XCQkJMmnSJKmvrw+53lk6HA5ZsWKF12OamJgoU6dODThgZ9Wd5ORk/W8ZGRnSt29fj+1t3LgxJvUpkkGU9SvyL7/8MqjPhRNEHT9+XBobG2X58uUyYMCANuelZ8+esnnz5oBBQEFBgaxatcprO6eUkj59+sj27dv9DkzX1NTIunXrfG4jISFBJk6cKLt27Qr62Ea6XY5Enc7NzZVXX3014LW0ceNGr23Gyy+/LC6XSy5evCjjxo3Tg7/uTpo0Sa5du2arLvhrqyN53AoLC+W9994L+L3dPXPmTESuMcv+/fuLUkpGjhwZke1Fom2zY6h/L+rq6mT+/PmSlJTUpnz9+vWTo0ePttlXqO39jz/+qP/9xo0bAb/T22+/LUopSU1Njdh3tj6zZcsWcblccuXKFXnllVd0AOnu2LFj5cKFCxGpB6EcZ2/f1Sr377//rvuc7qalpckPP/zgca7Wrl3r8d4zy5SUFPnll1/8Bm7Wfr///ntxuVrCJG99i65du8r8+fO9htbBtGdXrlzR/7969Wpbx3bXrl36MwcPHoxoexBJCaIMg0ENRERERPOlz4am2x6CKKWU5OXlyfTp0z0GBMaMGaMHwdwHC30NEngLMpxOp6Smpkpqaqr07NlTb2fQoEH63y19lc1XELVjxw6PsvXs2VNeffVVGTNmjCQnJ3v8e1lZWcBjEEwQlZWVpf/9xx9/DHguTp8+rdffvHlzxM7xw4cP9ZNO7gM/48aN8zjeX331lSxcuFCUCj+I+uKLL8ThcMiECRM8BtcSExPbhCJNTU2yfv16j/INHjxYXnvttTb1wd910tjYKGvWrJGEhASPbfXv399j8NGq66HWO5fLJfn5+TJixIg2ZR45cqTH4GCvXr38ThfnXncePXokx48f9yi/NQCYmZkZk/oUqSDq1q1bopSSLl26SGlpaVCfDSeIysrK8qjrvtqoN954w289ar3+4MGDZcKECW0GRleuXOl1Gw0NDR7hd3Jysrz66qsyadIkGTJkiEfIsmzZsqCPb6Tb5UjU6e+++05SU1Nl0KBBHt+79bW0fft2r23G5MmT5fjx47rOW23FqFGjpFu3bh7lysnJCXhcArXVkThuBQUFurxdu3aV999/XzZs2CCrV6+W9PR0j+0MGzZMpk+fLosXL5bCwsKwrzF33eva3bt3w9pWpNo2O4by96KgoMCjfN27d5dx48bJCy+84FHmxYsXe5y3UNv7aAVRwXxn6zMffPCBZGVl2bpG/vzzz7DOTajH2Ve5MzMzdbtntYf9+vXz2NaBAwfE6XTKggULPK7LV199Vb/Ty/Lbb78NWK8WL14sBw8elK5du4pSSrp16yajR49u8yOF0aNHt7kmg23PXnnlFVGqJaCz86SVdd579epl9PSQBFGGwaAGIiIiovnSZ0PTbS9BVK9evUQpJUuWLJH79+97rHfz5k0ZO3asXtfXO2ECBRmffvqp3kagKYDsBFFVVVUyZMgQ+eKLL+TWrVseyx4/fixfffWV3sbs2bND2o+v5Y2NjXoQw/q1vz/nz58vSrU8KeFrWp9QtMIlpZSkp6d7BG7Nzc1y7do1GTlypB5MtQZNQzl/1vJ58+bpp6tmzZolly9floaGBnE6nW2mJHMPC9966y2PqXqam5tl//79+pf5w4cP9znI891333kMLmZlZXk8OVReXi579+6V33//Pax6V19fr580SkhIkG+++cZjah2HwyHHjh3zGDi7dOlSwLqVkZEhSUlJ0qtXL9m7d6+uAzU1NeJwOGJSnyIVRC1fvlyf+2A/G04QZR3zxYsXS0VFhcd6rduo3377zec2165dK2+88YZkZma2mWrp+vXrMnz4cH1svQ1Ob9myRS/fsWNHmzrlcDjkxIkTsmDBArlz507QxyjS7XIk63RNTY1ex87TcFab0atXL0lISJDU1FQ5efKkx3Xe2NgoW7Zs0UHIqFGjvLYDwbTV4R63xsZG/cTEgAED5Pbt223WyczM1NvYsWNH2NeVLw8dOuTR9hUUFIS0nUjWAzsG+/fC4XDoNjA5OVn279/vMeXoP//84xFE79u3z+t+g2nvoxVEBfM30vpMz549JSEhQdLS0gJeIyNGjLA1laA3I3WcW5d7zJgxbermuXPndJ1LTEzUAe6bb74pxcXFHuueOHFC173k5GSf05ta+7V+bDR8+HC5cOGCOJ1OvU5paanMmDFDf4fXX3/d67bstmfuTzgdO3bM7/EtLCzU6y5ZsiTk6ycWEkQZBoMaiIiIiOZLnw1Nt70EUUr5f7KipKRE/yp36tSpXteJdRBlx4kTJ+pBi1D242/5unXr9LK8vDyfZaivr9e/0p4+fXrEzm9hYaEemJo8ebLPY/ro0SN58cUXdVnDDaIs169f7/cpjLq6Ov2r6GnTpvlc9+DBg3qb1pRG7lZVVUnv3r1FqZZfNwf7/p1g6p3701v+piYqKSnRU+yNHz/e63drfX0NGTLE79MS0a5PkQiiamtr9QBgKFOQhRNEKaVk06ZNfs+J1Ub5eyoqkGfOnNH7a/2Ej8vl0gOc06ZNC+tY2v3O4bbLkazToQZRSrU8TeDvfSmffPKJXtfb9GPBtNXhHrfLly/r7fz6668+t2OFDb6CiUj5xhtv6PIkJSXJp59+2mYgP5CRrAd2DPbvxdatW/W6ubm5XtdxOp36SZ6BAwd6nVrRhCDK7nf2do20fs+ar2vE1zEKZKSOs3u5X3zxRZ/H+rfffvM4JlOnTvV5TNx/uBLoB0/WefD1nkmn0+kxrebp06fbrGO3PautrdU/mJk5c6bf4/v111/rbYYT5MZCgijDYFADERER0Xzps6Hptpcgqk+fPj5v6C2tdx0MHjzY63ITg6hvv/1Wb8dbgBFOEFVaWqqnWvM3BZd70BLudEfuLl682O8gi7vuv+iNRBA1bty4gANs7gMy3p4osGxqatJ19YUXXmiz/IsvvrA1gOpLu/WusrJST/M3fvz4gNvdtGlTUAPjf/zxh9/tRbs+RSKI2rlzp64joQxQh/tEVKBqPSzfAAAgAElEQVR3+gRqo+zY3Nysp8fydh6s92ONGTMmrGNp5zuH2y5Huk6HE0QFmkLS/V0s3p7CCKatDve4/fLLL3pb/sJj9yc17bzbLVQbGhrk448/9mhPlGoJQ0+cOOHxRIs3I10P7BjM34vq6mr9NMy8efP8bjcjI0Nv13r/obumBFF2/ka2/oz1vqVQr5FARvI4u5fb37vwGhsbPaak9TX1plVPrfVav2/O2369/VDA3du3b+t109PT2ywPpj1btGiRKNUyJa37k92ttZ6o9dWPMkmCKMNgUAMRERHRfOmzoem2lyBq4cKFAbe3bNkyUaplWh9v08KYGES5D9pfv3496P0EWm49HdG7d2+f7wKwBjz9rROKo0eP1uFNoAGvurq6iAZRdp6Gef3110Wplqm2Aq37/vvv67rVum6MGzdODxgHGnANp96dPHlSr2fnBePV1dX6vRiLFy/2W3cmTpxoq6zRrE+RCKKsX8nv3LkzpM+HE0RFoo2yq9V2vvPOO22Wbdy4UZfp66+/DvmJkVh850jX6XCCqEDvE3MfhF63bp3f4xKorQ73uLk/PVRbW+tzG7/++qter/X0sNEwOzu7zVM3Vpv+008/eUxPFs16YMdg/l64v/PuyJEjftf9+++//dYTU4Iou0+MRvIaCWQkj7N7uVtPldra1NRUUarlab5AZbR+BPDRRx8FPF6+3v3prjXNoLd9B9OeXb16NWBg6B4UBgoVTZAgyjAY1EBEREQ0X/psaLrtJYhav359wO19+eWXev2ampo2y00Ioh4/fiyFhYVy/fp1uXTpkseg8bVr14LeT6DlWVlZfgf47t+/r6fPW7p0aUTPrzVVjLfBcm9av4SORBDlb3DW0preaebMmZKXl+fXDz/80OeAbp8+ffR2QjlOduud+7RA3kJLbw4ePFiU8v5ra/e6s3r1alvbi2Z9CjeIOnv2rCjVMs2lnfMfiTJEuo3y5YMHD+TmzZty9epVyc3NlSFDhohSSt5+++0261ZUVHhMdfnKK69IRkZGxELmSH7nSNfpUIOohIQEn+9/s2xoaNDb/vTTT/0el0BtdbjH7eeff/b7d8PSeg9ht27dAn6/SJqXlycff/yxnqLTcvLkyV6f1oh0PbBjMH8vfvrpJ71uVlaW378Vubm5et05c+a02ZYpQZTdNjKS10ggI3mcrXInJiYG/IGI9QMGX30Pd61+w3vvvef3eHXp0sVn8OruypUr9fdo/VR8sO2Z9d644cOHe12+YsUKXTZ/T02ZIkGUYTCogYiIiGi+9NnQdNtLELVnz56A2zMxiKqoqJDNmzfL66+/rl+K7Utv790JN4hqbGzUL/729q4R9wHAK1euROzcPnjwQG/XbiBhPUEVbhA1aNCggPuqra31ey786T7NoPtAUagv/rZb7/wNWPly0qRJPo9JsNdXtOtTuEGU9T4cf9MGRroM7sfw559/Dri+nSCqublZTp8+Le+//76MGDFCT1nmTV/hZ3l5uX7iz7J3796yatUqv1O5Bfudw22XI12nQw2iBgwYEHDdSAZR4R63oqIiPZ2YrynM6urq9JMeoYY14VpXVyfbtm3T7+JTquVddK1D0UjXAzsG8/fis88+C+lvxYQJE9psy4QgKphjZn1m4MCBYV8jsTzOwXxXK4iaPHlywHXtBlFpaWm2vrP79JlXr171WBZse+Y+xXHr92s1Njbq6/Ctt94K6ZqJtQRRhsGgBiIiIqL50mdD020vQZSdp45MCqKam5tl5cqVevogpVqmXhk2bJhMnTpV5syZIx999JGkp6fr5dEIolwuz2mcWr9A3ppWzs70dMFYUFCg92nn1/8u13/vtgk3iLLz7oNbt27p8vXs2VP69+9v23Pnznn9nqFMRRRMvXN/sbndpxuscKZLly5tpmgL9am+aNWncIKo0tJS/SRWOFOQhRNERaKNys/PlxdeeMFjkLV///4yduxYeeedd2TevHmyZMkS2y+mP3HihLz55pse20tISJDZs2fLP//8E9IxiuR3jnSdDjWIstNmRDKIikRdcR+0nzt3ruTl5Ultba1UVlbK6dOnZezYsaKUkh49evh9B14sLC0tlZEjR+rybtiwIar1wI7BnPs5c+Z4XI929XZ9RjOImjlzpq0gKpj3A0XyGonlcQ6m3FYQNWXKlIDr2g2i7Dxd5XK5ZO/evfo7nzx50mNZsO1ZbW2t/tvQevpP9+kvDx8+HPS5iYcEUYbBoAYiIiKi+dJnQ9MliPrPSAZRq1at0sunTJkif/zxh9cBNvdBiGhMzedytQwCWr+edx8AvHv3rv7s1q1bI3puHz58qLdt9wmV8ePHxyyIqq6u1uVbvnx5yN+zqqpKb+eTTz4JaRt2692SJUv0enan1bGeihk8eHBIdSeW9SmcIMq69r09pRXNMkSyjbpz5470799flFLSvXt32bRpk893slhPunibms+bd+/elVWrVklycrLef9++fb2G37H8zpGu050piHK5XLJ161aPkLG1w4YNkz///DOsayJSVlRU6HK9+uqrUa0Hdgzm3Lv/PX/w4EFYxyGaQdSECRNEKd9PAZkeREXyOMc7iEpOTrZVzk2bNunvnJ+f77Es2PbM5XLJ4sWLRamWALqurk7/+7x580QpJSkpKQHrnSkSRBkGgxqIiIiI5kufDU2XIOo/IxVEFRcX62Xp6eltXjTv7rZt26IeRLlc//1S2j3ksd5P1aVLl5CfjvCn9X6Qd99919b61pRvsQiiXC6XnqbmjTfeCOt79u7dW5SK/juiNmzYoNeze81ax9Tbdww1iIpWfQo1iHI4HHpw8Pjx42Gdy3gGUQsWLNDL3Kd/9KZ1bdkNoixramr0e0KUanlyzc57TKL1nSNdpztbEFVdXa2nNJ04caKMHTtW3nzzTVm2bJns3bs3pu+FsuNLL72kg1b3p5giXQ/sGMy5d5/y7MKFC2Edg2gGUdZ7s9prEBXJ4xzvIEopJfX19QG398knn+j1q6qqPJaFEkTl5eXpzxw4cEBcLpc8evRIPykVztS1sZYgyjAY1EBEREQ0X/psaLoEUf8ZqSDq4MGDbQYCfPnxxx/rdaM1NZ/L1TJFV+v9WIMvoQYogbQGSH29ONvdxsZGPbVarIIo6x0j/fv3D2vA1poCa9CgQSFtx269O336tF5v165dAbf7zz//6CeXvD2tFU4QFY36FGoQtX//flGq5cmIYEOVcMsQyTbKag8DTelUVlamtxGJ8DPYadsi+Z0jXac7UxBVVVUlo0aNEqWU/Prrr2HV+1g5bdo03eZGsx7YMZhzf/bsWV2+H3/8MaxjEEw/Y9++fXpd9ylhvdnY2KinAm6vU/NF8jibEET99ddfAbf36quvilJKevXq1WZZKEGU+zatvw+HDh3y2880VYIow2BQAxEREdF86bOh6RJE/af7r7JbT5ESTNk2b96sl7V+YbS7DodD/4I52kGU0+nUvyD//PPP5ebNm/pzR48ejcr5Xbp0qd7HmTNn/K574MABvW6sgij3KXG2b98e8vf8/PPP9XYOHjwY9Oft1rvGxkZJSUnRx6ipqcnvdr/44gu93d9//z3kuhOr+hRqEGW9l2rz5s1h19l4BVHNzc3StWtXUSrw9ILuTw2EGkS5D/j6a6Oi+Z2jUafdA207T2K25yDKmtZ19OjRYdf7WOh+rlvX20jXAzsGc+5ramqkT58+olTLDw7sPOniy2D6Gbm5uXrdX375xe+67qFVe30iKpLH2YQgauXKlbbP76xZs9osD7Y9s/z5559FKSWJiYlSVVUls2fPbldthSVBlGEwqIGIiIhovvTZ0HQJov4zIyNDf771y9SDKduxY8f0sm3btvnchvsvo6MdRLlc/w2AjR49Wk+j1qdPH59TB2ZlZcn06dNl+vTpIQU1paWl+hfakyZNkkePHnldr66uTv+yP5ZBlMPhkKFDh4pSSnr37u11asTWenviqaqqSk/PN2zYMJ/v9fFlMPXu66+/1uv6ew9Tfn6+fh+Qr2AjnCAqlPoUyFCCqKtXr4pSSrp16yaVlZUh7TecMkSyjbKmLevXr584HA6vny8tLfV4z5O3IMrXdeau+7uFamtrgzpGkW6XI1mnXS6XvqaTkpICHov2HEStWbNGlGp5kiKcup+TkyNz5syRTZs2BT3wX1lZ6XPawNa6vwfqu+++i3o9CGSwfy/27Nmjy7do0aKA7ZzT6fSYftAymPa+vLxcrzt27Fiv23O5WgKc4cOHt/sgKpLH2YQgqmfPnlJYWOh1vdraWv1OL3+hZDDtmfu2relbDxw4IN27dw/YHzVRgijDYFADERER0Xzps6HpEkT95+3bt/V0P4MHD5aCggK9zOFweIQQ/spWXl6ub/yTk5Plp59+krKyMnG5WoKMGzduyFtvvSVKKY8AJtpBVFlZmcf3U0rJihUrfK7v/i6ZnTt3hnSO3d9/MGbMGLl8+bKejqimpkZOnTql68GAAQNiGkS5XJ5TzCUmJsratWvlypUrUltbK06nU8rLyyUvL0++//57mTBhgnzxxRdet/P999/r7fTt21f27dsnd+7ckaamJqmtrZWCggLZsWOH18GrYOpdY2OjvPzyy3pfCxculJs3b+p1ysrKZNeuXZKUlCRKKUlISPA5wBVuEBVsfQpkKEHU/PnzRSkl8+fPD3m/4ZQhkm3UqlWr9LJ33nlHzpw5o89rVVWV7Nq1S1JSUqR79+4yZMgQn0HUhAkTZNasWXLs2DEpLy/3GKStrq6WHTt22H76KtrfOdJ12uVyybx58/S21qxZ4zFdY11dnce67TmIunTpkl6enJwsEyZM0D8cmD59usyaNUtWrlwp27dvl/v37/vcjzXQrZSSjIyMoOrCoUOHJDExUaZNmyY//vijnD59WgoKCqSqqkqqqqrk5s2bcuDAAf3UolXnvAX6ka4HgQz270VTU5OehlUpJS+99JIcP35cioqKpKmpSerq6uT27dty4sQJ+fjjj6Vv375t6pvLFVx773K5ZNasWXqf7733nhQXF+tlDx8+lKysLElLS/P4G9qeg6hIHed4B1G9evXS/923b59UVFSIy+WSx48fy6VLl/T0eUp5fxrKMpj2zF0r+LX+NicmJvptB0yUIMowGNRARERENF/6bGi6BFGeLl68WG9DKSVpaWmSlpYmiYmJUlJSYrtsO3bs8NiONSBgPSGklJLp06fLw4cP9aBUtIMol8slM2fO9CjT9evXfa5rvUNJKSXl5eUhneO6ujqZO3euxz4TExOlf//+Hv+/f/9++fbbb2MeRLlcLjl8+LAeXHLXmhLH3dWrV3vdhtPplE2bNnmcX+u7uf9/nz59wqp3LpdL7t+/7/FLaqVafi1tTW1lmZqaKmfPnvX5vcMNooKtT4EMNgSqrKyUbt26iVJKrl69GvJ+wylDJNuo2tpaHTBZ9urVS/r166f/v1u3bnL69Gn9NIy3IMp90N+qG8OGDZP+/fvrtkYpJUOHDg3pSZpIt8uRrNPWObSCNqWUdO/eXYYPHy4pKSny0UcfeazbnoMol8uln0QMZFJSknz99ddtPl9XV+dRJ3y1b750f/eMHcePHy8PHz70ub1I1oNAhvL3orKyUt57770236t1O2/pKygIpr1v/RSkUi3Bo/vfrK5du8pvv/2mnyprz0FUpI5zvIOot99+Ww4fPqx/lKSUkpSUFB2kWs6cOVOqqqp87i+Y9szdvLw8j/288847YV0v8ZAgyjAY1EBEREQ0X/psaLoEUZ46HA756quv2gx4dOvWzSOMsVO2I0eOtBlYTkhIkBEjRsiWLVv0L59Hjx4tSsUmiPr999/1+i+//LLP9ZqamqRHjx6ilJLXX3897HO9c+dOj6mDrAHGiRMn6gHFo0ePilKxD6JcrpaBr/nz50tqaqrXga6hQ4fK559/Ln///bff7eTl5Ul6enqbgUOllAwcOFDWrFkTVr2zbGhokB9++EFfQ60HNRcuXOh3cCuUuhNOfbJjsCGQ9S42X+1HLMoQ6Tbqn3/+kYULF3qEA0q1TB351ltv6acnrGvFWxD1xx9/yLvvvusxeOnugAEDZPPmzQHrR6y+cyTrtOWVK1c8nq6xXL58ucd67TWI+vvvv2XMmDGiVEu4PX36dFm4cKEsWrRIFi1aJAsXLpT//e9/8tprr3nUpQMHDrTZj/tUYufPnw+qLpSXl8u6des8nu7wFh5MmjRJTp06ZWubkawH/gzn78WhQ4dkzJgxbUIFpVpCoZkzZ8q+fft8vusq2Pa+oqJCFi5c2Gb95ORkmTJliuTk5IjL9V+70N6DqEgc53gHURMnThSXq2UqycmTJ+v+lOULL7wgmzZt8jndort227PWWm2EUkqOHTsW9vmItQRRhsGgBiIiIqL50mdD06WOetfhcEhBQYGcOnVKrl69antu/tY2NzdLeXm5nD9/XvLy8ny++yVWuk/n5O+9Tzdv3tTr7dixI2L7r62tlQsXLsiNGze8Ts9kgjU1NXLp0iU5c+aM/PXXXyFPZ1NaWiqnT5+WS5cu6WmFIl3vmpubpaysTC5cuCC5ublSXV1tZH2yYzAhkNPp1NNR7d+/P2LfJ5TpAaPho0eP5K+//pIzZ87oaT2D1eFwSFFRkVy+fFmys7Pl2rVrUllZaWvgM55Gsk7/888/kpOTI+fOnTPivEbCsrIyHXR/9NFHAd/xVVhYKAMHDvQZ2tbX18uhQ4fkzp07YZWrtrZWCgsLJS8vT06dOiUXLlyQe/fu2Wr3ol0PomVTU5PcvXtXt/OFhYVB/Y0Ptr1vbGyUoqIiOXv2rNy6dSvkY9veDPc4x1IriBo9enSb73Dr1i3JyckJuS4H255Nnz5dlGqZLtjU/pY/CaIMw5QbxtraWrl48aLs2bNHfv75Z7l48WLM/kBcuHBBsrKywn4kFxERETFamtJnQ/QldbRzuWjRIv0rdX/Tcu3evVuUapkGxsQBQDRDu/XJjsGEQMePH9cDbNY7xyKhKUEUoi+tad3S0tJs1/1PP/1UP4XaWcILxHgYzpN2kbS0tFQ/Dblq1aq4H5dQJIgyDBNuGI8dO+ZzLu0HDx5Eff+mXOCIiIiIvjShz4boT+po57GyslJ69uwpSimZM2eO33Xnz58vSilZtGhR3MuNZhpMfbJjMCHQ//73P+nVq5esX78+ot+JIApN15qia/bs2bY/s2rVKj09aLzLj9iRNWWc2nqPoFJKT+na3iSIMox43zBmZWXpSt2jRw+ZMmWKpKenS69evWTy5MkxKUMsLvDm5mZ57733ZMSIETJ//nyPZenp6TJixAgZM2aM/rfy8nIZMWKEjBgxQpYsWWJ7P6dPn9afcz+vwewjNzdX//vFixfjVjcQERHxP+PVZ5s0aZLuF7T2+vXrUlBQ4HN5JN+3geYb7/sKjJ3uL/++fv2633WHDh1qaz3svAZTn+xoQghkQhkQ/Tl58mRRStked3M4HPp9S77ea4OIkdGEICo/P1+/T+zdd9+N+zEJVYIow4jnDWNTU5OMGjVKlFKSmpoqhYWFHssDzVEbKWNxgf/444/6Ka/8/HyPZdYvUQYPHuzx3a3O+Lx582zvx+rEDxw4UJxOZ8j7mDlzpijV8oLf+vr6uNQPRERE/M949dkGDBjg88XRFy9elGvXrvlc3rt377gfN4ydBFEd3+bmZtmzZ4++xmfOnBnwM6WlpVJaWhr3sqN5hlKf7FhcXGz7XVrRsKmpSYqKiqS4uDjuxxjRl19++aUeozp27JjfdcvLy/W4mVJKsrKy4l5+xI5svIOoyspKeemll/Q1f/Xq1bgfk1AliDKMeN4w5ufn60r9/fffx61SRvsCv337tiQlJYlSSj777LM2y6dOnSpKKXn11Vc9/r1r166ilJKVK1fa2s/Dhw/1Zz7//POw9lFSUiLdu3cXpZQsW7YsbucGERERW4x3EPXyyy/LwYMHPaysrJSqqqo2/z527FiCqE4oQVTHdOvWrbJmzRpZtmyZDBo0SN+/DRo0SMrLy+NePmxfxqI+3bt3T4qKiuL2g8r6+nopKiqSe/fuxf14I/ry4cOHMmLECH0NTp06Vb7//ns5ePCgHD16VHbt2iUbN26UadOm6XfEKKVk165dcS87Ykc31kHU33//LcuWLZP169fL1KlTpUuXLvqa37hxY9yPRzgSRBlGPG8YrReDKqXk0qVLcauU0b7AraeLevfuLXV1dW2Wv//++6KUkmnTpnn8u9Ux/+abb2zt56effvI5d2co+1i3bp3e3s2bN+N2fhARETH+QdRbb71l+zOzZs0iiOqEEkR1TN1/BW85cuTINrM8INoxFvWppqZGioqKpKysLOZPRTU1NUlZWZkUFRVJTU1N3I83oj9LS0tl9uzZHoPO3uzSpYu8/fbbcurUqbiXGbEzGOsgKicnp811n5iY2OYhh/YoQZRhxPOGcfv27bqCt56WL5ZG8wK/e/eu/o6rVq3yus6yZctEKSVz5871+HdrOj27vzgZN26cKKU83gMVzj7u3bunOyS8XBgRETG+EkSh6RJEdUwzMzNl1apVMnfuXFm9erX89ttv0tjYGPdyYfs0FvWpublZh0FlZWVSX18f9UCqqalJ6uvrPfbb3Nwc9+ONaMfS0lLZtWuXrFu3ThYuXCjz5s2T1atX6yekeLoPMbauW7dOZs2aJcuXL4/J/srLy2XDhg2ycOFCWbhwoWzZskVu374d9+MQCQmiDCNeN4zNzc3y2Wef6ZDm8uXLUlJSovX26yGHwyF5eXly/Phx2b17txw+fFguXLgglZWVYZXFbhAVyv6XL1+uv6Ovi3jDhg2ilGrTwFjT6R05ciTgdygoKND72bFjR8T2YQ0kJSUlyYMHD+LegCAiInZWCaLQdAmiENEUGxsbdSgUa8vKyghrERERDZAgyjBifcN47do1WbJkiQwcONDvo79btmzRn6mpqZF169ZJnz59vK6bkJAgEydODHmu2kBBVKj7dzgc0rNnT1FKSXp6us/979ixw+u8m9Z0eufOnQv4HdasWSNKKenatavXwCjUfZw6dUp/z++++y7uDQgiImJnlSAKTZcgChFNsrm5WWpqauTevXtSXFwc1fCpuLhY7t27JzU1NTwJhYiIaIgEUYYR6xvGTZs2SWpqqqSmpkpycrIOOQYMGKD/PTU1VYc6DQ0NMnnyZL1ecnKyvPrqqzJp0iQZMmSIJCYm6mXLli0LqUz+gqhw9n/u3Dm9bOvWrT73/9tvv3l9ksmaTu+vv/7yW36n06nf9fS///0vovtoaGiQbt26iVJKpk+fHvcGBBERsbNKEIWmSxCFiIiIiIimSBBlGPG8Ydy0aZMOasrLy72us2XLFv3U0Y4dO6ShocFjucPhkBMnTsiCBQvkzp07IZXDXxAVzv43btyov9/Fixd97r+0tFR2797dZuq+K1euyO7du6W2ttZv+d2fWsrKyor4PiZNmiRKKenZs6c4nc64NyKIiIidUYIoNF2CKERERERENEWCKMMwPYiaMWOGKKVk2rRpUSuHvyAqnP1b71/q1q1bmwArks6dO1eUUtKvX7+ozEVtTfunlJK8vLy41BVERMTOLkEUmi5BFCIiIiIimiJBlGGYHkRZYc6YMWOiVg5/QVQ4+09JSRGllIwbNy5qZa+urpakpCRRSsmqVauiso+jR4/q87Rnz5641BVERMTOLkEUmi5BFCIiIiIimiJBlGGYHkS5T2/39ddfR+XFn/6CqFD339jYqD83c+bMqB3DPXv26P3k5+dHZR8XLlzQ+9i0aVNc6goiImJnlyAKTZcgChERERERTZEgyjBMD6IqKirkxRdf1Ou98sorkpGRIQ6HI2Ll8BdEhbr/yspK/ZmPPvooasdwwoQJopSSl19+OWr7uH37tv4un332WVzqCiIiYmeXIApNlyAKERERERFNkSDKMEwPolwul5SXl8vrr7+u17UGNlatWiWFhYVhl8NfEBXq/v/++2+97urVq6Ny/O7cuaP3sW3btqidJ/dQbcGCBXGpK4iIiJ1dgig0XYIoREREREQ0RYIow2gPQZTliRMn5M033/QIhBISEmT27Nnyzz//hFyOQEFUKPvPz8/X66xduzYqx2/dunWilJLExES5f/9+1M5TbW2t/i7vv/9+XOoKIiJiZ5cgCk2XIAoREREREU2RIMow2lMQZXn37l1ZtWqVJCcn68/37dtX8vLyQiqH3SAqmP2XlpbqZUuWLIn4sWtqapK0tDRRSsnbb78d1fNUXFysv8vSpUvjUlcQERE7uwRRaLoEUYiIiIiIaIoEUYbRHoMoy5qaGlmxYoXexqhRo8TpdAa9nWCDKDv7r6+v1/8+e/bsiB+7s2fP6u0fPXo0qucpLy9P72vdunVxqSuIiIidXYIoNF2CKERERERENEWCKMNoz0GU5aeffqq3c/v27aA/H2oQFWj/3bp1E6WUTJ48OeLHbv78+aKUkpSUFGloaIjqecrOztbf74cffohLXUFEROzsEkSh6RJEISIiIiKiKRJEGUZHCKLcnw7Kzc0N+vPhBlG+9j9y5EhRSkmfPn2kubk5YsettrZWunfvLkopWbZsWdTP09atW/X3O3HiRFzqCiIiYmeXIApNlyAKERERERFNkSDKMEwPoh49ehRwO+5BSW1trceyuro62bhxo8ydO9dnSOUviApn/5988on+94KCgogdt3379untXr16Nern6e2339b7q6qqiktdQURE7OwSRKHpEkQhIiIiIqIpEkQZhulB1IQJE2TWrFly7NgxKS8v93iyqLq6Wnbs2CFdu3YVpZRMnTq1zef379+v9zF06FCv+/AXRIWz/8zMTL3v3bt3R+y4paeni1JKRo4cGfVz1NzcLCkpKaKUkpdffjnuDQgiImJnlSAKTZcgChERERERTZEgyjBMD6LGjRun1wDdm+8AACAASURBVFFKSVJSkgwbNkz69+8vCQkJHiFTZWVlm8+vWbNGr5OQkCA1NTVt1vEXRIWz//Lycr18zpw5ETlmRUVFeptbt26N+jm6fv263t/KlSvj3oAgIiJ2Vgmi0HQJohARERER0RQJogzD9CDqjz/+kHfffVc/ddTaAQMGyObNm31OGZeTk6PXnTJlitd1/AVR4e5/2rRpopSSbt26eQ3KgnXjxo2ilJIuXbqE9V4tuy5btkx/17y8vLg3IIiIiJ1Vgig0XYIoREREREQ0RYIow2gvN4wOh0OKiork8uXLkp2dLdeuXZPKykqPqfJ8eePGDTl69Kg0NDTEfP/Z2dkxfYIpktbV1UlycrIopWTy5MlxLw8iImJnliAKTbe93FcgIiIiImLHlyDKMLhhjK7Nzc0ycuRIPX1fU1NT3Mtk1927d+sQLSsrK+7lQURE7MwSRKHpxquOPnjwQLKysiQrKysmMwYgIiIiIqL5EkQZBkFU9M3KytKBzs8//xz38tixvr5e0tLSRCklEyZMaFcBGiIiYkc03kHUpEmT5Pbt2x46HA5xOBxt/v2NN94giOqExquOuk/FfejQIa/r/Pnnn5KVlSVOpzPuxwkREREREaMvQZRhEETFxo8//liUUpKSkhKRd0VF29WrV4tSSnr27ClFRUVxLw8iImJnN95BlDcvXrwo165d87mcIKpzaWoQdenSJb388OHDcT9OiIiIiIgYfQmiDIMgKjbW1dXJsGHDRCkl8+fPj3t5/Hnjxg1JTEwUpZTs27cv7uVBREREgig0X1ODqAMHDujlmzZtikoZ6uvrpaKiIu7nABERERERWySIMgyCqNjpcDikpqZGampq4l4WfzY0NLSLciIiInYm49Vnq62t1f2C1jqdTnE6nT6X19bWxv24Yew0NYiqrq6WKVOmyLhx46S4uDgqZZg3b54opcThcMT9PCAiIiIiIkGUcRBEISIiIpovfTY0XVODqGjrdDolJSWFIAoRERER0SAJogyDQQ1ERERE86XPhqbbWYOo3NxcvX+CKEREREREMySIMgwGNRARERHNlz4bmq6pQZTD4ZCSkhIpKSmR+vp6v9sqKSmRs2fPyr59+2Tv3r2SnZ0tN2/elKamJq/rV1VVyZw5c/T+b9++rfdlGe/zgoiIiIjYGSWIMgwGNRARERHNlz4bmq6pQZSdJ6bOnTsnU6dO1eu1tn///rJ48WK5e/euuFwuaW5ulmXLlkn37t19fsYy3ucFEREREbEzShBlGAxqICIiIpovfTY03fYaRP3+++/SpUsXvc6wYcNk4sSJ8sorr+h3PymlJDExUcrLy8XlankvVGpqqqSmpkrPnj31OoMGDdL/bhnv84KIiIiI2BkliDIMBjUQERERzZc+G5puewyiGhsbdZA0duxYuX37dpvPFxYWytatW2XDhg1e9//pp5/q7Tc0NMT9PCAiIiIiIkGUcTCogYiIiGi+9NnQdNtjEHX16lW97OLFiyHtnyAKEREREdE8CaIMg0ENRERERPOlz4am2x6DqNzcXL3s999/D2n/BFGIiIiIiOZJEGUYDGogIiIimi99NjTd9hhENTQ0SFJSkiilZMSIEXLnzp2g908QhYiIiIhongRRhsGgBiIiIqL50mdD022PQZTL5ZLt27fr5UlJSbJs2TIpKCiwvX+CKERERERE8ySIMgwGNRARERHNlz4bmm57DaJcLpfs3LlTunfvrtdTSsmECRPk0KFD0tjY6Hf/BFGIiIiIiOZJEGUYDGogIiIimi99NjTd9hxEuVwuqaiokLVr10r//v09AqlBgwbJvn37fH6OIAoRERER0TwJogyDQQ1ERERE86XPhqbb3oMoy8bGRsnMzJTXX3/dI5BasGCB1/UJohARERERzZMgyjAY1EBEREQ0X/psaLodJYhy9/Tp0zJs2DC/nyeIQkREREQ0T4Iow2BQAxEREdF86bOh6XbEIMrlcklZWZkkJyeLUkrmzp3bZjlBFCIiIiKieRJEGQaDGoiIiIjmS58NTbejBlEul0smTZokSimZOnVqm2UbNmzQ28/Pz4/7eUBERERERIIo42BQAxEREdF86bOh6bbHIMrhcEhzc7Pf7TscDunTp48opWT16tVtlmdkZOjtb9iwIWBZ58yZI5s2bZL6+vq4nzNERERExI4qQZRhMKiBiIiIaL702dB022MQdfLkSRk6dKhs3LhR/vrrL3n06JHH8itXrsiUKVNEKSUJCQmSk5PTZvu3b9+WhIQEUUrJ4MGDpaCgQC9zOBzS2Nio/3/o0KG6LBkZGXE/Z4iIiIiIHVWCKMNgUAMRERHRfOmzoem21yDKWmY5YMAAeeGFF6RHjx4e//7999/7LMPixYs91k1LS5O0tDRJTEyUkpIScblcUldXpwMrX09XISIiIiJiZCSIMgwGNRARERHNlz4bmm57DKIqKytl3bp1Hk8qtXbmzJlen4Ry1+FwyFdffSWJiYken+3WrZuUl5fr9aynq5RScv78+bifM0RERETEjipBlGEwqIGIiIhovvTZ0HTbex2trKyUmzdvypkzZ+TcuXNSWFgoDocjqG04HA4pKCiQU6dOydWrV9tM9VdfXy+HDh2SO3fuxP37IiIiIiJ2ZAmiDKO93zAiIiIidgbps6HpUkcREREREdEUCaIMgxtGRERERPOlz4amSx1FRERERERTJIgyDG4YEREREc2XPhuaLnUUERERERFNkSDKMLhhRERERDRf+mxoutRRREREREQ0RYIow+CGEREREdF86bOh6VJHERERERHRFAmiDIMbRkRERETzpc+GpksdRUREREREUySIMgxuGBERERHNlz4bmi51FBERERERTZEgyjC4YUREREQ0X/psaLrUUURERERENEWCKMPghhERERHRfOmzoelSRxERERER0RQJogyDG0ZERERE86XPhqZLHUVERERERFMkiDIMbhgRERERzZc+G5oudRQREREREU2RIMowuGFERERENF/6bGi61FFERERERDRFgijD4IYRERER0Xzps6HpUkcREREREdEUCaIMgxtGRERERPOlz4amSx1FRERERERTJIgyDG4YEREREc2XPhuaLnUUERERERFNkSDKMLhhRERERDRf+mxoutRRREREREQ0RYIow+CGEREREdF86bOh6VJHERERERHRFAmiDIMbRkRERETzpc+GpksdRUREREREUySIMgxuGBERERHNlz4bmi51FBERERERTZEgyjC4YUREREQ0X/psaLrUUURERERENEWCKMPghhERERHRfOmzoelSRxERERER0RQJogyDG0ZERERE86XPhqZLHUVERERERFMkiDIMbhgRERERzZc+G5oudRQREREREU2RIMowuGFERERENF/6bGi61FFERERERDRFgijD4IYRERER0Xzps6HpUkcREREREdEUCaIMwzohiIiIiIiIiIiIiIiIHcWOAEEUIiIiIiIiIiIiIiKigXYEOlQQBQAAAADmQp8NTIc6CgAAAAAAptCR7k8IogAAAAAgJtBnA9OhjgIAAAAAgCl0pPsTgigAAAAAiAn02cB0qKMAAAAAAGAKHen+hCAKAAAAAGICfTYwHeooAAAAAACYQke6PyGIAgAAAICYQJ8NTIc6CgAAAAAAptCR7k8IogAAAAAgJtBnA9OhjgIAAAAAgCl0pPsTgigAAAAAiAn02cB0qKMAAAAAAGAKHen+hCAKAAAAAGICfTYwHeooAAAAAACYQke6PyGIAgAAAICYQJ8NTIc6CgAAAAAAptCR7k8IogAAAAAgJtBnA9OhjgIAAAAAgCl0pPsTgigAAAAAiAn02cB0qKMAAAAAAGAKHen+hCAKAAAAAGICfTYwHeooAAAAAACYQke6PyGIAgAAAICYQJ8NTIc6CgAAAAAAptCR7k8IogAAAAAgJtBnA9OhjgIAAAAAgCl0pPsTgigAAAAAiAn02cB0qKMAAAAAAGAKHen+hCAKAAAAAGICfTYwHeooAAAAAACYQke6PyGIAgAAAICYQJ8NTIc6CgAAAAAAptCR7k8IogAAAAAgJtBnA9OhjgIAAAAAgCl0pPsTgigAAAAAiAn02cB0qKMAAAAAAGAKHen+hCAKAAAAAGICfTYwHeooAAAAAACYQke6PyGIAgAAAICYQJ8NTIc6CgAAAAAAptCR7k8IogAA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47W+jRs36v3YsWNHR/vi8ePH+qnRoUOHOtp3bTERZe1DpZQcPHjQ5zLnzp3Tvxe+TE1NlUWLFklJSYnjcp2W7/Y1xSmc863P+YsXL8qLL74Y9HzfsGGDz3I45wM7ZcoUUerZ6yOiec4DAPiCRJRhxPqAXL9+XRYvXqx/CP25detW/Z36+npZt26dz6DMCiImTpwY9p22wYKocMtvbm6WlJQUUUrJlClT/Ja/fft2n4GNdQfe+fPng27D559/HjAYCbcMe8f+22+/DVoPAAAAiA6mJ6LCiTVu3rwpy5cv9xtj9e7dW77//nv577//XCvTgkSU+8SrjW7atEkfy6NHj4a1jszMTL2O3bt3t/rcPqh87do1mTFjhv67V69ekpGRIc8995xX+500aZI8ffrUZ3n++h+jR48WpZT06dMn4JMCFuPHjxelnk0B7vQpKova2lr91INl//795aWXXtJ9GKWUfPHFF/LBBx+4Mii9evVqaW5ulgkTJngNRicnJ7caIH3y5IlONlsOGDBA/ve//3nVLy0tTXJzc/1u56NHj+Tzzz+XpKQkr3U999xzXgPHL730kog8G7RNT0+X9PR0r3L69eun/2/Zkvz8fBk+fHirOg8fPlzPNGEdrwMHDvits729NTc3y5EjR7zqb71/OCsrS44ePRrStezMmTN6+S1btgRdXiQxE1HHjx/3OiaDBw+WiRMnyujRo/V7waz2GcqTJ07Ld/ua4gTOed/n/Lfffivp6eleY1TdunVrdb5///33rcrinA+s9V74Dh06SHFxMYkoAIg5JKIMI9YHZNOmTfqHvHv37voHsW/fvl4/8jt27BARkX///ddrqo3u3bvLmDFjZNKkSfL888/rR6eVUrJ06dKw6hQoiIqk/PPnz+vP7Im1lmRlZYlSrZ9ksqab+eeffwLW336Hy+zZs10t499//5VOnTqJUkpmzJgRsB4AAAAQPUxPRIUaazx69EhSU1NbDd5MmDBBBgwY4PV/f9MbRxJDkYhyn3i1UWvAVKnwp/u+du2aXsfq1atbfW4fJOzRo4copWTRokVSVVXltdzNmzclIyNDL5uZmemzPH/9jx07dujvHj58OGCdy8rK9LKLFy8OcYu999uUKVO83o/19OlTuX79uh5g7dixoyuD0vPnz9dPWrz55puSm5sr//77rzx+/LjVLBNWotm6/tin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kTt37sjLL7/stQ9TU1O96tStWzfJyspyZZs9nmc3BmzYsKHV9aLl37169Yq4rJqaGq+pBa1y7NuYnJwse/bska+++kqUcj8RdeXKFV1WoKcM0LnxHuR3ajQSUR5P5NdAt67FO3fubHXepqamtqrHwoULwx6kbqua0Eb9XWv9mZKSIrt373a07uLiYv00hv23wt4uO3bsKPv27dNPeASa/s5pDGpvmydOnAj798vusmXLvL6TlJQkffv29dpvEydOlIqKCv0/f4moUGJRJ4azX9y61rgR6zsxlokojyfy62ck516gOMcu/cXobYPTc7SmpsZrjCXctoCIiGiKJKIMw/RE1OHDh+X111/3CpzsPvfcc7Jx40a/U/7Yg/P/a+9uXqLswgAO/1FDVOC7LxSiZR9QlNHGhbvAcJURVESuWwVRq3Zi0CbFNM1qDMuyxij6AjNFEZvdeRcyQ6bZ6Mxp7vS64LfLUuc0njO38zzt7e0b/pntDqLK5dWNZldXVzpw4MCGn19bW1u6evVqev369YYf39/fn1pbW9cdBA8fPpxu3LhR/Q2rymVDfjeIKpdXD8cdHR3rDsitra2pp6en+iJm5e/60yCqUrFYTOfPn09HjhxZ8y6BXzfjXV1dm14CZd5bQksAAAe6SURBVGlpKd28ebP6W/i/fnx3d/cfL92U42CxuLiYent71x0O9u3b99t12dfX99vvx969e1NHR0e6e/fuhtc4z/E1PH36dM1vEVa6ePHimj/XrEFUox7/3T6IKpfre855/Phx9c9dvnx5y1/Hr83Pz6eWlpZUKGx8s+jNque5r3Lj9D179mzp/oKV7/PZs2dTubz6gsn169fX3P+iUFj9DfozZ85s+HxWz9dcqVgsptOnT697ri4UVn/z/Nq1aw37t27durXmElGVF3VOnjxZfRGnchmnRg+ienp6qv/mZj+7VHsRXuSvpVyDqHK5vufARj4XP3/+PJ07d27d3mH//v3p2LFj6f79+01/HJpRpDU6MTGRuru709GjR9e886lQWB3UnDhxIl24cCGVSqUt/b2fP39O3d3d6x77//77L7W3t1f3HJXn1s0GUbXuQX9em0NDQ9v6+bVR/f39G+7LDh06lC5dulR9t1XlZ/Fm98aqdS9aS9v5vjT6uaaevX4t/e1BVLlc/7m11mrd52yU82K+r6HW/6M/v6t3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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 588. Design In-Memory File System\n",
"Hard\n",
"\n",
"Design an in-memory file system to simulate the following functions:\n",
"\n",
"* ```ls```: Given a path in string format. If it is a file path, return a list that only contains this file's name. If it is a directory path, return the list of file and directory names in this directory. Your output (file and directory names together) should in lexicographic order.\n",
"* ```mkdir```: Given a directory path that does not exist, you should make a new directory according to the path. If the middle directories in the path don't exist either, you should create them as well. This function has void return type.\n",
"* ```addContentToFile```: Given a file path and file content in string format. If the file doesn't exist, you need to create that file containing given content. If the file already exists, you need to append given content to original content. This function has void return type.\n",
"* ```readContentFromFile```: Given a file path, return its content in string format.\n",
"\n",
"Example:\n",
"\n",
" Input: \n",
" [\"FileSystem\",\"ls\",\"mkdir\",\"addContentToFile\",\"ls\",\"readContentFromFile\"]\n",
" [[],[\"/\"],[\"/a/b/c\"],[\"/a/b/c/d\",\"hello\"],[\"/\"],[\"/a/b/c/d\"]]\n",
"\n",
" Output:\n",
" [null,[],null,null,[\"a\"],\"hello\"]\n",
"\n",
" Explanation:\n",
"\n",
"\n",
"\n",
"Note:\n",
"\n",
"1. You can assume all file or directory paths are absolute paths which begin with / and do not end with / except that the path is just \"/\".\n",
"1. You can assume that all operations will be passed valid parameters and users will not attempt to retrieve file content or list a directory or file that does not exist.\n",
"1. You can assume that all directory names and file names only contain lower-case letters, and same names won't exist in the same directory.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" method | \n",
" args | \n",
" result | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" mkdir | \n",
" [/m] | \n",
" None | \n",
"
\n",
" \n",
" | 1 | \n",
" ls | \n",
" [/m] | \n",
" [] | \n",
"
\n",
" \n",
" | 2 | \n",
" mkdir | \n",
" [/w] | \n",
" None | \n",
"
\n",
" \n",
" | 3 | \n",
" ls | \n",
" [/] | \n",
" [m, w] | \n",
"
\n",
" \n",
" | 4 | \n",
" ls | \n",
" [/w] | \n",
" [] | \n",
"
\n",
" \n",
" | 5 | \n",
" ls | \n",
" [/] | \n",
" [m, w] | \n",
"
\n",
" \n",
" | 6 | \n",
" addContentToFile | \n",
" [/dycete, emer] | \n",
" None | \n",
"
\n",
" \n",
" | 7 | \n",
" ls | \n",
" [/w] | \n",
" [] | \n",
"
\n",
" \n",
" | 8 | \n",
" ls | \n",
" [/] | \n",
" [dycete, m, w] | \n",
"
\n",
" \n",
" | 9 | \n",
" ls | \n",
" [/dycete] | \n",
" [dycete] | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" method args result\n",
"0 mkdir [/m] None\n",
"1 ls [/m] []\n",
"2 mkdir [/w] None\n",
"3 ls [/] [m, w]\n",
"4 ls [/w] []\n",
"5 ls [/] [m, w]\n",
"6 addContentToFile [/dycete, emer] None\n",
"7 ls [/w] []\n",
"8 ls [/] [dycete, m, w]\n",
"9 ls [/dycete] [dycete]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# clean solution from LeetCode:他的 cd 回傳一個 curr 指向當前目錄\n",
"\n",
"from collections import defaultdict\n",
"\n",
"class Node:\n",
" def __init__(self):\n",
" self.children = defaultdict(Node)\n",
" self.content = None\n",
"\n",
"class FileSystem:\n",
" def __init__(self):\n",
" self.root = Node()\n",
"\n",
" def cd(self, path):\n",
" curr = self.root\n",
" if len(path) == 1:\n",
" return curr\n",
" \n",
" for e in path.split('/')[1:]:\n",
" curr = curr.children[e]\n",
" return curr\n",
"\n",
" def ls(self, path):\n",
" curr = self.cd(path)\n",
" if curr.content:\n",
" return path.split('/')[-1:]\n",
"\n",
" return sorted(curr.children.keys())\n",
"\n",
" def mkdir(self, path):\n",
" self.cd(path)\n",
"\n",
" def addContentToFile(self, filepath, content):\n",
" curr = self.cd(filepath)\n",
" if curr.content:\n",
" curr.content += content\n",
" else:\n",
" curr.content = content\n",
"\n",
" def readContentFromFile(self, filepath):\n",
" curr = self.cd(filepath)\n",
" return curr.content\n",
"\n",
" \n",
"from pandas import DataFrame\n",
"\n",
"methods = [\"FileSystem\",\"mkdir\",\"ls\",\"mkdir\",\"ls\",\"ls\",\"ls\",\"addContentToFile\",\"ls\",\"ls\",\"ls\"]\n",
"argList = [[],[\"/m\"],[\"/m\"],[\"/w\"],[\"/\"],[\"/w\"],[\"/\"],[\"/dycete\",\"emer\"],[\"/w\"],[\"/\"],[\"/dycete\"]]\n",
"\n",
"fs = FileSystem()\n",
"DataFrame([(method, args, getattr(fs, method)(*args)) for method, args in zip(methods[1:], argList[1:])], columns=['method', 'args', 'result'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 460. LFU Cache\n",
"\n",
"Hard\n",
"\n",
"Design and implement a data structure for a Least Frequently Used (LFU) cache.\n",
"\n",
"Implement the LFUCache class:\n",
"\n",
"* ```LFUCache(int capacity)``` Initializes the object with the ```capacity``` of the data structure.\n",
"* ```int get(int key)``` Gets the value of the ```key``` if the ```key``` exists in the cache. Otherwise, returns -1.\n",
"* ```void put(int key, int value)``` Update the value of the ```key``` if present, or inserts the ```key``` if not already present. When the cache reaches its ```capacity```, it should invalidate and remove the least frequently used key before inserting a new item. For this problem, when there is a tie (i.e., two or more keys with the same frequency), the least recently used ```key``` would be invalidated.\n",
"\n",
"To determine the least frequently used key, a use counter is maintained for each key in the cache. The key with the smallest use counter is the least frequently used key.\n",
"\n",
"When a key is first inserted into the cache, its use counter is set to 1 (due to the put operation). The use counter for a key in the cache is incremented either a get or put operation is called on it.\n",
"\n",
" \n",
"\n",
"Example 1:\n",
"\n",
" Input\n",
" [\"LFUCache\", \"put\", \"put\", \"get\", \"put\", \"get\", \"get\", \"put\", \"get\", \"get\", \"get\"]\n",
" [[2], [1, 1], [2, 2], [1], [3, 3], [2], [3], [4, 4], [1], [3], [4]]\n",
" Output\n",
" [null, null, null, 1, null, -1, 3, null, -1, 3, 4]\n",
"\n",
" Explanation\n",
" // cnt(x) = the use counter for key x\n",
" // cache=[] will show the last used order for tiebreakers (leftmost element is most recent)\n",
" LFUCache lfu = new LFUCache(2);\n",
" lfu.put(1, 1); // cache=[1,_], cnt(1)=1\n",
" lfu.put(2, 2); // cache=[2,1], cnt(2)=1, cnt(1)=1\n",
" lfu.get(1); // return 1\n",
" // cache=[1,2], cnt(2)=1, cnt(1)=2\n",
" lfu.put(3, 3); // 2 is the LFU key because cnt(2)=1 is the smallest, invalidate 2.\n",
" // cache=[3,1], cnt(3)=1, cnt(1)=2\n",
" lfu.get(2); // return -1 (not found)\n",
" lfu.get(3); // return 3\n",
" // cache=[3,1], cnt(3)=2, cnt(1)=2\n",
" lfu.put(4, 4); // Both 1 and 3 have the same cnt, but 1 is LRU, invalidate 1.\n",
" // cache=[4,3], cnt(4)=1, cnt(3)=2\n",
" lfu.get(1); // return -1 (not found)\n",
" lfu.get(3); // return 3\n",
" // cache=[3,4], cnt(4)=1, cnt(3)=3\n",
" lfu.get(4); // return 4\n",
" // cache=[3,4], cnt(4)=2, cnt(3)=3\n",
"\n",
"Constraints:\n",
"\n",
" 0 <= capacity, key, value <= 10^4\n",
" At most 10^5 calls will be made to get and put.\n",
"\n",
" \n",
"Follow up: Could you do both operations in O(1) time complexity?"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" method | \n",
" args | \n",
" result | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" put | \n",
" [1, 1] | \n",
" NaN | \n",
"
\n",
" \n",
" | 1 | \n",
" put | \n",
" [2, 2] | \n",
" NaN | \n",
"
\n",
" \n",
" | 2 | \n",
" get | \n",
" [1] | \n",
" 1.0 | \n",
"
\n",
" \n",
" | 3 | \n",
" put | \n",
" [3, 3] | \n",
" NaN | \n",
"
\n",
" \n",
" | 4 | \n",
" get | \n",
" [2] | \n",
" -1.0 | \n",
"
\n",
" \n",
" | 5 | \n",
" get | \n",
" [3] | \n",
" 3.0 | \n",
"
\n",
" \n",
" | 6 | \n",
" put | \n",
" [4, 4] | \n",
" NaN | \n",
"
\n",
" \n",
" | 7 | \n",
" get | \n",
" [1] | \n",
" -1.0 | \n",
"
\n",
" \n",
" | 8 | \n",
" get | \n",
" [3] | \n",
" 3.0 | \n",
"
\n",
" \n",
" | 9 | \n",
" get | \n",
" [4] | \n",
" 4.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" method args result\n",
"0 put [1, 1] NaN\n",
"1 put [2, 2] NaN\n",
"2 get [1] 1.0\n",
"3 put [3, 3] NaN\n",
"4 get [2] -1.0\n",
"5 get [3] 3.0\n",
"6 put [4, 4] NaN\n",
"7 get [1] -1.0\n",
"8 get [3] 3.0\n",
"9 get [4] 4.0"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 用一個字典存每個 key 當前的頻率,\n",
"# 然後每一個頻率都用一個 OrderedDict 存對應到該頻率的所有 items\n",
"# put 和 get 都會影響到頻率所以要去改對應的 OrderedDicts\n",
"\n",
"# 用一個變數記下當前最低頻率用來 delete LFU item\n",
"\n",
"from collections import OrderedDict, defaultdict\n",
"import math\n",
"\n",
"class LFUCache:\n",
"\n",
" def __init__(self, capacity):\n",
" self.capacity = capacity\n",
" self.size = 0\n",
" self.key_freq_map = {}\n",
" self.freq_val_map = defaultdict(OrderedDict)\n",
" self.min_freq = math.inf\n",
" \n",
" def update_freq(self, key):\n",
" freq = self.key_freq_map[key]\n",
" value = self.freq_val_map[freq].pop(key)\n",
" \n",
" self.key_freq_map[key] = freq + 1\n",
" self.freq_val_map[freq + 1][key] = value\n",
" \n",
" if self.min_freq == freq and len(self.freq_val_map[self.min_freq]) == 0:\n",
" self.min_freq += 1\n",
" \n",
" def get(self, key):\n",
" if key in self.key_freq_map:\n",
" freq = self.key_freq_map[key]\n",
" value = self.freq_val_map[freq][key]\n",
" self.update_freq(key)\n",
" return value\n",
" else:\n",
" return -1\n",
" \n",
" def put(self, key, value):\n",
" if self.capacity == 0:\n",
" return\n",
" \n",
" if key in self.key_freq_map:\n",
" freq = self.key_freq_map[key]\n",
" self.freq_val_map[freq][key] = value\n",
" self.update_freq(key)\n",
" else:\n",
" if self.capacity == self.size:\n",
" keyToDelete, _ = self.freq_val_map[self.min_freq].popitem(last=False)\n",
" del self.key_freq_map[keyToDelete]\n",
" self.size -= 1\n",
" \n",
" self.key_freq_map[key] = 1\n",
" self.freq_val_map[1][key] = value\n",
" self.min_freq = 1\n",
" self.size += 1\n",
" \n",
"\n",
"methods = [\"LFUCache\",\"put\",\"put\",\"get\",\"put\",\"get\",\"get\",\"put\",\"get\",\"get\",\"get\"]\n",
"argList = [[2],[1,1],[2,2],[1],[3,3],[2],[3],[4,4],[1],[3],[4]]\n",
"\n",
"from pandas import DataFrame\n",
"cache = LFUCache(2)\n",
"DataFrame([(method, args, getattr(cache, method)(*args)) for method, args in zip(methods[1:], argList[1:])], columns=['method', 'args', 'result'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 259. 3Sum Smaller\n",
"\n",
"Medium\n",
"\n",
"Given an array of n integers nums and an integer target, find the number of index triplets i, j, k with 0 <= i < j < k < n that satisfy the condition nums[i] + nums[j] + nums[k] < target.\n",
"\n",
"Follow up: Could you solve it in O(n^2) runtime?\n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input: nums = [-2,0,1,3], target = 2\n",
" Output: 2\n",
" Explanation: Because there are two triplets which sums are less than 2:\n",
" [-2,0,1]\n",
" [-2,0,3]\n",
"\n",
"Constraints:\n",
"\n",
" n == nums.length\n",
" 0 <= n <= 300\n",
" -100 <= nums[i] <= 100\n",
" -100 <= target <= 100"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# clean solution using twoSumSmaller, copied from LeetCode \n",
"\n",
"nums = [-2,0,1,3]\n",
"target = 2\n",
"\n",
"def twoSumSmaller(nums, startIndex, target):\n",
" count = 0\n",
" left = startIndex\n",
" right = len(nums) - 1\n",
" while left < right:\n",
" if nums[left] + nums[right] < target:\n",
" count += right - left\n",
" left += 1\n",
" else:\n",
" right -= 1\n",
" return count \n",
"\n",
"def threeSumSmaller(nums, target):\n",
" nums.sort()\n",
" return sum(twoSumSmaller(nums, i+1, target-n) for i, n in enumerate(nums))\n",
"\n",
"threeSumSmaller(nums, target)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 44. Wildcard Matching\n",
"\n",
"Hard\n",
"\n",
"Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n",
"\n",
" '?' Matches any single character.\n",
" '*' Matches any sequence of characters (including the empty sequence).\n",
"\n",
"The matching should cover the entire input string (not partial).\n",
"\n",
"Example 4:\n",
"\n",
" Input: s = \"adceb\", p = \"*a*b\"\n",
" Output: true\n",
" Explanation: The first '*' matches the empty sequence, while the second '*' matches the substring \"dce\".\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# DP solution, accepted but very slow (5%)\n",
"\n",
"import numpy as np\n",
"\n",
"s = 'adceb'\n",
"p = '*a*b'\n",
"\n",
"def isMatch(s, p):\n",
" m, n = len(s), len(p)\n",
" dp = np.zeros((m+1, n+1))\n",
" dp[0][0] = True\n",
" \n",
" for j, c in enumerate(p):\n",
" if c=='*':\n",
" dp[0][j+1] = True\n",
" else:\n",
" break # seeing char that's not '*', the rest of the 1st row will stay 0\n",
" \n",
" for i in range(1, m+1):\n",
" for j in range(1, n+1):\n",
" if p[j-1]=='*':\n",
" dp[i][j] = dp[i-1][j] or dp[i][j-1]\n",
" elif p[j-1]=='?' or s[i-1]==p[j-1]:\n",
" dp[i][j] = dp[i-1][j-1]\n",
" \n",
" return bool(dp[-1][-1])\n",
"\n",
"isMatch(s, p)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fastest solution on LeetCode with lots of explanations \n",
"\n",
"s = 'adceb'\n",
"p = '*a*b'\n",
"\n",
"def isMatch(s, p):\n",
" s_len, p_len = len(s), len(p)\n",
" s_idx = p_idx = 0\n",
" star_idx = s_tmp_idx = -1\n",
"\n",
" while s_idx < s_len:\n",
" # If the pattern caracter = string character\n",
" # or pattern character = '?'\n",
" if p_idx < p_len and p[p_idx] in ['?', s[s_idx]]:\n",
" s_idx += 1\n",
" p_idx += 1\n",
" # If pattern character = '*'\n",
" elif p_idx < p_len and p[p_idx] == '*':\n",
" # Check the situation\n",
" # when '*' matches no characters\n",
" star_idx = p_idx\n",
" s_tmp_idx = s_idx\n",
" p_idx += 1\n",
" # If pattern character != string character\n",
" # or pattern is used up\n",
" # and there was no '*' character in pattern \n",
" elif star_idx == -1:\n",
" return False\n",
" # If pattern character != string character\n",
" # or pattern is used up\n",
" # and there was '*' character in pattern before\n",
" else:\n",
" # Backtrack: check the situation\n",
" # when '*' matches one more character\n",
" p_idx = star_idx + 1\n",
" s_idx = s_tmp_idx + 1\n",
" s_tmp_idx = s_idx\n",
"\n",
" # The remaining characters in the pattern should all be '*' characters\n",
" return all(x == '*' for x in p[p_idx:])\n",
"\n",
"isMatch(s, p)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 282. Expression Add Operators\n",
"\n",
"Hard\n",
"\n",
"Given a string num that contains only digits and an integer target, return all possibilities to add the binary operators '+', '-', or '*' between the digits of num so that the resultant expression evaluates to the target value.\n",
"\n",
"Example 1:\n",
"\n",
" Input: num = \"123\", target = 6\n",
" Output: [\"1*2*3\",\"1+2+3\"]\n",
"\n",
"Constraints:\n",
"\n",
" 1 <= num.length <= 10\n",
" num consists of only digits.\n",
" -2^31 <= target <= 2^31 - 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 239. Sliding Window Maximum\n",
"\n",
"Hard\n",
"\n",
"You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n",
"\n",
"Return the max sliding window.\n",
"\n",
" \n",
"\n",
" Example 1:\n",
"\n",
" Input: nums = [1,3,-1,-3,5,3,6,7], k = 3\n",
" Output: [3,3,5,5,6,7]\n",
" Explanation: \n",
" Window position Max\n",
" --------------- -----\n",
" [1 3 -1] -3 5 3 6 7 3\n",
" 1 [3 -1 -3] 5 3 6 7 3\n",
" 1 3 [-1 -3 5] 3 6 7 5\n",
" 1 3 -1 [-3 5 3] 6 7 5\n",
" 1 3 -1 -3 [5 3 6] 7 6\n",
" 1 3 -1 -3 5 [3 6 7] 7"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[3, 3, 5, 5, 6, 7]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from collections import deque\n",
"\n",
"nums = [1, 3, -1, -3, 5, 3, 6, 7]\n",
"k = 3\n",
"\n",
"def maxSlidingWindow(nums, k):\n",
" q = deque([])\n",
" res = []\n",
" \n",
" for i, n in enumerate(nums):\n",
" if i >= k and nums[i-k] == q[0]:\n",
" q.popleft()\n",
" \n",
" while q and n > q[-1]:\n",
" q.pop()\n",
" q.append(n)\n",
" \n",
" res.append(q[0])\n",
" \n",
" return res[k-1:]\n",
"\n",
"maxSlidingWindow(nums, k)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 105. Construct Binary Tree from Preorder and Inorder Traversal\n",
"\n",
"Medium\n",
"\n",
"Given preorder and inorder traversal of a tree, construct the binary tree.\n",
"\n",
"Note:\n",
"You may assume that duplicates do not exist in the tree.\n",
"\n",
"For example, given\n",
"\n",
" preorder = [3,9,20,15,7]\n",
" inorder = [9,3,15,20,7]\n",
"\n",
"Return the following binary tree:\n",
"\n",
" 3\n",
" / \\\n",
" 9 20\n",
" / \\ \n",
" 15 7\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# recursive solution, slow (37%)\n",
"\n",
"preorder = [3, 9, 20, 15, 7]\n",
"inorder = [9, 3, 15, 20, 7]\n",
"\n",
"class TreeNode:\n",
" def __init__(self, val=0, left=None, right=None):\n",
" self.val = val\n",
" self.left = left\n",
" self.right = right\n",
"\n",
"def buildTree(preorder, inorder):\n",
" if len(preorder)==len(inorder)==0: \n",
" return None\n",
" else:\n",
" val = preorder[0]\n",
" rootIdx = inorder.index(val)\n",
" \n",
" leftInorder = inorder[:rootIdx]\n",
" rightInorder = inorder[rootIdx+1:]\n",
" \n",
" leftPreorder = preorder[1:1+len(leftInorder)]\n",
" rightPreorder = preorder[1+len(leftInorder):]\n",
" \n",
" return TreeNode(val=val, \n",
" left=buildTree(leftPreorder, leftInorder), \n",
" right=buildTree(rightPreorder, rightInorder))\n",
"\n",
"buildTree(preorder, inorder)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 146. LRU Cache\n",
"\n",
"Medium\n",
"\n",
"Design a data structure that follows the constraints of a Least Recently Used (LRU) cache.\n",
"\n",
"Implement the LRUCache class:\n",
"\n",
"* ```LRUCache(int capacity)``` Initialize the LRU cache with positive size ```capacity```.\n",
"* ```int get(int key)``` Return the value of the ```key``` if the ```key``` exists, otherwise return -1.\n",
"* ```void put(int key, int value)``` Update the value of the ```key``` if the ```key``` exists. Otherwise, add the key-value pair to the cache. If the number of keys exceeds the ```capacity``` from this operation, evict the least recently used key.\n",
"\n",
"Follow up:\n",
"Could you do get and put in O(1) time complexity?\n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input\n",
" [\"LRUCache\", \"put\", \"put\", \"get\", \"put\", \"get\", \"put\", \"get\", \"get\", \"get\"]\n",
" [[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]]\n",
" Output\n",
" [null, null, null, 1, null, -1, null, -1, 3, 4]\n",
"\n",
" Explanation\n",
" LRUCache lRUCache = new LRUCache(2);\n",
" lRUCache.put(1, 1); // cache is {1=1}\n",
" lRUCache.put(2, 2); // cache is {1=1, 2=2}\n",
" lRUCache.get(1); // return 1\n",
" lRUCache.put(3, 3); // LRU key was 2, evicts key 2, cache is {1=1, 3=3}\n",
" lRUCache.get(2); // returns -1 (not found)\n",
" lRUCache.put(4, 4); // LRU key was 1, evicts key 1, cache is {4=4, 3=3}\n",
" lRUCache.get(1); // return -1 (not found)\n",
" lRUCache.get(3); // return 3\n",
" lRUCache.get(4); // return 4 \n",
"\n",
"Constraints:\n",
"\n",
" 1 <= capacity <= 3000\n",
" 0 <= key <= 3000\n",
" 0 <= value <= 10^4\n",
" At most 3 * 10^4 calls will be made to get and put.\n"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" method | \n",
" args | \n",
" result | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" put | \n",
" [1, 1] | \n",
" NaN | \n",
"
\n",
" \n",
" | 1 | \n",
" put | \n",
" [2, 2] | \n",
" NaN | \n",
"
\n",
" \n",
" | 2 | \n",
" get | \n",
" [1] | \n",
" 1.0 | \n",
"
\n",
" \n",
" | 3 | \n",
" put | \n",
" [3, 3] | \n",
" NaN | \n",
"
\n",
" \n",
" | 4 | \n",
" get | \n",
" [2] | \n",
" -1.0 | \n",
"
\n",
" \n",
" | 5 | \n",
" put | \n",
" [4, 4] | \n",
" NaN | \n",
"
\n",
" \n",
" | 6 | \n",
" get | \n",
" [1] | \n",
" -1.0 | \n",
"
\n",
" \n",
" | 7 | \n",
" get | \n",
" [3] | \n",
" 3.0 | \n",
"
\n",
" \n",
" | 8 | \n",
" get | \n",
" [4] | \n",
" 4.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" method args result\n",
"0 put [1, 1] NaN\n",
"1 put [2, 2] NaN\n",
"2 get [1] 1.0\n",
"3 put [3, 3] NaN\n",
"4 get [2] -1.0\n",
"5 put [4, 4] NaN\n",
"6 get [1] -1.0\n",
"7 get [3] 3.0\n",
"8 get [4] 4.0"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 直覺會寫成用一個 member 存 OrderedDict 但應該直接繼承比較 make sense\n",
"\n",
"from collections import OrderedDict\n",
"\n",
"class LRUCache(OrderedDict):\n",
"\n",
" def __init__(self, capacity):\n",
" self.capacity = capacity\n",
"\n",
" def get(self, key):\n",
" if key in self:\n",
" self.move_to_end(key)\n",
" return self[key]\n",
" else:\n",
" return -1\n",
"\n",
" def put(self, key, value): \n",
" self[key] = value\n",
" self.move_to_end(key)\n",
" \n",
" if len(self) > self.capacity:\n",
" self.popitem(last=False)\n",
"\n",
"\n",
"methods = [\"LRUCache\", \"put\", \"put\", \"get\", \"put\", \"get\", \"put\", \"get\", \"get\", \"get\"]\n",
"argList = [[2], [1, 1], [2, 2], [1], [3, 3], [2], [4, 4], [1], [3], [4]] \n",
"\n",
"from pandas import DataFrame\n",
"cache = LRUCache(2)\n",
"DataFrame([(method, args, getattr(cache, method)(*args)) for method, args in zip(methods[1:], argList[1:])], columns=['method', 'args', 'result'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 380. Insert Delete GetRandom O(1)\n",
"\n",
"Medium\n",
"\n",
"Implement the RandomizedSet class:\n",
"\n",
"* ```bool insert(int val)``` Inserts an item ```val``` into the set if not present. Returns ```true``` if the item was not present, ```false``` otherwise.\n",
"* ```bool remove(int val)``` Removes an item ```val``` from the set if present. Returns ```true``` if the item was present, ```false``` otherwise.\n",
"* ```int getRandom()``` Returns a random element from the current set of elements (it's guaranteed that at least one element exists when this method is called). Each element must have the same probability of being returned.\n",
"\n",
"Follow up: Could you implement the functions of the class with each function works in average O(1) time?\n",
" \n",
"\n",
"Example 1:\n",
"\n",
" Input\n",
" [\"RandomizedSet\", \"insert\", \"remove\", \"insert\", \"getRandom\", \"remove\", \"insert\", \"getRandom\"]\n",
" [[], [1], [2], [2], [], [1], [2], []]\n",
" Output\n",
" [null, true, false, true, 2, true, false, 2]\n",
"\n",
" Explanation\n",
" RandomizedSet randomizedSet = new RandomizedSet();\n",
" randomizedSet.insert(1); // Inserts 1 to the set. Returns true as 1 was inserted successfully.\n",
" randomizedSet.remove(2); // Returns false as 2 does not exist in the set.\n",
" randomizedSet.insert(2); // Inserts 2 to the set, returns true. Set now contains [1,2].\n",
" randomizedSet.getRandom(); // getRandom() should return either 1 or 2 randomly.\n",
" randomizedSet.remove(1); // Removes 1 from the set, returns true. Set now contains [2].\n",
" randomizedSet.insert(2); // 2 was already in the set, so return false.\n",
" randomizedSet.getRandom(); // Since 2 is the only number in the set, getRandom() will always return 2.\n",
"\n",
"\n",
"Constraints:\n",
"\n",
" -2^31 <= val <= 2^31 - 1\n",
" At most 105 calls will be made to insert, remove, and getRandom.\n",
" There will be at least one element in the data structure when getRandom is called."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"# fastest solution on LeetCode\n",
"# 用一個字典存 array 裡的對應的數的 idx,\n",
"# remove 的時候先把 array 裡這個位置的數字和最後一個數交換再 remove 最後一個數\n",
"# 要用 array.pop() 才是 O(1)\n",
"\n",
"import random\n",
"\n",
"class RandomizedSet:\n",
"\n",
" def __init__(self):\n",
" self.elems = []\n",
" self.elems_to_index = {}\n",
"\n",
" def insert(self, val):\n",
" if val in self.elems_to_index:\n",
" return False\n",
" self.elems_to_index[val] = len(self.elems)\n",
" self.elems.append(val)\n",
" return True\n",
"\n",
" def remove(self, val):\n",
" if val in self.elems_to_index:\n",
" pos = self.elems_to_index[val]\n",
" last_pos = len(self.elems) - 1\n",
" self.elems[pos] = self.elems[last_pos] # Move the last element to the current position.\n",
" self.elems_to_index[self.elems[pos]] = pos\n",
" self.elems.pop() # Delete last pos.\n",
" del self.elems_to_index[val]\n",
" return True\n",
" return False\n",
" \n",
" def getRandom(self):\n",
" return random.choice(self.elems)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 127. Word Ladder\n",
"\n",
"Hard\n",
"\n",
"A transformation sequence from word ```beginWord``` to word ```endWord``` using a dictionary ```wordList``` is a sequence of words such that:\n",
"\n",
"* The first word in the sequence is ```beginWord```.\n",
"* The last word in the sequence is ```endWord```.\n",
"* Only one letter is different between each adjacent pair of words in the sequence.\n",
"* Every word in the sequence is in ```wordList```.\n",
"\n",
"Given two words, ```beginWord``` and ```endWord```, and a dictionary ```wordList```, return the number of words in the shortest transformation sequence from ```beginWord``` to ```endWord```, or 0 if no such sequence exists.\n",
"\n",
"Example 1:\n",
"\n",
" Input: beginWord = \"hit\", endWord = \"cog\", wordList = [\"hot\",\"dot\",\"dog\",\"lot\",\"log\",\"cog\"]\n",
" Output: 5\n",
" Explanation: One shortest transformation is \"hit\" -> \"hot\" -> \"dot\" -> \"dog\" -> \"cog\" with 5 words.\n",
" \n",
"Constraints:\n",
"\n",
" 1 <= beginWord.length <= 10\n",
" endWord.length == beginWord.length\n",
" 1 <= wordList.length <= 5000\n",
" wordList[i].length == beginWord.length\n",
" beginWord, endWord, and wordList[i] consist of lowercase English letters.\n",
" beginWord != endWord\n",
" All the strings in wordList are unique."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"beginWord = \"hit\"\n",
"endWord = \"cog\"\n",
"wordList = [\"hot\",\"dot\",\"dog\",\"lot\",\"log\",\"cog\"]\n",
"\n",
"def ladderLength(beginWord, endWord, wordList):\n",
" pass"
]
},
{
"attachments": {
"803a84b3-d0ca-462d-b38c-b82d9631bf17.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 297. Serialize and Deserialize Binary Tree\n",
"\n",
"Hard\n",
"\n",
"Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n",
"\n",
"Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.\n",
"\n",
"Clarification: The input/output format is the same as how LeetCode serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.\n",
"\n",
" \n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input: root = [1,2,3,null,null,4,5]\n",
" Output: [1,2,3,null,null,4,5]\n",
"\n",
"Constraints:\n",
"\n",
" The number of nodes in the tree is in the range [0, 10^4].\n",
" -1000 <= Node.val <= 1000\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# accepted but slow (5%)\n",
"# \n",
"# serialize 只是回傳 inorder 和 preorder 的結果,\n",
"# deserialize 根據 inorder 和 preorder 重建 tree,用的是 LeetCode 105\n",
"# LeetCode 105 假設 tree 裡沒有重覆值,\n",
"# 所以這裡要先做 encoding 把 3 變成 (3, 1), (3, 2), ... 再計算 inorder 和 preorder\n",
"# 重建的時候也要做 decoding \n",
"\n",
"from ast import literal_eval\n",
"\n",
"# Definition for a binary tree node.\n",
"# class TreeNode(object):\n",
"# def __init__(self, x):\n",
"# self.val = x\n",
"# self.left = None\n",
"# self.right = None\n",
"\n",
"class Codec:\n",
"\n",
" def __init__(self): \n",
" self.count = {}\n",
" \n",
" def encoding(self, root):\n",
" if root:\n",
" if root.val not in self.count:\n",
" self.count[root.val] = 0\n",
" \n",
" self.count[root.val] += 1\n",
" root.val = (root.val, self.count[root.val])\n",
" self.encoding(root.left)\n",
" self.encoding(root.right)\n",
" \n",
" def decoding(self, root):\n",
" if root:\n",
" root.val = root.val[0]\n",
" self.decoding(root.left)\n",
" self.decoding(root.right)\n",
" \n",
" def serialize(self, root):\n",
" self.encoding(root)\n",
" inorder = self.inorderTraversal(root)\n",
" preorder = self.preorderTraversal(root)\n",
" return str((preorder, inorder))\n",
"\n",
" def deserialize(self, data):\n",
" root = self.buildTree(*literal_eval(data))\n",
" self.decoding(root)\n",
" return root\n",
" \n",
" def preorderTraversal(self, root):\n",
" if not root:\n",
" return []\n",
" else:\n",
" return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)\n",
" \n",
" def inorderTraversal(self, root):\n",
" if not root:\n",
" return []\n",
" else:\n",
" return self.inorderTraversal(root.left) + [root.val] + self.inorderTraversal(root.right)\n",
" \n",
" def buildTree(self, preorder, inorder):\n",
" if len(preorder)==len(inorder)==0: \n",
" return None\n",
" else:\n",
" val = preorder[0]\n",
" rootIdx = inorder.index(val)\n",
"\n",
" leftInorder = inorder[:rootIdx]\n",
" rightInorder = inorder[rootIdx+1:]\n",
"\n",
" leftPreorder = preorder[1:1+len(leftInorder)]\n",
" rightPreorder = preorder[1+len(leftInorder):]\n",
"\n",
" return TreeNode(val=val, \n",
" left=self.buildTree(leftPreorder, leftInorder), \n",
" right=self.buildTree(rightPreorder, rightInorder))\n",
"\n",
" \n",
"\n",
"# Your Codec object will be instantiated and called as such:\n",
"# ser = Codec()\n",
"# deser = Codec()\n",
"# ans = deser.deserialize(ser.serialize(root))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 200. Number of Islands\n",
"\n",
"Medium\n",
"\n",
"Given an m x n 2d grid map of '1's (land) and '0's (water), return the number of islands.\n",
"\n",
"An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.\n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input: grid = [\n",
" [\"1\",\"1\",\"0\",\"0\",\"0\"],\n",
" [\"1\",\"1\",\"0\",\"0\",\"0\"],\n",
" [\"0\",\"0\",\"1\",\"0\",\"0\"],\n",
" [\"0\",\"0\",\"0\",\"1\",\"1\"]\n",
" ]\n",
" Output: 3\n",
"\n",
"Constraints:\n",
"\n",
" m == grid.length\n",
" n == grid[i].length\n",
" 1 <= m, n <= 300\n",
" grid[i][j] is '0' or '1'."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grid = [\n",
" [\"1\",\"1\",\"0\",\"0\",\"0\"],\n",
" [\"1\",\"1\",\"0\",\"0\",\"0\"],\n",
" [\"0\",\"0\",\"1\",\"0\",\"0\"],\n",
" [\"0\",\"0\",\"0\",\"1\",\"1\"]\n",
"]\n",
"\n",
"def numIslands(grid):\n",
" if not grid:\n",
" return 0\n",
" \n",
" m, n = len(grid), len(grid[0])\n",
" \n",
" def paint(i, j):\n",
" grid[i][j] = '0'\n",
" if i > 0 and grid[i-1][j]=='1': paint(i-1, j)\n",
" if i < m-1 and grid[i+1][j]=='1': paint(i+1, j)\n",
" if j > 0 and grid[i][j-1]=='1': paint(i, j-1)\n",
" if j < n-1 and grid[i][j+1]=='1': paint(i, j+1)\n",
"\n",
" count = 0\n",
" for i in range(m):\n",
" for j in range(n):\n",
" if grid[i][j] == '1':\n",
" count += 1\n",
" paint(i, j)\n",
" \n",
" return count\n",
"\n",
"numIslands(grid)"
]
},
{
"attachments": {
"96b66f5e-9b6e-4022-b17a-919e5b915323.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 98. Validate Binary Search Tree\n",
"\n",
"Medium\n",
"\n",
"Given the root of a binary tree, determine if it is a valid binary search tree (BST).\n",
"\n",
"A valid BST is defined as follows:\n",
"\n",
"* The left subtree of a node contains only nodes with keys less than the node's key.\n",
"* The right subtree of a node contains only nodes with keys greater than the node's key.\n",
"* Both the left and right subtrees must also be binary search trees.\n",
"\n",
"Example 1:\n",
"\n",
"\n",
"\n",
" Input: root = [2,1,3]\n",
" Output: true \n",
"\n",
"Constraints:\n",
"\n",
" The number of nodes in the tree is in the range [1, 10^4].\n",
" -2^31 <= Node.val <= 2^31 - 1"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# 檢查 inorder 的結果是否 sorted\n",
"\n",
"# Definition for a binary tree node.\n",
"# class TreeNode:\n",
"# def __init__(self, val=0, left=None, right=None):\n",
"# self.val = val\n",
"# self.left = left\n",
"# self.right = right\n",
"\n",
"def isValidBST(root):\n",
" lst = inorder(root)\n",
" return all([lst[i] < lst[i+1] for i in range(len(lst)-1)])\n",
"\n",
"def inorder(root):\n",
" if not root:\n",
" return []\n",
" else:\n",
" return inorder(root.left) + [root.val] + inorder(root.right)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 238. Product of Array Except Self\n",
"\n",
"Medium\n",
"\n",
"Given an array nums of n integers where n > 1, return an array output such that output[i] is equal to the product of all the elements of nums except nums[i].\n",
"\n",
"Example:\n",
"\n",
" Input: [1,2,3,4]\n",
" Output: [24,12,8,6]\n",
"\n",
"Constraint: It's guaranteed that the product of the elements of any prefix or suffix of the array (including the whole array) fits in a 32 bit integer.\n",
"\n",
"Note: Please solve it without division and in O(n).\n",
"\n",
"Follow up:\n",
"Could you solve it with constant space complexity? (The output array does not count as extra space for the purpose of space complexity analysis.)\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([24, 12, 8, 6])"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"'''\n",
"1. 在 nums 後面加 1 加到長度為 2^N\n",
"2. 建一個 full binary tree 把 nums 填進葉子裡\n",
"3. bottom-up 用每一個 node 存兩個 children 的積,除了 root 要保持 1\n",
"4. 交換所有 children pair 的值\n",
"5. top-down 把每個 node 乘上自己的 parent。回傳原本位置的數字串\n",
"\n",
"下面 m 是 2^N,a 是整個 tree\n",
"'''\n",
"\n",
"import numpy as np\n",
"from math import log, floor\n",
"\n",
"nums = [1, 2, 3, 4]\n",
"\n",
"def productExceptSelf(nums):\n",
" n = len(nums)\n",
" m = 2**(floor(log(n, 2)) + 1)\n",
" a = np.ones(2*m-1, dtype=int)\n",
" a[m-1:m-1+n] = nums\n",
" \n",
" for i in range(m-2, 0, -1):\n",
" a[i] = a[2*i+1]*a[2*i+2]\n",
" \n",
" for i in range(1, len(a), 2):\n",
" a[i], a[i+1] = a[i+1], a[i]\n",
" \n",
" for i in range(1, len(a)):\n",
" a[i] *= a[(i-1)//2]\n",
"\n",
" return a[m-1:m-1+n]\n",
"\n",
"productExceptSelf(nums)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[24, 12, 8, 6]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# fastest and most memory efficient solution on LeetCode\n",
"# 準備兩個 cumprod,一個從左到右但要跳過一個,另一個從右到左不跳過。兩數列相乘就是答案\n",
"\n",
"nums = [1, 2, 3, 4]\n",
"\n",
"def productExceptSelf(nums):\n",
" n = len(nums)\n",
" res = [1]\n",
" for i in range(n-1):\n",
" res.append(res[-1] * nums[i])\n",
" \n",
" temp = 1\n",
" for i in range(n-1, -1, -1):\n",
" res[i] *= temp\n",
" temp *= nums[i]\n",
" return res\n",
"\n",
"productExceptSelf(nums)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 628. Maximum Product of Three Numbers\n",
"\n",
"Easy\n",
"\n",
"Given an integer array nums, find three numbers whose product is maximum and return the maximum product.\n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input: nums = [1,2,3]\n",
" Output: 6 \n",
"\n",
"Constraints:\n",
"\n",
" 3 <= nums.length <= 10^4\n",
" -1000 <= nums[i] <= 1000\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"6"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import copy\n",
"\n",
"nums = [1, 2, 3]\n",
"\n",
"def maximumProduct(nums):\n",
" a = copy.copy(nums)\n",
" \n",
" M1 = max(a)\n",
" a.remove(M1)\n",
" M2 = max(a)\n",
" a.remove(M2)\n",
" M3 = max(a)\n",
" a.remove(M3)\n",
" \n",
" m1 = min(nums)\n",
" nums.remove(m1)\n",
" m2 = min(nums)\n",
" nums.remove(m2)\n",
" \n",
" return max(M1*M2*M3, M1*m1*m2)\n",
" \n",
"maximumProduct(nums)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1048. Longest String Chain\n",
"\n",
"Medium\n",
"\n",
"Given a list of words, each word consists of English lowercase letters.\n",
"\n",
"Let's say word1 is a predecessor of word2 if and only if we can add exactly one letter anywhere in word1 to make it equal to word2. For example, \"abc\" is a predecessor of \"abac\".\n",
"\n",
"A word chain is a sequence of words [word_1, word_2, ..., word_k] with k >= 1, where word_1 is a predecessor of word_2, word_2 is a predecessor of word_3, and so on.\n",
"\n",
"Return the longest possible length of a word chain with words chosen from the given list of words.\n",
"\n",
" \n",
"\n",
"Example 1:\n",
"\n",
" Input: words = [\"a\",\"b\",\"ba\",\"bca\",\"bda\",\"bdca\"]\n",
" Output: 4\n",
" Explanation: One of the longest word chain is \"a\",\"ba\",\"bda\",\"bdca\".\n",
" \n",
"Constraints:\n",
"\n",
" 1 <= words.length <= 1000\n",
" 1 <= words[i].length <= 16\n",
" words[i] only consists of English lowercase letters.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"4"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 看到 bdca,分別問 dca,bca,bdc 在不在字典裡\n",
"# 字典要照字的長度的順序建\n",
"\n",
"words = [\"a\",\"b\",\"ba\",\"bca\",\"bda\",\"bdca\"]\n",
"\n",
"def longestStrChain(words):\n",
" words = sorted(words, key=len)\n",
" \n",
" lenChain = {} \n",
" for word in words:\n",
" lenChain[word] = max(1 + lenChain.get(word[:i] + word[i+1:], 0) for i in range(len(word)))\n",
"\n",
" return max(lenChain.values())\n",
"\n",
"longestStrChain(words)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 362. Design Hit Counter\n",
"\n",
"Medium\n",
"\n",
"Design a hit counter which counts the number of hits received in the past 5 minutes.\n",
"\n",
"Each function accepts a timestamp parameter (in seconds granularity) and you may assume that calls are being made to the system in chronological order (ie, the timestamp is monotonically increasing). You may assume that the earliest timestamp starts at 1.\n",
"\n",
"It is possible that several hits arrive roughly at the same time.\n",
"\n",
"Example:\n",
"\n",
" HitCounter counter = new HitCounter();\n",
"\n",
" // hit at timestamp 1.\n",
" counter.hit(1);\n",
"\n",
" // hit at timestamp 2.\n",
" counter.hit(2);\n",
"\n",
" // hit at timestamp 3.\n",
" counter.hit(3);\n",
"\n",
" // get hits at timestamp 4, should return 3.\n",
" counter.getHits(4);\n",
"\n",
" // hit at timestamp 300.\n",
" counter.hit(300);\n",
"\n",
" // get hits at timestamp 300, should return 4.\n",
" counter.getHits(300);\n",
"\n",
" // get hits at timestamp 301, should return 3.\n",
" counter.getHits(301); \n",
"\n",
"Follow up:\n",
"What if the number of hits per second could be very large? Does your design scale?"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# naive dictionary solution; slow but accepted\n",
"\n",
"class HitCounter:\n",
" def __init__(self):\n",
" self.count = {}\n",
"\n",
" def hit(self, timestamp):\n",
" self.count[timestamp] = 1 + self.count.get(timestamp, 0)\n",
"\n",
" def getHits(self, timestamp):\n",
" return sum([self.count[i] for i in range(max(0, timestamp+1-300), timestamp+1) if i in self.count])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# LeetCode 上最快的解答:記下所有 hit 的 timestamp,\n",
"# 到呼叫 getHits 時再用 binary search 找最近 300 秒裡有多少個 timestamp\n",
"\n",
"from bisect import bisect_left, bisect_right\n",
"\n",
"class HitCounter:\n",
" def __init__(self):\n",
" self._timestamps = []\n",
" \n",
" def hit(self, timestamp):\n",
" self._timestamps.append(timestamp)\n",
" \n",
" def getHits(self, timestamp):\n",
" last_index = bisect_left(self._timestamps, timestamp + 1) \n",
" first_index = bisect_right(self._timestamps, timestamp - 300)\n",
" return max(0, last_index - first_index)"
]
},
{
"attachments": {
"0434f7a5-74ce-4eab-a815-207018629db6.png": {
"image/png": "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"
}
},
"cell_type": "markdown",
"metadata": {},
"source": [
"## 85. Maximal Rectangle\n",
"\n",
"Hard\n",
"\n",
"Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area.\n",
" \n",
"\n",
"Example 1:\n",
"\n",
"\n",
"\n",
" Input: matrix = [[\"1\",\"0\",\"1\",\"0\",\"0\"],[\"1\",\"0\",\"1\",\"1\",\"1\"],[\"1\",\"1\",\"1\",\"1\",\"1\"],[\"1\",\"0\",\"0\",\"1\",\"0\"]]\n",
" Output: 6\n",
" Explanation: The maximal rectangle is shown in the above picture.\n",
"\n",
"Constraints:\n",
"\n",
" rows == matrix.length\n",
" cols == matrix.length\n",
" 0 <= row, cols <= 200\n",
" matrix[i][j] is '0' or '1'."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"下面答案有錯!"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[[[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],\n",
" [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1]],\n",
" [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0], [1, 1], [1, 2], [1, 3]],\n",
" [[0, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [1, 7]],\n",
" [[0, 0], [0, 0], [0, 0], [0, 0], [2, 1], [2, 2], [2, 3], [2, 4]]]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"matrix = [[\"1\",\"0\",\"1\",\"0\",\"0\"],[\"1\",\"0\",\"1\",\"1\",\"1\"],[\"1\",\"1\",\"1\",\"1\",\"1\"],[\"1\",\"0\",\"0\",\"1\",\"0\"]]\n",
"matrix = [[\"0\",\"0\",\"1\"],[\"1\",\"1\",\"1\"]]\n",
"matrix = [[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"1\"],[\"0\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\"],[\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\"],[\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\"]]\n",
"\n",
"def maximalRectangle(matrix):\n",
" m = len(matrix)\n",
" if m==0:\n",
" return 0\n",
"\n",
" n = len(matrix[0])\n",
" matrix = [['0']*n] + matrix\n",
" for i, row in enumerate(matrix):\n",
" matrix[i] = ['0'] + row\n",
"\n",
" s = [[[0, 0] for j in range(n+1)] for i in range(m+1)]\n",
" for i in range(1, m+1):\n",
" for j in range(1, n+1):\n",
" if matrix[i][j] != '0':\n",
" if s[i-1][j] != [0, 0] and s[i][j-1] != [0, 0]: \n",
" if min(s[i][j-1][0], s[i-1][j][0] + 1)*(s[i][j-1][1] + 1) > (s[i-1][j][0] + 1)*min(s[i][j-1][1] + 1, s[i-1][j][1]):\n",
" s[i][j] = [min(s[i][j-1][0], s[i-1][j][0] + 1), s[i][j-1][1] + 1]\n",
" else:\n",
" s[i][j] = [s[i-1][j][0] + 1, min(s[i][j-1][1] + 1, s[i-1][j][1])]\n",
" \n",
" elif s[i-1][j] == [0, 0] and s[i][j-1] != [0, 0]:\n",
" s[i][j] = [1, s[i][j-1][1] + 1]\n",
" \n",
" elif s[i-1][j] != [0, 0] and s[i][j-1] == [0, 0]:\n",
" s[i][j] = [s[i-1][j][0] + 1, 1]\n",
" \n",
" else:\n",
" s[i][j] = [1, 1]\n",
" max_area = 0\n",
" for i in range(1, m+1):\n",
" for j in range(1, n+1):\n",
" area = s[i][j][0]*s[i][j][1]\n",
" max_area = max(area, max_area)\n",
" \n",
" return s\n",
"# return max_area\n",
"\n",
"maximalRectangle(matrix)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 241. Different Ways to Add Parentheses\n",
"\n",
"Medium\n",
"\n",
"Given a string of numbers and operators, return all possible results from computing all the different possible ways to group numbers and operators. The valid operators are +, - and *.\n",
"\n",
"Example 2:\n",
"\n",
" Input: \"2*3-4*5\"\n",
" Output: [-34, -14, -10, -10, 10]\n",
" Explanation: \n",
" (2*(3-(4*5))) = -34 \n",
" ((2*3)-(4*5)) = -14 \n",
" ((2*(3-4))*5) = -10 \n",
" (2*((3-4)*5)) = -10 \n",
" (((2*3)-4)*5) = 10\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[-34, -10, -14, -10, 10]"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# divide and conquer + memoization\n",
"# eval 和 f-string 比較慢。如果用一個 helper function(裡面是 if op=='+': ...)就會再快一點點。最快解答差不多就是這樣\n",
"\n",
"from ast import literal_eval\n",
"from functools import lru_cache\n",
"\n",
"expr = '2*3-4*5'\n",
"\n",
"@lru_cache(maxsize=None)\n",
"def diffWaysToCompute(expr):\n",
" opIdx = [i for i, c in enumerate(expr) if c in '+-*']\n",
" if len(opIdx)==0:\n",
" return [eval(expr)]\n",
" else:\n",
" res = []\n",
" for i in opIdx:\n",
" left = diffWaysToCompute(expr[:i])\n",
" right = diffWaysToCompute(expr[i+1:])\n",
" op = expr[i]\n",
" res += [eval(f'({m}) {op} ({n})') for m in left for n in right]\n",
" \n",
" return res\n",
" \n",
"diffWaysToCompute(expr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 867. Transpose Matrix\n",
"\n",
"Easy\n",
"\n",
"Given a matrix A, return the transpose of A.\n",
"\n",
"The transpose of a matrix is the matrix flipped over it's main diagonal, switching the row and column indices of the matrix.\n",
"\n",
"Example 1:\n",
"\n",
" Input: [[1,2,3],[4,5,6],[7,8,9]]\n",
" Output: [[1,4,7],[2,5,8],[3,6,9]]\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(1, 4, 7), (2, 5, 8), (3, 6, 9)]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# got accepted although the return is list of tuples\n",
"\n",
"A = [[1,2,3],[4,5,6],[7,8,9]]\n",
"\n",
"def transpose(A):\n",
" return list(zip(*A))\n",
"\n",
"transpose(A)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 188. Best Time to Buy and Sell Stock IV\n",
"\n",
"Hard\n",
"\n",
"You are given an integer array prices where prices[i] is the price of a given stock on the ith day.\n",
"\n",
"Design an algorithm to find the maximum profit. You may complete at most k transactions.\n",
"\n",
"Notice that you may not engage in multiple transactions simultaneously (i.e., you must sell the stock before you buy again).\n",
"\n",
"\n",
"Example 1:\n",
"\n",
" Input: k = 2, prices = [2,4,1]\n",
" Output: 2\n",
" Explanation: Buy on day 1 (price = 2) and sell on day 2 (price = 4), profit = 4-2 = 2.\n",
"\n",
"Constraints:\n",
"\n",
" 0 <= k <= 10^9\n",
" 0 <= prices.length <= 1000\n",
" 0 <= prices[i] <= 1000"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 這個解答的一維陣列版本 https://www.youtube.com/watch?v=oDhu5uGq_ic \n",
"\n",
"prices = [2, 4, 1]\n",
"k = 2\n",
"\n",
"def maxProfit(k, prices):\n",
" if not prices:\n",
" return 0\n",
"\n",
" n = len(prices)\n",
" t = [0]*n\n",
"\n",
" for i in range(k):\n",
" maxDiff = -prices[0]\n",
" for j in range(1, n):\n",
" tj_prev = t[j]\n",
" t[j] = max(t[j-1], prices[j] + maxDiff)\n",
" maxDiff = max(maxDiff, tj_prev - prices[j])\n",
"\n",
" return t[-1]\n",
"\n",
"maxProfit(k, prices)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 724. Find Pivot Index\n",
"\n",
"Easy\n",
"\n",
"Given an array of integers nums, write a method that returns the \"pivot\" index of this array.\n",
"\n",
"We define the pivot index as the index where the sum of all the numbers to the left of the index is equal to the sum of all the numbers to the right of the index.\n",
"\n",
"If no such index exists, we should return -1. If there are multiple pivot indexes, you should return the left-most pivot index.\n",
"\n",
"Example 1:\n",
"\n",
" Input: nums = [1,7,3,6,5,6]\n",
" Output: 3\n",
" Explanation:\n",
" The sum of the numbers to the left of index 3 (nums[3] = 6) is equal to the sum of numbers to the right of index 3.\n",
" Also, 3 is the first index where this occurs.\n",
"\n",
"Constraints:\n",
"\n",
" The length of nums will be in the range [0, 10000].\n",
" Each element nums[i] will be an integer in the range [-1000, 1000]."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"3"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"\n",
"nums = [1, 7, 3, 6, 5, 6]\n",
"\n",
"def pivotIndex(nums):\n",
" nums = np.array(nums)\n",
" s1 = nums.cumsum()\n",
" s2 = nums[::-1].cumsum()[::-1]\n",
"\n",
" for i in range(len(nums)):\n",
" if s1[i]==s2[i]:\n",
" return i\n",
" return -1\n",
"\n",
"pivotIndex(nums)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 4
}