diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 12bf2f45aa2a5..9cbadf57631dc 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -1,6 +1,7 @@
name: deploy
on:
+ workflow_dispatch:
push:
branches:
- main
@@ -12,85 +13,118 @@ on:
- lcof/**
- lcci/**
- basic/**
- workflow_dispatch:
-
-env:
- MKDOCS_API_KEYS: ${{ secrets.MKDOCS_API_KEYS }}
-
-permissions:
- contents: write
concurrency:
- group: ${{github.workflow}} - ${{github.ref}}
+ group: ${{ github.workflow }} - ${{ github.ref }}
cancel-in-progress: true
jobs:
- deploy:
+ build:
runs-on: ubuntu-latest
- if: github.repository == 'doocs/leetcode'
steps:
- - uses: actions/checkout@v4
- - uses: actions/checkout@v4
+ - name: Checkout main branch
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Checkout docs branch
+ uses: actions/checkout@v4
with:
ref: docs
path: mkdocs
- - run: |
- mv -f mkdocs/* .
+ fetch-depth: 0
+
+ - name: Sync docs branch content
+ run: |
+ rsync -a --remove-source-files --exclude='.git' mkdocs/ ./
+ rm -rf mkdocs
mv solution/CONTEST_README.md docs/contest.md
mv solution/CONTEST_README_EN.md docs-en/contest.md
+
- name: Configure Git Credentials
run: |
- git config user.name github-actions[bot]
- git config user.email 41898282+github-actions[bot]@users.noreply.github.com
+ git config --global user.name github-actions[bot]
+ git config --global user.email 41898282+github-actions[bot]@users.noreply.github.com
- - uses: actions/setup-python@v5
+ - name: Setup Python
+ uses: actions/setup-python@v5
with:
python-version: 3.x
- - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
+ - name: Restore pip cache
+ uses: actions/cache@v4
+ with:
+ path: ~/.cache/pip
+ key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
+ restore-keys: |
+ ${{ runner.os }}-pip-
- - uses: actions/cache@v4
+ - name: Restore mkdocs-material cache
+ uses: actions/cache@v4
with:
- key: mkdocs-material-${{ env.cache_id }}
path: .cache
+ key: mkdocs-material-${{ env.cache_id }}
restore-keys: |
mkdocs-material-
-
+
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install -r requirements.txt
python3 -m pip install "mkdocs-material[imaging]"
- sudo apt-get install pngquant
+ sudo apt-get install -y pngquant
+
+ - name: Set MKDOCS_API_KEYS
+ run: echo "MKDOCS_API_KEYS=${{ secrets.MKDOCS_API_KEYS }}" >> $GITHUB_ENV
- - run: |
+ - name: Build site
+ run: |
python3 main.py
mkdocs build -f mkdocs.yml
mkdocs build -f mkdocs-en.yml
- - name: Deploy
- uses: peaceiris/actions-gh-pages@v4
+ - name: Generate CNAME
+ run: echo "leetcode.doocs.org" > ./site/CNAME
+
+ - name: Commit committer cache to docs branch
+ if: github.ref == 'refs/heads/main'
+ env:
+ GH_REPO: ${{ github.repository }}
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ CACHE_FILE=".git-committers-cache.json"
+ if [[ ! -f "$CACHE_FILE" ]]; then
+ echo "Cache file not found; skip commit."
+ exit 0
+ fi
+
+ echo "Cloning docs branch ..."
+ git clone --depth 1 --branch docs "https://x-access-token:${GH_TOKEN}@github.com/${GH_REPO}.git" docs-cache
+ cp "$CACHE_FILE" docs-cache/
+
+ cd docs-cache
+ git config user.name github-actions[bot]
+ git config user.email 41898282+github-actions[bot]@users.noreply.github.com
+
+ git add .git-committers-cache.json
+ git commit -m "chore: update committer cache [skip ci]" || echo "No changes to commit"
+ git push origin docs
+
+ - name: Upload artifact
+ uses: actions/upload-pages-artifact@v3
with:
- github_token: ${{ secrets.GITHUB_TOKEN }}
- publish_dir: ./site
-
- # sync:
- # runs-on: ubuntu-latest
- # needs: deploy
- # if: github.repository == 'doocs/leetcode'
- # steps:
- # - name: Sync to gitee.com
- # uses: wearerequired/git-mirror-action@master
- # env:
- # SSH_PRIVATE_KEY: ${{ secrets.RSA_PRIVATE_KEY }}
- # with:
- # source-repo: git@github.com:doocs/leetcode.git
- # destination-repo: git@gitee.com:Doocs/leetcode.git
-
- # - name: Build Gitee Pages
- # uses: yanglbme/gitee-pages-action@main
- # with:
- # gitee-username: yanglbme
- # gitee-password: ${{ secrets.GITEE_PASSWORD }}
- # gitee-repo: doocs/leetcode
- # branch: gh-pages
\ No newline at end of file
+ path: ./site
+
+ deploy:
+ needs: build
+ runs-on: ubuntu-latest
+ permissions:
+ pages: write
+ id-token: write
+ environment:
+ name: github_pages
+ url: ${{ steps.deployment.outputs.page_url }}
+ steps:
+ - name: Deploy to GitHub Pages
+ id: deployment
+ uses: actions/deploy-pages@v4
diff --git a/.github/workflows/pr-add-label.yml b/.github/workflows/pr-add-label.yml
new file mode 100644
index 0000000000000..82661e9eb237e
--- /dev/null
+++ b/.github/workflows/pr-add-label.yml
@@ -0,0 +1,25 @@
+name: pr-add-label
+
+on:
+ pull_request_target:
+ types: [opened, edited, reopened, synchronize]
+
+jobs:
+ add-label:
+ permissions:
+ contents: read
+ pull-requests: write
+ runs-on: ubuntu-latest
+ if: github.repository == 'doocs/leetcode'
+ steps:
+ - name: Check PR number
+ id: pr_number
+ run: echo "PR_NUMBER=${{ github.event.pull_request.number }}" >> $GITHUB_ENV
+
+ - name: Run add-label Action
+ uses: actionv/pr-label-action@master
+ with:
+ github_token: ${{ secrets.DOOCS_BOT_ACTION_TOKEN }}
+ pr_number: ${{ env.PR_NUMBER }}
+ organize_name: "doocs"
+ team_name: "leetcode-algorithm"
diff --git a/.gitignore b/.gitignore
index e8ebbedd5ad1e..521323b59d92d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,10 +3,13 @@
.vscode
.temp
.vitepress
-.cache
*.iml
__pycache__
/node_modules
/solution/result.json
/solution/__pycache__
/solution/.env
+.cache
+!.cache/plugin/
+!.cache/plugin/git-committers/
+!.cache/plugin/git-committers/page-authors.json
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
index 13715bc116db8..47b55e9bdf606 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -26,3 +26,4 @@ node_modules/
/solution/3100-3199/3150.Invalid Tweets II/Solution.sql
/solution/3100-3199/3198.Find Cities in Each State/Solution.sql
/solution/3300-3399/3328.Find Cities in Each State II/Solution.sql
+/solution/3400-3499/3451.Find Invalid IP Addresses/Solution.sql
diff --git a/README.md b/README.md
index fb03f8b48b1f5..aa8c9b92c5efa 100644
--- a/README.md
+++ b/README.md
@@ -1,15 +1,16 @@
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
## 介绍
@@ -20,7 +21,7 @@
## 站点
-https://doocs.github.io/leetcode
+
## 算法全解
@@ -189,11 +190,11 @@ https://doocs.github.io/leetcode
1. 进入 leetcode 目录,切换到一个新的分支;
1. 对项目做出一些变更,然后使用 git add、commit、push 等命令将你的本地变更提交到你的远程 GitHub 仓库;
1. 将你的变更以 PR 的形式提交过来,项目的维护人员会在第一时间对你的变更进行 review!
-1. 你也可以参考帮助文档 https://help.github.com/cn 了解更多细节。
+1. 你也可以参考帮助文档 了解更多细节。
-
-
-
+
+
+
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=149001365&machine=basicLinux32gb&location=SoutheastAsia)
@@ -214,32 +215,18 @@ https://doocs.github.io/leetcode
-## 赞助者
-
-感谢以下个人、组织对本项目的支持和赞助!
-
-
-
-
-
-> "_You help the developer community practice for interviews, and there is nothing better we could ask for._" -- [Alan Yessenbayev](https://opencollective.com/alan-yessenbayev)
-
-## 推荐者
-
-知名互联网科技博主 [@爱可可-爱生活](https://weibo.com/fly51fly) 微博推荐。
-
-
-
## 版权
本项目著作权归 [GitHub 开源社区 Doocs](https://github.com/doocs) 所有,商业转载请联系 @yanglbme 获得授权,非商业转载请注明出处。
-## 联系我们
+## 联系我们 & 支持项目
欢迎各位小伙伴们添加 @yanglbme 的个人微信(微信号:YLB0109),备注 「**leetcode**」。后续我们会创建算法、技术相关的交流群,大家一起交流学习,分享经验,共同进步。
-| |
-| ------------------------------------------------------------------------------------------------------------------------------ |
+如果你觉得这个项目对你有帮助,也欢迎通过微信扫码赞赏我们 ☕️~
+
+| | |
+| -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
## 许可证
diff --git a/README_EN.md b/README_EN.md
index d81be5f48286a..3b461059720a9 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -1,15 +1,16 @@
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
## Introduction
@@ -18,9 +19,9 @@ This project contains solutions for problems from LeetCode, "Coding Interviews (
[中文文档](/README.md)
-## Sites
+## Site
-https://doocs.github.io/leetcode
+https://leetcode.doocs.org/en
## Solutions
@@ -31,8 +32,8 @@ https://doocs.github.io/leetcode
## JavaScript & Database Practice
-- [JavaScript Practice](/solution/JAVASCRIPT_README_EN.md)
-- [Database Practice](/solution/DATABASE_README_EN.md)
+- [JavaScript](/solution/JAVASCRIPT_README_EN.md)
+- [Database](/solution/DATABASE_README_EN.md)
## Topics
@@ -183,9 +184,9 @@ I'm looking for long-term contributors/partners to this repo! Send me [PRs](http
1. Create a pull request with your changes!
1. See [CONTRIBUTING](https://github.com/doocs/.github/blob/main/CONTRIBUTING.md) or [GitHub Help](https://help.github.com/en) for more details.
-
-
-
+
+
+
[](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=149001365&machine=basicLinux32gb&location=EastUs)
@@ -206,20 +207,15 @@ This project exists thanks to all the people who contribute.
-## Backers & Sponsors
-
-Thank you to all our backers and sponsors!
-
-
-
-
-
-> "_You help the developer community practice for interviews, and there is nothing better we could ask for._" -- [Alan Yessenbayev](https://opencollective.com/alan-yessenbayev)
-
## Copyright
The copyright of this project belongs to [Doocs](https://github.com/doocs) community. For commercial reprints, please contact [@yanglbme](mailto:contact@yanglibin.info) for authorization. For non-commercial reprints, please indicate the source.
+## Support Us
+
+If you find this project helpful, consider supporting us by buying us a coffee ☕️
+👉 [https://paypal.me/yanglbme](https://paypal.me/yanglbme)
+
## Contact Us
We welcome everyone to add @yanglbme's personal WeChat (WeChat ID: YLB0109), with the note "leetcode". In the future, we will create algorithm and technology related discussion groups, where we can learn and share experiences together, and make progress together.
diff --git a/images/doocs-leetcode.png b/images/doocs-leetcode.png
index 8a7f55f6253a6..a69e814914b16 100644
Binary files a/images/doocs-leetcode.png and b/images/doocs-leetcode.png differ
diff --git a/images/favicon-16x16.png b/images/favicon-16x16.png
deleted file mode 100644
index c846c93f0a389..0000000000000
Binary files a/images/favicon-16x16.png and /dev/null differ
diff --git a/images/favicon-32x32.png b/images/favicon-32x32.png
deleted file mode 100644
index 2d79130a1a393..0000000000000
Binary files a/images/favicon-32x32.png and /dev/null differ
diff --git a/images/leetcode-doocs.png b/images/leetcode-doocs.png
index 616eea1c01815..a69e814914b16 100644
Binary files a/images/leetcode-doocs.png and b/images/leetcode-doocs.png differ
diff --git a/images/pr-en.svg b/images/pr-en.svg
new file mode 100644
index 0000000000000..7465d268ffbf0
--- /dev/null
+++ b/images/pr-en.svg
@@ -0,0 +1 @@
+3.Create a New Branch & Make Changes
4.Commit & Push to Your Repo
LeetCode Repo doocs/leetcode.git
Your GitHub Repo yourusername/leetcode.git
\ No newline at end of file
diff --git a/images/pr.svg b/images/pr.svg
new file mode 100644
index 0000000000000..22e333230e98e
--- /dev/null
+++ b/images/pr.svg
@@ -0,0 +1 @@
+LeetCode 仓库 doocs/leetcode.git
你的 GitHub 仓库 yourusername/leetcode.git
\ No newline at end of file
diff --git a/images/starcharts.svg b/images/starcharts.svg
index 474e4734d62f9..4e7202135e271 100644
--- a/images/starcharts.svg
+++ b/images/starcharts.svg
@@ -1,4 +1,4 @@
-
+
\n2018-09-25 2019-07-07 2020-04-18 2021-01-29 2021-11-10 2022-08-23 2023-06-05 2024-03-16 2024-12-27 Time 2019-08-05 2020-06-14 2021-04-24 2022-03-04 2023-01-12 2023-11-22 2024-10-01 2025-08-11 Time 0 4200 8300 12400 16500 20700 24800 28900 33000 Stargazers 0 4400 8800 13200 17500 21900 26300 30700 35000 Stargazers
\ No newline at end of file
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 316 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 317 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 318 340
+L 319 340
+L 319 340
+L 319 340
+L 319 340
+L 319 340
+L 319 340
+L 319 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 320 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 321 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 322 340
+L 323 340
+L 323 340
+L 323 340
+L 323 340
+L 323 340
+L 323 340
+L 323 340
+L 323 340
+L 324 340
+L 324 340
+L 324 340
+L 324 340
+L 324 340
+L 324 340
+L 324 340
+L 324 340
+L 324 339
+L 324 339
+L 324 339
+L 324 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 325 339
+L 326 339
+L 326 339
+L 326 339
+L 326 339
+L 326 339
+L 327 339
+L 327 339
+L 327 339
+L 327 339
+L 327 339
+L 327 339
+L 327 339
+L 327 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 328 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 329 339
+L 330 339
+L 330 339
+L 330 339
+L 330 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 331 339
+L 332 339
+L 332 339
+L 332 339
+L 332 339
+L 332 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 333 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 334 339
+L 335 339
+L 335 339
+L 335 339
+L 335 339
+L 335 339
+L 336 339
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 336 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 337 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 338 338
+L 339 338
+L 339 338
+L 339 338
+L 339 338
+L 339 338
+L 339 338
+L 339 338
+L 339 338
+L 340 338
+L 340 338
+L 340 338
+L 340 338
+L 340 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 341 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 342 338
+L 343 338
+L 343 338
+L 343 338
+L 343 338
+L 343 338
+L 343 338
+L 343 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 338
+L 344 337
+L 344 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 345 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 346 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 347 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 348 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 349 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 350 337
+L 351 337
+L 351 337
+L 351 337
+L 351 337
+L 351 337
+L 351 337
+L 351 337
+L 351 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 352 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 353 337
+L 354 337
+L 354 337
+L 354 336
+L 354 336
+L 354 336
+L 355 336
+L 355 336
+L 355 336
+L 355 336
+L 355 336
+L 355 336
+L 356 336
+L 356 336
+L 356 336
+L 356 336
+L 356 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 357 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 358 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 359 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 360 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 361 336
+L 362 336
+L 362 336
+L 362 336
+L 362 336
+L 362 336
+L 362 336
+L 362 336
+L 362 336
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 362 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 363 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 364 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 365 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 335
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 366 334
+L 367 334
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 333
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 367 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 368 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 369 332
+L 370 332
+L 370 332
+L 370 332
+L 370 332
+L 370 332
+L 370 332
+L 370 332
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 370 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 371 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 331
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 372 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 330
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 373 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 329
+L 374 328
+L 374 328
+L 374 328
+L 374 328
+L 374 328
+L 374 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 375 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 376 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 377 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 328
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 378 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 379 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 380 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 327
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 381 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 326
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 325
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 324
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 323
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 322
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 382 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 321
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 320
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 319
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 318
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 383 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 384 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 317
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 385 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 386 316
+L 387 316
+L 387 316
+L 387 316
+L 387 316
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 387 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 388 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 315
+L 389 314
+L 389 314
+L 389 314
+L 389 314
+L 389 314
+L 389 314
+L 389 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 390 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 391 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 314
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 313
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 312
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 311
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 310
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 392 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 309
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 308
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 307
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 306
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 305
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 393 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 304
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 303
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 394 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 302
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 395 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 396 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 301
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 397 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 398 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 300
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 399 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 299
+L 400 298
+L 400 298
+L 400 298
+L 400 298
+L 400 298
+L 400 298
+L 400 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 401 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 298
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 402 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 403 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 404 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 405 297
+L 406 297
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 406 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 407 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 408 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 409 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 296
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 410 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 411 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 412 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 295
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 413 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 414 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 415 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 416 294
+L 417 294
+L 417 294
+L 417 294
+L 417 294
+L 417 294
+L 417 294
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 417 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 418 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 419 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 420 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 293
+L 421 292
+L 421 292
+L 421 292
+L 421 292
+L 421 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 422 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 423 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 424 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 292
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 425 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 426 291
+L 427 291
+L 427 291
+L 427 291
+L 427 291
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 427 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 290
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 428 289
+L 429 289
+L 429 289
+L 429 289
+L 429 289
+L 429 289
+L 429 289
+L 429 289
+L 429 289
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 429 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 430 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 288
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 431 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 432 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 287
+L 433 286
+L 433 286
+L 433 286
+L 433 286
+L 433 286
+L 433 286
+L 433 286
+L 433 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 434 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 435 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 286
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 436 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 437 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 438 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 439 285
+L 440 285
+L 440 285
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 440 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 441 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 442 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 443 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 284
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 444 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 445 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 446 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 447 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 448 283
+L 449 283
+L 449 283
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 449 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 450 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 451 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 452 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 453 282
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 454 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 455 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 456 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 457 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 458 281
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 459 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 460 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 461 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 280
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 462 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 279
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 278
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 277
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 463 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 276
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 275
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 274
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 273
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 272
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 464 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 271
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 270
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 269
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 268
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 267
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 465 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 466 266
+L 467 266
+L 467 266
+L 467 266
+L 467 266
+L 467 266
+L 467 266
+L 467 266
+L 467 266
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 467 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 468 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 469 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 265
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 470 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 471 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 472 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 264
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 473 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 474 263
+L 475 263
+L 475 263
+L 475 263
+L 475 263
+L 475 263
+L 475 263
+L 475 263
+L 475 263
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 475 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 476 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 477 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 478 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 262
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 479 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 261
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 260
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 259
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 258
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 257
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 480 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 256
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 255
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 254
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 253
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 252
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 251
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 250
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 249
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 481 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 248
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 247
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 246
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 245
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 244
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 482 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 243
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 483 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 484 242
+L 485 242
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 485 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 241
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 240
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 486 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 239
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 487 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 238
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 488 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 237
+L 489 236
+L 489 236
+L 489 236
+L 489 236
+L 489 236
+L 489 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 490 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 236
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 491 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 235
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 492 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 234
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 233
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 493 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 494 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 232
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 495 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 496 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 231
+L 497 230
+L 497 230
+L 497 230
+L 497 230
+L 497 230
+L 497 230
+L 497 230
+L 497 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 498 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 499 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 500 230
+L 501 230
+L 501 230
+L 501 230
+L 501 230
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 501 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 229
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 502 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 228
+L 503 227
+L 503 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 504 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 505 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 506 227
+L 507 227
+L 507 227
+L 507 227
+L 507 227
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 507 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 508 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 509 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 510 226
+L 511 226
+L 511 226
+L 511 226
+L 511 226
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 511 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 512 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 513 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 225
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 514 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 224
+L 515 223
+L 515 223
+L 515 223
+L 515 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 516 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 517 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 518 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 223
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 519 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 520 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 222
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 521 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 522 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 523 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 221
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 524 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 525 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 526 220
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 527 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 528 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 529 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 530 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 219
+L 531 218
+L 531 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 532 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 533 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 534 218
+L 535 218
+L 535 218
+L 535 218
+L 535 218
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 535 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 536 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 217
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 537 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 538 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 539 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 216
+L 540 215
+L 540 215
+L 540 215
+L 540 215
+L 540 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 541 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 215
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 542 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 543 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 544 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 214
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 545 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 546 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 213
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 547 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 548 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 212
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 549 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 211
+L 550 210
+L 550 210
+L 550 210
+L 550 210
+L 550 210
+L 550 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 551 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 552 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 210
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 553 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 554 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 555 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 209
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 556 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 208
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 207
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 557 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 206
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 205
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 204
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 203
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 558 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 202
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 201
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 200
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 199
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 198
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 559 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 197
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 196
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 560 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 195
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 561 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 194
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 562 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 193
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 563 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 192
+L 564 191
+L 564 191
+L 564 191
+L 564 191
+L 564 191
+L 564 191
+L 564 191
+L 564 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 565 191
+L 566 191
+L 566 191
+L 566 191
+L 566 191
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 566 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 190
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 567 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 189
+L 568 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 569 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 188
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 570 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 571 187
+L 572 187
+L 572 187
+L 572 187
+L 572 187
+L 572 187
+L 572 187
+L 572 187
+L 572 186
+L 572 186
+L 572 186
+L 572 186
+L 572 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 573 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 574 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 575 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 186
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 576 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 577 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 578 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 579 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 185
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 580 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 581 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 582 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 583 184
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 584 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 585 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 586 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 587 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 183
+L 588 182
+L 588 182
+L 588 182
+L 588 182
+L 588 182
+L 588 182
+L 588 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 589 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 590 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 591 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 592 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 182
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 593 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 594 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 181
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 595 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 180
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 179
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 178
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 177
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 176
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 596 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 175
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 174
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 173
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 597 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 172
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 171
+L 598 170
+L 598 170
+L 598 170
+L 598 170
+L 598 170
+L 598 170
+L 598 170
+L 598 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 599 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 170
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 600 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 601 169
+L 602 169
+L 602 169
+L 602 169
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 602 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 168
+L 603 167
+L 603 167
+L 603 167
+L 603 167
+L 603 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 604 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 605 167
+L 606 167
+L 606 167
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 606 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 607 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 166
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 608 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 609 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 610 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 611 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 612 165
+L 613 165
+L 613 165
+L 613 164
+L 613 164
+L 613 164
+L 613 164
+L 613 164
+L 613 164
+L 613 164
+L 613 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 614 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 164
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 163
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 162
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 615 161
+L 616 161
+L 616 161
+L 616 161
+L 616 161
+L 616 161
+L 616 161
+L 616 161
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 160
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 616 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 159
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 617 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 158
+L 618 157
+L 618 157
+L 618 157
+L 618 157
+L 618 157
+L 618 157
+L 618 157
+L 618 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 619 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 157
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 620 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 156
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 621 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 622 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 155
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 623 154
+L 624 154
+L 624 154
+L 624 154
+L 624 154
+L 624 154
+L 624 154
+L 624 154
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 624 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 153
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 625 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 626 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 152
+L 627 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 628 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 629 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 630 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 151
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 631 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 632 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 633 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 150
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 634 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 635 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 636 149
+L 637 149
+L 637 149
+L 637 149
+L 637 149
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 637 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 638 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 639 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 148
+L 640 147
+L 640 147
+L 640 147
+L 640 147
+L 640 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 641 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 642 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 643 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 147
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 644 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 645 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 646 146
+L 647 146
+L 647 146
+L 647 146
+L 647 146
+L 647 146
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 647 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 648 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 649 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 650 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 651 145
+L 652 145
+L 652 145
+L 652 145
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 652 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 653 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 654 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 144
+L 655 143
+L 655 143
+L 655 143
+L 655 143
+L 655 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 656 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 657 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 658 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 143
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 659 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 660 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 661 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 662 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 142
+L 663 141
+L 663 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 664 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 665 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 666 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 667 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 141
+L 668 140
+L 668 140
+L 668 140
+L 668 140
+L 668 140
+L 668 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 669 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 670 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 671 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 140
+L 672 139
+L 672 139
+L 672 139
+L 672 139
+L 672 139
+L 672 139
+L 672 139
+L 672 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 673 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 674 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 675 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 139
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 676 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 677 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 678 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 138
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 679 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 680 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 681 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 137
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 682 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 683 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 684 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 685 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 686 136
+L 687 136
+L 687 136
+L 687 136
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 687 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 688 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 689 135
+L 690 135
+L 690 135
+L 690 135
+L 690 135
+L 690 135
+L 690 135
+L 690 135
+L 690 135
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 690 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 691 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 134
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 692 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 693 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 694 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 133
+L 695 132
+L 695 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 696 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 697 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 698 132
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 699 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 700 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 701 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 131
+L 702 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 703 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 704 130
+L 705 130
+L 705 130
+L 705 130
+L 705 130
+L 705 130
+L 705 130
+L 705 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 706 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 130
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 707 129
+L 708 129
+L 708 129
+L 708 129
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 128
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 127
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 126
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 125
+L 708 124
+L 708 124
+L 708 124
+L 708 124
+L 708 124
+L 708 124
+L 708 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 124
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 123
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 122
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 121
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 709 120
+L 710 120
+L 710 120
+L 710 120
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 119
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 118
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 710 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 711 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 117
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 712 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 116
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 713 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 115
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 114
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 714 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 113
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 715 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 716 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 112
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 111
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 717 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 718 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 110
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 719 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 109
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 720 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 721 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 108
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 722 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 107
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 106
+L 723 105
+L 723 105
+L 723 105
+L 723 105
+L 723 105
+L 723 105
+L 723 105
+L 723 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 105
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 724 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 725 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 104
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 726 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 727 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 103
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 728 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 729 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 102
+L 730 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 731 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 732 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 101
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 733 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 734 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 735 100
+L 736 100
+L 736 100
+L 736 100
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 736 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 737 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 99
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 738 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 739 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 98
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 740 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 741 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 742 97
+L 743 97
+L 743 97
+L 743 97
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 743 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 744 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 745 96
+L 746 96
+L 746 96
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 746 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 747 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 95
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 748 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 94
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 93
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 92
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 91
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 749 90
+L 750 90
+L 750 90
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 89
+L 750 88
+L 750 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 751 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 752 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 753 88
+L 754 88
+L 754 88
+L 754 88
+L 754 88
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 754 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 87
+L 755 86
+L 755 86
+L 755 86
+L 755 86
+L 755 86
+L 755 86
+L 755 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 756 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 86
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 757 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 758 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 85
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 759 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 760 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 761 84
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 762 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 83
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 763 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 764 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 82
+L 765 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 766 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 767 81
+L 768 81
+L 768 81
+L 768 81
+L 768 81
+L 768 81
+L 768 81
+L 768 81
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 768 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 769 80
+L 770 80
+L 770 80
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 770 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 771 79
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 772 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 773 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 774 78
+L 775 78
+L 775 78
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 775 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 776 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 77
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 777 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 778 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 779 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 76
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 780 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 781 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 782 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 75
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 783 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 784 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 785 74
+L 786 74
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 786 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 787 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 73
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 788 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 789 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 790 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 72
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 791 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 792 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 71
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 793 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 794 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 795 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 70
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 796 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 797 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 798 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 69
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 799 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 800 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 68
+L 801 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 802 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 803 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 67
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 804 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 805 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 806 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 66
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 807 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 808 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 65
+L 809 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 810 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 811 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 64
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 812 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 813 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 814 63
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 815 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 62
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 816 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 817 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 61
+L 818 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 819 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 820 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 60
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 821 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 822 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 59
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 823 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 824 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 58
+L 825 57
+L 825 57
+L 825 57
+L 825 57
+L 825 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 826 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 57
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 827 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 828 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 829 56
+L 830 56
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 830 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 831 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 55
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 832 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 833 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 54
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 834 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 835 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 53
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 836 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 837 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 838 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 52
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 839 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 840 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 841 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 51
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 842 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 843 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 50
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 844 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 845 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 846 49
+L 847 49
+L 847 49
+L 847 49
+L 847 49
+L 847 49
+L 847 49
+L 847 49
+L 847 49
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 847 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 848 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 48
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 849 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 850 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 47
+L 851 46
+L 851 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 852 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 853 46
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 854 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 855 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 45
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 856 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 857 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 858 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 44
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 859 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 860 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 861 43
+L 862 43
+L 862 43
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 862 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 863 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 42
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 864 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 865 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 866 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 41
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 867 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 868 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 40
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 869 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 870 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 39
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 871 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 872 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 38
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 873 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 874 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 37
+L 875 36
+L 875 36
+L 875 36
+L 875 36
+L 875 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 876 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 877 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 36
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 878 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 879 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 880 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 35
+L 881 34
+L 881 34
+L 881 34
+L 881 34
+L 881 34
+L 881 34
+L 881 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 882 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 883 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 884 34
+L 885 34
+L 885 34
+L 885 34
+L 885 34
+L 885 34
+L 885 34
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 885 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 886 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 887 33
+L 888 33
+L 888 33
+L 888 33
+L 888 33
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 888 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 889 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 32
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 890 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 891 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 892 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 31
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 893 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 894 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 895 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 30
+L 896 29
+L 896 29
+L 896 29
+L 896 29
+L 896 29
+L 896 29
+L 896 29
+L 896 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 897 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 898 29
+L 899 29
+L 899 29
+L 899 29
+L 899 29
+L 899 29
+L 899 29
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 899 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 900 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 901 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 28
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 902 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 903 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 904 27
+L 905 27
+L 905 27
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 905 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 906 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 26
+L 907 25
+L 907 25
+L 907 25
+L 907 25
+L 907 25
+L 907 25
+L 907 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 908 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 909 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 25
+L 910 24
+L 910 24
+L 910 24
+L 910 24
+L 910 24
+L 910 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 911 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 912 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 24
+L 913 23
+L 913 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 914 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 915 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 916 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 23
+L 917 22
+L 917 22
+L 917 22
+L 917 22
+L 917 22
+L 917 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 918 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 919 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 920 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 22
+L 921 21
+L 921 21
+L 921 21
+L 921 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 922 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 923 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 924 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 925 21
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 926 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 927 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 928 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 929 20
+L 930 20
+L 930 20
+L 930 20
+L 930 20
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 930 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 931 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 932 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 933 19
+L 934 19
+L 934 19
+L 934 19
+L 934 19
+L 934 19
+L 934 19
+L 934 19
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 934 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 935 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 936 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 937 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 18
+L 938 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 939 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 940 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 941 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 942 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 943 17
+L 944 17
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 944 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 945 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 946 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 947 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 16
+L 948 15
+L 948 15
+L 948 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 949 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 15
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14
+L 950 14" style="stroke-width:2;stroke:rgba(129,199,239,1.0);fill:none"/>
\ No newline at end of file
diff --git a/images/support1.jpg b/images/support1.jpg
new file mode 100644
index 0000000000000..5d476dd5a74c4
Binary files /dev/null and b/images/support1.jpg differ
diff --git a/lcci/01.01.Is Unique/README.md b/lcci/01.01.Is Unique/README.md
index e8f0aafbf7165..013967f04e16f 100644
--- a/lcci/01.01.Is Unique/README.md
+++ b/lcci/01.01.Is Unique/README.md
@@ -19,7 +19,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/01.01.Is%20Unique/REA
示例 1:
输入: s = "leetcode"
-输出: false
+输出: false
示例 2:
@@ -56,8 +56,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/01.01.Is%20Unique/REA
class Solution:
def isUnique(self, astr: str) -> bool:
mask = 0
- for c in astr:
- i = ord(c) - ord('a')
+ for i in map(lambda c: ord(c) - ord("a"), astr):
if (mask >> i) & 1:
return False
mask |= 1 << i
diff --git a/lcci/01.01.Is Unique/README_EN.md b/lcci/01.01.Is Unique/README_EN.md
index 86501a1e6e8e5..a63cf58656329 100644
--- a/lcci/01.01.Is Unique/README_EN.md
+++ b/lcci/01.01.Is Unique/README_EN.md
@@ -64,8 +64,7 @@ The time complexity is $O(n)$, where $n$ is the length of the string. The space
class Solution:
def isUnique(self, astr: str) -> bool:
mask = 0
- for c in astr:
- i = ord(c) - ord('a')
+ for i in map(lambda c: ord(c) - ord("a"), astr):
if (mask >> i) & 1:
return False
mask |= 1 << i
diff --git a/lcci/01.01.Is Unique/Solution.py b/lcci/01.01.Is Unique/Solution.py
index 1d63247d2b3a0..06482062b2939 100644
--- a/lcci/01.01.Is Unique/Solution.py
+++ b/lcci/01.01.Is Unique/Solution.py
@@ -1,8 +1,7 @@
class Solution:
def isUnique(self, astr: str) -> bool:
mask = 0
- for c in astr:
- i = ord(c) - ord('a')
+ for i in map(lambda c: ord(c) - ord("a"), astr):
if (mask >> i) & 1:
return False
mask |= 1 << i
diff --git a/lcci/01.02.Check Permutation/README.md b/lcci/01.02.Check Permutation/README.md
index db958faa9953e..786b5c7538b57 100644
--- a/lcci/01.02.Check Permutation/README.md
+++ b/lcci/01.02.Check Permutation/README.md
@@ -93,11 +93,18 @@ class Solution {
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- if (s1.size() != s2.size()) return false;
- int cnt[26] = {0};
- for (char& c : s1) ++cnt[c - 'a'];
- for (char& c : s2)
- if (--cnt[c - 'a'] < 0) return false;
+ if (s1.size() != s2.size()) {
+ return false;
+ }
+ int cnt[26]{};
+ for (char c : s1) {
+ ++cnt[c - 'a'];
+ }
+ for (char c : s2) {
+ if (--cnt[c - 'a'] < 0) {
+ return false;
+ }
+ }
return true;
}
};
@@ -115,8 +122,7 @@ func CheckPermutation(s1 string, s2 string) bool {
cnt[c-'a']++
}
for _, c := range s2 {
- cnt[c-'a']--
- if cnt[c-'a'] < 0 {
+ if cnt[c-'a']--; cnt[c-'a'] < 0 {
return false
}
}
@@ -128,20 +134,18 @@ func CheckPermutation(s1 string, s2 string) bool {
```ts
function CheckPermutation(s1: string, s2: string): boolean {
- const n = s1.length;
- const m = s2.length;
- if (n !== m) {
+ if (s1.length !== s2.length) {
return false;
}
- const map = new Map();
- for (let i = 0; i < n; i++) {
- map.set(s1[i], (map.get(s1[i]) ?? 0) + 1);
- map.set(s2[i], (map.get(s2[i]) ?? 0) - 1);
+ const cnt: Record = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (const v of map.values()) {
- if (v !== 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
}
@@ -150,22 +154,26 @@ function CheckPermutation(s1: string, s2: string): boolean {
#### Rust
```rust
-use std::collections::HashMap;
impl Solution {
pub fn check_permutation(s1: String, s2: String) -> bool {
- let n = s1.len();
- let m = s2.len();
- if n != m {
+ if s1.len() != s2.len() {
return false;
}
- let s1 = s1.as_bytes();
- let s2 = s2.as_bytes();
- let mut map = HashMap::new();
- for i in 0..n {
- *map.entry(s1[i]).or_insert(0) += 1;
- *map.entry(s2[i]).or_insert(0) -= 1;
+
+ let mut cnt = vec![0; 26];
+ for c in s1.chars() {
+ cnt[(c as usize - 'a' as usize)] += 1;
+ }
+
+ for c in s2.chars() {
+ let index = c as usize - 'a' as usize;
+ if cnt[index] == 0 {
+ return false;
+ }
+ cnt[index] -= 1;
}
- map.values().all(|i| *i == 0)
+
+ true
}
}
```
@@ -179,19 +187,18 @@ impl Solution {
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
- if (s1.length != s2.length) {
+ if (s1.length !== s2.length) {
return false;
}
- const cnt = new Array(26).fill(0);
- for (let i = 0; i < s1.length; ++i) {
- const j = s1.codePointAt(i) - 'a'.codePointAt(0);
- ++cnt[j];
+ const cnt = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (let i = 0; i < s2.length; ++i) {
- const j = s2.codePointAt(i) - 'a'.codePointAt(0);
- if (--cnt[j] < 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
};
@@ -206,19 +213,18 @@ class Solution {
return false
}
- var cnt = Array(repeating: 0, count: 26)
+ var cnt = [Int](repeating: 0, count: 26)
for char in s1 {
- let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] += 1
+ cnt[Int(char.asciiValue! - Character("a").asciiValue!)] += 1
}
for char in s2 {
let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] -= 1
- if cnt[index] < 0 {
+ if cnt[index] == 0 {
return false
}
+ cnt[index] -= 1
}
return true
@@ -268,8 +274,8 @@ class Solution {
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- sort(s1.begin(), s1.end());
- sort(s2.begin(), s2.end());
+ ranges::sort(s1);
+ ranges::sort(s2);
return s1 == s2;
}
};
@@ -308,6 +314,31 @@ impl Solution {
}
```
+#### JavaScript
+
+```js
+/**
+ * @param {string} s1
+ * @param {string} s2
+ * @return {boolean}
+ */
+var CheckPermutation = function (s1, s2) {
+ return [...s1].sort().join('') === [...s2].sort().join('');
+};
+```
+
+#### Swift
+
+```swift
+class Solution {
+ func CheckPermutation(_ s1: String, _ s2: String) -> Bool {
+ let s1 = s1.sorted()
+ let s2 = s2.sorted()
+ return s1 == s2
+ }
+}
+```
+
diff --git a/lcci/01.02.Check Permutation/README_EN.md b/lcci/01.02.Check Permutation/README_EN.md
index c18cd58477e8d..c582f9a548145 100644
--- a/lcci/01.02.Check Permutation/README_EN.md
+++ b/lcci/01.02.Check Permutation/README_EN.md
@@ -100,11 +100,18 @@ class Solution {
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- if (s1.size() != s2.size()) return false;
- int cnt[26] = {0};
- for (char& c : s1) ++cnt[c - 'a'];
- for (char& c : s2)
- if (--cnt[c - 'a'] < 0) return false;
+ if (s1.size() != s2.size()) {
+ return false;
+ }
+ int cnt[26]{};
+ for (char c : s1) {
+ ++cnt[c - 'a'];
+ }
+ for (char c : s2) {
+ if (--cnt[c - 'a'] < 0) {
+ return false;
+ }
+ }
return true;
}
};
@@ -122,8 +129,7 @@ func CheckPermutation(s1 string, s2 string) bool {
cnt[c-'a']++
}
for _, c := range s2 {
- cnt[c-'a']--
- if cnt[c-'a'] < 0 {
+ if cnt[c-'a']--; cnt[c-'a'] < 0 {
return false
}
}
@@ -135,20 +141,18 @@ func CheckPermutation(s1 string, s2 string) bool {
```ts
function CheckPermutation(s1: string, s2: string): boolean {
- const n = s1.length;
- const m = s2.length;
- if (n !== m) {
+ if (s1.length !== s2.length) {
return false;
}
- const map = new Map();
- for (let i = 0; i < n; i++) {
- map.set(s1[i], (map.get(s1[i]) ?? 0) + 1);
- map.set(s2[i], (map.get(s2[i]) ?? 0) - 1);
+ const cnt: Record = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (const v of map.values()) {
- if (v !== 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
}
@@ -157,22 +161,26 @@ function CheckPermutation(s1: string, s2: string): boolean {
#### Rust
```rust
-use std::collections::HashMap;
impl Solution {
pub fn check_permutation(s1: String, s2: String) -> bool {
- let n = s1.len();
- let m = s2.len();
- if n != m {
+ if s1.len() != s2.len() {
return false;
}
- let s1 = s1.as_bytes();
- let s2 = s2.as_bytes();
- let mut map = HashMap::new();
- for i in 0..n {
- *map.entry(s1[i]).or_insert(0) += 1;
- *map.entry(s2[i]).or_insert(0) -= 1;
+
+ let mut cnt = vec![0; 26];
+ for c in s1.chars() {
+ cnt[(c as usize - 'a' as usize)] += 1;
+ }
+
+ for c in s2.chars() {
+ let index = c as usize - 'a' as usize;
+ if cnt[index] == 0 {
+ return false;
+ }
+ cnt[index] -= 1;
}
- map.values().all(|i| *i == 0)
+
+ true
}
}
```
@@ -186,19 +194,18 @@ impl Solution {
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
- if (s1.length != s2.length) {
+ if (s1.length !== s2.length) {
return false;
}
- const cnt = new Array(26).fill(0);
- for (let i = 0; i < s1.length; ++i) {
- const j = s1.codePointAt(i) - 'a'.codePointAt(0);
- ++cnt[j];
+ const cnt = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (let i = 0; i < s2.length; ++i) {
- const j = s2.codePointAt(i) - 'a'.codePointAt(0);
- if (--cnt[j] < 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
};
@@ -213,19 +220,18 @@ class Solution {
return false
}
- var cnt = Array(repeating: 0, count: 26)
+ var cnt = [Int](repeating: 0, count: 26)
for char in s1 {
- let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] += 1
+ cnt[Int(char.asciiValue! - Character("a").asciiValue!)] += 1
}
for char in s2 {
let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] -= 1
- if cnt[index] < 0 {
+ if cnt[index] == 0 {
return false
}
+ cnt[index] -= 1
}
return true
@@ -275,8 +281,8 @@ class Solution {
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- sort(s1.begin(), s1.end());
- sort(s2.begin(), s2.end());
+ ranges::sort(s1);
+ ranges::sort(s2);
return s1 == s2;
}
};
@@ -315,6 +321,31 @@ impl Solution {
}
```
+#### JavaScript
+
+```js
+/**
+ * @param {string} s1
+ * @param {string} s2
+ * @return {boolean}
+ */
+var CheckPermutation = function (s1, s2) {
+ return [...s1].sort().join('') === [...s2].sort().join('');
+};
+```
+
+#### Swift
+
+```swift
+class Solution {
+ func CheckPermutation(_ s1: String, _ s2: String) -> Bool {
+ let s1 = s1.sorted()
+ let s2 = s2.sorted()
+ return s1 == s2
+ }
+}
+```
+
diff --git a/lcci/01.02.Check Permutation/Solution.cpp b/lcci/01.02.Check Permutation/Solution.cpp
index 72808b7ee740c..ff8e6d531810c 100644
--- a/lcci/01.02.Check Permutation/Solution.cpp
+++ b/lcci/01.02.Check Permutation/Solution.cpp
@@ -1,11 +1,18 @@
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- if (s1.size() != s2.size()) return false;
- int cnt[26] = {0};
- for (char& c : s1) ++cnt[c - 'a'];
- for (char& c : s2)
- if (--cnt[c - 'a'] < 0) return false;
+ if (s1.size() != s2.size()) {
+ return false;
+ }
+ int cnt[26]{};
+ for (char c : s1) {
+ ++cnt[c - 'a'];
+ }
+ for (char c : s2) {
+ if (--cnt[c - 'a'] < 0) {
+ return false;
+ }
+ }
return true;
}
-};
\ No newline at end of file
+};
diff --git a/lcci/01.02.Check Permutation/Solution.go b/lcci/01.02.Check Permutation/Solution.go
index 7acd2c2c4bc00..e8fd1ace061de 100644
--- a/lcci/01.02.Check Permutation/Solution.go
+++ b/lcci/01.02.Check Permutation/Solution.go
@@ -7,10 +7,9 @@ func CheckPermutation(s1 string, s2 string) bool {
cnt[c-'a']++
}
for _, c := range s2 {
- cnt[c-'a']--
- if cnt[c-'a'] < 0 {
+ if cnt[c-'a']--; cnt[c-'a'] < 0 {
return false
}
}
return true
-}
\ No newline at end of file
+}
diff --git a/lcci/01.02.Check Permutation/Solution.js b/lcci/01.02.Check Permutation/Solution.js
index 4c0adedaf125b..7aa0ea9b1d428 100644
--- a/lcci/01.02.Check Permutation/Solution.js
+++ b/lcci/01.02.Check Permutation/Solution.js
@@ -4,19 +4,18 @@
* @return {boolean}
*/
var CheckPermutation = function (s1, s2) {
- if (s1.length != s2.length) {
+ if (s1.length !== s2.length) {
return false;
}
- const cnt = new Array(26).fill(0);
- for (let i = 0; i < s1.length; ++i) {
- const j = s1.codePointAt(i) - 'a'.codePointAt(0);
- ++cnt[j];
+ const cnt = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (let i = 0; i < s2.length; ++i) {
- const j = s2.codePointAt(i) - 'a'.codePointAt(0);
- if (--cnt[j] < 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
};
diff --git a/lcci/01.02.Check Permutation/Solution.rs b/lcci/01.02.Check Permutation/Solution.rs
index efe963a0130f2..45cda06875452 100644
--- a/lcci/01.02.Check Permutation/Solution.rs
+++ b/lcci/01.02.Check Permutation/Solution.rs
@@ -1,18 +1,22 @@
-use std::collections::HashMap;
impl Solution {
pub fn check_permutation(s1: String, s2: String) -> bool {
- let n = s1.len();
- let m = s2.len();
- if n != m {
+ if s1.len() != s2.len() {
return false;
}
- let s1 = s1.as_bytes();
- let s2 = s2.as_bytes();
- let mut map = HashMap::new();
- for i in 0..n {
- *map.entry(s1[i]).or_insert(0) += 1;
- *map.entry(s2[i]).or_insert(0) -= 1;
+
+ let mut cnt = vec![0; 26];
+ for c in s1.chars() {
+ cnt[(c as usize - 'a' as usize)] += 1;
}
- map.values().all(|i| *i == 0)
+
+ for c in s2.chars() {
+ let index = c as usize - 'a' as usize;
+ if cnt[index] == 0 {
+ return false;
+ }
+ cnt[index] -= 1;
+ }
+
+ true
}
}
diff --git a/lcci/01.02.Check Permutation/Solution.swift b/lcci/01.02.Check Permutation/Solution.swift
index 7161edfad155c..6bfd2af7416a5 100644
--- a/lcci/01.02.Check Permutation/Solution.swift
+++ b/lcci/01.02.Check Permutation/Solution.swift
@@ -3,22 +3,21 @@ class Solution {
if s1.count != s2.count {
return false
}
-
- var cnt = Array(repeating: 0, count: 26)
-
+
+ var cnt = [Int](repeating: 0, count: 26)
+
for char in s1 {
- let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] += 1
+ cnt[Int(char.asciiValue! - Character("a").asciiValue!)] += 1
}
-
+
for char in s2 {
let index = Int(char.asciiValue! - Character("a").asciiValue!)
- cnt[index] -= 1
- if cnt[index] < 0 {
+ if cnt[index] == 0 {
return false
}
+ cnt[index] -= 1
}
-
+
return true
}
-}
\ No newline at end of file
+}
diff --git a/lcci/01.02.Check Permutation/Solution.ts b/lcci/01.02.Check Permutation/Solution.ts
index 65f0c434d61b9..b6bb1f8822cec 100644
--- a/lcci/01.02.Check Permutation/Solution.ts
+++ b/lcci/01.02.Check Permutation/Solution.ts
@@ -1,18 +1,16 @@
function CheckPermutation(s1: string, s2: string): boolean {
- const n = s1.length;
- const m = s2.length;
- if (n !== m) {
+ if (s1.length !== s2.length) {
return false;
}
- const map = new Map();
- for (let i = 0; i < n; i++) {
- map.set(s1[i], (map.get(s1[i]) ?? 0) + 1);
- map.set(s2[i], (map.get(s2[i]) ?? 0) - 1);
+ const cnt: Record = {};
+ for (const c of s1) {
+ cnt[c] = (cnt[c] || 0) + 1;
}
- for (const v of map.values()) {
- if (v !== 0) {
+ for (const c of s2) {
+ if (!cnt[c]) {
return false;
}
+ cnt[c]--;
}
return true;
}
diff --git a/lcci/01.02.Check Permutation/Solution2.cpp b/lcci/01.02.Check Permutation/Solution2.cpp
index 70c67c68db593..142e3154d5a17 100644
--- a/lcci/01.02.Check Permutation/Solution2.cpp
+++ b/lcci/01.02.Check Permutation/Solution2.cpp
@@ -1,8 +1,8 @@
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
- sort(s1.begin(), s1.end());
- sort(s2.begin(), s2.end());
+ ranges::sort(s1);
+ ranges::sort(s2);
return s1 == s2;
}
-};
\ No newline at end of file
+};
diff --git a/lcci/01.02.Check Permutation/Solution2.js b/lcci/01.02.Check Permutation/Solution2.js
new file mode 100644
index 0000000000000..a5d33c913da3a
--- /dev/null
+++ b/lcci/01.02.Check Permutation/Solution2.js
@@ -0,0 +1,8 @@
+/**
+ * @param {string} s1
+ * @param {string} s2
+ * @return {boolean}
+ */
+var CheckPermutation = function (s1, s2) {
+ return [...s1].sort().join('') === [...s2].sort().join('');
+};
diff --git a/lcci/01.02.Check Permutation/Solution2.swift b/lcci/01.02.Check Permutation/Solution2.swift
new file mode 100644
index 0000000000000..0aef38caddbb4
--- /dev/null
+++ b/lcci/01.02.Check Permutation/Solution2.swift
@@ -0,0 +1,7 @@
+class Solution {
+ func CheckPermutation(_ s1: String, _ s2: String) -> Bool {
+ let s1 = s1.sorted()
+ let s2 = s2.sorted()
+ return s1 == s2
+ }
+}
diff --git a/lcci/01.04.Palindrome Permutation/README.md b/lcci/01.04.Palindrome Permutation/README.md
index 689ccb5841266..b174846e8cd30 100644
--- a/lcci/01.04.Palindrome Permutation/README.md
+++ b/lcci/01.04.Palindrome Permutation/README.md
@@ -94,18 +94,15 @@ public:
```go
func canPermutePalindrome(s string) bool {
- vis := map[rune]bool{}
- cnt := 0
+ cnt := map[rune]int{}
for _, c := range s {
- if vis[c] {
- vis[c] = false
- cnt--
- } else {
- vis[c] = true
- cnt++
- }
+ cnt[c]++
}
- return cnt < 2
+ sum := 0
+ for _, v := range cnt {
+ sum += v & 1
+ }
+ return sum < 2
}
```
@@ -113,34 +110,26 @@ func canPermutePalindrome(s string) bool {
```ts
function canPermutePalindrome(s: string): boolean {
- const set = new Set();
+ const cnt: Record = {};
for (const c of s) {
- if (set.has(c)) {
- set.delete(c);
- } else {
- set.add(c);
- }
+ cnt[c] = (cnt[c] || 0) + 1;
}
- return set.size <= 1;
+ return Object.values(cnt).filter(v => v % 2 === 1).length < 2;
}
```
#### Rust
```rust
-use std::collections::HashSet;
+use std::collections::HashMap;
impl Solution {
pub fn can_permute_palindrome(s: String) -> bool {
- let mut set = HashSet::new();
+ let mut cnt = HashMap::new();
for c in s.chars() {
- if set.contains(&c) {
- set.remove(&c);
- } else {
- set.insert(c);
- }
+ *cnt.entry(c).or_insert(0) += 1;
}
- set.len() <= 1
+ cnt.values().filter(|&&v| v % 2 == 1).count() < 2
}
}
```
@@ -173,7 +162,7 @@ class Solution {
### 方法二:哈希表的另一种实现
-我们用哈希表 $vis$ 存储每个字符是否出现过。若出现过,则从哈希表中删除该字符;否则,将该字符加入哈希表。
+我们用一个哈希表 $\textit{vis}$ 存储每个字符是否出现过。若出现过,则从哈希表中删除该字符;否则,将该字符加入哈希表。
最后判断哈希表中字符的个数是否小于 $2$,若是,则是回文排列。
@@ -231,6 +220,76 @@ public:
};
```
+#### Go
+
+```go
+func canPermutePalindrome(s string) bool {
+ vis := map[rune]bool{}
+ for _, c := range s {
+ if vis[c] {
+ delete(vis, c)
+ } else {
+ vis[c] = true
+ }
+ }
+ return len(vis) < 2
+}
+```
+
+#### TypeScript
+
+```ts
+function canPermutePalindrome(s: string): boolean {
+ const vis = new Set();
+ for (const c of s) {
+ if (vis.has(c)) {
+ vis.delete(c);
+ } else {
+ vis.add(c);
+ }
+ }
+ return vis.size < 2;
+}
+```
+
+#### Rust
+
+```rust
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn can_permute_palindrome(s: String) -> bool {
+ let mut vis = HashSet::new();
+ for c in s.chars() {
+ if vis.contains(&c) {
+ vis.remove(&c);
+ } else {
+ vis.insert(c);
+ }
+ }
+ vis.len() < 2
+ }
+}
+```
+
+#### Swift
+
+```swift
+class Solution {
+ func canPermutePalindrome(_ s: String) -> Bool {
+ var vis = Set()
+ for c in s {
+ if vis.contains(c) {
+ vis.remove(c)
+ } else {
+ vis.insert(c)
+ }
+ }
+ return vis.count < 2
+ }
+}
+```
+
diff --git a/lcci/01.04.Palindrome Permutation/README_EN.md b/lcci/01.04.Palindrome Permutation/README_EN.md
index e942aadc8b522..28d7e6c7c4c02 100644
--- a/lcci/01.04.Palindrome Permutation/README_EN.md
+++ b/lcci/01.04.Palindrome Permutation/README_EN.md
@@ -92,18 +92,15 @@ public:
```go
func canPermutePalindrome(s string) bool {
- vis := map[rune]bool{}
- cnt := 0
+ cnt := map[rune]int{}
for _, c := range s {
- if vis[c] {
- vis[c] = false
- cnt--
- } else {
- vis[c] = true
- cnt++
- }
+ cnt[c]++
}
- return cnt < 2
+ sum := 0
+ for _, v := range cnt {
+ sum += v & 1
+ }
+ return sum < 2
}
```
@@ -111,34 +108,26 @@ func canPermutePalindrome(s string) bool {
```ts
function canPermutePalindrome(s: string): boolean {
- const set = new Set();
+ const cnt: Record = {};
for (const c of s) {
- if (set.has(c)) {
- set.delete(c);
- } else {
- set.add(c);
- }
+ cnt[c] = (cnt[c] || 0) + 1;
}
- return set.size <= 1;
+ return Object.values(cnt).filter(v => v % 2 === 1).length < 2;
}
```
#### Rust
```rust
-use std::collections::HashSet;
+use std::collections::HashMap;
impl Solution {
pub fn can_permute_palindrome(s: String) -> bool {
- let mut set = HashSet::new();
+ let mut cnt = HashMap::new();
for c in s.chars() {
- if set.contains(&c) {
- set.remove(&c);
- } else {
- set.insert(c);
- }
+ *cnt.entry(c).or_insert(0) += 1;
}
- set.len() <= 1
+ cnt.values().filter(|&&v| v % 2 == 1).count() < 2
}
}
```
@@ -229,6 +218,76 @@ public:
};
```
+#### Go
+
+```go
+func canPermutePalindrome(s string) bool {
+ vis := map[rune]bool{}
+ for _, c := range s {
+ if vis[c] {
+ delete(vis, c)
+ } else {
+ vis[c] = true
+ }
+ }
+ return len(vis) < 2
+}
+```
+
+#### TypeScript
+
+```ts
+function canPermutePalindrome(s: string): boolean {
+ const vis = new Set();
+ for (const c of s) {
+ if (vis.has(c)) {
+ vis.delete(c);
+ } else {
+ vis.add(c);
+ }
+ }
+ return vis.size < 2;
+}
+```
+
+#### Rust
+
+```rust
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn can_permute_palindrome(s: String) -> bool {
+ let mut vis = HashSet::new();
+ for c in s.chars() {
+ if vis.contains(&c) {
+ vis.remove(&c);
+ } else {
+ vis.insert(c);
+ }
+ }
+ vis.len() < 2
+ }
+}
+```
+
+#### Swift
+
+```swift
+class Solution {
+ func canPermutePalindrome(_ s: String) -> Bool {
+ var vis = Set()
+ for c in s {
+ if vis.contains(c) {
+ vis.remove(c)
+ } else {
+ vis.insert(c)
+ }
+ }
+ return vis.count < 2
+ }
+}
+```
+
diff --git a/lcci/01.04.Palindrome Permutation/Solution.go b/lcci/01.04.Palindrome Permutation/Solution.go
index 5d156fd33340e..76d5c69a60a52 100644
--- a/lcci/01.04.Palindrome Permutation/Solution.go
+++ b/lcci/01.04.Palindrome Permutation/Solution.go
@@ -1,14 +1,11 @@
-func canPermutePalindrome(s string) bool {
- vis := map[rune]bool{}
- cnt := 0
- for _, c := range s {
- if vis[c] {
- vis[c] = false
- cnt--
- } else {
- vis[c] = true
- cnt++
- }
- }
- return cnt < 2
-}
\ No newline at end of file
+func canPermutePalindrome(s string) bool {
+ cnt := map[rune]int{}
+ for _, c := range s {
+ cnt[c]++
+ }
+ sum := 0
+ for _, v := range cnt {
+ sum += v & 1
+ }
+ return sum < 2
+}
diff --git a/lcci/01.04.Palindrome Permutation/Solution.rs b/lcci/01.04.Palindrome Permutation/Solution.rs
index 0d0e1b07a5e70..895e119d6b604 100644
--- a/lcci/01.04.Palindrome Permutation/Solution.rs
+++ b/lcci/01.04.Palindrome Permutation/Solution.rs
@@ -1,15 +1,11 @@
-use std::collections::HashSet;
+use std::collections::HashMap;
impl Solution {
pub fn can_permute_palindrome(s: String) -> bool {
- let mut set = HashSet::new();
+ let mut cnt = HashMap::new();
for c in s.chars() {
- if set.contains(&c) {
- set.remove(&c);
- } else {
- set.insert(c);
- }
+ *cnt.entry(c).or_insert(0) += 1;
}
- set.len() <= 1
+ cnt.values().filter(|&&v| v % 2 == 1).count() < 2
}
}
diff --git a/lcci/01.04.Palindrome Permutation/Solution.ts b/lcci/01.04.Palindrome Permutation/Solution.ts
index 7bd7505057358..44ba2bc906e83 100644
--- a/lcci/01.04.Palindrome Permutation/Solution.ts
+++ b/lcci/01.04.Palindrome Permutation/Solution.ts
@@ -1,11 +1,7 @@
function canPermutePalindrome(s: string): boolean {
- const set = new Set();
+ const cnt: Record = {};
for (const c of s) {
- if (set.has(c)) {
- set.delete(c);
- } else {
- set.add(c);
- }
+ cnt[c] = (cnt[c] || 0) + 1;
}
- return set.size <= 1;
+ return Object.values(cnt).filter(v => v % 2 === 1).length < 2;
}
diff --git a/lcci/01.04.Palindrome Permutation/Solution2.go b/lcci/01.04.Palindrome Permutation/Solution2.go
new file mode 100644
index 0000000000000..425935647c9f4
--- /dev/null
+++ b/lcci/01.04.Palindrome Permutation/Solution2.go
@@ -0,0 +1,11 @@
+func canPermutePalindrome(s string) bool {
+ vis := map[rune]bool{}
+ for _, c := range s {
+ if vis[c] {
+ delete(vis, c)
+ } else {
+ vis[c] = true
+ }
+ }
+ return len(vis) < 2
+}
diff --git a/lcci/01.04.Palindrome Permutation/Solution2.rs b/lcci/01.04.Palindrome Permutation/Solution2.rs
new file mode 100644
index 0000000000000..5ef83e50f0c4d
--- /dev/null
+++ b/lcci/01.04.Palindrome Permutation/Solution2.rs
@@ -0,0 +1,15 @@
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn can_permute_palindrome(s: String) -> bool {
+ let mut vis = HashSet::new();
+ for c in s.chars() {
+ if vis.contains(&c) {
+ vis.remove(&c);
+ } else {
+ vis.insert(c);
+ }
+ }
+ vis.len() < 2
+ }
+}
diff --git a/lcci/01.04.Palindrome Permutation/Solution2.swift b/lcci/01.04.Palindrome Permutation/Solution2.swift
new file mode 100644
index 0000000000000..993dc395a5b33
--- /dev/null
+++ b/lcci/01.04.Palindrome Permutation/Solution2.swift
@@ -0,0 +1,13 @@
+class Solution {
+ func canPermutePalindrome(_ s: String) -> Bool {
+ var vis = Set()
+ for c in s {
+ if vis.contains(c) {
+ vis.remove(c)
+ } else {
+ vis.insert(c)
+ }
+ }
+ return vis.count < 2
+ }
+}
diff --git a/lcci/01.04.Palindrome Permutation/Solution2.ts b/lcci/01.04.Palindrome Permutation/Solution2.ts
new file mode 100644
index 0000000000000..c72db04c15438
--- /dev/null
+++ b/lcci/01.04.Palindrome Permutation/Solution2.ts
@@ -0,0 +1,11 @@
+function canPermutePalindrome(s: string): boolean {
+ const vis = new Set();
+ for (const c of s) {
+ if (vis.has(c)) {
+ vis.delete(c);
+ } else {
+ vis.add(c);
+ }
+ }
+ return vis.size < 2;
+}
diff --git a/lcci/01.05.One Away/README.md b/lcci/01.05.One Away/README.md
index 471c6c5f9190c..762e58c78330d 100644
--- a/lcci/01.05.One Away/README.md
+++ b/lcci/01.05.One Away/README.md
@@ -43,13 +43,13 @@ second = "pal"
### 方法一:分情况讨论 + 双指针
-我们将字符串 $first$ 和 $second$ 的长度记为 $m$ 和 $n$,不妨设 $m \geq n$。
+我们将字符串 $\textit{first}$ 和 $\textit{second}$ 的长度记为 $m$ 和 $n$,不妨设 $m \geq n$。
接下来分情况讨论:
-- 当 $m - n \gt 1$ 时,$first$ 和 $second$ 无法通过一次编辑得到,返回 `false`;
-- 当 $m = n$ 时,$first$ 和 $second$ 只有在且仅在有且仅有一个字符不同的情况下才能通过一次编辑得到;
-- 当 $m - n = 1$ 时,$first$ 和 $second$ 只有在且仅在 $second$ 是 $first$ 删除一个字符后得到的情况下才能通过一次编辑得到,我们可以使用双指针来实现。
+- 当 $m - n \gt 1$ 时,$\textit{first}$ 和 $\textit{second}$ 无法通过一次编辑得到,返回 `false`;
+- 当 $m = n$ 时,$\textit{first}$ 和 $\textit{second}$ 只有在且仅在有且仅有一个字符不同的情况下才能通过一次编辑得到;
+- 当 $m - n = 1$ 时,$\textit{first}$ 和 $\textit{second}$ 只有在且仅在 $\textit{second}$ 是 $\textit{first}$ 删除一个字符后得到的情况下才能通过一次编辑得到,我们可以使用双指针来实现。
时间复杂度 $O(n)$,其中 $n$ 为字符串长度。空间复杂度 $O(1)$。
diff --git a/lcci/01.05.One Away/README_EN.md b/lcci/01.05.One Away/README_EN.md
index a0703be7fa38b..98a164c97d143 100644
--- a/lcci/01.05.One Away/README_EN.md
+++ b/lcci/01.05.One Away/README_EN.md
@@ -50,15 +50,15 @@ second = "pal"
-### Solution 1: Case Discussion + Two Pointers
+### Solution 1: Case Analysis + Two Pointers
-We denote the lengths of strings $first$ and $second$ as $m$ and $n$, respectively, where $m \geq n$.
+Let the lengths of the strings $\textit{first}$ and $\textit{second}$ be $m$ and $n$, respectively. Assume $m \geq n$.
-Next, we discuss different cases:
+Next, we discuss the following cases:
-- When $m - n > 1$, $first$ and $second$ cannot be obtained through a single edit, so we return `false`.
-- When $m = n$, $first$ and $second$ can only be obtained through a single edit if and only if exactly one character is different.
-- When $m - n = 1$, $first$ and $second$ can only be obtained through a single edit if and only if $second$ is obtained by deleting one character from $first$. We can use two pointers to implement this.
+- When $m - n \gt 1$, $\textit{first}$ and $\textit{second}$ cannot be made equal with one edit, so return `false`;
+- When $m = n$, $\textit{first}$ and $\textit{second}$ can be made equal with one edit only if there is exactly one different character;
+- When $m - n = 1$, $\textit{first}$ and $\textit{second}$ can be made equal with one edit only if $\textit{second}$ is obtained by deleting one character from $\textit{first}$. We can use two pointers to achieve this.
The time complexity is $O(n)$, where $n$ is the length of the string. The space complexity is $O(1)$.
diff --git a/lcci/01.06.Compress String/README.md b/lcci/01.06.Compress String/README.md
index 829eb7d532a86..2a08b263e8ae5 100644
--- a/lcci/01.06.Compress String/README.md
+++ b/lcci/01.06.Compress String/README.md
@@ -62,22 +62,6 @@ class Solution:
return min(S, t, key=len)
```
-#### Python3
-
-```python
-class Solution:
- def compressString(self, S: str) -> str:
- t = []
- i, n = 0, len(S)
- while i < n:
- j = i + 1
- while j < n and S[j] == S[i]:
- j += 1
- t.append(S[i] + str(j - i))
- i = j
- return min(S, "".join(t), key=len)
-```
-
#### Java
```java
diff --git a/lcci/01.06.Compress String/README_EN.md b/lcci/01.06.Compress String/README_EN.md
index 10346e225a81c..e1a9f55e5b8a0 100644
--- a/lcci/01.06.Compress String/README_EN.md
+++ b/lcci/01.06.Compress String/README_EN.md
@@ -69,22 +69,6 @@ class Solution:
return min(S, t, key=len)
```
-#### Python3
-
-```python
-class Solution:
- def compressString(self, S: str) -> str:
- t = []
- i, n = 0, len(S)
- while i < n:
- j = i + 1
- while j < n and S[j] == S[i]:
- j += 1
- t.append(S[i] + str(j - i))
- i = j
- return min(S, "".join(t), key=len)
-```
-
#### Java
```java
diff --git a/lcci/01.06.Compress String/Solution2.py b/lcci/01.06.Compress String/Solution2.py
deleted file mode 100644
index d3bc1c1aab18d..0000000000000
--- a/lcci/01.06.Compress String/Solution2.py
+++ /dev/null
@@ -1,11 +0,0 @@
-class Solution:
- def compressString(self, S: str) -> str:
- t = []
- i, n = 0, len(S)
- while i < n:
- j = i + 1
- while j < n and S[j] == S[i]:
- j += 1
- t.append(S[i] + str(j - i))
- i = j
- return min(S, "".join(t), key=len)
diff --git a/lcci/01.07.Rotate Matrix/README.md b/lcci/01.07.Rotate Matrix/README.md
index 2d6b196c90198..d9b2763c2a520 100644
--- a/lcci/01.07.Rotate Matrix/README.md
+++ b/lcci/01.07.Rotate Matrix/README.md
@@ -64,9 +64,9 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/01.07.Rotate%20Matrix
### 方法一:原地翻转
-根据题目要求,我们实际上需要将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$。
+根据题目要求,我们实际上需要将 $\text{matrix}[i][j]$ 旋转至 $\text{matrix}[j][n - i - 1]$。
-我们可以先对矩阵进行上下翻转,即 $matrix[i][j]$ 和 $matrix[n - i - 1][j]$ 进行交换,然后再对矩阵进行主对角线翻转,即 $matrix[i][j]$ 和 $matrix[j][i]$ 进行交换。这样就能将 $matrix[i][j]$ 旋转至 $matrix[j][n - i - 1]$ 了。
+我们可以先对矩阵进行上下翻转,即 $\text{matrix}[i][j]$ 和 $\text{matrix}[n - i - 1][j]$ 进行交换,然后再对矩阵进行主对角线翻转,即 $\text{matrix}[i][j]$ 和 $\text{matrix}[j][i]$ 进行交换。这样就能将 $\text{matrix}[i][j]$ 旋转至 $\text{matrix}[j][n - i - 1]$ 了。
时间复杂度 $O(n^2)$,其中 $n$ 是矩阵的边长。空间复杂度 $O(1)$。
diff --git a/lcci/01.07.Rotate Matrix/README_EN.md b/lcci/01.07.Rotate Matrix/README_EN.md
index f093f2a013175..8a1f0badd0a68 100644
--- a/lcci/01.07.Rotate Matrix/README_EN.md
+++ b/lcci/01.07.Rotate Matrix/README_EN.md
@@ -92,11 +92,11 @@ Rotate the matrix in place. It becomes:
-### Solution 1: In-place Rotation
+### Solution 1: In-Place Rotation
-According to the problem requirements, we actually need to rotate $matrix[i][j]$ to $matrix[j][n - i - 1]$.
+According to the problem requirements, we need to rotate $\text{matrix}[i][j]$ to $\text{matrix}[j][n - i - 1]$.
-We can first flip the matrix upside down, that is, swap $matrix[i][j]$ and $matrix[n - i - 1][j]$, and then flip the matrix along the main diagonal, that is, swap $matrix[i][j]$ and $matrix[j][i]$. This way, we can rotate $matrix[i][j]$ to $matrix[j][n - i - 1]$.
+We can first flip the matrix upside down, i.e., swap $\text{matrix}[i][j]$ with $\text{matrix}[n - i - 1][j]$, and then flip the matrix along the main diagonal, i.e., swap $\text{matrix}[i][j]$ with $\text{matrix}[j][i]$. This will rotate $\text{matrix}[i][j]$ to $\text{matrix}[j][n - i - 1]$.
The time complexity is $O(n^2)$, where $n$ is the side length of the matrix. The space complexity is $O(1)$.
diff --git a/lcci/02.08.Linked List Cycle/README.md b/lcci/02.08.Linked List Cycle/README.md
index 37fbe9f8e76a7..facce4bf87406 100644
--- a/lcci/02.08.Linked List Cycle/README.md
+++ b/lcci/02.08.Linked List Cycle/README.md
@@ -44,6 +44,8 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/02.08.Linked%20List%2
+#### Python3
+
```python
# Definition for singly-linked list.
# class ListNode:
@@ -66,6 +68,8 @@ class Solution:
return ans
```
+#### Java
+
```java
/**
* Definition for singly-linked list.
@@ -98,6 +102,8 @@ public class Solution {
}
```
+#### C++
+
```cpp
/**
* Definition for singly-linked list.
@@ -129,6 +135,8 @@ public:
};
```
+#### Go
+
```go
/**
* Definition for singly-linked list.
@@ -155,6 +163,8 @@ func detectCycle(head *ListNode) *ListNode {
}
```
+#### TypeScript
+
```ts
/**
* Definition for singly-linked list.
@@ -186,6 +196,8 @@ function detectCycle(head: ListNode | null): ListNode | null {
}
```
+#### JavaScript
+
```js
/**
* Definition for singly-linked list.
@@ -217,6 +229,8 @@ var detectCycle = function (head) {
};
```
+#### Swift
+
```swift
/*
* public class ListNode {
@@ -251,4 +265,8 @@ class Solution {
}
```
+
+
+
+
diff --git a/lcci/04.01.Route Between Nodes/README.md b/lcci/04.01.Route Between Nodes/README.md
index 1846da42fc412..2e3b752f019a6 100644
--- a/lcci/04.01.Route Between Nodes/README.md
+++ b/lcci/04.01.Route Between Nodes/README.md
@@ -126,7 +126,7 @@ public:
for (auto& e : graph) {
g[e[0]].push_back(e[1]);
}
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) -> bool {
if (i == target) {
return true;
}
diff --git a/lcci/04.01.Route Between Nodes/README_EN.md b/lcci/04.01.Route Between Nodes/README_EN.md
index 5205c2f35b5a8..e32e55d20a57b 100644
--- a/lcci/04.01.Route Between Nodes/README_EN.md
+++ b/lcci/04.01.Route Between Nodes/README_EN.md
@@ -134,7 +134,7 @@ public:
for (auto& e : graph) {
g[e[0]].push_back(e[1]);
}
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) -> bool {
if (i == target) {
return true;
}
diff --git a/lcci/04.01.Route Between Nodes/Solution.cpp b/lcci/04.01.Route Between Nodes/Solution.cpp
index 915c3ca91ac20..0863689995365 100644
--- a/lcci/04.01.Route Between Nodes/Solution.cpp
+++ b/lcci/04.01.Route Between Nodes/Solution.cpp
@@ -6,7 +6,7 @@ class Solution {
for (auto& e : graph) {
g[e[0]].push_back(e[1]);
}
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) -> bool {
if (i == target) {
return true;
}
@@ -23,4 +23,4 @@ class Solution {
};
return dfs(start);
}
-};
\ No newline at end of file
+};
diff --git a/lcci/04.02.Minimum Height Tree/README.md b/lcci/04.02.Minimum Height Tree/README.md
index 3fccbc8f93760..f0c126c3a85ec 100644
--- a/lcci/04.02.Minimum Height Tree/README.md
+++ b/lcci/04.02.Minimum Height Tree/README.md
@@ -103,7 +103,7 @@ class Solution {
class Solution {
public:
TreeNode* sortedArrayToBST(vector& nums) {
- function dfs = [&](int l, int r) -> TreeNode* {
+ auto dfs = [&](this auto&& dfs, int l, int r) -> TreeNode* {
if (l > r) {
return nullptr;
}
diff --git a/lcci/04.02.Minimum Height Tree/README_EN.md b/lcci/04.02.Minimum Height Tree/README_EN.md
index 40f629d61050d..84724a048b2f1 100644
--- a/lcci/04.02.Minimum Height Tree/README_EN.md
+++ b/lcci/04.02.Minimum Height Tree/README_EN.md
@@ -24,19 +24,19 @@ Given sorted array: [-10,-3,0,5,9],
-One possible answer is: [0,-3,9,-10,null,5],which represents the following tree:
+One possible answer is: [0,-3,9,-10,null,5],which represents the following tree:
- 0
+ 0
- / \
+ / \
- -3 9
+ -3 9
- / /
+ / /
- -10 5
+ -10 5
@@ -127,7 +127,7 @@ class Solution {
class Solution {
public:
TreeNode* sortedArrayToBST(vector& nums) {
- function dfs = [&](int l, int r) -> TreeNode* {
+ auto dfs = [&](this auto&& dfs, int l, int r) -> TreeNode* {
if (l > r) {
return nullptr;
}
diff --git a/lcci/04.02.Minimum Height Tree/Solution.cpp b/lcci/04.02.Minimum Height Tree/Solution.cpp
index ecfbdddbae48a..66a66d1f27bb7 100644
--- a/lcci/04.02.Minimum Height Tree/Solution.cpp
+++ b/lcci/04.02.Minimum Height Tree/Solution.cpp
@@ -10,7 +10,7 @@
class Solution {
public:
TreeNode* sortedArrayToBST(vector& nums) {
- function dfs = [&](int l, int r) -> TreeNode* {
+ auto dfs = [&](this auto&& dfs, int l, int r) -> TreeNode* {
if (l > r) {
return nullptr;
}
@@ -19,4 +19,4 @@ class Solution {
};
return dfs(0, nums.size() - 1);
}
-};
\ No newline at end of file
+};
diff --git a/lcci/04.08.First Common Ancestor/README.md b/lcci/04.08.First Common Ancestor/README.md
index d7a9fb878e8e4..c51706d069e79 100644
--- a/lcci/04.08.First Common Ancestor/README.md
+++ b/lcci/04.08.First Common Ancestor/README.md
@@ -22,7 +22,13 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/04.08.First%20Common%
-### 方法一
+### 方法一:递归
+
+我们首先判断根节点是否为空,或者根节点是否等于 $\textit{p}$ 或 $\textit{q}$,如果是的话,直接返回根节点。
+
+然后递归地对左右子树进行查找,分别得到 $\textit{left}$ 和 $\textit{right}$。如果 $\textit{left}$ 和 $\textit{right}$ 都不为空,说明 $\textit{p}$ 和 $\textit{q}$ 分别在左右子树中,那么根节点就是最近公共祖先。否则,如果 $\textit{left}$ 和 $\textit{right}$ 中有一个为空,说明 $\textit{p}$ 和 $\textit{q}$ 都在非空的子树中,那么非空的子树的根节点就是最近公共祖先。
+
+时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 是二叉树中节点的数目。
@@ -41,11 +47,11 @@ class Solution:
def lowestCommonAncestor(
self, root: TreeNode, p: TreeNode, q: TreeNode
) -> TreeNode:
- if root is None or root == p or root == q:
+ if root is None or root in [p, q]:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
- return right if left is None else (left if right is None else root)
+ return root if left and right else left or right
```
#### Java
@@ -72,6 +78,84 @@ class Solution {
}
```
+#### C++
+
+```cpp
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ * int val;
+ * TreeNode *left;
+ * TreeNode *right;
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
+ * };
+ */
+class Solution {
+public:
+ TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
+ if (!root || root == p || root == q) {
+ return root;
+ }
+ TreeNode* left = lowestCommonAncestor(root->left, p, q);
+ TreeNode* right = lowestCommonAncestor(root->right, p, q);
+ return left && right ? root : (left ? left : right);
+ }
+};
+```
+
+#### Go
+
+```go
+/**
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ * Val int
+ * Left *TreeNode
+ * Right *TreeNode
+ * }
+ */
+func lowestCommonAncestor(root *TreeNode, p *TreeNode, q *TreeNode) *TreeNode {
+ if root == nil || root == p || root == q {
+ return root
+ }
+ left := lowestCommonAncestor(root.Left, p, q)
+ right := lowestCommonAncestor(root.Right, p, q)
+ if left == nil {
+ return right
+ }
+ if right == nil {
+ return left
+ }
+ return root
+}
+```
+
+#### JavaScript
+
+```js
+/**
+ * Definition for a binary tree node.
+ * function TreeNode(val) {
+ * this.val = val;
+ * this.left = this.right = null;
+ * }
+ */
+/**
+ * @param {TreeNode} root
+ * @param {TreeNode} p
+ * @param {TreeNode} q
+ * @return {TreeNode}
+ */
+var lowestCommonAncestor = function (root, p, q) {
+ if (!root || root === p || root === q) {
+ return root;
+ }
+ const left = lowestCommonAncestor(root.left, p, q);
+ const right = lowestCommonAncestor(root.right, p, q);
+ return left && right ? root : left || right;
+};
+```
+
#### Swift
```swift
diff --git a/lcci/04.08.First Common Ancestor/README_EN.md b/lcci/04.08.First Common Ancestor/README_EN.md
index 8df95cc286a11..e500060c3e04c 100644
--- a/lcci/04.08.First Common Ancestor/README_EN.md
+++ b/lcci/04.08.First Common Ancestor/README_EN.md
@@ -69,7 +69,13 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/04.08.First%20Common%
-### Solution 1
+### Solution 1: Recursion
+
+First, we check if the root node is null or if the root node is equal to $\textit{p}$ or $\textit{q}$. If so, we return the root node directly.
+
+Then, we recursively search the left and right subtrees to get $\textit{left}$ and $\textit{right}$, respectively. If both $\textit{left}$ and $\textit{right}$ are not null, it means $\textit{p}$ and $\textit{q}$ are in the left and right subtrees, respectively, so the root node is the lowest common ancestor. Otherwise, if either $\textit{left}$ or $\textit{right}$ is null, it means both $\textit{p}$ and $\textit{q}$ are in the non-null subtree, so the root node of the non-null subtree is the lowest common ancestor.
+
+The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the number of nodes in the binary tree.
@@ -88,11 +94,11 @@ class Solution:
def lowestCommonAncestor(
self, root: TreeNode, p: TreeNode, q: TreeNode
) -> TreeNode:
- if root is None or root == p or root == q:
+ if root is None or root in [p, q]:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
- return right if left is None else (left if right is None else root)
+ return root if left and right else left or right
```
#### Java
@@ -119,6 +125,84 @@ class Solution {
}
```
+#### C++
+
+```cpp
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ * int val;
+ * TreeNode *left;
+ * TreeNode *right;
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
+ * };
+ */
+class Solution {
+public:
+ TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
+ if (!root || root == p || root == q) {
+ return root;
+ }
+ TreeNode* left = lowestCommonAncestor(root->left, p, q);
+ TreeNode* right = lowestCommonAncestor(root->right, p, q);
+ return left && right ? root : (left ? left : right);
+ }
+};
+```
+
+#### Go
+
+```go
+/**
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ * Val int
+ * Left *TreeNode
+ * Right *TreeNode
+ * }
+ */
+func lowestCommonAncestor(root *TreeNode, p *TreeNode, q *TreeNode) *TreeNode {
+ if root == nil || root == p || root == q {
+ return root
+ }
+ left := lowestCommonAncestor(root.Left, p, q)
+ right := lowestCommonAncestor(root.Right, p, q)
+ if left == nil {
+ return right
+ }
+ if right == nil {
+ return left
+ }
+ return root
+}
+```
+
+#### JavaScript
+
+```js
+/**
+ * Definition for a binary tree node.
+ * function TreeNode(val) {
+ * this.val = val;
+ * this.left = this.right = null;
+ * }
+ */
+/**
+ * @param {TreeNode} root
+ * @param {TreeNode} p
+ * @param {TreeNode} q
+ * @return {TreeNode}
+ */
+var lowestCommonAncestor = function (root, p, q) {
+ if (!root || root === p || root === q) {
+ return root;
+ }
+ const left = lowestCommonAncestor(root.left, p, q);
+ const right = lowestCommonAncestor(root.right, p, q);
+ return left && right ? root : left || right;
+};
+```
+
#### Swift
```swift
diff --git a/lcci/04.08.First Common Ancestor/Solution.cpp b/lcci/04.08.First Common Ancestor/Solution.cpp
new file mode 100644
index 0000000000000..1cd5e13570f9b
--- /dev/null
+++ b/lcci/04.08.First Common Ancestor/Solution.cpp
@@ -0,0 +1,20 @@
+/**
+ * Definition for a binary tree node.
+ * struct TreeNode {
+ * int val;
+ * TreeNode *left;
+ * TreeNode *right;
+ * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
+ * };
+ */
+class Solution {
+public:
+ TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
+ if (!root || root == p || root == q) {
+ return root;
+ }
+ TreeNode* left = lowestCommonAncestor(root->left, p, q);
+ TreeNode* right = lowestCommonAncestor(root->right, p, q);
+ return left && right ? root : (left ? left : right);
+ }
+};
diff --git a/lcci/04.08.First Common Ancestor/Solution.go b/lcci/04.08.First Common Ancestor/Solution.go
new file mode 100644
index 0000000000000..b2668e2c48820
--- /dev/null
+++ b/lcci/04.08.First Common Ancestor/Solution.go
@@ -0,0 +1,22 @@
+/**
+ * Definition for a binary tree node.
+ * type TreeNode struct {
+ * Val int
+ * Left *TreeNode
+ * Right *TreeNode
+ * }
+ */
+func lowestCommonAncestor(root *TreeNode, p *TreeNode, q *TreeNode) *TreeNode {
+ if root == nil || root == p || root == q {
+ return root
+ }
+ left := lowestCommonAncestor(root.Left, p, q)
+ right := lowestCommonAncestor(root.Right, p, q)
+ if left == nil {
+ return right
+ }
+ if right == nil {
+ return left
+ }
+ return root
+}
diff --git a/lcci/04.08.First Common Ancestor/Solution.js b/lcci/04.08.First Common Ancestor/Solution.js
new file mode 100644
index 0000000000000..cba4ad1be11d1
--- /dev/null
+++ b/lcci/04.08.First Common Ancestor/Solution.js
@@ -0,0 +1,21 @@
+/**
+ * Definition for a binary tree node.
+ * function TreeNode(val) {
+ * this.val = val;
+ * this.left = this.right = null;
+ * }
+ */
+/**
+ * @param {TreeNode} root
+ * @param {TreeNode} p
+ * @param {TreeNode} q
+ * @return {TreeNode}
+ */
+var lowestCommonAncestor = function (root, p, q) {
+ if (!root || root === p || root === q) {
+ return root;
+ }
+ const left = lowestCommonAncestor(root.left, p, q);
+ const right = lowestCommonAncestor(root.right, p, q);
+ return left && right ? root : left || right;
+};
diff --git a/lcci/04.08.First Common Ancestor/Solution.py b/lcci/04.08.First Common Ancestor/Solution.py
index 1622fd413d1b0..ebd8bb7f1f46b 100644
--- a/lcci/04.08.First Common Ancestor/Solution.py
+++ b/lcci/04.08.First Common Ancestor/Solution.py
@@ -10,8 +10,8 @@ class Solution:
def lowestCommonAncestor(
self, root: TreeNode, p: TreeNode, q: TreeNode
) -> TreeNode:
- if root is None or root == p or root == q:
+ if root is None or root in [p, q]:
return root
left = self.lowestCommonAncestor(root.left, p, q)
right = self.lowestCommonAncestor(root.right, p, q)
- return right if left is None else (left if right is None else root)
+ return root if left and right else left or right
diff --git a/lcci/04.12.Paths with Sum/README.md b/lcci/04.12.Paths with Sum/README.md
index 5ff30a2c961e5..6f0a4bcdfbffc 100644
--- a/lcci/04.12.Paths with Sum/README.md
+++ b/lcci/04.12.Paths with Sum/README.md
@@ -70,15 +70,13 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/04.12.Paths%20with%20
```python
# Definition for a binary tree node.
# class TreeNode:
-# def __init__(self, x):
-# self.val = x
-# self.left = None
-# self.right = None
-
-
+# def __init__(self, val=0, left=None, right=None):
+# self.val = val
+# self.left = left
+# self.right = right
class Solution:
- def pathSum(self, root: TreeNode, sum: int) -> int:
- def dfs(root: TreeNode, s: int):
+ def pathSum(self, root: Optional[TreeNode], sum: int) -> int:
+ def dfs(root: Optional[TreeNode], s: int) -> int:
if root is None:
return 0
s += root.val
@@ -145,9 +143,8 @@ class Solution {
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
- unordered_map cnt;
- cnt[0] = 1;
- function dfs = [&](TreeNode* root, long long s) {
+ unordered_map cnt{{0, 1}};
+ auto dfs = [&](this auto&& dfs, TreeNode* root, long long s) -> int {
if (!root) {
return 0;
}
@@ -285,43 +282,40 @@ impl Solution {
#### Swift
```swift
-/* class TreeNode {
-* var val: Int
-* var left: TreeNode?
-* var right: TreeNode?
-*
-* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) {
-* self.val = val
-* self.left = left
-* self.right = right
-* }
-* }
-*/
-
+/**
+ * Definition for a binary tree node.
+ * public class TreeNode {
+ * public var val: Int
+ * public var left: TreeNode?
+ * public var right: TreeNode?
+ * public init() { self.val = 0; self.left = nil; self.right = nil; }
+ * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
+ * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
+ * self.val = val
+ * self.left = left
+ * self.right = right
+ * }
+ * }
+ */
class Solution {
- private var cnt: [Int: Int] = [:]
- private var target: Int = 0
-
func pathSum(_ root: TreeNode?, _ sum: Int) -> Int {
- cnt[0] = 1
- target = sum
- return dfs(root, 0)
+ var cnt: [Int: Int] = [0: 1]
- }
+ func dfs(_ root: TreeNode?, _ s: Int) -> Int {
+ guard let root = root else { return 0 }
- private func dfs(_ root: TreeNode?, _ s: Int) -> Int {
- guard let root = root else {
- return 0
- }
- let newSum = s + root.val
- let ans = cnt[newSum - target, default: 0]
+ var s = s + root.val
+ var ans = cnt[s - sum, default: 0]
- cnt[newSum, default: 0] += 1
- let leftPaths = dfs(root.left, newSum)
- let rightPaths = dfs(root.right, newSum)
- cnt[newSum, default: 0] -= 1
+ cnt[s, default: 0] += 1
+ ans += dfs(root.left, s)
+ ans += dfs(root.right, s)
+ cnt[s, default: 0] -= 1
- return ans + leftPaths + rightPaths
+ return ans
+ }
+
+ return dfs(root, 0)
}
}
```
diff --git a/lcci/04.12.Paths with Sum/README_EN.md b/lcci/04.12.Paths with Sum/README_EN.md
index e2b797b3c05f5..179134478b763 100644
--- a/lcci/04.12.Paths with Sum/README_EN.md
+++ b/lcci/04.12.Paths with Sum/README_EN.md
@@ -83,15 +83,13 @@ The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is
```python
# Definition for a binary tree node.
# class TreeNode:
-# def __init__(self, x):
-# self.val = x
-# self.left = None
-# self.right = None
-
-
+# def __init__(self, val=0, left=None, right=None):
+# self.val = val
+# self.left = left
+# self.right = right
class Solution:
- def pathSum(self, root: TreeNode, sum: int) -> int:
- def dfs(root: TreeNode, s: int):
+ def pathSum(self, root: Optional[TreeNode], sum: int) -> int:
+ def dfs(root: Optional[TreeNode], s: int) -> int:
if root is None:
return 0
s += root.val
@@ -158,9 +156,8 @@ class Solution {
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
- unordered_map cnt;
- cnt[0] = 1;
- function dfs = [&](TreeNode* root, long long s) {
+ unordered_map cnt{{0, 1}};
+ auto dfs = [&](this auto&& dfs, TreeNode* root, long long s) -> int {
if (!root) {
return 0;
}
@@ -298,42 +295,40 @@ impl Solution {
#### Swift
```swift
-/* class TreeNode {
-* var val: Int
-* var left: TreeNode?
-* var right: TreeNode?
-*
-* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) {
-* self.val = val
-* self.left = left
-* self.right = right
-* }
-* }
-*/
-
+/**
+ * Definition for a binary tree node.
+ * public class TreeNode {
+ * public var val: Int
+ * public var left: TreeNode?
+ * public var right: TreeNode?
+ * public init() { self.val = 0; self.left = nil; self.right = nil; }
+ * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
+ * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
+ * self.val = val
+ * self.left = left
+ * self.right = right
+ * }
+ * }
+ */
class Solution {
- private var cnt: [Int: Int] = [:]
- private var target: Int = 0
-
func pathSum(_ root: TreeNode?, _ sum: Int) -> Int {
- cnt[0] = 1
- target = sum
- return dfs(root, 0)
- }
+ var cnt: [Int: Int] = [0: 1]
- private func dfs(_ root: TreeNode?, _ s: Int) -> Int {
- guard let root = root else {
- return 0
- }
- let newSum = s + root.val
- let ans = cnt[newSum - target, default: 0]
+ func dfs(_ root: TreeNode?, _ s: Int) -> Int {
+ guard let root = root else { return 0 }
+
+ var s = s + root.val
+ var ans = cnt[s - sum, default: 0]
+
+ cnt[s, default: 0] += 1
+ ans += dfs(root.left, s)
+ ans += dfs(root.right, s)
+ cnt[s, default: 0] -= 1
- cnt[newSum, default: 0] += 1
- let leftPaths = dfs(root.left, newSum)
- let rightPaths = dfs(root.right, newSum)
- cnt[newSum, default: 0] -= 1
+ return ans
+ }
- return ans + leftPaths + rightPaths
+ return dfs(root, 0)
}
}
```
diff --git a/lcci/04.12.Paths with Sum/Solution.cpp b/lcci/04.12.Paths with Sum/Solution.cpp
index 72e43d0c492c0..9095a6ab905d9 100644
--- a/lcci/04.12.Paths with Sum/Solution.cpp
+++ b/lcci/04.12.Paths with Sum/Solution.cpp
@@ -10,9 +10,8 @@
class Solution {
public:
int pathSum(TreeNode* root, int sum) {
- unordered_map cnt;
- cnt[0] = 1;
- function dfs = [&](TreeNode* root, long long s) {
+ unordered_map cnt{{0, 1}};
+ auto dfs = [&](this auto&& dfs, TreeNode* root, long long s) -> int {
if (!root) {
return 0;
}
@@ -26,4 +25,4 @@ class Solution {
};
return dfs(root, 0);
}
-};
\ No newline at end of file
+};
diff --git a/lcci/04.12.Paths with Sum/Solution.py b/lcci/04.12.Paths with Sum/Solution.py
index 096e03e07552b..25e2179fe9ddc 100644
--- a/lcci/04.12.Paths with Sum/Solution.py
+++ b/lcci/04.12.Paths with Sum/Solution.py
@@ -1,14 +1,12 @@
# Definition for a binary tree node.
# class TreeNode:
-# def __init__(self, x):
-# self.val = x
-# self.left = None
-# self.right = None
-
-
+# def __init__(self, val=0, left=None, right=None):
+# self.val = val
+# self.left = left
+# self.right = right
class Solution:
- def pathSum(self, root: TreeNode, sum: int) -> int:
- def dfs(root: TreeNode, s: int):
+ def pathSum(self, root: Optional[TreeNode], sum: int) -> int:
+ def dfs(root: Optional[TreeNode], s: int) -> int:
if root is None:
return 0
s += root.val
diff --git a/lcci/04.12.Paths with Sum/Solution.swift b/lcci/04.12.Paths with Sum/Solution.swift
index cf1cbe9a5b95e..ad6fb0b161171 100644
--- a/lcci/04.12.Paths with Sum/Solution.swift
+++ b/lcci/04.12.Paths with Sum/Solution.swift
@@ -1,38 +1,36 @@
-/* class TreeNode {
-* var val: Int
-* var left: TreeNode?
-* var right: TreeNode?
-*
-* init(_ val: Int, _ left: TreeNode? = nil, _ right: TreeNode? = nil) {
-* self.val = val
-* self.left = left
-* self.right = right
-* }
-* }
-*/
-
+/**
+ * Definition for a binary tree node.
+ * public class TreeNode {
+ * public var val: Int
+ * public var left: TreeNode?
+ * public var right: TreeNode?
+ * public init() { self.val = 0; self.left = nil; self.right = nil; }
+ * public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
+ * public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
+ * self.val = val
+ * self.left = left
+ * self.right = right
+ * }
+ * }
+ */
class Solution {
- private var cnt: [Int: Int] = [:]
- private var target: Int = 0
-
func pathSum(_ root: TreeNode?, _ sum: Int) -> Int {
- cnt[0] = 1
- target = sum
- return dfs(root, 0)
- }
+ var cnt: [Int: Int] = [0: 1]
+
+ func dfs(_ root: TreeNode?, _ s: Int) -> Int {
+ guard let root = root else { return 0 }
- private func dfs(_ root: TreeNode?, _ s: Int) -> Int {
- guard let root = root else {
- return 0
+ var s = s + root.val
+ var ans = cnt[s - sum, default: 0]
+
+ cnt[s, default: 0] += 1
+ ans += dfs(root.left, s)
+ ans += dfs(root.right, s)
+ cnt[s, default: 0] -= 1
+
+ return ans
}
- let newSum = s + root.val
- let ans = cnt[newSum - target, default: 0]
-
- cnt[newSum, default: 0] += 1
- let leftPaths = dfs(root.left, newSum)
- let rightPaths = dfs(root.right, newSum)
- cnt[newSum, default: 0] -= 1
-
- return ans + leftPaths + rightPaths
+
+ return dfs(root, 0)
}
-}
\ No newline at end of file
+}
diff --git a/lcci/05.03.Reverse Bits/README.md b/lcci/05.03.Reverse Bits/README.md
index cbec7bc2a611d..fad13598cbc1b 100644
--- a/lcci/05.03.Reverse Bits/README.md
+++ b/lcci/05.03.Reverse Bits/README.md
@@ -134,13 +134,13 @@ function reverseBits(num: number): number {
class Solution {
func reverseBits(_ num: Int) -> Int {
var ans = 0
- var countZeros = 0
+ var cnt = 0
var j = 0
for i in 0..<32 {
- countZeros += (num >> i & 1 ^ 1)
- while countZeros > 1 {
- countZeros -= (num >> j & 1 ^ 1)
+ cnt += (num >> i & 1 ^ 1)
+ while cnt > 1 {
+ cnt -= (num >> j & 1 ^ 1)
j += 1
}
ans = max(ans, i - j + 1)
diff --git a/lcci/05.03.Reverse Bits/README_EN.md b/lcci/05.03.Reverse Bits/README_EN.md
index eb68a91114262..a9c88a668e959 100644
--- a/lcci/05.03.Reverse Bits/README_EN.md
+++ b/lcci/05.03.Reverse Bits/README_EN.md
@@ -142,13 +142,13 @@ function reverseBits(num: number): number {
class Solution {
func reverseBits(_ num: Int) -> Int {
var ans = 0
- var countZeros = 0
+ var cnt = 0
var j = 0
for i in 0..<32 {
- countZeros += (num >> i & 1 ^ 1)
- while countZeros > 1 {
- countZeros -= (num >> j & 1 ^ 1)
+ cnt += (num >> i & 1 ^ 1)
+ while cnt > 1 {
+ cnt -= (num >> j & 1 ^ 1)
j += 1
}
ans = max(ans, i - j + 1)
diff --git a/lcci/05.03.Reverse Bits/Solution.swift b/lcci/05.03.Reverse Bits/Solution.swift
index da1c7fe2acf4a..0bd69d4893f51 100644
--- a/lcci/05.03.Reverse Bits/Solution.swift
+++ b/lcci/05.03.Reverse Bits/Solution.swift
@@ -1,13 +1,13 @@
class Solution {
func reverseBits(_ num: Int) -> Int {
var ans = 0
- var countZeros = 0
+ var cnt = 0
var j = 0
for i in 0..<32 {
- countZeros += (num >> i & 1 ^ 1)
- while countZeros > 1 {
- countZeros -= (num >> j & 1 ^ 1)
+ cnt += (num >> i & 1 ^ 1)
+ while cnt > 1 {
+ cnt -= (num >> j & 1 ^ 1)
j += 1
}
ans = max(ans, i - j + 1)
diff --git a/lcci/08.02.Robot in a Grid/README.md b/lcci/08.02.Robot in a Grid/README.md
index cc1bf9f600664..8b60835e73b0c 100644
--- a/lcci/08.02.Robot in a Grid/README.md
+++ b/lcci/08.02.Robot in a Grid/README.md
@@ -15,7 +15,9 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.02.Robot%20in%20a%
设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。
+

+
网格中的障碍物和空位置分别用 1
和 0
来表示。
返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为 0 行 0 列。
示例 1:
@@ -26,7 +28,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.02.Robot%20in%20a%
[0,0,0 ]
]
输出: [[0,0],[0,1],[0,2],[1,2],[2,2]]
-解释:
+解释:
输入中标粗的位置即为输出表示的路径,即
0行0列(左上角) -> 0行1列 -> 0行2列 -> 1行2列 -> 2行2列(右下角)
说明: r 和 c 的值均不超过 100。
@@ -107,7 +109,7 @@ public:
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector> ans;
- function dfs = [&](int i, int j) -> bool {
+ auto dfs = [&](this auto&& dfs, int i, int j) -> bool {
if (i >= m || j >= n || obstacleGrid[i][j] == 1) {
return false;
}
diff --git a/lcci/08.02.Robot in a Grid/README_EN.md b/lcci/08.02.Robot in a Grid/README_EN.md
index 3ba14cfdcd585..bb37b1b1bf1d9 100644
--- a/lcci/08.02.Robot in a Grid/README_EN.md
+++ b/lcci/08.02.Robot in a Grid/README_EN.md
@@ -15,7 +15,9 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.02.Robot%20in%20a%
Imagine a robot sitting on the upper left corner of grid with r rows and c columns. The robot can only move in two directions, right and down, but certain cells are "off limits" such that the robot cannot step on them. Design an algorithm to find a path for the robot from the top left to the bottom right.
+

+
"off limits" and empty grid are represented by 1
and 0
respectively.
Return a valid path, consisting of row number and column number of grids in the path.
Example 1:
@@ -116,7 +118,7 @@ public:
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector> ans;
- function dfs = [&](int i, int j) -> bool {
+ auto dfs = [&](this auto&& dfs, int i, int j) -> bool {
if (i >= m || j >= n || obstacleGrid[i][j] == 1) {
return false;
}
diff --git a/lcci/08.02.Robot in a Grid/Solution.cpp b/lcci/08.02.Robot in a Grid/Solution.cpp
index e9657e05ef757..f7daef341d833 100644
--- a/lcci/08.02.Robot in a Grid/Solution.cpp
+++ b/lcci/08.02.Robot in a Grid/Solution.cpp
@@ -4,7 +4,7 @@ class Solution {
int m = obstacleGrid.size();
int n = obstacleGrid[0].size();
vector> ans;
- function dfs = [&](int i, int j) -> bool {
+ auto dfs = [&](this auto&& dfs, int i, int j) -> bool {
if (i >= m || j >= n || obstacleGrid[i][j] == 1) {
return false;
}
@@ -18,4 +18,4 @@ class Solution {
};
return dfs(0, 0) ? ans : vector>();
}
-};
\ No newline at end of file
+};
diff --git a/lcci/08.06.Hanota/README.md b/lcci/08.06.Hanota/README.md
index 04efe8940d384..b5dc3d3966adc 100644
--- a/lcci/08.06.Hanota/README.md
+++ b/lcci/08.06.Hanota/README.md
@@ -91,7 +91,7 @@ class Solution {
class Solution {
public:
void hanota(vector& A, vector& B, vector& C) {
- function&, vector&, vector&)> dfs = [&](int n, vector& a, vector& b, vector& c) {
+ auto dfs = [&](this auto&& dfs, int n, vector& a, vector& b, vector& c) {
if (n == 1) {
c.push_back(a.back());
a.pop_back();
diff --git a/lcci/08.06.Hanota/README_EN.md b/lcci/08.06.Hanota/README_EN.md
index 6d4243950efb0..3f52664c584e4 100644
--- a/lcci/08.06.Hanota/README_EN.md
+++ b/lcci/08.06.Hanota/README_EN.md
@@ -98,7 +98,7 @@ class Solution {
class Solution {
public:
void hanota(vector& A, vector& B, vector& C) {
- function&, vector&, vector&)> dfs = [&](int n, vector& a, vector& b, vector& c) {
+ auto dfs = [&](this auto&& dfs, int n, vector& a, vector& b, vector& c) {
if (n == 1) {
c.push_back(a.back());
a.pop_back();
diff --git a/lcci/08.06.Hanota/Solution.cpp b/lcci/08.06.Hanota/Solution.cpp
index 7cf7ad9647324..3b5b8d483ce8b 100644
--- a/lcci/08.06.Hanota/Solution.cpp
+++ b/lcci/08.06.Hanota/Solution.cpp
@@ -1,7 +1,7 @@
class Solution {
public:
void hanota(vector& A, vector& B, vector& C) {
- function&, vector&, vector&)> dfs = [&](int n, vector& a, vector& b, vector& c) {
+ auto dfs = [&](this auto&& dfs, int n, vector& a, vector& b, vector& c) {
if (n == 1) {
c.push_back(a.back());
a.pop_back();
@@ -14,4 +14,4 @@ class Solution {
};
dfs(A.size(), A, B, C);
}
-};
\ No newline at end of file
+};
diff --git a/lcci/08.07.Permutation I/README.md b/lcci/08.07.Permutation I/README.md
index 34a783fde5bac..9d3e78c2da0d4 100644
--- a/lcci/08.07.Permutation I/README.md
+++ b/lcci/08.07.Permutation I/README.md
@@ -45,7 +45,7 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.07.Permutation%20I
### 方法一:DFS(回溯)
-我们设计一个函数 $dfs(i)$ 表示已经填完了前 $i$ 个位置,现在需要填第 $i+1$ 个位置。枚举所有可能的字符,如果这个字符没有被填过,就填入这个字符,然后继续填下一个位置,直到填完所有的位置。
+我们设计一个函数 $\textit{dfs}(i)$ 表示已经填完了前 $i$ 个位置,现在需要填第 $i+1$ 个位置。枚举所有可能的字符,如果这个字符没有被填过,就填入这个字符,然后继续填下一个位置,直到填完所有的位置。
时间复杂度 $O(n \times n!)$,其中 $n$ 是字符串的长度。一共有 $n!$ 个排列,每个排列需要 $O(n)$ 的时间来构造。
@@ -57,22 +57,20 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.07.Permutation%20I
class Solution:
def permutation(self, S: str) -> List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
for j, c in enumerate(S):
- if vis[j]:
- continue
- vis[j] = True
- t.append(c)
- dfs(i + 1)
- t.pop()
- vis[j] = False
+ if not vis[j]:
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
+ ans = []
n = len(S)
vis = [False] * n
- ans = []
- t = []
+ t = list(S)
dfs(0)
return ans
```
@@ -82,30 +80,31 @@ class Solution:
```java
class Solution {
private char[] s;
- private boolean[] vis = new boolean['z' + 1];
+ private char[] t;
+ private boolean[] vis;
private List ans = new ArrayList<>();
- private StringBuilder t = new StringBuilder();
public String[] permutation(String S) {
s = S.toCharArray();
+ int n = s.length;
+ vis = new boolean[n];
+ t = new char[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == s.length) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (char c : s) {
- if (vis[c]) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[c] = true;
- t.append(c);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[c] = false;
}
}
}
@@ -119,51 +118,49 @@ public:
vector permutation(string S) {
int n = S.size();
vector vis(n);
+ string t = S;
vector ans;
- string t;
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) {
if (i >= n) {
- ans.push_back(t);
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j]) {
- continue;
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(S[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
return ans;
}
};
+
```
#### Go
```go
func permutation(S string) (ans []string) {
- t := []byte{}
- vis := make([]bool, len(S))
+ t := []byte(S)
+ n := len(t)
+ vis := make([]bool, n)
var dfs func(int)
dfs = func(i int) {
- if i >= len(S) {
+ if i >= n {
ans = append(ans, string(t))
return
}
for j := range S {
- if vis[j] {
- continue
+ if !vis[j] {
+ vis[j] = true
+ t[i] = S[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, S[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
@@ -178,7 +175,7 @@ function permutation(S: string): string[] {
const n = S.length;
const vis: boolean[] = Array(n).fill(false);
const ans: string[] = [];
- const t: string[] = [];
+ const t: string[] = Array(n).fill('');
const dfs = (i: number) => {
if (i >= n) {
ans.push(t.join(''));
@@ -189,9 +186,8 @@ function permutation(S: string): string[] {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
@@ -211,7 +207,7 @@ var permutation = function (S) {
const n = S.length;
const vis = Array(n).fill(false);
const ans = [];
- const t = [];
+ const t = Array(n).fill('');
const dfs = i => {
if (i >= n) {
ans.push(t.join(''));
@@ -222,9 +218,8 @@ var permutation = function (S) {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
@@ -237,33 +232,30 @@ var permutation = function (S) {
```swift
class Solution {
- private var s: [Character] = []
- private var vis: [Bool] = Array(repeating: false, count: 128)
- private var ans: [String] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- s = Array(S)
- dfs(0)
- return ans
- }
-
- private func dfs(_ i: Int) {
- if i == s.count {
- ans.append(t)
- return
- }
- for c in s {
- let index = Int(c.asciiValue!)
- if vis[index] {
- continue
+ var ans: [String] = []
+ let s = Array(S)
+ var t = s
+ var vis = Array(repeating: false, count: s.count)
+ let n = s.count
+
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0.. List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
for j, c in enumerate(S):
- if vis[j]:
- continue
- vis[j] = True
- t.append(c)
- dfs(i + 1)
- t.pop()
- vis[j] = False
+ if not vis[j]:
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
+ ans = []
n = len(S)
vis = [False] * n
- ans = []
- t = []
+ t = list(S)
dfs(0)
return ans
```
@@ -88,30 +86,31 @@ class Solution:
```java
class Solution {
private char[] s;
- private boolean[] vis = new boolean['z' + 1];
+ private char[] t;
+ private boolean[] vis;
private List ans = new ArrayList<>();
- private StringBuilder t = new StringBuilder();
public String[] permutation(String S) {
s = S.toCharArray();
+ int n = s.length;
+ vis = new boolean[n];
+ t = new char[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == s.length) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (char c : s) {
- if (vis[c]) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[c] = true;
- t.append(c);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[c] = false;
}
}
}
@@ -125,22 +124,20 @@ public:
vector permutation(string S) {
int n = S.size();
vector vis(n);
+ string t = S;
vector ans;
- string t;
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) {
if (i >= n) {
- ans.push_back(t);
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j]) {
- continue;
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(S[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
@@ -153,23 +150,22 @@ public:
```go
func permutation(S string) (ans []string) {
- t := []byte{}
- vis := make([]bool, len(S))
+ t := []byte(S)
+ n := len(t)
+ vis := make([]bool, n)
var dfs func(int)
dfs = func(i int) {
- if i >= len(S) {
+ if i >= n {
ans = append(ans, string(t))
return
}
for j := range S {
- if vis[j] {
- continue
+ if !vis[j] {
+ vis[j] = true
+ t[i] = S[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, S[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
@@ -184,7 +180,7 @@ function permutation(S: string): string[] {
const n = S.length;
const vis: boolean[] = Array(n).fill(false);
const ans: string[] = [];
- const t: string[] = [];
+ const t: string[] = Array(n).fill('');
const dfs = (i: number) => {
if (i >= n) {
ans.push(t.join(''));
@@ -195,9 +191,8 @@ function permutation(S: string): string[] {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
@@ -217,7 +212,7 @@ var permutation = function (S) {
const n = S.length;
const vis = Array(n).fill(false);
const ans = [];
- const t = [];
+ const t = Array(n).fill('');
const dfs = i => {
if (i >= n) {
ans.push(t.join(''));
@@ -228,9 +223,8 @@ var permutation = function (S) {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
@@ -243,33 +237,30 @@ var permutation = function (S) {
```swift
class Solution {
- private var s: [Character] = []
- private var vis: [Bool] = Array(repeating: false, count: 128)
- private var ans: [String] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- s = Array(S)
- dfs(0)
- return ans
- }
-
- private func dfs(_ i: Int) {
- if i == s.count {
- ans.append(t)
- return
- }
- for c in s {
- let index = Int(c.asciiValue!)
- if vis[index] {
- continue
+ var ans: [String] = []
+ let s = Array(S)
+ var t = s
+ var vis = Array(repeating: false, count: s.count)
+ let n = s.count
+
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0.. permutation(string S) {
int n = S.size();
vector vis(n);
+ string t = S;
vector ans;
- string t;
- function dfs = [&](int i) {
+ auto dfs = [&](this auto&& dfs, int i) {
if (i >= n) {
- ans.push_back(t);
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j]) {
- continue;
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(S[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
return ans;
}
-};
\ No newline at end of file
+};
diff --git a/lcci/08.07.Permutation I/Solution.go b/lcci/08.07.Permutation I/Solution.go
index 20d5c55fded5f..1f84fb692481e 100644
--- a/lcci/08.07.Permutation I/Solution.go
+++ b/lcci/08.07.Permutation I/Solution.go
@@ -1,23 +1,22 @@
func permutation(S string) (ans []string) {
- t := []byte{}
- vis := make([]bool, len(S))
+ t := []byte(S)
+ n := len(t)
+ vis := make([]bool, n)
var dfs func(int)
dfs = func(i int) {
- if i >= len(S) {
+ if i >= n {
ans = append(ans, string(t))
return
}
for j := range S {
- if vis[j] {
- continue
+ if !vis[j] {
+ vis[j] = true
+ t[i] = S[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, S[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
return
-}
\ No newline at end of file
+}
diff --git a/lcci/08.07.Permutation I/Solution.java b/lcci/08.07.Permutation I/Solution.java
index 896ed99f9d1ea..f65456f945759 100644
--- a/lcci/08.07.Permutation I/Solution.java
+++ b/lcci/08.07.Permutation I/Solution.java
@@ -1,29 +1,30 @@
class Solution {
private char[] s;
- private boolean[] vis = new boolean['z' + 1];
+ private char[] t;
+ private boolean[] vis;
private List ans = new ArrayList<>();
- private StringBuilder t = new StringBuilder();
public String[] permutation(String S) {
s = S.toCharArray();
+ int n = s.length;
+ vis = new boolean[n];
+ t = new char[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == s.length) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (char c : s) {
- if (vis[c]) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j]) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[c] = true;
- t.append(c);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[c] = false;
}
}
-}
\ No newline at end of file
+}
diff --git a/lcci/08.07.Permutation I/Solution.js b/lcci/08.07.Permutation I/Solution.js
index f1dcb5d98f69f..c18ebd79c017d 100644
--- a/lcci/08.07.Permutation I/Solution.js
+++ b/lcci/08.07.Permutation I/Solution.js
@@ -6,7 +6,7 @@ var permutation = function (S) {
const n = S.length;
const vis = Array(n).fill(false);
const ans = [];
- const t = [];
+ const t = Array(n).fill('');
const dfs = i => {
if (i >= n) {
ans.push(t.join(''));
@@ -17,9 +17,8 @@ var permutation = function (S) {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
diff --git a/lcci/08.07.Permutation I/Solution.py b/lcci/08.07.Permutation I/Solution.py
index 537c2f0484bb7..7e64e799f8691 100644
--- a/lcci/08.07.Permutation I/Solution.py
+++ b/lcci/08.07.Permutation I/Solution.py
@@ -1,21 +1,19 @@
class Solution:
def permutation(self, S: str) -> List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
for j, c in enumerate(S):
- if vis[j]:
- continue
- vis[j] = True
- t.append(c)
- dfs(i + 1)
- t.pop()
- vis[j] = False
+ if not vis[j]:
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
+ ans = []
n = len(S)
vis = [False] * n
- ans = []
- t = []
+ t = list(S)
dfs(0)
return ans
diff --git a/lcci/08.07.Permutation I/Solution.swift b/lcci/08.07.Permutation I/Solution.swift
index 48803e420ab09..33a987fc012d9 100644
--- a/lcci/08.07.Permutation I/Solution.swift
+++ b/lcci/08.07.Permutation I/Solution.swift
@@ -1,30 +1,27 @@
class Solution {
- private var s: [Character] = []
- private var vis: [Bool] = Array(repeating: false, count: 128)
- private var ans: [String] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- s = Array(S)
- dfs(0)
- return ans
- }
+ var ans: [String] = []
+ let s = Array(S)
+ var t = s
+ var vis = Array(repeating: false, count: s.count)
+ let n = s.count
- private func dfs(_ i: Int) {
- if i == s.count {
- ans.append(t)
- return
- }
- for c in s {
- let index = Int(c.asciiValue!)
- if vis[index] {
- continue
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0.. {
if (i >= n) {
ans.push(t.join(''));
@@ -13,9 +13,8 @@ function permutation(S: string): string[] {
continue;
}
vis[j] = true;
- t.push(S[j]);
+ t[i] = S[j];
dfs(i + 1);
- t.pop();
vis[j] = false;
}
};
diff --git a/lcci/08.08.Permutation II/README.md b/lcci/08.08.Permutation II/README.md
index 90b72d44fb2f1..936fb1b9d90cf 100644
--- a/lcci/08.08.Permutation II/README.md
+++ b/lcci/08.08.Permutation II/README.md
@@ -39,12 +39,12 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.08.Permutation%20I
我们可以先对字符串按照字符进行排序,这样就可以将重复的字符放在一起,方便我们进行去重。
-然后,我们设计一个函数 $dfs(i)$,表示当前需要填写第 $i$ 个位置的字符。函数的具体实现如下:
+然后,我们设计一个函数 $\textit{dfs}(i)$,表示当前需要填写第 $i$ 个位置的字符。函数的具体实现如下:
- 如果 $i = n$,说明我们已经填写完毕,将当前排列加入答案数组中,然后返回。
-- 否则,我们枚举第 $i$ 个位置的字符 $s[j]$,其中 $j$ 的范围是 $[0, n - 1]$。我们需要保证 $s[j]$ 没有被使用过,并且与前面枚举的字符不同,这样才能保证当前排列不重复。如果满足条件,我们就可以填写 $s[j]$,并继续递归地填写下一个位置,即调用 $dfs(i + 1)$。在递归调用结束后,我们需要将 $s[j]$ 标记为未使用,以便于进行后面的枚举。
+- 否则,我们枚举第 $i$ 个位置的字符 $\textit{s}[j]$,其中 $j$ 的范围是 $[0, n - 1]$。我们需要保证 $\textit{s}[j]$ 没有被使用过,并且与前面枚举的字符不同,这样才能保证当前排列不重复。如果满足条件,我们就可以填写 $\textit{s}[j]$,并继续递归地填写下一个位置,即调用 $\textit{dfs}(i + 1)$。在递归调用结束后,我们需要将 $\textit{s}[j]$ 标记为未使用,以便于进行后面的枚举。
-在主函数中,我们首先对字符串进行排序,然后调用 $dfs(0)$,即从第 $0$ 个位置开始填写,最终返回答案数组即可。
+在主函数中,我们首先对字符串进行排序,然后调用 $\textit{dfs}(0)$,即从第 $0$ 个位置开始填写,最终返回答案数组即可。
时间复杂度 $O(n \times n!)$,空间复杂度 $O(n)$。其中 $n$ 是字符串 $s$ 的长度。需要进行 $n!$ 次枚举,每次枚举需要 $O(n)$ 的时间来判断是否重复。另外,我们需要一个标记数组来标记每个位置是否被使用过,因此空间复杂度为 $O(n)$。
@@ -56,21 +56,20 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/08.08.Permutation%20I
class Solution:
def permutation(self, S: str) -> List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
- for j in range(n):
- if vis[j] or (j and cs[j] == cs[j - 1] and not vis[j - 1]):
- continue
- t[i] = cs[j]
- vis[j] = True
- dfs(i + 1)
- vis[j] = False
-
- cs = sorted(S)
- n = len(cs)
+ for j, c in enumerate(s):
+ if not vis[j] and (j == 0 or s[j] != s[j - 1] or vis[j - 1]):
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
+
+ s = sorted(S)
ans = []
- t = [None] * n
+ t = s[:]
+ n = len(s)
vis = [False] * n
dfs(0)
return ans
@@ -80,35 +79,33 @@ class Solution:
```java
class Solution {
- private int n;
- private char[] cs;
- private List ans = new ArrayList<>();
+ private char[] s;
+ private char[] t;
private boolean[] vis;
- private StringBuilder t = new StringBuilder();
+ private List ans = new ArrayList<>();
public String[] permutation(String S) {
- cs = S.toCharArray();
- n = cs.length;
- Arrays.sort(cs);
+ int n = S.length();
+ s = S.toCharArray();
+ Arrays.sort(s);
+ t = new char[n];
vis = new boolean[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == n) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (int j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j] && (j == 0 || s[j] != s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.append(cs[j]);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[j] = false;
}
}
}
@@ -120,26 +117,23 @@ class Solution {
class Solution {
public:
vector permutation(string S) {
- vector cs(S.begin(), S.end());
- sort(cs.begin(), cs.end());
- int n = cs.size();
- vector ans;
+ ranges::sort(S);
+ string t = S;
+ int n = t.size();
vector vis(n);
- string t;
- function dfs = [&](int i) {
- if (i == n) {
- ans.push_back(t);
+ vector ans;
+ auto dfs = [&](this auto&& dfs, int i) {
+ if (i >= n) {
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j] || (j && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ if (!vis[j] && (j == 0 || S[j] != S[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(cs[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
@@ -152,26 +146,23 @@ public:
```go
func permutation(S string) (ans []string) {
- cs := []byte(S)
- sort.Slice(cs, func(i, j int) bool { return cs[i] < cs[j] })
- t := []byte{}
- n := len(cs)
- vis := make([]bool, n)
+ s := []byte(S)
+ sort.Slice(s, func(i, j int) bool { return s[i] < s[j] })
+ t := slices.Clone(s)
+ vis := make([]bool, len(s))
var dfs func(int)
dfs = func(i int) {
- if i == n {
+ if i >= len(s) {
ans = append(ans, string(t))
return
}
- for j := 0; j < n; j++ {
- if vis[j] || (j > 0 && !vis[j-1] && cs[j] == cs[j-1]) {
- continue
+ for j := range s {
+ if !vis[j] && (j == 0 || s[j] != s[j-1] || vis[j-1]) {
+ vis[j] = true
+ t[i] = s[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, cs[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
@@ -183,25 +174,23 @@ func permutation(S string) (ans []string) {
```ts
function permutation(S: string): string[] {
- const cs: string[] = S.split('').sort();
- const ans: string[] = [];
- const n = cs.length;
+ const s: string[] = S.split('').sort();
+ const n = s.length;
+ const t = Array(n).fill('');
const vis: boolean[] = Array(n).fill(false);
- const t: string[] = [];
+ const ans: string[] = [];
const dfs = (i: number) => {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
@@ -217,25 +206,23 @@ function permutation(S: string): string[] {
* @return {string[]}
*/
var permutation = function (S) {
- const cs = S.split('').sort();
- const ans = [];
- const n = cs.length;
+ const s = S.split('').sort();
+ const n = s.length;
+ const t = Array(n).fill('');
const vis = Array(n).fill(false);
- const t = [];
+ const ans = [];
const dfs = i => {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
@@ -247,36 +234,30 @@ var permutation = function (S) {
```swift
class Solution {
- private var n: Int = 0
- private var cs: [Character] = []
- private var ans: [String] = []
- private var vis: [Bool] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- cs = Array(S)
- n = cs.count
- cs.sort()
- vis = Array(repeating: false, count: n)
- dfs(0)
- return ans
- }
-
- private func dfs(_ i: Int) {
- if i == n {
- ans.append(t)
- return
- }
- for j in 0.. 0 && !vis[j - 1] && cs[j] == cs[j - 1]) {
- continue
+ var ans: [String] = []
+ var s: [Character] = Array(S).sorted()
+ var t: [Character] = Array(repeating: " ", count: s.count)
+ var vis: [Bool] = Array(repeating: false, count: s.count)
+ let n = s.count
+
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0..
@@ -64,21 +64,20 @@ The time complexity is $O(n \times n!)$, and the space complexity is $O(n)$. Her
class Solution:
def permutation(self, S: str) -> List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
- for j in range(n):
- if vis[j] or (j and cs[j] == cs[j - 1] and not vis[j - 1]):
- continue
- t[i] = cs[j]
- vis[j] = True
- dfs(i + 1)
- vis[j] = False
-
- cs = sorted(S)
- n = len(cs)
+ for j, c in enumerate(s):
+ if not vis[j] and (j == 0 or s[j] != s[j - 1] or vis[j - 1]):
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
+
+ s = sorted(S)
ans = []
- t = [None] * n
+ t = s[:]
+ n = len(s)
vis = [False] * n
dfs(0)
return ans
@@ -88,35 +87,33 @@ class Solution:
```java
class Solution {
- private int n;
- private char[] cs;
- private List ans = new ArrayList<>();
+ private char[] s;
+ private char[] t;
private boolean[] vis;
- private StringBuilder t = new StringBuilder();
+ private List ans = new ArrayList<>();
public String[] permutation(String S) {
- cs = S.toCharArray();
- n = cs.length;
- Arrays.sort(cs);
+ int n = S.length();
+ s = S.toCharArray();
+ Arrays.sort(s);
+ t = new char[n];
vis = new boolean[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == n) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (int j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j] && (j == 0 || s[j] != s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.append(cs[j]);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[j] = false;
}
}
}
@@ -128,26 +125,23 @@ class Solution {
class Solution {
public:
vector permutation(string S) {
- vector cs(S.begin(), S.end());
- sort(cs.begin(), cs.end());
- int n = cs.size();
- vector ans;
+ ranges::sort(S);
+ string t = S;
+ int n = t.size();
vector vis(n);
- string t;
- function dfs = [&](int i) {
- if (i == n) {
- ans.push_back(t);
+ vector ans;
+ auto dfs = [&](this auto&& dfs, int i) {
+ if (i >= n) {
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j] || (j && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ if (!vis[j] && (j == 0 || S[j] != S[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(cs[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
@@ -160,26 +154,23 @@ public:
```go
func permutation(S string) (ans []string) {
- cs := []byte(S)
- sort.Slice(cs, func(i, j int) bool { return cs[i] < cs[j] })
- t := []byte{}
- n := len(cs)
- vis := make([]bool, n)
+ s := []byte(S)
+ sort.Slice(s, func(i, j int) bool { return s[i] < s[j] })
+ t := slices.Clone(s)
+ vis := make([]bool, len(s))
var dfs func(int)
dfs = func(i int) {
- if i == n {
+ if i >= len(s) {
ans = append(ans, string(t))
return
}
- for j := 0; j < n; j++ {
- if vis[j] || (j > 0 && !vis[j-1] && cs[j] == cs[j-1]) {
- continue
+ for j := range s {
+ if !vis[j] && (j == 0 || s[j] != s[j-1] || vis[j-1]) {
+ vis[j] = true
+ t[i] = s[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, cs[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
@@ -191,25 +182,23 @@ func permutation(S string) (ans []string) {
```ts
function permutation(S: string): string[] {
- const cs: string[] = S.split('').sort();
- const ans: string[] = [];
- const n = cs.length;
+ const s: string[] = S.split('').sort();
+ const n = s.length;
+ const t = Array(n).fill('');
const vis: boolean[] = Array(n).fill(false);
- const t: string[] = [];
+ const ans: string[] = [];
const dfs = (i: number) => {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
@@ -225,25 +214,23 @@ function permutation(S: string): string[] {
* @return {string[]}
*/
var permutation = function (S) {
- const cs = S.split('').sort();
- const ans = [];
- const n = cs.length;
+ const s = S.split('').sort();
+ const n = s.length;
+ const t = Array(n).fill('');
const vis = Array(n).fill(false);
- const t = [];
+ const ans = [];
const dfs = i => {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
@@ -255,36 +242,30 @@ var permutation = function (S) {
```swift
class Solution {
- private var n: Int = 0
- private var cs: [Character] = []
- private var ans: [String] = []
- private var vis: [Bool] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- cs = Array(S)
- n = cs.count
- cs.sort()
- vis = Array(repeating: false, count: n)
- dfs(0)
- return ans
- }
-
- private func dfs(_ i: Int) {
- if i == n {
- ans.append(t)
- return
- }
- for j in 0.. 0 && !vis[j - 1] && cs[j] == cs[j - 1]) {
- continue
+ var ans: [String] = []
+ var s: [Character] = Array(S).sorted()
+ var t: [Character] = Array(repeating: " ", count: s.count)
+ var vis: [Bool] = Array(repeating: false, count: s.count)
+ let n = s.count
+
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0.. permutation(string S) {
- vector cs(S.begin(), S.end());
- sort(cs.begin(), cs.end());
- int n = cs.size();
- vector ans;
+ ranges::sort(S);
+ string t = S;
+ int n = t.size();
vector vis(n);
- string t;
- function dfs = [&](int i) {
- if (i == n) {
- ans.push_back(t);
+ vector ans;
+ auto dfs = [&](this auto&& dfs, int i) {
+ if (i >= n) {
+ ans.emplace_back(t);
return;
}
for (int j = 0; j < n; ++j) {
- if (vis[j] || (j && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ if (!vis[j] && (j == 0 || S[j] != S[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = S[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push_back(cs[j]);
- dfs(i + 1);
- t.pop_back();
- vis[j] = false;
}
};
dfs(0);
return ans;
}
-};
\ No newline at end of file
+};
diff --git a/lcci/08.08.Permutation II/Solution.go b/lcci/08.08.Permutation II/Solution.go
index bdb449b7c9389..ce2be679b7676 100644
--- a/lcci/08.08.Permutation II/Solution.go
+++ b/lcci/08.08.Permutation II/Solution.go
@@ -1,26 +1,23 @@
func permutation(S string) (ans []string) {
- cs := []byte(S)
- sort.Slice(cs, func(i, j int) bool { return cs[i] < cs[j] })
- t := []byte{}
- n := len(cs)
- vis := make([]bool, n)
+ s := []byte(S)
+ sort.Slice(s, func(i, j int) bool { return s[i] < s[j] })
+ t := slices.Clone(s)
+ vis := make([]bool, len(s))
var dfs func(int)
dfs = func(i int) {
- if i == n {
+ if i >= len(s) {
ans = append(ans, string(t))
return
}
- for j := 0; j < n; j++ {
- if vis[j] || (j > 0 && !vis[j-1] && cs[j] == cs[j-1]) {
- continue
+ for j := range s {
+ if !vis[j] && (j == 0 || s[j] != s[j-1] || vis[j-1]) {
+ vis[j] = true
+ t[i] = s[j]
+ dfs(i + 1)
+ vis[j] = false
}
- vis[j] = true
- t = append(t, cs[j])
- dfs(i + 1)
- t = t[:len(t)-1]
- vis[j] = false
}
}
dfs(0)
return
-}
\ No newline at end of file
+}
diff --git a/lcci/08.08.Permutation II/Solution.java b/lcci/08.08.Permutation II/Solution.java
index e0dffd2d0cfae..b03452a42cd0d 100644
--- a/lcci/08.08.Permutation II/Solution.java
+++ b/lcci/08.08.Permutation II/Solution.java
@@ -1,33 +1,31 @@
class Solution {
- private int n;
- private char[] cs;
- private List ans = new ArrayList<>();
+ private char[] s;
+ private char[] t;
private boolean[] vis;
- private StringBuilder t = new StringBuilder();
+ private List ans = new ArrayList<>();
public String[] permutation(String S) {
- cs = S.toCharArray();
- n = cs.length;
- Arrays.sort(cs);
+ int n = S.length();
+ s = S.toCharArray();
+ Arrays.sort(s);
+ t = new char[n];
vis = new boolean[n];
dfs(0);
return ans.toArray(new String[0]);
}
private void dfs(int i) {
- if (i == n) {
- ans.add(t.toString());
+ if (i >= s.length) {
+ ans.add(new String(t));
return;
}
- for (int j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] == cs[j - 1])) {
- continue;
+ for (int j = 0; j < s.length; ++j) {
+ if (!vis[j] && (j == 0 || s[j] != s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.append(cs[j]);
- dfs(i + 1);
- t.deleteCharAt(t.length() - 1);
- vis[j] = false;
}
}
-}
\ No newline at end of file
+}
diff --git a/lcci/08.08.Permutation II/Solution.js b/lcci/08.08.Permutation II/Solution.js
index 44aed97be109c..4bb6b59170d9f 100644
--- a/lcci/08.08.Permutation II/Solution.js
+++ b/lcci/08.08.Permutation II/Solution.js
@@ -3,25 +3,23 @@
* @return {string[]}
*/
var permutation = function (S) {
- const cs = S.split('').sort();
- const ans = [];
- const n = cs.length;
+ const s = S.split('').sort();
+ const n = s.length;
+ const t = Array(n).fill('');
const vis = Array(n).fill(false);
- const t = [];
+ const ans = [];
const dfs = i => {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
diff --git a/lcci/08.08.Permutation II/Solution.py b/lcci/08.08.Permutation II/Solution.py
index e6b19ccba395a..e39d27633f10d 100644
--- a/lcci/08.08.Permutation II/Solution.py
+++ b/lcci/08.08.Permutation II/Solution.py
@@ -1,21 +1,20 @@
class Solution:
def permutation(self, S: str) -> List[str]:
def dfs(i: int):
- if i == n:
+ if i >= n:
ans.append("".join(t))
return
- for j in range(n):
- if vis[j] or (j and cs[j] == cs[j - 1] and not vis[j - 1]):
- continue
- t[i] = cs[j]
- vis[j] = True
- dfs(i + 1)
- vis[j] = False
+ for j, c in enumerate(s):
+ if not vis[j] and (j == 0 or s[j] != s[j - 1] or vis[j - 1]):
+ vis[j] = True
+ t[i] = c
+ dfs(i + 1)
+ vis[j] = False
- cs = sorted(S)
- n = len(cs)
+ s = sorted(S)
ans = []
- t = [None] * n
+ t = s[:]
+ n = len(s)
vis = [False] * n
dfs(0)
return ans
diff --git a/lcci/08.08.Permutation II/Solution.swift b/lcci/08.08.Permutation II/Solution.swift
index a00ac743ff082..84151d360dc86 100644
--- a/lcci/08.08.Permutation II/Solution.swift
+++ b/lcci/08.08.Permutation II/Solution.swift
@@ -1,33 +1,27 @@
class Solution {
- private var n: Int = 0
- private var cs: [Character] = []
- private var ans: [String] = []
- private var vis: [Bool] = []
- private var t: String = ""
-
func permutation(_ S: String) -> [String] {
- cs = Array(S)
- n = cs.count
- cs.sort()
- vis = Array(repeating: false, count: n)
- dfs(0)
- return ans
- }
+ var ans: [String] = []
+ var s: [Character] = Array(S).sorted()
+ var t: [Character] = Array(repeating: " ", count: s.count)
+ var vis: [Bool] = Array(repeating: false, count: s.count)
+ let n = s.count
- private func dfs(_ i: Int) {
- if i == n {
- ans.append(t)
- return
- }
- for j in 0.. 0 && !vis[j - 1] && cs[j] == cs[j - 1]) {
- continue
+ func dfs(_ i: Int) {
+ if i >= n {
+ ans.append(String(t))
+ return
+ }
+ for j in 0.. {
- if (i === n) {
+ if (i >= n) {
ans.push(t.join(''));
return;
}
for (let j = 0; j < n; ++j) {
- if (vis[j] || (j > 0 && !vis[j - 1] && cs[j] === cs[j - 1])) {
- continue;
+ if (!vis[j] && (j === 0 || s[j] !== s[j - 1] || vis[j - 1])) {
+ vis[j] = true;
+ t[i] = s[j];
+ dfs(i + 1);
+ vis[j] = false;
}
- vis[j] = true;
- t.push(cs[j]);
- dfs(i + 1);
- t.pop();
- vis[j] = false;
}
};
dfs(0);
diff --git a/lcci/08.09.Bracket/README.md b/lcci/08.09.Bracket/README.md
index 6e4a46e5769b9..7272118acce4c 100644
--- a/lcci/08.09.Bracket/README.md
+++ b/lcci/08.09.Bracket/README.md
@@ -104,8 +104,7 @@ class Solution {
public:
vector generateParenthesis(int n) {
vector ans;
- function dfs;
- dfs = [&](int l, int r, string t) {
+ auto dfs = [&](this auto&& dfs, int l, int r, string t) {
if (l > n || r > n || l < r) return;
if (l == n && r == n) {
ans.push_back(t);
diff --git a/lcci/08.09.Bracket/README_EN.md b/lcci/08.09.Bracket/README_EN.md
index 295bd24efe68f..36ee966e887ab 100644
--- a/lcci/08.09.Bracket/README_EN.md
+++ b/lcci/08.09.Bracket/README_EN.md
@@ -112,8 +112,7 @@ class Solution {
public:
vector generateParenthesis(int n) {
vector ans;
- function dfs;
- dfs = [&](int l, int r, string t) {
+ auto dfs = [&](this auto&& dfs, int l, int r, string t) {
if (l > n || r > n || l < r) return;
if (l == n && r == n) {
ans.push_back(t);
diff --git a/lcci/08.09.Bracket/Solution.cpp b/lcci/08.09.Bracket/Solution.cpp
index 4c9a371b251c4..d386301341d2c 100644
--- a/lcci/08.09.Bracket/Solution.cpp
+++ b/lcci/08.09.Bracket/Solution.cpp
@@ -2,8 +2,7 @@ class Solution {
public:
vector generateParenthesis(int n) {
vector ans;
- function dfs;
- dfs = [&](int l, int r, string t) {
+ auto dfs = [&](this auto&& dfs, int l, int r, string t) {
if (l > n || r > n || l < r) return;
if (l == n && r == n) {
ans.push_back(t);
@@ -15,4 +14,4 @@ class Solution {
dfs(0, 0, "");
return ans;
}
-};
\ No newline at end of file
+};
diff --git a/lcci/17.15.Longest Word/README.md b/lcci/17.15.Longest Word/README.md
index a9840705c9c6a..0f6dffe5c3aa8 100644
--- a/lcci/17.15.Longest Word/README.md
+++ b/lcci/17.15.Longest Word/README.md
@@ -32,117 +32,79 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/17.15.Longest%20Word/
-### 方法一:前缀树 + DFS
+### 方法一:哈希表 + 排序 + DFS
+
+注意,题目中,每个单词实际上允许重复使用。
+
+我们可以用一个哈希表 $\textit{s}$ 存储所有单词,然后对单词按照长度降序排序,如果长度相同,按照字典序升序排序。
+
+接下来,我们遍历排序后的单词列表,对于每个单词 $\textit{w}$,我们先将其从哈希表 $\textit{s}$ 中移除,然后使用深度优先搜索 $\textit{dfs}$ 判断 $\textit{w}$ 是否可以由其他单词组成,如果可以,返回 $\textit{w}$。
+
+函数 $\textit{dfs}$ 的执行逻辑如下:
+
+- 如果 $\textit{w}$ 为空,返回 $\text{true}$;
+- 遍历 $\textit{w}$ 的所有前缀,如果前缀在哈希表 $\textit{s}$ 中且 $\textit{dfs}$ 返回 $\text{true}$,则返回 $\text{true}$;
+- 如果没有符合条件的前缀,返回 $\text{false}$。
+
+如果没有找到符合条件的单词,返回空字符串。
+
+时间复杂度 $O(m \times n \times \log n + n \times 2^M)$,空间复杂度 $O(m \times n)$。其中 $n$ 和 $m$ 分别为单词列表的长度和单词的平均长度,而 $M$ 为最长单词的长度。
#### Python3
```python
-class Trie:
- def __init__(self):
- self.children = [None] * 26
- self.is_end = False
-
- def insert(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- node.children[idx] = Trie()
- node = node.children[idx]
- node.is_end = True
-
- def search(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- return False
- node = node.children[idx]
- return node.is_end
-
-
class Solution:
def longestWord(self, words: List[str]) -> str:
- def cmp(a, b):
- if len(a) != len(b):
- return len(a) - len(b)
- return -1 if a > b else 1
-
- def dfs(w):
- return not w or any(
- trie.search(w[:i]) and dfs(w[i:]) for i in range(1, len(w) + 1)
- )
-
- words.sort(key=cmp_to_key(cmp))
- trie = Trie()
- ans = ""
+ def dfs(w: str) -> bool:
+ if not w:
+ return True
+ for k in range(1, len(w) + 1):
+ if w[:k] in s and dfs(w[k:]):
+ return True
+ return False
+
+ s = set(words)
+ words.sort(key=lambda x: (-len(x), x))
for w in words:
+ s.remove(w)
if dfs(w):
- ans = w
- trie.insert(w)
- return ans
+ return w
+ return ""
```
#### Java
```java
-class Trie {
- Trie[] children = new Trie[26];
- boolean isEnd;
-
- void insert(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- node.children[c] = new Trie();
- }
- node = node.children[c];
- }
- node.isEnd = true;
- }
-
- boolean search(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- return false;
- }
- node = node.children[c];
- }
- return node.isEnd;
- }
-}
-
class Solution {
- private Trie trie = new Trie();
+ private Set s = new HashSet<>();
public String longestWord(String[] words) {
+ for (String w : words) {
+ s.add(w);
+ }
Arrays.sort(words, (a, b) -> {
if (a.length() != b.length()) {
- return a.length() - b.length();
+ return b.length() - a.length();
}
- return b.compareTo(a);
+ return a.compareTo(b);
});
- String ans = "";
for (String w : words) {
+ s.remove(w);
if (dfs(w)) {
- ans = w;
+ return w;
}
- trie.insert(w);
}
- return ans;
+ return "";
}
private boolean dfs(String w) {
- if ("".equals(w)) {
+ if (w.length() == 0) {
return true;
}
- for (int i = 1; i <= w.length(); ++i) {
- if (trie.search(w.substring(0, i)) && dfs(w.substring(i))) {
+ for (int k = 1; k <= w.length(); ++k) {
+ if (s.contains(w.substring(0, k)) && dfs(w.substring(k))) {
return true;
}
}
@@ -151,131 +113,171 @@ class Solution {
}
```
-#### Go
-
-```go
-type Trie struct {
- children [26]*Trie
- isEnd bool
-}
+#### C++
-func newTrie() *Trie {
- return &Trie{}
-}
-func (this *Trie) insert(word string) {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- node.children[c] = newTrie()
- }
- node = node.children[c]
- }
- node.isEnd = true
-}
+```cpp
+class Solution {
+public:
+ string longestWord(vector& words) {
+ unordered_set s(words.begin(), words.end());
+ ranges::sort(words, [&](const string& a, const string& b) {
+ return a.size() > b.size() || (a.size() == b.size() && a < b);
+ });
+ auto dfs = [&](this auto&& dfs, string w) -> bool {
+ if (w.empty()) {
+ return true;
+ }
+ for (int k = 1; k <= w.size(); ++k) {
+ if (s.contains(w.substr(0, k)) && dfs(w.substr(k))) {
+ return true;
+ }
+ }
+ return false;
+ };
+ for (const string& w : words) {
+ s.erase(w);
+ if (dfs(w)) {
+ return w;
+ }
+ }
+ return "";
+ }
+};
+```
-func (this *Trie) search(word string) bool {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- return false
- }
- node = node.children[c]
- }
- return node.isEnd
-}
+#### Go
+```go
func longestWord(words []string) string {
+ s := map[string]bool{}
+ for _, w := range words {
+ s[w] = true
+ }
sort.Slice(words, func(i, j int) bool {
- a, b := words[i], words[j]
- if len(a) != len(b) {
- return len(a) < len(b)
- }
- return a > b
+ return len(words[i]) > len(words[j]) || (len(words[i]) == len(words[j]) && words[i] < words[j])
})
- trie := newTrie()
var dfs func(string) bool
dfs = func(w string) bool {
if len(w) == 0 {
return true
}
- for i := 1; i <= len(w); i++ {
- if trie.search(w[:i]) && dfs(w[i:]) {
+ for k := 1; k <= len(w); k++ {
+ if s[w[:k]] && dfs(w[k:]) {
return true
}
}
return false
}
- ans := ""
for _, w := range words {
+ s[w] = false
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
+ return ""
}
```
-#### Swift
+#### TypeScript
-```swift
-class Trie {
- var children = [Trie?](repeating: nil, count: 26)
- var isEnd = false
-
- func insert(_ word: String) {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- node.children[index] = Trie()
+```ts
+function longestWord(words: string[]): string {
+ const s = new Set(words);
+
+ words.sort((a, b) => (a.length === b.length ? a.localeCompare(b) : b.length - a.length));
+
+ const dfs = (w: string): boolean => {
+ if (w === '') {
+ return true;
+ }
+ for (let k = 1; k <= w.length; ++k) {
+ if (s.has(w.substring(0, k)) && dfs(w.substring(k))) {
+ return true;
}
- node = node.children[index]!
}
- node.isEnd = true
+ return false;
+ };
+
+ for (const w of words) {
+ s.delete(w);
+ if (dfs(w)) {
+ return w;
+ }
}
- func search(_ word: String) -> Bool {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- return false
+ return '';
+}
+```
+
+#### Rust
+
+```rust
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn longest_word(words: Vec) -> String {
+ let mut s: HashSet = words.iter().cloned().collect();
+ let mut words = words;
+ words.sort_by(|a, b| b.len().cmp(&a.len()).then(a.cmp(b)));
+
+ fn dfs(w: String, s: &mut HashSet) -> bool {
+ if w.is_empty() {
+ return true;
}
- node = node.children[index]!
+ for k in 1..=w.len() {
+ if s.contains(&w[0..k]) && dfs(w[k..].to_string(), s) {
+ return true;
+ }
+ }
+ false
}
- return node.isEnd
+ for w in words {
+ s.remove(&w);
+ if dfs(w.clone(), &mut s) {
+ return w;
+ }
+ }
+ String::new()
}
}
+```
+
+#### Swift
+```swift
class Solution {
func longestWord(_ words: [String]) -> String {
- var words = words.sorted(by: { $0.count < $1.count || ($0.count == $1.count && $0 > $1) })
- let trie = Trie()
+ var s: Set = Set(words)
+ var words = words
+ words.sort { (a, b) -> Bool in
+ if a.count == b.count {
+ return a < b
+ } else {
+ return a.count > b.count
+ }
+ }
- var dfs: ((String) -> Bool)!
- dfs = { w in
+ func dfs(_ w: String) -> Bool {
if w.isEmpty {
return true
}
- for i in 1...w.count {
- if trie.search(String(w.prefix(i))) && dfs(String(w.suffix(w.count - i))) {
+ for k in 1...w.count {
+ let prefix = String(w.prefix(k))
+ if s.contains(prefix) && dfs(String(w.dropFirst(k))) {
return true
}
}
return false
}
- var ans = ""
for w in words {
+ s.remove(w)
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
+
+ return ""
}
}
```
diff --git a/lcci/17.15.Longest Word/README_EN.md b/lcci/17.15.Longest Word/README_EN.md
index 7d5dcf7f14dec..131326adf233f 100644
--- a/lcci/17.15.Longest Word/README_EN.md
+++ b/lcci/17.15.Longest Word/README_EN.md
@@ -41,117 +41,79 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcci/17.15.Longest%20Word/
-### Solution 1
+### Solution 1: Hash Table + Sorting + DFS
+
+Note that in the problem, each word can actually be reused.
+
+We can use a hash table $\textit{s}$ to store all the words, then sort the words in descending order of length, and if the lengths are the same, sort them in ascending lexicographical order.
+
+Next, we iterate through the sorted list of words. For each word $\textit{w}$, we first remove it from the hash table $\textit{s}$, then use depth-first search $\textit{dfs}$ to determine if $\textit{w}$ can be composed of other words. If it can, we return $\textit{w}$.
+
+The execution logic of the function $\textit{dfs}$ is as follows:
+
+- If $\textit{w}$ is empty, return $\text{true}$;
+- Iterate through all prefixes of $\textit{w}$. If a prefix is in the hash table $\textit{s}$ and $\textit{dfs}$ returns $\text{true}$, then return $\text{true}$;
+- If no prefix meets the condition, return $\text{false}$.
+
+If no word meets the condition, return an empty string.
+
+The time complexity is $O(m \times n \times \log n + n \times 2^M)$, and the space complexity is $O(m \times n)$. Here, $n$ and $m$ are the length of the word list and the average length of the words, respectively, and $M$ is the length of the longest word.
#### Python3
```python
-class Trie:
- def __init__(self):
- self.children = [None] * 26
- self.is_end = False
-
- def insert(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- node.children[idx] = Trie()
- node = node.children[idx]
- node.is_end = True
-
- def search(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- return False
- node = node.children[idx]
- return node.is_end
-
-
class Solution:
def longestWord(self, words: List[str]) -> str:
- def cmp(a, b):
- if len(a) != len(b):
- return len(a) - len(b)
- return -1 if a > b else 1
-
- def dfs(w):
- return not w or any(
- trie.search(w[:i]) and dfs(w[i:]) for i in range(1, len(w) + 1)
- )
-
- words.sort(key=cmp_to_key(cmp))
- trie = Trie()
- ans = ""
+ def dfs(w: str) -> bool:
+ if not w:
+ return True
+ for k in range(1, len(w) + 1):
+ if w[:k] in s and dfs(w[k:]):
+ return True
+ return False
+
+ s = set(words)
+ words.sort(key=lambda x: (-len(x), x))
for w in words:
+ s.remove(w)
if dfs(w):
- ans = w
- trie.insert(w)
- return ans
+ return w
+ return ""
```
#### Java
```java
-class Trie {
- Trie[] children = new Trie[26];
- boolean isEnd;
-
- void insert(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- node.children[c] = new Trie();
- }
- node = node.children[c];
- }
- node.isEnd = true;
- }
-
- boolean search(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- return false;
- }
- node = node.children[c];
- }
- return node.isEnd;
- }
-}
-
class Solution {
- private Trie trie = new Trie();
+ private Set s = new HashSet<>();
public String longestWord(String[] words) {
+ for (String w : words) {
+ s.add(w);
+ }
Arrays.sort(words, (a, b) -> {
if (a.length() != b.length()) {
- return a.length() - b.length();
+ return b.length() - a.length();
}
- return b.compareTo(a);
+ return a.compareTo(b);
});
- String ans = "";
for (String w : words) {
+ s.remove(w);
if (dfs(w)) {
- ans = w;
+ return w;
}
- trie.insert(w);
}
- return ans;
+ return "";
}
private boolean dfs(String w) {
- if ("".equals(w)) {
+ if (w.length() == 0) {
return true;
}
- for (int i = 1; i <= w.length(); ++i) {
- if (trie.search(w.substring(0, i)) && dfs(w.substring(i))) {
+ for (int k = 1; k <= w.length(); ++k) {
+ if (s.contains(w.substring(0, k)) && dfs(w.substring(k))) {
return true;
}
}
@@ -160,131 +122,171 @@ class Solution {
}
```
-#### Go
-
-```go
-type Trie struct {
- children [26]*Trie
- isEnd bool
-}
+#### C++
-func newTrie() *Trie {
- return &Trie{}
-}
-func (this *Trie) insert(word string) {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- node.children[c] = newTrie()
- }
- node = node.children[c]
- }
- node.isEnd = true
-}
+```cpp
+class Solution {
+public:
+ string longestWord(vector& words) {
+ unordered_set s(words.begin(), words.end());
+ ranges::sort(words, [&](const string& a, const string& b) {
+ return a.size() > b.size() || (a.size() == b.size() && a < b);
+ });
+ auto dfs = [&](this auto&& dfs, string w) -> bool {
+ if (w.empty()) {
+ return true;
+ }
+ for (int k = 1; k <= w.size(); ++k) {
+ if (s.contains(w.substr(0, k)) && dfs(w.substr(k))) {
+ return true;
+ }
+ }
+ return false;
+ };
+ for (const string& w : words) {
+ s.erase(w);
+ if (dfs(w)) {
+ return w;
+ }
+ }
+ return "";
+ }
+};
+```
-func (this *Trie) search(word string) bool {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- return false
- }
- node = node.children[c]
- }
- return node.isEnd
-}
+#### Go
+```go
func longestWord(words []string) string {
+ s := map[string]bool{}
+ for _, w := range words {
+ s[w] = true
+ }
sort.Slice(words, func(i, j int) bool {
- a, b := words[i], words[j]
- if len(a) != len(b) {
- return len(a) < len(b)
- }
- return a > b
+ return len(words[i]) > len(words[j]) || (len(words[i]) == len(words[j]) && words[i] < words[j])
})
- trie := newTrie()
var dfs func(string) bool
dfs = func(w string) bool {
if len(w) == 0 {
return true
}
- for i := 1; i <= len(w); i++ {
- if trie.search(w[:i]) && dfs(w[i:]) {
+ for k := 1; k <= len(w); k++ {
+ if s[w[:k]] && dfs(w[k:]) {
return true
}
}
return false
}
- ans := ""
for _, w := range words {
+ s[w] = false
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
+ return ""
}
```
-#### Swift
+#### TypeScript
-```swift
-class Trie {
- var children = [Trie?](repeating: nil, count: 26)
- var isEnd = false
-
- func insert(_ word: String) {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- node.children[index] = Trie()
+```ts
+function longestWord(words: string[]): string {
+ const s = new Set(words);
+
+ words.sort((a, b) => (a.length === b.length ? a.localeCompare(b) : b.length - a.length));
+
+ const dfs = (w: string): boolean => {
+ if (w === '') {
+ return true;
+ }
+ for (let k = 1; k <= w.length; ++k) {
+ if (s.has(w.substring(0, k)) && dfs(w.substring(k))) {
+ return true;
}
- node = node.children[index]!
}
- node.isEnd = true
+ return false;
+ };
+
+ for (const w of words) {
+ s.delete(w);
+ if (dfs(w)) {
+ return w;
+ }
}
- func search(_ word: String) -> Bool {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- return false
+ return '';
+}
+```
+
+#### Rust
+
+```rust
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn longest_word(words: Vec) -> String {
+ let mut s: HashSet = words.iter().cloned().collect();
+ let mut words = words;
+ words.sort_by(|a, b| b.len().cmp(&a.len()).then(a.cmp(b)));
+
+ fn dfs(w: String, s: &mut HashSet) -> bool {
+ if w.is_empty() {
+ return true;
}
- node = node.children[index]!
+ for k in 1..=w.len() {
+ if s.contains(&w[0..k]) && dfs(w[k..].to_string(), s) {
+ return true;
+ }
+ }
+ false
}
- return node.isEnd
+ for w in words {
+ s.remove(&w);
+ if dfs(w.clone(), &mut s) {
+ return w;
+ }
+ }
+ String::new()
}
}
+```
+
+#### Swift
+```swift
class Solution {
func longestWord(_ words: [String]) -> String {
- var words = words.sorted(by: { $0.count < $1.count || ($0.count == $1.count && $0 > $1) })
- let trie = Trie()
+ var s: Set = Set(words)
+ var words = words
+ words.sort { (a, b) -> Bool in
+ if a.count == b.count {
+ return a < b
+ } else {
+ return a.count > b.count
+ }
+ }
- var dfs: ((String) -> Bool)!
- dfs = { w in
+ func dfs(_ w: String) -> Bool {
if w.isEmpty {
return true
}
- for i in 1...w.count {
- if trie.search(String(w.prefix(i))) && dfs(String(w.suffix(w.count - i))) {
+ for k in 1...w.count {
+ let prefix = String(w.prefix(k))
+ if s.contains(prefix) && dfs(String(w.dropFirst(k))) {
return true
}
}
return false
}
- var ans = ""
for w in words {
+ s.remove(w)
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
+
+ return ""
}
}
```
diff --git a/lcci/17.15.Longest Word/Solution.cpp b/lcci/17.15.Longest Word/Solution.cpp
new file mode 100644
index 0000000000000..19b158b023c7d
--- /dev/null
+++ b/lcci/17.15.Longest Word/Solution.cpp
@@ -0,0 +1,27 @@
+class Solution {
+public:
+ string longestWord(vector& words) {
+ unordered_set s(words.begin(), words.end());
+ ranges::sort(words, [&](const string& a, const string& b) {
+ return a.size() > b.size() || (a.size() == b.size() && a < b);
+ });
+ auto dfs = [&](this auto&& dfs, string w) -> bool {
+ if (w.empty()) {
+ return true;
+ }
+ for (int k = 1; k <= w.size(); ++k) {
+ if (s.contains(w.substr(0, k)) && dfs(w.substr(k))) {
+ return true;
+ }
+ }
+ return false;
+ };
+ for (const string& w : words) {
+ s.erase(w);
+ if (dfs(w)) {
+ return w;
+ }
+ }
+ return "";
+ }
+};
diff --git a/lcci/17.15.Longest Word/Solution.go b/lcci/17.15.Longest Word/Solution.go
index 2a6dbd07cf5a4..321fb05d318ae 100644
--- a/lcci/17.15.Longest Word/Solution.go
+++ b/lcci/17.15.Longest Word/Solution.go
@@ -1,62 +1,28 @@
-type Trie struct {
- children [26]*Trie
- isEnd bool
-}
-
-func newTrie() *Trie {
- return &Trie{}
-}
-func (this *Trie) insert(word string) {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- node.children[c] = newTrie()
- }
- node = node.children[c]
- }
- node.isEnd = true
-}
-
-func (this *Trie) search(word string) bool {
- node := this
- for _, c := range word {
- c -= 'a'
- if node.children[c] == nil {
- return false
- }
- node = node.children[c]
- }
- return node.isEnd
-}
-
func longestWord(words []string) string {
+ s := map[string]bool{}
+ for _, w := range words {
+ s[w] = true
+ }
sort.Slice(words, func(i, j int) bool {
- a, b := words[i], words[j]
- if len(a) != len(b) {
- return len(a) < len(b)
- }
- return a > b
+ return len(words[i]) > len(words[j]) || (len(words[i]) == len(words[j]) && words[i] < words[j])
})
- trie := newTrie()
var dfs func(string) bool
dfs = func(w string) bool {
if len(w) == 0 {
return true
}
- for i := 1; i <= len(w); i++ {
- if trie.search(w[:i]) && dfs(w[i:]) {
+ for k := 1; k <= len(w); k++ {
+ if s[w[:k]] && dfs(w[k:]) {
return true
}
}
return false
}
- ans := ""
for _, w := range words {
+ s[w] = false
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
-}
\ No newline at end of file
+ return ""
+}
diff --git a/lcci/17.15.Longest Word/Solution.java b/lcci/17.15.Longest Word/Solution.java
index 2d6e2d40bd4c3..e7bbcc380a592 100644
--- a/lcci/17.15.Longest Word/Solution.java
+++ b/lcci/17.15.Longest Word/Solution.java
@@ -1,61 +1,34 @@
-class Trie {
- Trie[] children = new Trie[26];
- boolean isEnd;
-
- void insert(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- node.children[c] = new Trie();
- }
- node = node.children[c];
- }
- node.isEnd = true;
- }
-
- boolean search(String word) {
- Trie node = this;
- for (char c : word.toCharArray()) {
- c -= 'a';
- if (node.children[c] == null) {
- return false;
- }
- node = node.children[c];
- }
- return node.isEnd;
- }
-}
-
class Solution {
- private Trie trie = new Trie();
+ private Set s = new HashSet<>();
public String longestWord(String[] words) {
+ for (String w : words) {
+ s.add(w);
+ }
Arrays.sort(words, (a, b) -> {
if (a.length() != b.length()) {
- return a.length() - b.length();
+ return b.length() - a.length();
}
- return b.compareTo(a);
+ return a.compareTo(b);
});
- String ans = "";
for (String w : words) {
+ s.remove(w);
if (dfs(w)) {
- ans = w;
+ return w;
}
- trie.insert(w);
}
- return ans;
+ return "";
}
private boolean dfs(String w) {
- if ("".equals(w)) {
+ if (w.length() == 0) {
return true;
}
- for (int i = 1; i <= w.length(); ++i) {
- if (trie.search(w.substring(0, i)) && dfs(w.substring(i))) {
+ for (int k = 1; k <= w.length(); ++k) {
+ if (s.contains(w.substring(0, k)) && dfs(w.substring(k))) {
return true;
}
}
return false;
}
-}
\ No newline at end of file
+}
diff --git a/lcci/17.15.Longest Word/Solution.py b/lcci/17.15.Longest Word/Solution.py
index 5a5b69545a1a2..c2dd7b8387c09 100644
--- a/lcci/17.15.Longest Word/Solution.py
+++ b/lcci/17.15.Longest Word/Solution.py
@@ -1,44 +1,17 @@
-class Trie:
- def __init__(self):
- self.children = [None] * 26
- self.is_end = False
-
- def insert(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- node.children[idx] = Trie()
- node = node.children[idx]
- node.is_end = True
-
- def search(self, word):
- node = self
- for c in word:
- idx = ord(c) - ord('a')
- if node.children[idx] is None:
- return False
- node = node.children[idx]
- return node.is_end
-
-
class Solution:
def longestWord(self, words: List[str]) -> str:
- def cmp(a, b):
- if len(a) != len(b):
- return len(a) - len(b)
- return -1 if a > b else 1
-
- def dfs(w):
- return not w or any(
- trie.search(w[:i]) and dfs(w[i:]) for i in range(1, len(w) + 1)
- )
+ def dfs(w: str) -> bool:
+ if not w:
+ return True
+ for k in range(1, len(w) + 1):
+ if w[:k] in s and dfs(w[k:]):
+ return True
+ return False
- words.sort(key=cmp_to_key(cmp))
- trie = Trie()
- ans = ""
+ s = set(words)
+ words.sort(key=lambda x: (-len(x), x))
for w in words:
+ s.remove(w)
if dfs(w):
- ans = w
- trie.insert(w)
- return ans
+ return w
+ return ""
diff --git a/lcci/17.15.Longest Word/Solution.rs b/lcci/17.15.Longest Word/Solution.rs
new file mode 100644
index 0000000000000..068124b25c26a
--- /dev/null
+++ b/lcci/17.15.Longest Word/Solution.rs
@@ -0,0 +1,28 @@
+use std::collections::HashSet;
+
+impl Solution {
+ pub fn longest_word(words: Vec) -> String {
+ let mut s: HashSet = words.iter().cloned().collect();
+ let mut words = words;
+ words.sort_by(|a, b| b.len().cmp(&a.len()).then(a.cmp(b)));
+
+ fn dfs(w: String, s: &mut HashSet) -> bool {
+ if w.is_empty() {
+ return true;
+ }
+ for k in 1..=w.len() {
+ if s.contains(&w[0..k]) && dfs(w[k..].to_string(), s) {
+ return true;
+ }
+ }
+ false
+ }
+ for w in words {
+ s.remove(&w);
+ if dfs(w.clone(), &mut s) {
+ return w;
+ }
+ }
+ String::new()
+ }
+}
diff --git a/lcci/17.15.Longest Word/Solution.swift b/lcci/17.15.Longest Word/Solution.swift
index f05b1fc22864c..008d82149d0be 100644
--- a/lcci/17.15.Longest Word/Solution.swift
+++ b/lcci/17.15.Longest Word/Solution.swift
@@ -1,57 +1,35 @@
-class Trie {
- var children = [Trie?](repeating: nil, count: 26)
- var isEnd = false
-
- func insert(_ word: String) {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- node.children[index] = Trie()
+class Solution {
+ func longestWord(_ words: [String]) -> String {
+ var s: Set = Set(words)
+ var words = words
+ words.sort { (a, b) -> Bool in
+ if a.count == b.count {
+ return a < b
+ } else {
+ return a.count > b.count
}
- node = node.children[index]!
}
- node.isEnd = true
- }
- func search(_ word: String) -> Bool {
- var node = self
- for ch in word {
- let index = Int(ch.asciiValue! - Character("a").asciiValue!)
- if node.children[index] == nil {
- return false
- }
- node = node.children[index]!
- }
- return node.isEnd
- }
-}
-
-class Solution {
- func longestWord(_ words: [String]) -> String {
- var words = words.sorted(by: { $0.count < $1.count || ($0.count == $1.count && $0 > $1) })
- let trie = Trie()
-
- var dfs: ((String) -> Bool)!
- dfs = { w in
+ func dfs(_ w: String) -> Bool {
if w.isEmpty {
return true
}
- for i in 1...w.count {
- if trie.search(String(w.prefix(i))) && dfs(String(w.suffix(w.count - i))) {
+ for k in 1...w.count {
+ let prefix = String(w.prefix(k))
+ if s.contains(prefix) && dfs(String(w.dropFirst(k))) {
return true
}
}
return false
}
-
- var ans = ""
+
for w in words {
+ s.remove(w)
if dfs(w) {
- ans = w
+ return w
}
- trie.insert(w)
}
- return ans
+
+ return ""
}
}
diff --git a/lcci/17.15.Longest Word/Solution.ts b/lcci/17.15.Longest Word/Solution.ts
new file mode 100644
index 0000000000000..1dc4862412162
--- /dev/null
+++ b/lcci/17.15.Longest Word/Solution.ts
@@ -0,0 +1,26 @@
+function longestWord(words: string[]): string {
+ const s = new Set(words);
+
+ words.sort((a, b) => (a.length === b.length ? a.localeCompare(b) : b.length - a.length));
+
+ const dfs = (w: string): boolean => {
+ if (w === '') {
+ return true;
+ }
+ for (let k = 1; k <= w.length; ++k) {
+ if (s.has(w.substring(0, k)) && dfs(w.substring(k))) {
+ return true;
+ }
+ }
+ return false;
+ };
+
+ for (const w of words) {
+ s.delete(w);
+ if (dfs(w)) {
+ return w;
+ }
+ }
+
+ return '';
+}
diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/README.md"
index 0a7445246a6a8..dd18ee74ba2eb 100644
--- "a/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/README.md"
+++ "b/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/README.md"
@@ -69,9 +69,6 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%2
#### Python3
```python
-from sortedcontainers import SortedSet
-
-
class Solution:
def containsNearbyAlmostDuplicate(self, nums: List[int], k: int, t: int) -> bool:
s = SortedSet()
diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/Solution.py" "b/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/Solution.py"
index f7ec481ecdd5d..b0910923928e3 100644
--- "a/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/Solution.py"
+++ "b/lcof2/\345\211\221\346\214\207 Offer II 057. \345\200\274\345\222\214\344\270\213\346\240\207\344\271\213\345\267\256\351\203\275\345\234\250\347\273\231\345\256\232\347\232\204\350\214\203\345\233\264\345\206\205/Solution.py"
@@ -1,6 +1,3 @@
-from sortedcontainers import SortedSet
-
-
class Solution:
def containsNearbyAlmostDuplicate(self, nums: List[int], k: int, t: int) -> bool:
s = SortedSet()
diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/README.md" "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/README.md"
index a3933de14e03c..54acea6311fdc 100644
--- "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/README.md"
+++ "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/README.md"
@@ -65,9 +65,6 @@ MyCalendar.book(20, 30); // returns true ,第三个日程安排可以添加到
#### Python3
```python
-from sortedcontainers import SortedDict
-
-
class MyCalendar:
def __init__(self):
self.sd = SortedDict()
@@ -89,9 +86,6 @@ class MyCalendar:
#### Java
```java
-import java.util.Map;
-import java.util.TreeMap;
-
class MyCalendar {
private final TreeMap tm = new TreeMap<>();
diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.java" "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.java"
index 3d04816dc4b2e..1bb41cffcc07f 100644
--- "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.java"
+++ "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.java"
@@ -1,6 +1,3 @@
-import java.util.Map;
-import java.util.TreeMap;
-
class MyCalendar {
private final TreeMap tm = new TreeMap<>();
@@ -25,4 +22,4 @@ public boolean book(int start, int end) {
/**
* Your MyCalendar object will be instantiated and called as such: MyCalendar
* obj = new MyCalendar(); boolean param_1 = obj.book(start,end);
- */
\ No newline at end of file
+ */
diff --git "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.py" "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.py"
index a17617ab776e9..c04195aeb8688 100644
--- "a/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.py"
+++ "b/lcof2/\345\211\221\346\214\207 Offer II 058. \346\227\245\347\250\213\350\241\250/Solution.py"
@@ -1,6 +1,3 @@
-from sortedcontainers import SortedDict
-
-
class MyCalendar:
def __init__(self):
self.sd = SortedDict()
diff --git "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md" "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md"
index a53ff9a0a21f1..7ed8b092d36e0 100644
--- "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md"
+++ "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/README.md"
@@ -403,9 +403,6 @@ class Solution {
#### Python3
```python
-from sortedcontainers import SortedList
-
-
class Solution:
def numsGame(self, nums: List[int]) -> List[int]:
l = SortedList()
diff --git "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution2.py" "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution2.py"
index aad34c9845934..16088eddc4e2d 100644
--- "a/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution2.py"
+++ "b/lcp/LCP 24. \346\225\260\345\255\227\346\270\270\346\210\217/Solution2.py"
@@ -1,6 +1,3 @@
-from sortedcontainers import SortedList
-
-
class Solution:
def numsGame(self, nums: List[int]) -> List[int]:
l = SortedList()
diff --git "a/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/README.md" "b/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/README.md"
index b9fe5e883c2c5..fd875e6061c85 100644
--- "a/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/README.md"
+++ "b/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/README.md"
@@ -89,9 +89,6 @@ edit_url: https://github.com/doocs/leetcode/edit/main/lcp/LCP%2052.%20%E4%BA%8C%
# self.left = None
# self.right = None
-from sortedcontainers import SortedList
-
-
class Solution:
def getNumber(self, root: Optional[TreeNode], ops: List[List[int]]) -> int:
def dfs(root):
diff --git "a/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/Solution.py" "b/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/Solution.py"
index 2e140bdb7fd66..fe7d41876e7c8 100644
--- "a/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/Solution.py"
+++ "b/lcp/LCP 52. \344\272\214\345\217\211\346\220\234\347\264\242\346\240\221\346\237\223\350\211\262/Solution.py"
@@ -5,8 +5,6 @@
# self.left = None
# self.right = None
-from sortedcontainers import SortedList
-
class Solution:
def getNumber(self, root: Optional[TreeNode], ops: List[List[int]]) -> int:
diff --git "a/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/README.md" "b/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/README.md"
index b66d379ba9b7d..79d933a073abb 100644
--- "a/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/README.md"
+++ "b/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/README.md"
@@ -271,6 +271,57 @@ function conveyorBelt(matrix: string[], start: number[], end: number[]): number
}
```
+#### Swift
+
+```swift
+class Solution {
+ func conveyorBelt(_ matrix: [String], _ start: [Int], _ end: [Int]) -> Int {
+ let directions: [(Int, Int)] = [(-1, 0), (0, 1), (1, 0), (0, -1)]
+ let directionMap: [Character: Int] = ["^": 0, ">": 1, "v": 2, "<": 3]
+
+ let rows = matrix.count
+ let cols = matrix[0].count
+
+ var dist = Array(repeating: Array(repeating: Int.max, count: cols), count: rows)
+ var deque: [(Int, Int)] = []
+
+ dist[start[0]][start[1]] = 0
+ deque.append((start[0], start[1]))
+
+ while !deque.isEmpty {
+ let (i, j) = deque.removeFirst()
+
+ if i == end[0] && j == end[1] {
+ return dist[i][j]
+ }
+
+ for (k, (di, dj)) in directions.enumerated() {
+ let ni = i + di
+ let nj = j + dj
+
+ if ni >= 0 && ni < rows && nj >= 0 && nj < cols {
+ let currentChar = matrix[i][matrix[i].index(matrix[i].startIndex, offsetBy: j)]
+ let additionalCost = directionMap[currentChar] == k ? 0 : 1
+ let newDist = dist[i][j] + additionalCost
+
+ if newDist < dist[ni][nj] {
+ dist[ni][nj] = newDist
+
+ if additionalCost == 0 {
+ deque.insert((ni, nj), at: 0)
+ } else {
+ deque.append((ni, nj))
+ }
+ }
+ }
+ }
+ }
+
+ return -1
+ }
+}
+```
+
diff --git "a/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/Solution.swift" "b/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/Solution.swift"
new file mode 100644
index 0000000000000..49e38bff757e2
--- /dev/null
+++ "b/lcp/LCP 56. \344\277\241\347\211\251\344\274\240\351\200\201/Solution.swift"
@@ -0,0 +1,46 @@
+class Solution {
+ func conveyorBelt(_ matrix: [String], _ start: [Int], _ end: [Int]) -> Int {
+ let directions: [(Int, Int)] = [(-1, 0), (0, 1), (1, 0), (0, -1)]
+ let directionMap: [Character: Int] = ["^": 0, ">": 1, "v": 2, "<": 3]
+
+ let rows = matrix.count
+ let cols = matrix[0].count
+
+ var dist = Array(repeating: Array(repeating: Int.max, count: cols), count: rows)
+ var deque: [(Int, Int)] = []
+
+ dist[start[0]][start[1]] = 0
+ deque.append((start[0], start[1]))
+
+ while !deque.isEmpty {
+ let (i, j) = deque.removeFirst()
+
+ if i == end[0] && j == end[1] {
+ return dist[i][j]
+ }
+
+ for (k, (di, dj)) in directions.enumerated() {
+ let ni = i + di
+ let nj = j + dj
+
+ if ni >= 0 && ni < rows && nj >= 0 && nj < cols {
+ let currentChar = matrix[i][matrix[i].index(matrix[i].startIndex, offsetBy: j)]
+ let additionalCost = directionMap[currentChar] == k ? 0 : 1
+ let newDist = dist[i][j] + additionalCost
+
+ if newDist < dist[ni][nj] {
+ dist[ni][nj] = newDist
+
+ if additionalCost == 0 {
+ deque.insert((ni, nj), at: 0)
+ } else {
+ deque.append((ni, nj))
+ }
+ }
+ }
+ }
+ }
+
+ return -1
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/README.md" "b/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/README.md"
index 14bac274a24df..faf7cedef5e2f 100644
--- "a/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/README.md"
+++ "b/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/README.md"
@@ -183,6 +183,31 @@ impl Solution {
}
```
+#### Swift
+
+```swift
+class Solution {
+ func temperatureTrend(_ temperatureA: [Int], _ temperatureB: [Int]) -> Int {
+ var maxTrend = 0
+ var currentTrend = 0
+
+ for i in 0.. 0) {
+ currentTrend += 1
+ maxTrend = max(maxTrend, currentTrend)
+ } else {
+ currentTrend = 0
+ }
+ }
+
+ return maxTrend
+ }
+}
+```
+
diff --git "a/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/Solution.swift" "b/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/Solution.swift"
new file mode 100644
index 0000000000000..b0807755dc2a1
--- /dev/null
+++ "b/lcp/LCP 61. \346\260\224\346\270\251\345\217\230\345\214\226\350\266\213\345\212\277/Solution.swift"
@@ -0,0 +1,20 @@
+class Solution {
+ func temperatureTrend(_ temperatureA: [Int], _ temperatureB: [Int]) -> Int {
+ var maxTrend = 0
+ var currentTrend = 0
+
+ for i in 0.. 0) {
+ currentTrend += 1
+ maxTrend = max(maxTrend, currentTrend)
+ } else {
+ currentTrend = 0
+ }
+ }
+
+ return maxTrend
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/README.md" "b/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/README.md"
index 348f106b5e995..690d01b9e1c20 100644
--- "a/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/README.md"
+++ "b/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/README.md"
@@ -205,6 +205,41 @@ function transportationHub(path: number[][]): number {
}
```
+#### Swift
+
+```swift
+class Solution {
+ func transportationHub(_ path: [[Int]]) -> Int {
+ var inDegree = [Int: Int]()
+ var outDegree = [Int: Int]()
+ var nodeSet = Set()
+ var visitedEdges = Set()
+
+ for p in path {
+ let a = p[0]
+ let b = p[1]
+ let edgeKey = "\(a)-\(b)"
+
+ if !visitedEdges.contains(edgeKey) {
+ visitedEdges.insert(edgeKey)
+ nodeSet.insert(a)
+ nodeSet.insert(b)
+ inDegree[b, default: 0] += 1
+ outDegree[a, default: 0] += 1
+ }
+ }
+
+ for node in nodeSet {
+ if inDegree[node, default: 0] == nodeSet.count - 1 && outDegree[node, default: 0] == 0 {
+ return node
+ }
+ }
+
+ return -1
+ }
+}
+```
+
diff --git "a/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/Solution.swift" "b/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/Solution.swift"
new file mode 100644
index 0000000000000..dca4332f4a733
--- /dev/null
+++ "b/lcp/LCP 62. \344\272\244\351\200\232\346\236\242\347\272\275/Solution.swift"
@@ -0,0 +1,30 @@
+class Solution {
+ func transportationHub(_ path: [[Int]]) -> Int {
+ var inDegree = [Int: Int]()
+ var outDegree = [Int: Int]()
+ var nodeSet = Set()
+ var visitedEdges = Set()
+
+ for p in path {
+ let a = p[0]
+ let b = p[1]
+ let edgeKey = "\(a)-\(b)"
+
+ if !visitedEdges.contains(edgeKey) {
+ visitedEdges.insert(edgeKey)
+ nodeSet.insert(a)
+ nodeSet.insert(b)
+ inDegree[b, default: 0] += 1
+ outDegree[a, default: 0] += 1
+ }
+ }
+
+ for node in nodeSet {
+ if inDegree[node, default: 0] == nodeSet.count - 1 && outDegree[node, default: 0] == 0 {
+ return node
+ }
+ }
+
+ return -1
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/README.md" "b/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/README.md"
index 2d2823b8085a5..87edf23ce9852 100644
--- "a/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/README.md"
+++ "b/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/README.md"
@@ -274,6 +274,80 @@ func ballGame(num int, plate []string) (ans [][]int) {
}
```
+#### Swift
+
+```swift
+class Solution {
+ private var plate: [String] = []
+ private var num: Int = 0
+ private var m: Int = 0
+ private var n: Int = 0
+ private let dirs = [0, 1, 0, -1, 0]
+
+ func ballGame(_ num: Int, _ plate: [String]) -> [[Int]] {
+ self.num = num
+ self.plate = plate
+ self.m = plate.count
+ self.n = plate[0].count
+ var ans: [[Int]] = []
+
+ for i in 1.. Bool {
+ var k = num
+ var i = i, j = j, d = d
+
+ while plate[i][j] != "O" {
+ if k == 0 {
+ return false
+ }
+
+ if plate[i][j] == "W" {
+ d = (d + 3) % 4
+ } else if plate[i][j] == "E" {
+ d = (d + 1) % 4
+ }
+
+ i += dirs[d]
+ j += dirs[d + 1]
+
+ if i < 0 || i >= m || j < 0 || j >= n {
+ return false
+ }
+
+ k -= 1
+ }
+
+ return true
+ }
+}
+
+private extension String {
+ subscript(_ index: Int) -> Character {
+ return self[self.index(self.startIndex, offsetBy: index)]
+ }
+}
+```
+
diff --git "a/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/Solution.swift" "b/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/Solution.swift"
new file mode 100644
index 0000000000000..6a9b7c2f07875
--- /dev/null
+++ "b/lcp/LCP 63. \345\274\271\347\217\240\346\270\270\346\210\217/Solution.swift"
@@ -0,0 +1,69 @@
+class Solution {
+ private var plate: [String] = []
+ private var num: Int = 0
+ private var m: Int = 0
+ private var n: Int = 0
+ private let dirs = [0, 1, 0, -1, 0]
+
+ func ballGame(_ num: Int, _ plate: [String]) -> [[Int]] {
+ self.num = num
+ self.plate = plate
+ self.m = plate.count
+ self.n = plate[0].count
+ var ans: [[Int]] = []
+
+ for i in 1.. Bool {
+ var k = num
+ var i = i, j = j, d = d
+
+ while plate[i][j] != "O" {
+ if k == 0 {
+ return false
+ }
+
+ if plate[i][j] == "W" {
+ d = (d + 3) % 4
+ } else if plate[i][j] == "E" {
+ d = (d + 1) % 4
+ }
+
+ i += dirs[d]
+ j += dirs[d + 1]
+
+ if i < 0 || i >= m || j < 0 || j >= n {
+ return false
+ }
+
+ k -= 1
+ }
+
+ return true
+ }
+}
+
+private extension String {
+ subscript(_ index: Int) -> Character {
+ return self[self.index(self.startIndex, offsetBy: index)]
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/README.md" "b/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/README.md"
index 248022131b176..f1e53e794c997 100644
--- "a/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/README.md"
+++ "b/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/README.md"
@@ -258,6 +258,59 @@ func closeLampInTree(root *TreeNode) (ans int) {
}
```
+#### Swift
+
+```swift
+/* public class TreeNode {
+* public var val: Int
+* public var left: TreeNode?
+* public var right: TreeNode?
+* public init(_ val: Int) {
+* self.val = val
+* self.left = nil
+* self.right = nil
+* }
+* }
+*/
+
+class Solution {
+ func closeLampInTree(_ root: TreeNode?) -> Int {
+ return dfs(root)[0]
+ }
+
+ private func dfs(_ root: TreeNode?) -> [Int] {
+ var ans = [Int](repeating: 0, count: 4)
+ guard let root = root else {
+ return ans
+ }
+
+ let left = dfs(root.left)
+ let right = dfs(root.right)
+
+ let l1 = left[0], l2 = left[1], l3 = left[2], l4 = left[3]
+ let r1 = right[0], r2 = right[1], r3 = right[2], r4 = right[3]
+
+ if root.val != 0 {
+ ans[0] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
+ ans[1] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[2] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[3] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
+ } else {
+ ans[0] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[1] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
+ ans[2] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
+ ans[3] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
+ }
+
+ return ans
+ }
+
+ private func min(_ nums: Int...) -> Int {
+ return nums.min() ?? Int.max
+ }
+}
+```
+
diff --git "a/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/Solution.swift" "b/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/Solution.swift"
new file mode 100644
index 0000000000000..af2daef730b5a
--- /dev/null
+++ "b/lcp/LCP 64. \344\272\214\345\217\211\346\240\221\347\201\257\351\245\260/Solution.swift"
@@ -0,0 +1,48 @@
+/* public class TreeNode {
+* public var val: Int
+* public var left: TreeNode?
+* public var right: TreeNode?
+* public init(_ val: Int) {
+* self.val = val
+* self.left = nil
+* self.right = nil
+* }
+* }
+*/
+
+class Solution {
+ func closeLampInTree(_ root: TreeNode?) -> Int {
+ return dfs(root)[0]
+ }
+
+ private func dfs(_ root: TreeNode?) -> [Int] {
+ var ans = [Int](repeating: 0, count: 4)
+ guard let root = root else {
+ return ans
+ }
+
+ let left = dfs(root.left)
+ let right = dfs(root.right)
+
+ let l1 = left[0], l2 = left[1], l3 = left[2], l4 = left[3]
+ let r1 = right[0], r2 = right[1], r3 = right[2], r4 = right[3]
+
+ if root.val != 0 {
+ ans[0] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
+ ans[1] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[2] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[3] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
+ } else {
+ ans[0] = min(l1 + r1, l2 + r2 + 2, l3 + r3 + 2, l4 + r4 + 2)
+ ans[1] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 3, l4 + r4 + 1)
+ ans[2] = min(l1 + r1 + 1, l2 + r2 + 1, l3 + r3 + 1, l4 + r4 + 3)
+ ans[3] = min(l1 + r1 + 2, l2 + r2, l3 + r3 + 2, l4 + r4 + 2)
+ }
+
+ return ans
+ }
+
+ private func min(_ nums: Int...) -> Int {
+ return nums.min() ?? Int.max
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/README.md" "b/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/README.md"
index b61565afd4889..734bad71eb452 100644
--- "a/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/README.md"
+++ "b/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/README.md"
@@ -151,6 +151,29 @@ func minNumBooths(demand []string) (ans int) {
}
```
+#### Swift
+
+```swift
+class Solution {
+ func minNumBooths(_ demand: [String]) -> Int {
+ var maxBooths = [Int](repeating: 0, count: 26)
+
+ for day in demand {
+ var dailyCount = [Int](repeating: 0, count: 26)
+ for char in day {
+ let index = Int(char.asciiValue! - Character("a").asciiValue!)
+ dailyCount[index] += 1
+ }
+ for i in 0..<26 {
+ maxBooths[i] = max(maxBooths[i], dailyCount[i])
+ }
+ }
+
+ return maxBooths.reduce(0, +)
+ }
+}
+```
+
diff --git "a/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/Solution.swift" "b/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/Solution.swift"
new file mode 100644
index 0000000000000..ba1b0d803592d
--- /dev/null
+++ "b/lcp/LCP 66. \346\234\200\345\260\217\345\261\225\345\217\260\346\225\260\351\207\217/Solution.swift"
@@ -0,0 +1,18 @@
+class Solution {
+ func minNumBooths(_ demand: [String]) -> Int {
+ var maxBooths = [Int](repeating: 0, count: 26)
+
+ for day in demand {
+ var dailyCount = [Int](repeating: 0, count: 26)
+ for char in day {
+ let index = Int(char.asciiValue! - Character("a").asciiValue!)
+ dailyCount[index] += 1
+ }
+ for i in 0..<26 {
+ maxBooths[i] = max(maxBooths[i], dailyCount[i])
+ }
+ }
+
+ return maxBooths.reduce(0, +)
+ }
+}
\ No newline at end of file
diff --git "a/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/README.md" "b/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/README.md"
index e4d4babb6c862..b2444818fc494 100644
--- "a/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/README.md"
+++ "b/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/README.md"
@@ -197,6 +197,46 @@ func expandBinaryTree(root *TreeNode) *TreeNode {
}
```
+#### Swift
+
+```swift
+/* class TreeNode {
+* var val: Int
+* var left: TreeNode?
+* var right: TreeNode?
+* init() { self.val = 0; self.left = nil; self.right = nil }
+* init(_ val: Int) { self.val = val; self.left = nil; self.right = nil }
+* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
+* self.val = val
+* self.left = left
+* self.right = right
+* }
+* }
+*/
+
+class Solution {
+ func expandBinaryTree(_ root: TreeNode?) -> TreeNode? {
+ return dfs(root)
+ }
+
+ private func dfs(_ root: TreeNode?) -> TreeNode? {
+ guard let root = root else { return nil }
+
+ let leftChild = dfs(root.left)
+ let rightChild = dfs(root.right)
+
+ if let leftChild = leftChild {
+ root.left = TreeNode(-1, leftChild, nil)
+ }
+ if let rightChild = rightChild {
+ root.right = TreeNode(-1, nil, rightChild)
+ }
+ return root
+ }
+}
+
+```
+
diff --git "a/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/Solution.swift" "b/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/Solution.swift"
new file mode 100644
index 0000000000000..56a1d82045ec9
--- /dev/null
+++ "b/lcp/LCP 67. \350\243\205\351\245\260\346\240\221/Solution.swift"
@@ -0,0 +1,36 @@
+/* class TreeNode {
+* var val: Int
+* var left: TreeNode?
+* var right: TreeNode?
+
+* init() { self.val = 0; self.left = nil; self.right = nil }
+* init(_ val: Int) { self.val = val; self.left = nil; self.right = nil }
+* init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
+* self.val = val
+* self.left = left
+* self.right = right
+* }
+* }
+*/
+
+class Solution {
+ func expandBinaryTree(_ root: TreeNode?) -> TreeNode? {
+ return dfs(root)
+ }
+
+ private func dfs(_ root: TreeNode?) -> TreeNode? {
+ guard let root = root else { return nil }
+
+ let leftChild = dfs(root.left)
+ let rightChild = dfs(root.right)
+
+ if let leftChild = leftChild {
+ root.left = TreeNode(-1, leftChild, nil)
+ }
+ if let rightChild = rightChild {
+ root.right = TreeNode(-1, nil, rightChild)
+ }
+
+ return root
+ }
+}
diff --git "a/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/README.md" "b/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/README.md"
index dca809e537dc9..ce88be9f1561f 100644
--- "a/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/README.md"
+++ "b/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/README.md"
@@ -150,6 +150,37 @@ func beautifulBouquet(flowers []int, cnt int) (ans int) {
}
```
+#### Swift
+
+```swift
+class Solution {
+ func beautifulBouquet(_ flowers: [Int], _ cnt: Int) -> Int {
+ let mod = Int(1e9 + 7)
+ var maxFlower = 0
+ for flower in flowers {
+ maxFlower = max(maxFlower, flower)
+ }
+
+ var flowerCount = [Int](repeating: 0, count: maxFlower + 1)
+ var ans = 0
+ var j = 0
+
+ for i in 0.. cnt {
+ flowerCount[flowers[j]] -= 1
+ j += 1
+ }
+
+ ans = (ans + (i - j + 1)) % mod
+ }
+
+ return ans
+ }
+}
+```
+
diff --git "a/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/Solution.swift" "b/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/Solution.swift"
new file mode 100644
index 0000000000000..c94b4a21c3413
--- /dev/null
+++ "b/lcp/LCP 68. \347\276\216\350\247\202\347\232\204\350\212\261\346\235\237/Solution.swift"
@@ -0,0 +1,26 @@
+class Solution {
+ func beautifulBouquet(_ flowers: [Int], _ cnt: Int) -> Int {
+ let mod = Int(1e9 + 7)
+ var maxFlower = 0
+ for flower in flowers {
+ maxFlower = max(maxFlower, flower)
+ }
+
+ var flowerCount = [Int](repeating: 0, count: maxFlower + 1)
+ var ans = 0
+ var j = 0
+
+ for i in 0.. cnt {
+ flowerCount[flowers[j]] -= 1
+ j += 1
+ }
+
+ ans = (ans + (i - j + 1)) % mod
+ }
+
+ return ans
+ }
+}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 93e256af88f15..734a405a7a3b2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -8,7 +8,7 @@
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
"@prettier/plugin-php": "^0.22.2",
- "clang-format": "1.8.0",
+ "clang-format": "^1.8.0",
"husky": "^9.0.1",
"lint-staged": "^15.2.7",
"prettier": "^3.3.2",
@@ -474,6 +474,7 @@
"resolved": "https://registry.npmjs.org/clang-format/-/clang-format-1.8.0.tgz",
"integrity": "sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"async": "^3.2.3",
"glob": "^7.0.0",
diff --git a/package.json b/package.json
index 3040f2fc33aac..a4f2c373c3278 100644
--- a/package.json
+++ b/package.json
@@ -6,7 +6,7 @@
"@commitlint/cli": "^19.3.0",
"@commitlint/config-conventional": "^19.2.2",
"@prettier/plugin-php": "^0.22.2",
- "clang-format": "1.8.0",
+ "clang-format": "^1.8.0",
"husky": "^9.0.1",
"lint-staged": "^15.2.7",
"prettier": "^3.3.2",
diff --git a/requirements.txt b/requirements.txt
index a861898c020f6..b87c0a5b8c9e6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,2 @@
black==24.3.0
-Requests==2.32.0
\ No newline at end of file
+Requests==2.32.4
\ No newline at end of file
diff --git a/solution/0000-0099/0001.Two Sum/README.md b/solution/0000-0099/0001.Two Sum/README.md
index f9a38ce75e350..88c20df42f7fa 100644
--- a/solution/0000-0099/0001.Two Sum/README.md
+++ b/solution/0000-0099/0001.Two Sum/README.md
@@ -353,6 +353,55 @@ class Solution {
}
```
+#### C
+
+```c
+#include
+
+int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
+ int capacity = 1;
+ while (capacity < numsSize * 2) capacity <<= 1;
+ int* keys = malloc(capacity * sizeof(int));
+ int* vals = malloc(capacity * sizeof(int));
+ char* used = calloc(capacity, sizeof(char));
+ if (!keys || !vals || !used) {
+ free(keys);
+ free(vals);
+ free(used);
+ *returnSize = 0;
+ return NULL;
+ }
+ for (int i = 0; i < numsSize; ++i) {
+ int x = nums[i];
+ int y = target - x;
+ unsigned int h = (unsigned int) y & (capacity - 1);
+ while (used[h]) {
+ if (keys[h] == y) {
+ int* res = malloc(2 * sizeof(int));
+ res[0] = vals[h];
+ res[1] = i;
+ *returnSize = 2;
+ free(keys);
+ free(vals);
+ free(used);
+ return res;
+ }
+ h = (h + 1) & (capacity - 1);
+ }
+ unsigned int h2 = (unsigned int) x & (capacity - 1);
+ while (used[h2]) h2 = (h2 + 1) & (capacity - 1);
+ used[h2] = 1;
+ keys[h2] = x;
+ vals[h2] = i;
+ }
+ *returnSize = 0;
+ free(keys);
+ free(vals);
+ free(used);
+ return NULL;
+}
+```
+
diff --git a/solution/0000-0099/0001.Two Sum/README_EN.md b/solution/0000-0099/0001.Two Sum/README_EN.md
index 25b360b51dbb7..c536e027be740 100644
--- a/solution/0000-0099/0001.Two Sum/README_EN.md
+++ b/solution/0000-0099/0001.Two Sum/README_EN.md
@@ -350,6 +350,55 @@ class Solution {
}
```
+#### C
+
+```c
+#include
+
+int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
+ int capacity = 1;
+ while (capacity < numsSize * 2) capacity <<= 1;
+ int* keys = malloc(capacity * sizeof(int));
+ int* vals = malloc(capacity * sizeof(int));
+ char* used = calloc(capacity, sizeof(char));
+ if (!keys || !vals || !used) {
+ free(keys);
+ free(vals);
+ free(used);
+ *returnSize = 0;
+ return NULL;
+ }
+ for (int i = 0; i < numsSize; ++i) {
+ int x = nums[i];
+ int y = target - x;
+ unsigned int h = (unsigned int) y & (capacity - 1);
+ while (used[h]) {
+ if (keys[h] == y) {
+ int* res = malloc(2 * sizeof(int));
+ res[0] = vals[h];
+ res[1] = i;
+ *returnSize = 2;
+ free(keys);
+ free(vals);
+ free(used);
+ return res;
+ }
+ h = (h + 1) & (capacity - 1);
+ }
+ unsigned int h2 = (unsigned int) x & (capacity - 1);
+ while (used[h2]) h2 = (h2 + 1) & (capacity - 1);
+ used[h2] = 1;
+ keys[h2] = x;
+ vals[h2] = i;
+ }
+ *returnSize = 0;
+ free(keys);
+ free(vals);
+ free(used);
+ return NULL;
+}
+```
+
diff --git a/solution/0000-0099/0001.Two Sum/Solution.c b/solution/0000-0099/0001.Two Sum/Solution.c
new file mode 100644
index 0000000000000..5ed7119c426ee
--- /dev/null
+++ b/solution/0000-0099/0001.Two Sum/Solution.c
@@ -0,0 +1,44 @@
+#include
+
+int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
+ int capacity = 1;
+ while (capacity < numsSize * 2) capacity <<= 1;
+ int* keys = malloc(capacity * sizeof(int));
+ int* vals = malloc(capacity * sizeof(int));
+ char* used = calloc(capacity, sizeof(char));
+ if (!keys || !vals || !used) {
+ free(keys);
+ free(vals);
+ free(used);
+ *returnSize = 0;
+ return NULL;
+ }
+ for (int i = 0; i < numsSize; ++i) {
+ int x = nums[i];
+ int y = target - x;
+ unsigned int h = (unsigned int) y & (capacity - 1);
+ while (used[h]) {
+ if (keys[h] == y) {
+ int* res = malloc(2 * sizeof(int));
+ res[0] = vals[h];
+ res[1] = i;
+ *returnSize = 2;
+ free(keys);
+ free(vals);
+ free(used);
+ return res;
+ }
+ h = (h + 1) & (capacity - 1);
+ }
+ unsigned int h2 = (unsigned int) x & (capacity - 1);
+ while (used[h2]) h2 = (h2 + 1) & (capacity - 1);
+ used[h2] = 1;
+ keys[h2] = x;
+ vals[h2] = i;
+ }
+ *returnSize = 0;
+ free(keys);
+ free(vals);
+ free(used);
+ return NULL;
+}
diff --git a/solution/0000-0099/0002.Add Two Numbers/README.md b/solution/0000-0099/0002.Add Two Numbers/README.md
index 3806f64b53d17..6cda4e7ca4018 100644
--- a/solution/0000-0099/0002.Add Two Numbers/README.md
+++ b/solution/0000-0099/0002.Add Two Numbers/README.md
@@ -147,9 +147,9 @@ class Solution {
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
- ListNode* dummy = new ListNode();
+ ListNode dummy;
int carry = 0;
- ListNode* cur = dummy;
+ ListNode* cur = &dummy;
while (l1 || l2 || carry) {
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = s / 10;
@@ -158,7 +158,7 @@ public:
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
- return dummy->next;
+ return dummy.next;
}
};
```
@@ -494,6 +494,52 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
result = aggregate
```
+#### C
+
+```c
+
+/**
+ * Definition for singly-linked list.
+ * struct ListNode {
+ * int val;
+ * struct ListNode *next;
+ * };
+ */
+
+struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
+ struct ListNode* dummy = (struct ListNode*) malloc(sizeof(struct ListNode));
+ dummy->val = 0;
+ dummy->next = NULL;
+ struct ListNode* curr = dummy;
+ int carry = 0;
+
+ while (l1 != NULL || l2 != NULL || carry != 0) {
+ int sum = carry;
+ if (l1 != NULL) {
+ sum += l1->val;
+ l1 = l1->next;
+ }
+ if (l2 != NULL) {
+ sum += l2->val;
+ l2 = l2->next;
+ }
+
+ carry = sum / 10;
+ int val = sum % 10;
+
+ struct ListNode* newNode = (struct ListNode*) malloc(sizeof(struct ListNode));
+ newNode->val = val;
+ newNode->next = NULL;
+ curr->next = newNode;
+ curr = curr->next;
+ }
+
+ struct ListNode* result = dummy->next;
+ free(dummy);
+ return result;
+}
+```
+
diff --git a/solution/0000-0099/0002.Add Two Numbers/README_EN.md b/solution/0000-0099/0002.Add Two Numbers/README_EN.md
index f6878f0937322..99c96e3961490 100644
--- a/solution/0000-0099/0002.Add Two Numbers/README_EN.md
+++ b/solution/0000-0099/0002.Add Two Numbers/README_EN.md
@@ -143,9 +143,9 @@ class Solution {
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
- ListNode* dummy = new ListNode();
+ ListNode dummy;
int carry = 0;
- ListNode* cur = dummy;
+ ListNode* cur = &dummy;
while (l1 || l2 || carry) {
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = s / 10;
@@ -154,7 +154,7 @@ public:
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
- return dummy->next;
+ return dummy.next;
}
};
```
@@ -490,6 +490,52 @@ proc addTwoNumbers(l1: var SinglyLinkedList, l2: var SinglyLinkedList): SinglyLi
result = aggregate
```
+#### C
+
+```c
+
+/**
+ * Definition for singly-linked list.
+ * struct ListNode {
+ * int val;
+ * struct ListNode *next;
+ * };
+ */
+
+struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
+ struct ListNode* dummy = (struct ListNode*) malloc(sizeof(struct ListNode));
+ dummy->val = 0;
+ dummy->next = NULL;
+ struct ListNode* curr = dummy;
+ int carry = 0;
+
+ while (l1 != NULL || l2 != NULL || carry != 0) {
+ int sum = carry;
+ if (l1 != NULL) {
+ sum += l1->val;
+ l1 = l1->next;
+ }
+ if (l2 != NULL) {
+ sum += l2->val;
+ l2 = l2->next;
+ }
+
+ carry = sum / 10;
+ int val = sum % 10;
+
+ struct ListNode* newNode = (struct ListNode*) malloc(sizeof(struct ListNode));
+ newNode->val = val;
+ newNode->next = NULL;
+ curr->next = newNode;
+ curr = curr->next;
+ }
+
+ struct ListNode* result = dummy->next;
+ free(dummy);
+ return result;
+}
+```
+
diff --git a/solution/0000-0099/0002.Add Two Numbers/Solution.c b/solution/0000-0099/0002.Add Two Numbers/Solution.c
new file mode 100644
index 0000000000000..0ca00b4bd6752
--- /dev/null
+++ b/solution/0000-0099/0002.Add Two Numbers/Solution.c
@@ -0,0 +1,41 @@
+
+/**
+ * Definition for singly-linked list.
+ * struct ListNode {
+ * int val;
+ * struct ListNode *next;
+ * };
+ */
+
+struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
+ struct ListNode* dummy = (struct ListNode*) malloc(sizeof(struct ListNode));
+ dummy->val = 0;
+ dummy->next = NULL;
+ struct ListNode* curr = dummy;
+ int carry = 0;
+
+ while (l1 != NULL || l2 != NULL || carry != 0) {
+ int sum = carry;
+ if (l1 != NULL) {
+ sum += l1->val;
+ l1 = l1->next;
+ }
+ if (l2 != NULL) {
+ sum += l2->val;
+ l2 = l2->next;
+ }
+
+ carry = sum / 10;
+ int val = sum % 10;
+
+ struct ListNode* newNode = (struct ListNode*) malloc(sizeof(struct ListNode));
+ newNode->val = val;
+ newNode->next = NULL;
+ curr->next = newNode;
+ curr = curr->next;
+ }
+
+ struct ListNode* result = dummy->next;
+ free(dummy);
+ return result;
+}
diff --git a/solution/0000-0099/0002.Add Two Numbers/Solution.cpp b/solution/0000-0099/0002.Add Two Numbers/Solution.cpp
index b06a8b66b90b4..0d1b36d111994 100644
--- a/solution/0000-0099/0002.Add Two Numbers/Solution.cpp
+++ b/solution/0000-0099/0002.Add Two Numbers/Solution.cpp
@@ -11,9 +11,9 @@
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
- ListNode* dummy = new ListNode();
+ ListNode dummy;
int carry = 0;
- ListNode* cur = dummy;
+ ListNode* cur = &dummy;
while (l1 || l2 || carry) {
int s = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + carry;
carry = s / 10;
@@ -22,6 +22,6 @@ class Solution {
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
- return dummy->next;
+ return dummy.next;
}
};
\ No newline at end of file
diff --git a/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md
index 9d5d399aca7f6..d95ea8a5d77a9 100644
--- a/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md
+++ b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README.md
@@ -26,7 +26,7 @@ tags:
输入: s = "abcabcbb"
-输出: 3
+输出: 3
解释: 因为无重复字符的最长子串是 "abc"
,所以其长度为 3。
@@ -300,6 +300,33 @@ class Solution {
}
```
+#### C
+
+```c
+int lengthOfLongestSubstring(char* s) {
+ int freq[256] = {0};
+ int l = 0, r = 0;
+ int ans = 0;
+ int len = strlen(s);
+
+ for (r = 0; r < len; r++) {
+ char c = s[r];
+ freq[(unsigned char) c]++;
+
+ while (freq[(unsigned char) c] > 1) {
+ freq[(unsigned char) s[l]]--;
+ l++;
+ }
+
+ if (ans < r - l + 1) {
+ ans = r - l + 1;
+ }
+ }
+
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README_EN.md b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README_EN.md
index c8302cd9b1aab..16624fcc16b80 100644
--- a/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README_EN.md
+++ b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/README_EN.md
@@ -18,7 +18,7 @@ tags:
-Given a string s
, find the length of the longest substring without repeating characters.
+Given a string s
, find the length of the longest substring without duplicate characters.
Example 1:
@@ -298,6 +298,33 @@ class Solution {
}
```
+#### C
+
+```c
+int lengthOfLongestSubstring(char* s) {
+ int freq[256] = {0};
+ int l = 0, r = 0;
+ int ans = 0;
+ int len = strlen(s);
+
+ for (r = 0; r < len; r++) {
+ char c = s[r];
+ freq[(unsigned char) c]++;
+
+ while (freq[(unsigned char) c] > 1) {
+ freq[(unsigned char) s[l]]--;
+ l++;
+ }
+
+ if (ans < r - l + 1) {
+ ans = r - l + 1;
+ }
+ }
+
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0003.Longest Substring Without Repeating Characters/Solution.c b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/Solution.c
new file mode 100644
index 0000000000000..673e098af92ac
--- /dev/null
+++ b/solution/0000-0099/0003.Longest Substring Without Repeating Characters/Solution.c
@@ -0,0 +1,22 @@
+int lengthOfLongestSubstring(char* s) {
+ int freq[256] = {0};
+ int l = 0, r = 0;
+ int ans = 0;
+ int len = strlen(s);
+
+ for (r = 0; r < len; r++) {
+ char c = s[r];
+ freq[(unsigned char) c]++;
+
+ while (freq[(unsigned char) c] > 1) {
+ freq[(unsigned char) s[l]]--;
+ l++;
+ }
+
+ if (ans < r - l + 1) {
+ ans = r - l + 1;
+ }
+ }
+
+ return ans;
+}
diff --git a/solution/0000-0099/0004.Median of Two Sorted Arrays/README.md b/solution/0000-0099/0004.Median of Two Sorted Arrays/README.md
index a0c5af52f0caa..b6a21c5b7e751 100644
--- a/solution/0000-0099/0004.Median of Two Sorted Arrays/README.md
+++ b/solution/0000-0099/0004.Median of Two Sorted Arrays/README.md
@@ -350,6 +350,36 @@ proc medianOfTwoSortedArrays(nums1: seq[int], nums2: seq[int]): float =
# echo medianOfTwoSortedArrays(arrA, arrB)
```
+#### C
+
+```c
+int findKth(int* nums1, int m, int i, int* nums2, int n, int j, int k) {
+ if (i >= m)
+ return nums2[j + k - 1];
+ if (j >= n)
+ return nums1[i + k - 1];
+ if (k == 1)
+ return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
+
+ int p = k / 2;
+
+ int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
+ int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
+
+ if (x < y)
+ return findKth(nums1, m, i + p, nums2, n, j, k - p);
+ else
+ return findKth(nums1, m, i, nums2, n, j + p, k - p);
+}
+
+double findMedianSortedArrays(int* nums1, int m, int* nums2, int n) {
+ int total = m + n;
+ int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
+ int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
+ return (a + b) / 2.0;
+}
+```
+
diff --git a/solution/0000-0099/0004.Median of Two Sorted Arrays/README_EN.md b/solution/0000-0099/0004.Median of Two Sorted Arrays/README_EN.md
index 15b73ee6ff6f0..2896e96ddc3af 100644
--- a/solution/0000-0099/0004.Median of Two Sorted Arrays/README_EN.md
+++ b/solution/0000-0099/0004.Median of Two Sorted Arrays/README_EN.md
@@ -346,6 +346,36 @@ proc medianOfTwoSortedArrays(nums1: seq[int], nums2: seq[int]): float =
# echo medianOfTwoSortedArrays(arrA, arrB)
```
+#### C
+
+```c
+int findKth(int* nums1, int m, int i, int* nums2, int n, int j, int k) {
+ if (i >= m)
+ return nums2[j + k - 1];
+ if (j >= n)
+ return nums1[i + k - 1];
+ if (k == 1)
+ return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
+
+ int p = k / 2;
+
+ int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
+ int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
+
+ if (x < y)
+ return findKth(nums1, m, i + p, nums2, n, j, k - p);
+ else
+ return findKth(nums1, m, i, nums2, n, j + p, k - p);
+}
+
+double findMedianSortedArrays(int* nums1, int m, int* nums2, int n) {
+ int total = m + n;
+ int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
+ int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
+ return (a + b) / 2.0;
+}
+```
+
diff --git a/solution/0000-0099/0004.Median of Two Sorted Arrays/Solution.c b/solution/0000-0099/0004.Median of Two Sorted Arrays/Solution.c
new file mode 100644
index 0000000000000..2786c7ef9bfd8
--- /dev/null
+++ b/solution/0000-0099/0004.Median of Two Sorted Arrays/Solution.c
@@ -0,0 +1,25 @@
+int findKth(int* nums1, int m, int i, int* nums2, int n, int j, int k) {
+ if (i >= m)
+ return nums2[j + k - 1];
+ if (j >= n)
+ return nums1[i + k - 1];
+ if (k == 1)
+ return nums1[i] < nums2[j] ? nums1[i] : nums2[j];
+
+ int p = k / 2;
+
+ int x = (i + p - 1 < m) ? nums1[i + p - 1] : INT_MAX;
+ int y = (j + p - 1 < n) ? nums2[j + p - 1] : INT_MAX;
+
+ if (x < y)
+ return findKth(nums1, m, i + p, nums2, n, j, k - p);
+ else
+ return findKth(nums1, m, i, nums2, n, j + p, k - p);
+}
+
+double findMedianSortedArrays(int* nums1, int m, int* nums2, int n) {
+ int total = m + n;
+ int a = findKth(nums1, m, 0, nums2, n, 0, (total + 1) / 2);
+ int b = findKth(nums1, m, 0, nums2, n, 0, (total + 2) / 2);
+ return (a + b) / 2.0;
+}
diff --git a/solution/0000-0099/0005.Longest Palindromic Substring/README.md b/solution/0000-0099/0005.Longest Palindromic Substring/README.md
index 407fd7e12412c..c6c52ab64cd4f 100644
--- a/solution/0000-0099/0005.Longest Palindromic Substring/README.md
+++ b/solution/0000-0099/0005.Longest Palindromic Substring/README.md
@@ -277,6 +277,42 @@ public class Solution {
}
```
+#### C
+
+```c
+char* longestPalindrome(char* s) {
+ int n = strlen(s);
+ bool** f = (bool**) malloc(n * sizeof(bool*));
+ for (int i = 0; i < n; ++i) {
+ f[i] = (bool*) malloc(n * sizeof(bool));
+ for (int j = 0; j < n; ++j) {
+ f[i][j] = true;
+ }
+ }
+ int k = 0, mx = 1;
+ for (int i = n - 2; ~i; --i) {
+ for (int j = i + 1; j < n; ++j) {
+ f[i][j] = false;
+ if (s[i] == s[j]) {
+ f[i][j] = f[i + 1][j - 1];
+ if (f[i][j] && mx < j - i + 1) {
+ mx = j - i + 1;
+ k = i;
+ }
+ }
+ }
+ }
+ char* res = (char*) malloc((mx + 1) * sizeof(char));
+ strncpy(res, s + k, mx);
+ res[mx] = '\0';
+ for (int i = 0; i < n; ++i) {
+ free(f[i]);
+ }
+ free(f);
+ return res;
+}
+```
+
#### Nim
```nim
@@ -456,6 +492,39 @@ impl Solution {
}
```
+#### C#
+
+```cs
+public class Solution {
+ private string s;
+ private int n;
+
+ public String LongestPalindrome(string s) {
+ this.s = s;
+ n = s.Length;
+ int start = 0, mx = 1;
+ for (int i = 0; i < n; ++i) {
+ int a = F(i, i);
+ int b = F(i, i + 1);
+ int t = Math.Max(a, b);
+ if (mx < t) {
+ mx = t;
+ start = i - ((t - 1) >> 1);
+ }
+ }
+ return s.Substring(start, start + mx);
+ }
+
+ private int F(int l, int r) {
+ while (l >= 0 && r < n && s[l] == s[r]) {
+ --l;
+ ++r;
+ }
+ return r - l - 1;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md b/solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md
index 895bbb34ed3ff..e317ceda58ac4 100644
--- a/solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md
+++ b/solution/0000-0099/0005.Longest Palindromic Substring/README_EN.md
@@ -275,6 +275,42 @@ public class Solution {
}
```
+#### C
+
+```c
+char* longestPalindrome(char* s) {
+ int n = strlen(s);
+ bool** f = (bool**) malloc(n * sizeof(bool*));
+ for (int i = 0; i < n; ++i) {
+ f[i] = (bool*) malloc(n * sizeof(bool));
+ for (int j = 0; j < n; ++j) {
+ f[i][j] = true;
+ }
+ }
+ int k = 0, mx = 1;
+ for (int i = n - 2; ~i; --i) {
+ for (int j = i + 1; j < n; ++j) {
+ f[i][j] = false;
+ if (s[i] == s[j]) {
+ f[i][j] = f[i + 1][j - 1];
+ if (f[i][j] && mx < j - i + 1) {
+ mx = j - i + 1;
+ k = i;
+ }
+ }
+ }
+ }
+ char* res = (char*) malloc((mx + 1) * sizeof(char));
+ strncpy(res, s + k, mx);
+ res[mx] = '\0';
+ for (int i = 0; i < n; ++i) {
+ free(f[i]);
+ }
+ free(f);
+ return res;
+}
+```
+
#### Nim
```nim
@@ -454,6 +490,39 @@ impl Solution {
}
```
+#### C#
+
+```cs
+public class Solution {
+ private string s;
+ private int n;
+
+ public String LongestPalindrome(string s) {
+ this.s = s;
+ n = s.Length;
+ int start = 0, mx = 1;
+ for (int i = 0; i < n; ++i) {
+ int a = F(i, i);
+ int b = F(i, i + 1);
+ int t = Math.Max(a, b);
+ if (mx < t) {
+ mx = t;
+ start = i - ((t - 1) >> 1);
+ }
+ }
+ return s.Substring(start, start + mx);
+ }
+
+ private int F(int l, int r) {
+ while (l >= 0 && r < n && s[l] == s[r]) {
+ --l;
+ ++r;
+ }
+ return r - l - 1;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0005.Longest Palindromic Substring/Solution.c b/solution/0000-0099/0005.Longest Palindromic Substring/Solution.c
new file mode 100644
index 0000000000000..e5a88d6c8c467
--- /dev/null
+++ b/solution/0000-0099/0005.Longest Palindromic Substring/Solution.c
@@ -0,0 +1,31 @@
+char* longestPalindrome(char* s) {
+ int n = strlen(s);
+ bool** f = (bool**) malloc(n * sizeof(bool*));
+ for (int i = 0; i < n; ++i) {
+ f[i] = (bool*) malloc(n * sizeof(bool));
+ for (int j = 0; j < n; ++j) {
+ f[i][j] = true;
+ }
+ }
+ int k = 0, mx = 1;
+ for (int i = n - 2; ~i; --i) {
+ for (int j = i + 1; j < n; ++j) {
+ f[i][j] = false;
+ if (s[i] == s[j]) {
+ f[i][j] = f[i + 1][j - 1];
+ if (f[i][j] && mx < j - i + 1) {
+ mx = j - i + 1;
+ k = i;
+ }
+ }
+ }
+ }
+ char* res = (char*) malloc((mx + 1) * sizeof(char));
+ strncpy(res, s + k, mx);
+ res[mx] = '\0';
+ for (int i = 0; i < n; ++i) {
+ free(f[i]);
+ }
+ free(f);
+ return res;
+}
diff --git a/solution/0000-0099/0005.Longest Palindromic Substring/Solution2.cs b/solution/0000-0099/0005.Longest Palindromic Substring/Solution2.cs
new file mode 100644
index 0000000000000..48e1cf8b8e46c
--- /dev/null
+++ b/solution/0000-0099/0005.Longest Palindromic Substring/Solution2.cs
@@ -0,0 +1,28 @@
+public class Solution {
+ private string s;
+ private int n;
+
+ public String LongestPalindrome(string s) {
+ this.s = s;
+ n = s.Length;
+ int start = 0, mx = 1;
+ for (int i = 0; i < n; ++i) {
+ int a = F(i, i);
+ int b = F(i, i + 1);
+ int t = Math.Max(a, b);
+ if (mx < t) {
+ mx = t;
+ start = i - ((t - 1) >> 1);
+ }
+ }
+ return s.Substring(start, start + mx);
+ }
+
+ private int F(int l, int r) {
+ while (l >= 0 && r < n && s[l] == s[r]) {
+ --l;
+ ++r;
+ }
+ return r - l - 1;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0006.Zigzag Conversion/README.md b/solution/0000-0099/0006.Zigzag Conversion/README.md
index c12bad03a22aa..ee8279b690b66 100644
--- a/solution/0000-0099/0006.Zigzag Conversion/README.md
+++ b/solution/0000-0099/0006.Zigzag Conversion/README.md
@@ -78,9 +78,9 @@ P I
### 方法一:模拟
-我们用一个二维数组 $g$ 来模拟 $Z$ 字形排列的过程,其中 $g[i][j]$ 表示第 $i$ 行第 $j$ 列的字符。初始时 $i=0$,另外我们定义一个方向变量 $k$,初始时 $k=-1$,表示向上走。
+我们用一个二维数组 $g$ 来模拟 Z 字形排列的过程,其中 $g[i][j]$ 表示第 $i$ 行第 $j$ 列的字符。初始时 $i = 0$,另外我们定义一个方向变量 $k$,初始时 $k = -1$,表示向上走。
-我们从左到右遍历字符串 $s$,每次遍历到一个字符 $c$,将其追加到 $g[i]$ 中,如果此时 $i=0$ 或者 $i=numRows-1$,说明当前字符位于 $Z$ 字形排列的拐点,我们将 $k$ 的值反转,即 $k=-k$。接下来,我们将 $i$ 的值更新为 $i+k$,即向上或向下移动一行。继续遍历下一个字符,直到遍历完字符串 $s$,我们返回 $g$ 中所有行拼接后的字符串即可。
+我们从左到右遍历字符串 $s$,每次遍历到一个字符 $c$,将其追加到 $g[i]$ 中。如果此时 $i = 0$ 或者 $i = \textit{numRows} - 1$,说明当前字符位于 Z 字形排列的拐点,我们将 $k$ 的值反转,即 $k = -k$。接下来,我们将 $i$ 的值更新为 $i + k$,即向上或向下移动一行。继续遍历下一个字符,直到遍历完字符串 $s$,我们返回 $g$ 中所有行拼接后的字符串即可。
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $s$ 的长度。
@@ -199,29 +199,24 @@ function convert(s: string, numRows: number): string {
```rust
impl Solution {
pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
if num_rows == 1 {
return s;
}
- let mut ss = vec![String::new(); num_rows];
+
+ let num_rows = num_rows as usize;
+ let mut g = vec![String::new(); num_rows];
let mut i = 0;
- let mut to_down = true;
+ let mut k = -1;
+
for c in s.chars() {
- ss[i].push(c);
- if to_down {
- i += 1;
- } else {
- i -= 1;
- }
+ g[i].push(c);
if i == 0 || i == num_rows - 1 {
- to_down = !to_down;
+ k = -k;
}
+ i = (i as isize + k) as usize;
}
- let mut res = String::new();
- for i in 0..num_rows {
- res += &ss[i];
- }
- res
+
+ g.concat()
}
}
```
@@ -282,213 +277,77 @@ public class Solution {
}
```
-
-
-
-
-
-
-### 方法二
-
-
-
-#### Python3
-
-```python
-class Solution:
- def convert(self, s: str, numRows: int) -> str:
- if numRows == 1:
- return s
- group = 2 * numRows - 2
- ans = []
- for i in range(1, numRows + 1):
- interval = group if i == numRows else 2 * numRows - 2 * i
- idx = i - 1
- while idx < len(s):
- ans.append(s[idx])
- idx += interval
- interval = group - interval
- if interval == 0:
- interval = group
- return ''.join(ans)
-```
-
-#### Java
+#### C
-```java
-class Solution {
- public String convert(String s, int numRows) {
- if (numRows == 1) {
- return s;
- }
- StringBuilder ans = new StringBuilder();
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; i++) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.append(s.charAt(idx));
- idx += interval;
- interval = group - interval;
- if (interval == 0) {
- interval = group;
- }
- }
- }
- return ans.toString();
+```c
+char* convert(char* s, int numRows) {
+ if (numRows == 1) {
+ return strdup(s);
}
-}
-```
-#### C++
+ int len = strlen(s);
+ char** g = (char**) malloc(numRows * sizeof(char*));
+ int* idx = (int*) malloc(numRows * sizeof(int));
+ for (int i = 0; i < numRows; ++i) {
+ g[i] = (char*) malloc((len + 1) * sizeof(char));
+ idx[i] = 0;
+ }
-```cpp
-class Solution {
-public:
- string convert(string s, int numRows) {
- if (numRows == 1) return s;
- string ans;
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; ++i) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.push_back(s[idx]);
- idx += interval;
- interval = group - interval;
- if (interval == 0) interval = group;
- }
+ int i = 0, k = -1;
+ for (int p = 0; p < len; ++p) {
+ g[i][idx[i]++] = s[p];
+ if (i == 0 || i == numRows - 1) {
+ k = -k;
}
- return ans;
+ i += k;
}
-};
-```
-#### Go
-
-```go
-func convert(s string, numRows int) string {
- if numRows == 1 {
- return s
- }
- n := len(s)
- ans := make([]byte, n)
- step := 2*numRows - 2
- count := 0
- for i := 0; i < numRows; i++ {
- for j := 0; j+i < n; j += step {
- ans[count] = s[i+j]
- count++
- if i != 0 && i != numRows-1 && j+step-i < n {
- ans[count] = s[j+step-i]
- count++
- }
- }
- }
- return string(ans)
-}
-```
-
-#### TypeScript
-
-```ts
-function convert(s: string, numRows: number): string {
- if (numRows === 1) {
- return s;
- }
- const ss = new Array(numRows).fill('');
- let i = 0;
- let toDown = true;
- for (const c of s) {
- ss[i] += c;
- if (toDown) {
- i++;
- } else {
- i--;
- }
- if (i === 0 || i === numRows - 1) {
- toDown = !toDown;
+ char* ans = (char*) malloc((len + 1) * sizeof(char));
+ int pos = 0;
+ for (int r = 0; r < numRows; ++r) {
+ for (int j = 0; j < idx[r]; ++j) {
+ ans[pos++] = g[r][j];
}
+ free(g[r]);
}
- return ss.reduce((r, s) => r + s);
-}
-```
-
-#### Rust
+ ans[pos] = '\0';
-```rust
-impl Solution {
- pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
- let mut rows = vec![String::new(); num_rows];
- let iter = (0..num_rows).chain((1..num_rows - 1).rev()).cycle();
- iter.zip(s.chars()).for_each(|(i, c)| rows[i].push(c));
- rows.into_iter().collect()
- }
+ free(g);
+ free(idx);
+ return ans;
}
```
-#### JavaScript
-
-```js
-/**
- * @param {string} s
- * @param {number} numRows
- * @return {string}
- */
-var convert = function (s, numRows) {
- if (numRows == 1) return s;
- const arr = new Array(numRows);
- for (let i = 0; i < numRows; i++) arr[i] = [];
- let mi = 0,
- isDown = true;
- for (const c of s) {
- arr[mi].push(c);
-
- if (mi >= numRows - 1) isDown = false;
- else if (mi <= 0) isDown = true;
-
- if (isDown) mi++;
- else mi--;
- }
- let ans = [];
- for (const item of arr) {
- ans = ans.concat(item);
- }
- return ans.join('');
-};
-```
-
#### PHP
```php
class Solution {
/**
- * @param string $s
- * @param int $numRows
- * @return string
+ * @param String $s
+ * @param Integer $numRows
+ * @return String
*/
-
function convert($s, $numRows) {
- if ($numRows == 1 || strlen($s) <= $numRows) {
+ if ($numRows == 1) {
return $s;
}
- $result = '';
- $cycleLength = 2 * $numRows - 2;
- $n = strlen($s);
+ $g = array_fill(0, $numRows, '');
+ $i = 0;
+ $k = -1;
- for ($i = 0; $i < $numRows; $i++) {
- for ($j = 0; $j + $i < $n; $j += $cycleLength) {
- $result .= $s[$j + $i];
+ $length = strlen($s);
+ for ($j = 0; $j < $length; $j++) {
+ $c = $s[$j];
+ $g[$i] .= $c;
- if ($i != 0 && $i != $numRows - 1 && $j + $cycleLength - $i < $n) {
- $result .= $s[$j + $cycleLength - $i];
- }
+ if ($i == 0 || $i == $numRows - 1) {
+ $k = -$k;
}
- }
- return $result;
+ $i += $k;
+ }
+ return implode('', $g);
}
}
```
diff --git a/solution/0000-0099/0006.Zigzag Conversion/README_EN.md b/solution/0000-0099/0006.Zigzag Conversion/README_EN.md
index 04390da8f24e7..bf557fa6ee583 100644
--- a/solution/0000-0099/0006.Zigzag Conversion/README_EN.md
+++ b/solution/0000-0099/0006.Zigzag Conversion/README_EN.md
@@ -76,11 +76,11 @@ P I
### Solution 1: Simulation
-We use a two-dimensional array $g$ to simulate the process of the $Z$-shape arrangement, where $g[i][j]$ represents the character at the $i$-th row and the $j$-th column. Initially, $i=0$, and we define a direction variable $k$, initially $k=-1$, indicating moving upwards.
+We use a 2D array $g$ to simulate the process of arranging the string in a zigzag pattern, where $g[i][j]$ represents the character at row $i$ and column $j$. Initially, $i = 0$. We also define a direction variable $k$, initially $k = -1$, which means moving upwards.
-We traverse the string $s$ from left to right. Each time we traverse to a character $c$, we append it to $g[i]$. If $i=0$ or $i=numRows-1$ at this time, it means that the current character is at the turning point of the $Z$-shape arrangement, and we reverse the value of $k$, i.e., $k=-k$. Next, we update the value of $i$ to $i+k$, i.e., move up or down one row. Continue to traverse the next character until we have traversed the string $s$, and we return the string concatenated by all rows in $g$.
+We traverse the string $s$ from left to right. For each character $c$, we append it to $g[i]$. If $i = 0$ or $i = \textit{numRows} - 1$, it means the current character is at a turning point in the zigzag pattern, so we reverse the value of $k$, i.e., $k = -k$. Then, we update $i$ to $i + k$, which means moving up or down one row. Continue traversing the next character until the end of the string $s$. Finally, we return the concatenation of all rows in $g$ as the result.
-The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the string $s$.
+The time complexity is $O(n)$ and the space complexity is $O(n)$, where $n$ is the length of the string $s$.
@@ -197,29 +197,24 @@ function convert(s: string, numRows: number): string {
```rust
impl Solution {
pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
if num_rows == 1 {
return s;
}
- let mut ss = vec![String::new(); num_rows];
+
+ let num_rows = num_rows as usize;
+ let mut g = vec![String::new(); num_rows];
let mut i = 0;
- let mut to_down = true;
+ let mut k = -1;
+
for c in s.chars() {
- ss[i].push(c);
- if to_down {
- i += 1;
- } else {
- i -= 1;
- }
+ g[i].push(c);
if i == 0 || i == num_rows - 1 {
- to_down = !to_down;
+ k = -k;
}
+ i = (i as isize + k) as usize;
}
- let mut res = String::new();
- for i in 0..num_rows {
- res += &ss[i];
- }
- res
+
+ g.concat()
}
}
```
@@ -280,213 +275,77 @@ public class Solution {
}
```
-
-
-
-
-
-
-### Solution 2
-
-
-
-#### Python3
-
-```python
-class Solution:
- def convert(self, s: str, numRows: int) -> str:
- if numRows == 1:
- return s
- group = 2 * numRows - 2
- ans = []
- for i in range(1, numRows + 1):
- interval = group if i == numRows else 2 * numRows - 2 * i
- idx = i - 1
- while idx < len(s):
- ans.append(s[idx])
- idx += interval
- interval = group - interval
- if interval == 0:
- interval = group
- return ''.join(ans)
-```
-
-#### Java
+#### C
-```java
-class Solution {
- public String convert(String s, int numRows) {
- if (numRows == 1) {
- return s;
- }
- StringBuilder ans = new StringBuilder();
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; i++) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.append(s.charAt(idx));
- idx += interval;
- interval = group - interval;
- if (interval == 0) {
- interval = group;
- }
- }
- }
- return ans.toString();
+```c
+char* convert(char* s, int numRows) {
+ if (numRows == 1) {
+ return strdup(s);
}
-}
-```
-#### C++
+ int len = strlen(s);
+ char** g = (char**) malloc(numRows * sizeof(char*));
+ int* idx = (int*) malloc(numRows * sizeof(int));
+ for (int i = 0; i < numRows; ++i) {
+ g[i] = (char*) malloc((len + 1) * sizeof(char));
+ idx[i] = 0;
+ }
-```cpp
-class Solution {
-public:
- string convert(string s, int numRows) {
- if (numRows == 1) return s;
- string ans;
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; ++i) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.push_back(s[idx]);
- idx += interval;
- interval = group - interval;
- if (interval == 0) interval = group;
- }
+ int i = 0, k = -1;
+ for (int p = 0; p < len; ++p) {
+ g[i][idx[i]++] = s[p];
+ if (i == 0 || i == numRows - 1) {
+ k = -k;
}
- return ans;
+ i += k;
}
-};
-```
-#### Go
-
-```go
-func convert(s string, numRows int) string {
- if numRows == 1 {
- return s
- }
- n := len(s)
- ans := make([]byte, n)
- step := 2*numRows - 2
- count := 0
- for i := 0; i < numRows; i++ {
- for j := 0; j+i < n; j += step {
- ans[count] = s[i+j]
- count++
- if i != 0 && i != numRows-1 && j+step-i < n {
- ans[count] = s[j+step-i]
- count++
- }
- }
- }
- return string(ans)
-}
-```
-
-#### TypeScript
-
-```ts
-function convert(s: string, numRows: number): string {
- if (numRows === 1) {
- return s;
- }
- const ss = new Array(numRows).fill('');
- let i = 0;
- let toDown = true;
- for (const c of s) {
- ss[i] += c;
- if (toDown) {
- i++;
- } else {
- i--;
- }
- if (i === 0 || i === numRows - 1) {
- toDown = !toDown;
+ char* ans = (char*) malloc((len + 1) * sizeof(char));
+ int pos = 0;
+ for (int r = 0; r < numRows; ++r) {
+ for (int j = 0; j < idx[r]; ++j) {
+ ans[pos++] = g[r][j];
}
+ free(g[r]);
}
- return ss.reduce((r, s) => r + s);
-}
-```
-
-#### Rust
+ ans[pos] = '\0';
-```rust
-impl Solution {
- pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
- let mut rows = vec![String::new(); num_rows];
- let iter = (0..num_rows).chain((1..num_rows - 1).rev()).cycle();
- iter.zip(s.chars()).for_each(|(i, c)| rows[i].push(c));
- rows.into_iter().collect()
- }
+ free(g);
+ free(idx);
+ return ans;
}
```
-#### JavaScript
-
-```js
-/**
- * @param {string} s
- * @param {number} numRows
- * @return {string}
- */
-var convert = function (s, numRows) {
- if (numRows == 1) return s;
- const arr = new Array(numRows);
- for (let i = 0; i < numRows; i++) arr[i] = [];
- let mi = 0,
- isDown = true;
- for (const c of s) {
- arr[mi].push(c);
-
- if (mi >= numRows - 1) isDown = false;
- else if (mi <= 0) isDown = true;
-
- if (isDown) mi++;
- else mi--;
- }
- let ans = [];
- for (const item of arr) {
- ans = ans.concat(item);
- }
- return ans.join('');
-};
-```
-
#### PHP
```php
class Solution {
/**
- * @param string $s
- * @param int $numRows
- * @return string
+ * @param String $s
+ * @param Integer $numRows
+ * @return String
*/
-
function convert($s, $numRows) {
- if ($numRows == 1 || strlen($s) <= $numRows) {
+ if ($numRows == 1) {
return $s;
}
- $result = '';
- $cycleLength = 2 * $numRows - 2;
- $n = strlen($s);
+ $g = array_fill(0, $numRows, '');
+ $i = 0;
+ $k = -1;
- for ($i = 0; $i < $numRows; $i++) {
- for ($j = 0; $j + $i < $n; $j += $cycleLength) {
- $result .= $s[$j + $i];
+ $length = strlen($s);
+ for ($j = 0; $j < $length; $j++) {
+ $c = $s[$j];
+ $g[$i] .= $c;
- if ($i != 0 && $i != $numRows - 1 && $j + $cycleLength - $i < $n) {
- $result .= $s[$j + $cycleLength - $i];
- }
+ if ($i == 0 || $i == $numRows - 1) {
+ $k = -$k;
}
- }
- return $result;
+ $i += $k;
+ }
+ return implode('', $g);
}
}
```
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution.c b/solution/0000-0099/0006.Zigzag Conversion/Solution.c
new file mode 100644
index 0000000000000..3111a73e7035c
--- /dev/null
+++ b/solution/0000-0099/0006.Zigzag Conversion/Solution.c
@@ -0,0 +1,36 @@
+char* convert(char* s, int numRows) {
+ if (numRows == 1) {
+ return strdup(s);
+ }
+
+ int len = strlen(s);
+ char** g = (char**) malloc(numRows * sizeof(char*));
+ int* idx = (int*) malloc(numRows * sizeof(int));
+ for (int i = 0; i < numRows; ++i) {
+ g[i] = (char*) malloc((len + 1) * sizeof(char));
+ idx[i] = 0;
+ }
+
+ int i = 0, k = -1;
+ for (int p = 0; p < len; ++p) {
+ g[i][idx[i]++] = s[p];
+ if (i == 0 || i == numRows - 1) {
+ k = -k;
+ }
+ i += k;
+ }
+
+ char* ans = (char*) malloc((len + 1) * sizeof(char));
+ int pos = 0;
+ for (int r = 0; r < numRows; ++r) {
+ for (int j = 0; j < idx[r]; ++j) {
+ ans[pos++] = g[r][j];
+ }
+ free(g[r]);
+ }
+ ans[pos] = '\0';
+
+ free(g);
+ free(idx);
+ return ans;
+}
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution.php b/solution/0000-0099/0006.Zigzag Conversion/Solution.php
index 4eb4ee9795308..2d151b664b8f6 100644
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution.php
+++ b/solution/0000-0099/0006.Zigzag Conversion/Solution.php
@@ -1,29 +1,29 @@
class Solution {
/**
- * @param string $s
- * @param int $numRows
- * @return string
+ * @param String $s
+ * @param Integer $numRows
+ * @return String
*/
-
function convert($s, $numRows) {
- if ($numRows == 1 || strlen($s) <= $numRows) {
+ if ($numRows == 1) {
return $s;
}
- $result = '';
- $cycleLength = 2 * $numRows - 2;
- $n = strlen($s);
+ $g = array_fill(0, $numRows, "");
+ $i = 0;
+ $k = -1;
- for ($i = 0; $i < $numRows; $i++) {
- for ($j = 0; $j + $i < $n; $j += $cycleLength) {
- $result .= $s[$j + $i];
+ $length = strlen($s);
+ for ($j = 0; $j < $length; $j++) {
+ $c = $s[$j];
+ $g[$i] .= $c;
- if ($i != 0 && $i != $numRows - 1 && $j + $cycleLength - $i < $n) {
- $result .= $s[$j + $cycleLength - $i];
- }
+ if ($i == 0 || $i == $numRows - 1) {
+ $k = -$k;
}
- }
- return $result;
+ $i += $k;
+ }
+ return implode("", $g);
}
}
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution.rs b/solution/0000-0099/0006.Zigzag Conversion/Solution.rs
index bfbf876018144..2a4e99f2b0433 100644
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution.rs
+++ b/solution/0000-0099/0006.Zigzag Conversion/Solution.rs
@@ -1,27 +1,22 @@
impl Solution {
pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
if num_rows == 1 {
return s;
}
- let mut ss = vec![String::new(); num_rows];
+
+ let num_rows = num_rows as usize;
+ let mut g = vec![String::new(); num_rows];
let mut i = 0;
- let mut to_down = true;
+ let mut k = -1;
+
for c in s.chars() {
- ss[i].push(c);
- if to_down {
- i += 1;
- } else {
- i -= 1;
- }
+ g[i].push(c);
if i == 0 || i == num_rows - 1 {
- to_down = !to_down;
+ k = -k;
}
+ i = (i as isize + k) as usize;
}
- let mut res = String::new();
- for i in 0..num_rows {
- res += &ss[i];
- }
- res
+
+ g.concat()
}
}
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.cpp b/solution/0000-0099/0006.Zigzag Conversion/Solution2.cpp
deleted file mode 100644
index f66b5d959b459..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-class Solution {
-public:
- string convert(string s, int numRows) {
- if (numRows == 1) return s;
- string ans;
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; ++i) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.push_back(s[idx]);
- idx += interval;
- interval = group - interval;
- if (interval == 0) interval = group;
- }
- }
- return ans;
- }
-};
\ No newline at end of file
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.go b/solution/0000-0099/0006.Zigzag Conversion/Solution2.go
deleted file mode 100644
index acc9934f620c5..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.go
+++ /dev/null
@@ -1,20 +0,0 @@
-func convert(s string, numRows int) string {
- if numRows == 1 {
- return s
- }
- n := len(s)
- ans := make([]byte, n)
- step := 2*numRows - 2
- count := 0
- for i := 0; i < numRows; i++ {
- for j := 0; j+i < n; j += step {
- ans[count] = s[i+j]
- count++
- if i != 0 && i != numRows-1 && j+step-i < n {
- ans[count] = s[j+step-i]
- count++
- }
- }
- }
- return string(ans)
-}
\ No newline at end of file
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.java b/solution/0000-0099/0006.Zigzag Conversion/Solution2.java
deleted file mode 100644
index b2a9294d752f3..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.java
+++ /dev/null
@@ -1,22 +0,0 @@
-class Solution {
- public String convert(String s, int numRows) {
- if (numRows == 1) {
- return s;
- }
- StringBuilder ans = new StringBuilder();
- int group = 2 * numRows - 2;
- for (int i = 1; i <= numRows; i++) {
- int interval = i == numRows ? group : 2 * numRows - 2 * i;
- int idx = i - 1;
- while (idx < s.length()) {
- ans.append(s.charAt(idx));
- idx += interval;
- interval = group - interval;
- if (interval == 0) {
- interval = group;
- }
- }
- }
- return ans.toString();
- }
-}
\ No newline at end of file
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.js b/solution/0000-0099/0006.Zigzag Conversion/Solution2.js
deleted file mode 100644
index e291e38cb6b18..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * @param {string} s
- * @param {number} numRows
- * @return {string}
- */
-var convert = function (s, numRows) {
- if (numRows == 1) return s;
- const arr = new Array(numRows);
- for (let i = 0; i < numRows; i++) arr[i] = [];
- let mi = 0,
- isDown = true;
- for (const c of s) {
- arr[mi].push(c);
-
- if (mi >= numRows - 1) isDown = false;
- else if (mi <= 0) isDown = true;
-
- if (isDown) mi++;
- else mi--;
- }
- let ans = [];
- for (const item of arr) {
- ans = ans.concat(item);
- }
- return ans.join('');
-};
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.py b/solution/0000-0099/0006.Zigzag Conversion/Solution2.py
deleted file mode 100644
index 5fc2f82ff1e5a..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.py
+++ /dev/null
@@ -1,16 +0,0 @@
-class Solution:
- def convert(self, s: str, numRows: int) -> str:
- if numRows == 1:
- return s
- group = 2 * numRows - 2
- ans = []
- for i in range(1, numRows + 1):
- interval = group if i == numRows else 2 * numRows - 2 * i
- idx = i - 1
- while idx < len(s):
- ans.append(s[idx])
- idx += interval
- interval = group - interval
- if interval == 0:
- interval = group
- return ''.join(ans)
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.rs b/solution/0000-0099/0006.Zigzag Conversion/Solution2.rs
deleted file mode 100644
index f824b365dedec..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.rs
+++ /dev/null
@@ -1,9 +0,0 @@
-impl Solution {
- pub fn convert(s: String, num_rows: i32) -> String {
- let num_rows = num_rows as usize;
- let mut rows = vec![String::new(); num_rows];
- let iter = (0..num_rows).chain((1..num_rows - 1).rev()).cycle();
- iter.zip(s.chars()).for_each(|(i, c)| rows[i].push(c));
- rows.into_iter().collect()
- }
-}
diff --git a/solution/0000-0099/0006.Zigzag Conversion/Solution2.ts b/solution/0000-0099/0006.Zigzag Conversion/Solution2.ts
deleted file mode 100644
index 3085c8797be67..0000000000000
--- a/solution/0000-0099/0006.Zigzag Conversion/Solution2.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-function convert(s: string, numRows: number): string {
- if (numRows === 1) {
- return s;
- }
- const ss = new Array(numRows).fill('');
- let i = 0;
- let toDown = true;
- for (const c of s) {
- ss[i] += c;
- if (toDown) {
- i++;
- } else {
- i--;
- }
- if (i === 0 || i === numRows - 1) {
- toDown = !toDown;
- }
- }
- return ss.reduce((r, s) => r + s);
-}
diff --git a/solution/0000-0099/0008.String to Integer (atoi)/README.md b/solution/0000-0099/0008.String to Integer (atoi)/README.md
index a1c189c4a6ce7..324738cca1c5e 100644
--- a/solution/0000-0099/0008.String to Integer (atoi)/README.md
+++ b/solution/0000-0099/0008.String to Integer (atoi)/README.md
@@ -214,6 +214,36 @@ class Solution {
}
```
+#### C++
+
+```cpp
+class Solution {
+public:
+ int myAtoi(string s) {
+ int i = 0, n = s.size();
+ while (i < n && s[i] == ' ')
+ ++i;
+
+ int sign = 1;
+ if (i < n && (s[i] == '-' || s[i] == '+')) {
+ sign = s[i] == '-' ? -1 : 1;
+ ++i;
+ }
+
+ int res = 0;
+ while (i < n && isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ ++i;
+ }
+ return res * sign;
+ }
+};
+```
+
#### Go
```go
@@ -356,6 +386,36 @@ class Solution {
}
```
+#### C
+
+```c
+int myAtoi(char* s) {
+ int i = 0;
+
+ while (s[i] == ' ') {
+ i++;
+ }
+
+ int sign = 1;
+ if (s[i] == '-' || s[i] == '+') {
+ sign = (s[i] == '-') ? -1 : 1;
+ i++;
+ }
+
+ int res = 0;
+ while (isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ i++;
+ }
+
+ return res * sign;
+}
+```
+
diff --git a/solution/0000-0099/0008.String to Integer (atoi)/README_EN.md b/solution/0000-0099/0008.String to Integer (atoi)/README_EN.md
index 7603001843b45..bc0c422b89134 100644
--- a/solution/0000-0099/0008.String to Integer (atoi)/README_EN.md
+++ b/solution/0000-0099/0008.String to Integer (atoi)/README_EN.md
@@ -160,7 +160,6 @@ class Solution:
i = 0
while s[i] == ' ':
i += 1
- # 仅包含空格
if i == n:
return 0
sign = -1 if s[i] == '-' else 1
@@ -168,11 +167,9 @@ class Solution:
i += 1
res, flag = 0, (2**31 - 1) // 10
while i < n:
- # 非数字,跳出循环体
if not s[i].isdigit():
break
c = int(s[i])
- # 溢出判断
if res > flag or (res == flag and c > 7):
return 2**31 - 1 if sign > 0 else -(2**31)
res = res * 10 + c
@@ -190,7 +187,6 @@ class Solution {
if (n == 0) return 0;
int i = 0;
while (s.charAt(i) == ' ') {
- // 仅包含空格
if (++i == n) return 0;
}
int sign = 1;
@@ -198,9 +194,7 @@ class Solution {
if (s.charAt(i) == '-' || s.charAt(i) == '+') ++i;
int res = 0, flag = Integer.MAX_VALUE / 10;
for (; i < n; ++i) {
- // 非数字,跳出循环体
if (s.charAt(i) < '0' || s.charAt(i) > '9') break;
- // 溢出判断
if (res > flag || (res == flag && s.charAt(i) > '7'))
return sign > 0 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
res = res * 10 + (s.charAt(i) - '0');
@@ -210,6 +204,36 @@ class Solution {
}
```
+#### C++
+
+```cpp
+class Solution {
+public:
+ int myAtoi(string s) {
+ int i = 0, n = s.size();
+ while (i < n && s[i] == ' ')
+ ++i;
+
+ int sign = 1;
+ if (i < n && (s[i] == '-' || s[i] == '+')) {
+ sign = s[i] == '-' ? -1 : 1;
+ ++i;
+ }
+
+ int res = 0;
+ while (i < n && isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ ++i;
+ }
+ return res * sign;
+ }
+};
+```
+
#### Go
```go
@@ -282,8 +306,6 @@ const myAtoi = function (str) {
#### C#
```cs
-// https://leetcode.com/problems/string-to-integer-atoi/
-
public partial class Solution
{
public int MyAtoi(string str)
@@ -352,6 +374,36 @@ class Solution {
}
```
+#### C
+
+```c
+int myAtoi(char* s) {
+ int i = 0;
+
+ while (s[i] == ' ') {
+ i++;
+ }
+
+ int sign = 1;
+ if (s[i] == '-' || s[i] == '+') {
+ sign = (s[i] == '-') ? -1 : 1;
+ i++;
+ }
+
+ int res = 0;
+ while (isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ i++;
+ }
+
+ return res * sign;
+}
+```
+
diff --git a/solution/0000-0099/0008.String to Integer (atoi)/Solution.c b/solution/0000-0099/0008.String to Integer (atoi)/Solution.c
new file mode 100644
index 0000000000000..26f63ab4316e3
--- /dev/null
+++ b/solution/0000-0099/0008.String to Integer (atoi)/Solution.c
@@ -0,0 +1,25 @@
+int myAtoi(char* s) {
+ int i = 0;
+
+ while (s[i] == ' ') {
+ i++;
+ }
+
+ int sign = 1;
+ if (s[i] == '-' || s[i] == '+') {
+ sign = (s[i] == '-') ? -1 : 1;
+ i++;
+ }
+
+ int res = 0;
+ while (isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ i++;
+ }
+
+ return res * sign;
+}
diff --git a/solution/0000-0099/0008.String to Integer (atoi)/Solution.cpp b/solution/0000-0099/0008.String to Integer (atoi)/Solution.cpp
new file mode 100644
index 0000000000000..72fc381920bf2
--- /dev/null
+++ b/solution/0000-0099/0008.String to Integer (atoi)/Solution.cpp
@@ -0,0 +1,25 @@
+class Solution {
+public:
+ int myAtoi(string s) {
+ int i = 0, n = s.size();
+ while (i < n && s[i] == ' ')
+ ++i;
+
+ int sign = 1;
+ if (i < n && (s[i] == '-' || s[i] == '+')) {
+ sign = s[i] == '-' ? -1 : 1;
+ ++i;
+ }
+
+ int res = 0;
+ while (i < n && isdigit(s[i])) {
+ int digit = s[i] - '0';
+ if (res > INT_MAX / 10 || (res == INT_MAX / 10 && digit > INT_MAX % 10)) {
+ return sign == 1 ? INT_MAX : INT_MIN;
+ }
+ res = res * 10 + digit;
+ ++i;
+ }
+ return res * sign;
+ }
+};
diff --git a/solution/0000-0099/0009.Palindrome Number/README.md b/solution/0000-0099/0009.Palindrome Number/README.md
index c0e23b1f63b38..46fbfac16ef77 100644
--- a/solution/0000-0099/0009.Palindrome Number/README.md
+++ b/solution/0000-0099/0009.Palindrome Number/README.md
@@ -177,13 +177,12 @@ function isPalindrome(x: number): boolean {
```rust
impl Solution {
pub fn is_palindrome(mut x: i32) -> bool {
- if x < 0 || (x % 10 == 0 && x != 0) {
+ if x < 0 || (x != 0 && x % 10 == 0) {
return false;
}
let mut y = 0;
while x > y {
- y *= 10;
- y += x % 10;
+ y = y * 10 + x % 10;
x /= 10;
}
x == y || x == y / 10
@@ -210,23 +209,63 @@ var isPalindrome = function (x) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public bool IsPalindrome(int x) {
+ if (x < 0 || (x > 0 && x % 10 == 0)) {
+ return false;
+ }
+ int y = 0;
+ for (; y < x; x /= 10) {
+ y = y * 10 + x % 10;
+ }
+ return x == y || x == y / 10;
+ }
+}
+```
+
#### PHP
```php
class Solution {
/**
- * @param int $x
- * @return boolean
+ * @param Integer $x
+ * @return Boolean
*/
-
function isPalindrome($x) {
- $str = (string) $x;
- $str_reverse = strrev($str);
- return $str === $str_reverse;
+ if ($x < 0 || ($x && $x % 10 == 0)) {
+ return false;
+ }
+ $y = 0;
+ while ($x > $y) {
+ $y = $y * 10 + ($x % 10);
+ $x = (int) ($x / 10);
+ }
+ return $x == $y || $x == (int) ($y / 10);
}
}
```
+#### C
+
+```c
+bool isPalindrome(int x) {
+ if (x < 0 || (x != 0 && x % 10 == 0)) {
+ return false;
+ }
+
+ int y = 0;
+ while (y < x) {
+ y = y * 10 + x % 10;
+ x /= 10;
+ }
+
+ return (x == y || x == y / 10);
+}
+```
+
diff --git a/solution/0000-0099/0009.Palindrome Number/README_EN.md b/solution/0000-0099/0009.Palindrome Number/README_EN.md
index 0392466009818..712ba430b9d5a 100644
--- a/solution/0000-0099/0009.Palindrome Number/README_EN.md
+++ b/solution/0000-0099/0009.Palindrome Number/README_EN.md
@@ -169,13 +169,12 @@ function isPalindrome(x: number): boolean {
```rust
impl Solution {
pub fn is_palindrome(mut x: i32) -> bool {
- if x < 0 || (x % 10 == 0 && x != 0) {
+ if x < 0 || (x != 0 && x % 10 == 0) {
return false;
}
let mut y = 0;
while x > y {
- y *= 10;
- y += x % 10;
+ y = y * 10 + x % 10;
x /= 10;
}
x == y || x == y / 10
@@ -202,23 +201,63 @@ var isPalindrome = function (x) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public bool IsPalindrome(int x) {
+ if (x < 0 || (x > 0 && x % 10 == 0)) {
+ return false;
+ }
+ int y = 0;
+ for (; y < x; x /= 10) {
+ y = y * 10 + x % 10;
+ }
+ return x == y || x == y / 10;
+ }
+}
+```
+
#### PHP
```php
class Solution {
/**
- * @param int $x
- * @return boolean
+ * @param Integer $x
+ * @return Boolean
*/
-
function isPalindrome($x) {
- $str = (string) $x;
- $str_reverse = strrev($str);
- return $str === $str_reverse;
+ if ($x < 0 || ($x && $x % 10 == 0)) {
+ return false;
+ }
+ $y = 0;
+ while ($x > $y) {
+ $y = $y * 10 + ($x % 10);
+ $x = (int) ($x / 10);
+ }
+ return $x == $y || $x == (int) ($y / 10);
}
}
```
+#### C
+
+```c
+bool isPalindrome(int x) {
+ if (x < 0 || (x != 0 && x % 10 == 0)) {
+ return false;
+ }
+
+ int y = 0;
+ while (y < x) {
+ y = y * 10 + x % 10;
+ x /= 10;
+ }
+
+ return (x == y || x == y / 10);
+}
+```
+
diff --git a/solution/0000-0099/0009.Palindrome Number/Solution.c b/solution/0000-0099/0009.Palindrome Number/Solution.c
new file mode 100644
index 0000000000000..c13f8cc7947ca
--- /dev/null
+++ b/solution/0000-0099/0009.Palindrome Number/Solution.c
@@ -0,0 +1,13 @@
+bool isPalindrome(int x) {
+ if (x < 0 || (x != 0 && x % 10 == 0)) {
+ return false;
+ }
+
+ int y = 0;
+ while (y < x) {
+ y = y * 10 + x % 10;
+ x /= 10;
+ }
+
+ return (x == y || x == y / 10);
+}
diff --git a/solution/0000-0099/0009.Palindrome Number/Solution.cs b/solution/0000-0099/0009.Palindrome Number/Solution.cs
new file mode 100644
index 0000000000000..f530d9156371b
--- /dev/null
+++ b/solution/0000-0099/0009.Palindrome Number/Solution.cs
@@ -0,0 +1,12 @@
+public class Solution {
+ public bool IsPalindrome(int x) {
+ if (x < 0 || (x > 0 && x % 10 == 0)) {
+ return false;
+ }
+ int y = 0;
+ for (; y < x; x /= 10) {
+ y = y * 10 + x % 10;
+ }
+ return x == y || x == y / 10;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0009.Palindrome Number/Solution.php b/solution/0000-0099/0009.Palindrome Number/Solution.php
index 9fd8c6654ec95..c4042d56fbed1 100644
--- a/solution/0000-0099/0009.Palindrome Number/Solution.php
+++ b/solution/0000-0099/0009.Palindrome Number/Solution.php
@@ -1,12 +1,17 @@
class Solution {
/**
- * @param int $x
- * @return boolean
+ * @param Integer $x
+ * @return Boolean
*/
-
function isPalindrome($x) {
- $str = (string) $x;
- $str_reverse = strrev($str);
- return $str === $str_reverse;
+ if ($x < 0 || ($x && $x % 10 == 0)) {
+ return false;
+ }
+ $y = 0;
+ while ($x > $y) {
+ $y = $y * 10 + ($x % 10);
+ $x = (int) ($x / 10);
+ }
+ return $x == $y || $x == (int) ($y / 10);
}
}
diff --git a/solution/0000-0099/0009.Palindrome Number/Solution.rs b/solution/0000-0099/0009.Palindrome Number/Solution.rs
index 7163690151d08..9275d20a011d7 100644
--- a/solution/0000-0099/0009.Palindrome Number/Solution.rs
+++ b/solution/0000-0099/0009.Palindrome Number/Solution.rs
@@ -1,20 +1,13 @@
impl Solution {
- pub fn is_palindrome(x: i32) -> bool {
- if x < 0 {
+ pub fn is_palindrome(mut x: i32) -> bool {
+ if x < 0 || (x != 0 && x % 10 == 0) {
return false;
}
- let s = x.to_string();
- let bs = s.as_bytes();
- let n = bs.len();
- let mut l = 0;
- let mut r = n - 1;
- while l < r {
- if bs[l] != bs[r] {
- return false;
- }
- l += 1;
- r -= 1;
+ let mut y = 0;
+ while x > y {
+ y = y * 10 + x % 10;
+ x /= 10;
}
- true
+ x == y || x == y / 10
}
}
diff --git a/solution/0000-0099/0010.Regular Expression Matching/README.md b/solution/0000-0099/0010.Regular Expression Matching/README.md
index 5eb9ff8be6f3d..e9acc4602cc81 100644
--- a/solution/0000-0099/0010.Regular Expression Matching/README.md
+++ b/solution/0000-0099/0010.Regular Expression Matching/README.md
@@ -331,6 +331,85 @@ public class Solution {
}
```
+#### C
+
+```c
+#define MAX_LEN 1000
+
+char *ss, *pp;
+int m, n;
+int f[MAX_LEN + 1][MAX_LEN + 1];
+
+bool dfs(int i, int j) {
+ if (j >= n) {
+ return i == m;
+ }
+ if (f[i][j] != 0) {
+ return f[i][j] == 1;
+ }
+ int res = -1;
+ if (j + 1 < n && pp[j + 1] == '*') {
+ if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
+ res = 1;
+ }
+ } else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
+ res = 1;
+ }
+ f[i][j] = res;
+ return res == 1;
+}
+
+bool isMatch(char* s, char* p) {
+ ss = s;
+ pp = p;
+ m = strlen(s);
+ n = strlen(p);
+ memset(f, 0, sizeof(f));
+ return dfs(0, 0);
+}
+```
+
+#### PHP
+
+```php
+class Solution {
+ /**
+ * @param String $s
+ * @param String $p
+ * @return Boolean
+ */
+ function isMatch($s, $p) {
+ $m = strlen($s);
+ $n = strlen($p);
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, 0));
+
+ $dfs = function ($i, $j) use (&$s, &$p, $m, $n, &$f, &$dfs) {
+ if ($j >= $n) {
+ return $i == $m;
+ }
+ if ($f[$i][$j] != 0) {
+ return $f[$i][$j] == 1;
+ }
+ $res = -1;
+ if ($j + 1 < $n && $p[$j + 1] == '*') {
+ if (
+ $dfs($i, $j + 2) ||
+ ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j))
+ ) {
+ $res = 1;
+ }
+ } elseif ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j + 1)) {
+ $res = 1;
+ }
+ $f[$i][$j] = $res;
+ return $res == 1;
+ };
+
+ return $dfs(0, 0);
+ }
+}
+```
+
@@ -541,44 +620,60 @@ public class Solution {
```php
class Solution {
/**
- * @param string $s
- * @param string $p
- * @return boolean
+ * @param String $s
+ * @param String $p
+ * @return Boolean
*/
-
function isMatch($s, $p) {
$m = strlen($s);
$n = strlen($p);
- $dp = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
- $dp[0][0] = true;
-
- for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '*') {
- $dp[0][$j] = $dp[0][$j - 2];
- }
- }
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
+ $f[0][0] = true;
- for ($i = 1; $i <= $m; $i++) {
+ for ($i = 0; $i <= $m; $i++) {
for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i - 1][$j - 1];
- } elseif ($p[$j - 1] == '*') {
- $dp[$i][$j] = $dp[$i][$j - 2];
- if ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i][$j] || $dp[$i - 1][$j];
+ if ($p[$j - 1] == '*') {
+ $f[$i][$j] = $f[$i][$j - 2];
+ if ($i > 0 && ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i][$j] || $f[$i - 1][$j];
}
- } else {
- $dp[$i][$j] = false;
+ } elseif ($i > 0 && ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i - 1][$j - 1];
}
}
}
- return $dp[$m][$n];
+ return $f[$m][$n];
}
}
```
+#### C
+
+```c
+bool isMatch(char* s, char* p) {
+ int m = strlen(s), n = strlen(p);
+ bool f[m + 1][n + 1];
+ memset(f, 0, sizeof(f));
+ f[0][0] = true;
+
+ for (int i = 0; i <= m; ++i) {
+ for (int j = 1; j <= n; ++j) {
+ if (p[j - 1] == '*') {
+ f[i][j] = f[i][j - 2];
+ if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
+ f[i][j] = f[i][j] || f[i - 1][j];
+ }
+ } else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
+ f[i][j] = f[i - 1][j - 1];
+ }
+ }
+ }
+ return f[m][n];
+}
+```
+
diff --git a/solution/0000-0099/0010.Regular Expression Matching/README_EN.md b/solution/0000-0099/0010.Regular Expression Matching/README_EN.md
index d7302fddd9809..3164f471dd8c2 100644
--- a/solution/0000-0099/0010.Regular Expression Matching/README_EN.md
+++ b/solution/0000-0099/0010.Regular Expression Matching/README_EN.md
@@ -330,6 +330,85 @@ public class Solution {
}
```
+#### C
+
+```c
+#define MAX_LEN 1000
+
+char *ss, *pp;
+int m, n;
+int f[MAX_LEN + 1][MAX_LEN + 1];
+
+bool dfs(int i, int j) {
+ if (j >= n) {
+ return i == m;
+ }
+ if (f[i][j] != 0) {
+ return f[i][j] == 1;
+ }
+ int res = -1;
+ if (j + 1 < n && pp[j + 1] == '*') {
+ if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
+ res = 1;
+ }
+ } else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
+ res = 1;
+ }
+ f[i][j] = res;
+ return res == 1;
+}
+
+bool isMatch(char* s, char* p) {
+ ss = s;
+ pp = p;
+ m = strlen(s);
+ n = strlen(p);
+ memset(f, 0, sizeof(f));
+ return dfs(0, 0);
+}
+```
+
+#### PHP
+
+```php
+class Solution {
+ /**
+ * @param String $s
+ * @param String $p
+ * @return Boolean
+ */
+ function isMatch($s, $p) {
+ $m = strlen($s);
+ $n = strlen($p);
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, 0));
+
+ $dfs = function ($i, $j) use (&$s, &$p, $m, $n, &$f, &$dfs) {
+ if ($j >= $n) {
+ return $i == $m;
+ }
+ if ($f[$i][$j] != 0) {
+ return $f[$i][$j] == 1;
+ }
+ $res = -1;
+ if ($j + 1 < $n && $p[$j + 1] == '*') {
+ if (
+ $dfs($i, $j + 2) ||
+ ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j))
+ ) {
+ $res = 1;
+ }
+ } elseif ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j + 1)) {
+ $res = 1;
+ }
+ $f[$i][$j] = $res;
+ return $res == 1;
+ };
+
+ return $dfs(0, 0);
+ }
+}
+```
+
@@ -540,44 +619,60 @@ public class Solution {
```php
class Solution {
/**
- * @param string $s
- * @param string $p
- * @return boolean
+ * @param String $s
+ * @param String $p
+ * @return Boolean
*/
-
function isMatch($s, $p) {
$m = strlen($s);
$n = strlen($p);
- $dp = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
- $dp[0][0] = true;
-
- for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '*') {
- $dp[0][$j] = $dp[0][$j - 2];
- }
- }
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
+ $f[0][0] = true;
- for ($i = 1; $i <= $m; $i++) {
+ for ($i = 0; $i <= $m; $i++) {
for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i - 1][$j - 1];
- } elseif ($p[$j - 1] == '*') {
- $dp[$i][$j] = $dp[$i][$j - 2];
- if ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i][$j] || $dp[$i - 1][$j];
+ if ($p[$j - 1] == '*') {
+ $f[$i][$j] = $f[$i][$j - 2];
+ if ($i > 0 && ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i][$j] || $f[$i - 1][$j];
}
- } else {
- $dp[$i][$j] = false;
+ } elseif ($i > 0 && ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i - 1][$j - 1];
}
}
}
- return $dp[$m][$n];
+ return $f[$m][$n];
}
}
```
+#### C
+
+```c
+bool isMatch(char* s, char* p) {
+ int m = strlen(s), n = strlen(p);
+ bool f[m + 1][n + 1];
+ memset(f, 0, sizeof(f));
+ f[0][0] = true;
+
+ for (int i = 0; i <= m; ++i) {
+ for (int j = 1; j <= n; ++j) {
+ if (p[j - 1] == '*') {
+ f[i][j] = f[i][j - 2];
+ if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
+ f[i][j] = f[i][j] || f[i - 1][j];
+ }
+ } else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
+ f[i][j] = f[i - 1][j - 1];
+ }
+ }
+ }
+ return f[m][n];
+}
+```
+
diff --git a/solution/0000-0099/0010.Regular Expression Matching/Solution.c b/solution/0000-0099/0010.Regular Expression Matching/Solution.c
new file mode 100644
index 0000000000000..db0116921230e
--- /dev/null
+++ b/solution/0000-0099/0010.Regular Expression Matching/Solution.c
@@ -0,0 +1,33 @@
+#define MAX_LEN 1000
+
+char *ss, *pp;
+int m, n;
+int f[MAX_LEN + 1][MAX_LEN + 1];
+
+bool dfs(int i, int j) {
+ if (j >= n) {
+ return i == m;
+ }
+ if (f[i][j] != 0) {
+ return f[i][j] == 1;
+ }
+ int res = -1;
+ if (j + 1 < n && pp[j + 1] == '*') {
+ if (dfs(i, j + 2) || (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j))) {
+ res = 1;
+ }
+ } else if (i < m && (ss[i] == pp[j] || pp[j] == '.') && dfs(i + 1, j + 1)) {
+ res = 1;
+ }
+ f[i][j] = res;
+ return res == 1;
+}
+
+bool isMatch(char* s, char* p) {
+ ss = s;
+ pp = p;
+ m = strlen(s);
+ n = strlen(p);
+ memset(f, 0, sizeof(f));
+ return dfs(0, 0);
+}
diff --git a/solution/0000-0099/0010.Regular Expression Matching/Solution.php b/solution/0000-0099/0010.Regular Expression Matching/Solution.php
index 85a7f34fe75da..fc9aca3447ffe 100644
--- a/solution/0000-0099/0010.Regular Expression Matching/Solution.php
+++ b/solution/0000-0099/0010.Regular Expression Matching/Solution.php
@@ -1,38 +1,36 @@
class Solution {
/**
- * @param string $s
- * @param string $p
- * @return boolean
+ * @param String $s
+ * @param String $p
+ * @return Boolean
*/
-
function isMatch($s, $p) {
$m = strlen($s);
$n = strlen($p);
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, 0));
- $dp = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
- $dp[0][0] = true;
-
- for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '*') {
- $dp[0][$j] = $dp[0][$j - 2];
+ $dfs = function ($i, $j) use (&$s, &$p, $m, $n, &$f, &$dfs) {
+ if ($j >= $n) {
+ return $i == $m;
}
- }
-
- for ($i = 1; $i <= $m; $i++) {
- for ($j = 1; $j <= $n; $j++) {
- if ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i - 1][$j - 1];
- } elseif ($p[$j - 1] == '*') {
- $dp[$i][$j] = $dp[$i][$j - 2];
- if ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1]) {
- $dp[$i][$j] = $dp[$i][$j] || $dp[$i - 1][$j];
- }
- } else {
- $dp[$i][$j] = false;
+ if ($f[$i][$j] != 0) {
+ return $f[$i][$j] == 1;
+ }
+ $res = -1;
+ if ($j + 1 < $n && $p[$j + 1] == '*') {
+ if (
+ $dfs($i, $j + 2) ||
+ ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j))
+ ) {
+ $res = 1;
}
+ } elseif ($i < $m && ($s[$i] == $p[$j] || $p[$j] == '.') && $dfs($i + 1, $j + 1)) {
+ $res = 1;
}
- }
+ $f[$i][$j] = $res;
+ return $res == 1;
+ };
- return $dp[$m][$n];
+ return $dfs(0, 0);
}
-}
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0010.Regular Expression Matching/Solution2.c b/solution/0000-0099/0010.Regular Expression Matching/Solution2.c
new file mode 100644
index 0000000000000..9240063d8bd6a
--- /dev/null
+++ b/solution/0000-0099/0010.Regular Expression Matching/Solution2.c
@@ -0,0 +1,20 @@
+bool isMatch(char* s, char* p) {
+ int m = strlen(s), n = strlen(p);
+ bool f[m + 1][n + 1];
+ memset(f, 0, sizeof(f));
+ f[0][0] = true;
+
+ for (int i = 0; i <= m; ++i) {
+ for (int j = 1; j <= n; ++j) {
+ if (p[j - 1] == '*') {
+ f[i][j] = f[i][j - 2];
+ if (i > 0 && (p[j - 2] == '.' || p[j - 2] == s[i - 1])) {
+ f[i][j] = f[i][j] || f[i - 1][j];
+ }
+ } else if (i > 0 && (p[j - 1] == '.' || p[j - 1] == s[i - 1])) {
+ f[i][j] = f[i - 1][j - 1];
+ }
+ }
+ }
+ return f[m][n];
+}
diff --git a/solution/0000-0099/0010.Regular Expression Matching/Solution2.php b/solution/0000-0099/0010.Regular Expression Matching/Solution2.php
new file mode 100644
index 0000000000000..6f40295f7f06c
--- /dev/null
+++ b/solution/0000-0099/0010.Regular Expression Matching/Solution2.php
@@ -0,0 +1,29 @@
+class Solution {
+ /**
+ * @param String $s
+ * @param String $p
+ * @return Boolean
+ */
+ function isMatch($s, $p) {
+ $m = strlen($s);
+ $n = strlen($p);
+
+ $f = array_fill(0, $m + 1, array_fill(0, $n + 1, false));
+ $f[0][0] = true;
+
+ for ($i = 0; $i <= $m; $i++) {
+ for ($j = 1; $j <= $n; $j++) {
+ if ($p[$j - 1] == '*') {
+ $f[$i][$j] = $f[$i][$j - 2];
+ if ($i > 0 && ($p[$j - 2] == '.' || $p[$j - 2] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i][$j] || $f[$i - 1][$j];
+ }
+ } elseif ($i > 0 && ($p[$j - 1] == '.' || $p[$j - 1] == $s[$i - 1])) {
+ $f[$i][$j] = $f[$i - 1][$j - 1];
+ }
+ }
+ }
+
+ return $f[$m][$n];
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0011.Container With Most Water/README.md b/solution/0000-0099/0011.Container With Most Water/README.md
index 1a3de695501d6..70c5128220e2c 100644
--- a/solution/0000-0099/0011.Container With Most Water/README.md
+++ b/solution/0000-0099/0011.Container With Most Water/README.md
@@ -262,6 +262,33 @@ class Solution {
}
```
+#### C
+
+```c
+int min(int a, int b) {
+ return a < b ? a : b;
+}
+
+int max(int a, int b) {
+ return a > b ? a : b;
+}
+
+int maxArea(int* height, int heightSize) {
+ int l = 0, r = heightSize - 1;
+ int ans = 0;
+ while (l < r) {
+ int t = min(height[l], height[r]) * (r - l);
+ ans = max(ans, t);
+ if (height[l] < height[r]) {
+ ++l;
+ } else {
+ --r;
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0011.Container With Most Water/README_EN.md b/solution/0000-0099/0011.Container With Most Water/README_EN.md
index 5d113a38fbc66..0a0ab8c8f7108 100644
--- a/solution/0000-0099/0011.Container With Most Water/README_EN.md
+++ b/solution/0000-0099/0011.Container With Most Water/README_EN.md
@@ -259,6 +259,33 @@ class Solution {
}
```
+#### C
+
+```c
+int min(int a, int b) {
+ return a < b ? a : b;
+}
+
+int max(int a, int b) {
+ return a > b ? a : b;
+}
+
+int maxArea(int* height, int heightSize) {
+ int l = 0, r = heightSize - 1;
+ int ans = 0;
+ while (l < r) {
+ int t = min(height[l], height[r]) * (r - l);
+ ans = max(ans, t);
+ if (height[l] < height[r]) {
+ ++l;
+ } else {
+ --r;
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0011.Container With Most Water/Solution.c b/solution/0000-0099/0011.Container With Most Water/Solution.c
new file mode 100644
index 0000000000000..a2dd45e5b194d
--- /dev/null
+++ b/solution/0000-0099/0011.Container With Most Water/Solution.c
@@ -0,0 +1,22 @@
+int min(int a, int b) {
+ return a < b ? a : b;
+}
+
+int max(int a, int b) {
+ return a > b ? a : b;
+}
+
+int maxArea(int* height, int heightSize) {
+ int l = 0, r = heightSize - 1;
+ int ans = 0;
+ while (l < r) {
+ int t = min(height[l], height[r]) * (r - l);
+ ans = max(ans, t);
+ if (height[l] < height[r]) {
+ ++l;
+ } else {
+ --r;
+ }
+ }
+ return ans;
+}
diff --git a/solution/0000-0099/0012.Integer to Roman/README.md b/solution/0000-0099/0012.Integer to Roman/README.md
index 815d37edba30b..c7151c82720b4 100644
--- a/solution/0000-0099/0012.Integer to Roman/README.md
+++ b/solution/0000-0099/0012.Integer to Roman/README.md
@@ -300,6 +300,30 @@ class Solution {
}
```
+#### C
+
+```c
+static const char* cs[] = {
+ "M", "CM", "D", "CD", "C", "XC",
+ "L", "XL", "X", "IX", "V", "IV", "I"};
+
+static const int vs[] = {
+ 1000, 900, 500, 400, 100, 90,
+ 50, 40, 10, 9, 5, 4, 1};
+
+char* intToRoman(int num) {
+ static char ans[20];
+ ans[0] = '\0';
+ for (int i = 0; i < 13; ++i) {
+ while (num >= vs[i]) {
+ num -= vs[i];
+ strcat(ans, cs[i]);
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0012.Integer to Roman/README_EN.md b/solution/0000-0099/0012.Integer to Roman/README_EN.md
index c7b57f780c463..9fcb12b9a56d2 100644
--- a/solution/0000-0099/0012.Integer to Roman/README_EN.md
+++ b/solution/0000-0099/0012.Integer to Roman/README_EN.md
@@ -298,6 +298,30 @@ class Solution {
}
```
+#### C
+
+```c
+static const char* cs[] = {
+ "M", "CM", "D", "CD", "C", "XC",
+ "L", "XL", "X", "IX", "V", "IV", "I"};
+
+static const int vs[] = {
+ 1000, 900, 500, 400, 100, 90,
+ 50, 40, 10, 9, 5, 4, 1};
+
+char* intToRoman(int num) {
+ static char ans[20];
+ ans[0] = '\0';
+ for (int i = 0; i < 13; ++i) {
+ while (num >= vs[i]) {
+ num -= vs[i];
+ strcat(ans, cs[i]);
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0012.Integer to Roman/Solution.c b/solution/0000-0099/0012.Integer to Roman/Solution.c
new file mode 100644
index 0000000000000..1417b40e44318
--- /dev/null
+++ b/solution/0000-0099/0012.Integer to Roman/Solution.c
@@ -0,0 +1,19 @@
+static const char* cs[] = {
+ "M", "CM", "D", "CD", "C", "XC",
+ "L", "XL", "X", "IX", "V", "IV", "I"};
+
+static const int vs[] = {
+ 1000, 900, 500, 400, 100, 90,
+ 50, 40, 10, 9, 5, 4, 1};
+
+char* intToRoman(int num) {
+ static char ans[20];
+ ans[0] = '\0';
+ for (int i = 0; i < 13; ++i) {
+ while (num >= vs[i]) {
+ num -= vs[i];
+ strcat(ans, cs[i]);
+ }
+ }
+ return ans;
+}
diff --git a/solution/0000-0099/0013.Roman to Integer/README.md b/solution/0000-0099/0013.Roman to Integer/README.md
index 4d985955579f8..604ebaaf5c8e8 100644
--- a/solution/0000-0099/0013.Roman to Integer/README.md
+++ b/solution/0000-0099/0013.Roman to Integer/README.md
@@ -341,6 +341,32 @@ def roman_to_int(s)
end
```
+#### C
+
+```c
+int nums(char c) {
+ switch (c) {
+ case 'I': return 1;
+ case 'V': return 5;
+ case 'X': return 10;
+ case 'L': return 50;
+ case 'C': return 100;
+ case 'D': return 500;
+ case 'M': return 1000;
+ default: return 0;
+ }
+}
+
+int romanToInt(char* s) {
+ int ans = nums(s[strlen(s) - 1]);
+ for (int i = 0; i < (int) strlen(s) - 1; ++i) {
+ int sign = nums(s[i]) < nums(s[i + 1]) ? -1 : 1;
+ ans += sign * nums(s[i]);
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0013.Roman to Integer/README_EN.md b/solution/0000-0099/0013.Roman to Integer/README_EN.md
index 099ed325658a3..5d93d580a88f1 100644
--- a/solution/0000-0099/0013.Roman to Integer/README_EN.md
+++ b/solution/0000-0099/0013.Roman to Integer/README_EN.md
@@ -327,6 +327,32 @@ def roman_to_int(s)
end
```
+#### C
+
+```c
+int nums(char c) {
+ switch (c) {
+ case 'I': return 1;
+ case 'V': return 5;
+ case 'X': return 10;
+ case 'L': return 50;
+ case 'C': return 100;
+ case 'D': return 500;
+ case 'M': return 1000;
+ default: return 0;
+ }
+}
+
+int romanToInt(char* s) {
+ int ans = nums(s[strlen(s) - 1]);
+ for (int i = 0; i < (int) strlen(s) - 1; ++i) {
+ int sign = nums(s[i]) < nums(s[i + 1]) ? -1 : 1;
+ ans += sign * nums(s[i]);
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0013.Roman to Integer/Solution.c b/solution/0000-0099/0013.Roman to Integer/Solution.c
new file mode 100644
index 0000000000000..7e3199c1e1fa7
--- /dev/null
+++ b/solution/0000-0099/0013.Roman to Integer/Solution.c
@@ -0,0 +1,21 @@
+int nums(char c) {
+ switch (c) {
+ case 'I': return 1;
+ case 'V': return 5;
+ case 'X': return 10;
+ case 'L': return 50;
+ case 'C': return 100;
+ case 'D': return 500;
+ case 'M': return 1000;
+ default: return 0;
+ }
+}
+
+int romanToInt(char* s) {
+ int ans = nums(s[strlen(s) - 1]);
+ for (int i = 0; i < (int) strlen(s) - 1; ++i) {
+ int sign = nums(s[i]) < nums(s[i + 1]) ? -1 : 1;
+ ans += sign * nums(s[i]);
+ }
+ return ans;
+}
diff --git a/solution/0000-0099/0014.Longest Common Prefix/README.md b/solution/0000-0099/0014.Longest Common Prefix/README.md
index 94c9bfbe90b0e..fceadc76296da 100644
--- a/solution/0000-0099/0014.Longest Common Prefix/README.md
+++ b/solution/0000-0099/0014.Longest Common Prefix/README.md
@@ -4,6 +4,7 @@ difficulty: 简单
edit_url: https://github.com/doocs/leetcode/edit/main/solution/0000-0099/0014.Longest%20Common%20Prefix/README.md
tags:
- 字典树
+ - 数组
- 字符串
---
@@ -44,7 +45,7 @@ tags:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
- strs[i]
仅由小写英文字母组成
+ strs[i]
如果非空,则仅由小写英文字母组成
@@ -251,6 +252,22 @@ def longest_common_prefix(strs)
end
```
+#### C
+
+```c
+char* longestCommonPrefix(char** strs, int strsSize) {
+ for (int i = 0; strs[0][i]; i++) {
+ for (int j = 1; j < strsSize; j++) {
+ if (strs[j][i] != strs[0][i]) {
+ strs[0][i] = '\0';
+ return strs[0];
+ }
+ }
+ }
+ return strs[0];
+}
+```
+
diff --git a/solution/0000-0099/0014.Longest Common Prefix/README_EN.md b/solution/0000-0099/0014.Longest Common Prefix/README_EN.md
index 78d633afe5956..0002faebd0c27 100644
--- a/solution/0000-0099/0014.Longest Common Prefix/README_EN.md
+++ b/solution/0000-0099/0014.Longest Common Prefix/README_EN.md
@@ -4,6 +4,7 @@ difficulty: Easy
edit_url: https://github.com/doocs/leetcode/edit/main/solution/0000-0099/0014.Longest%20Common%20Prefix/README_EN.md
tags:
- Trie
+ - Array
- String
---
@@ -43,7 +44,7 @@ tags:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
- strs[i]
consists of only lowercase English letters.
+ strs[i]
consists of only lowercase English letters if it is non-empty.
@@ -250,6 +251,22 @@ def longest_common_prefix(strs)
end
```
+#### C
+
+```c
+char* longestCommonPrefix(char** strs, int strsSize) {
+ for (int i = 0; strs[0][i]; i++) {
+ for (int j = 1; j < strsSize; j++) {
+ if (strs[j][i] != strs[0][i]) {
+ strs[0][i] = '\0';
+ return strs[0];
+ }
+ }
+ }
+ return strs[0];
+}
+```
+
diff --git a/solution/0000-0099/0014.Longest Common Prefix/Solution.c b/solution/0000-0099/0014.Longest Common Prefix/Solution.c
new file mode 100644
index 0000000000000..5302a586083f1
--- /dev/null
+++ b/solution/0000-0099/0014.Longest Common Prefix/Solution.c
@@ -0,0 +1,11 @@
+char* longestCommonPrefix(char** strs, int strsSize) {
+ for (int i = 0; strs[0][i]; i++) {
+ for (int j = 1; j < strsSize; j++) {
+ if (strs[j][i] != strs[0][i]) {
+ strs[0][i] = '\0';
+ return strs[0];
+ }
+ }
+ }
+ return strs[0];
+}
diff --git a/solution/0000-0099/0015.3Sum/README.md b/solution/0000-0099/0015.3Sum/README.md
index 97e493065a58f..d38db88f5d3b1 100644
--- a/solution/0000-0099/0015.3Sum/README.md
+++ b/solution/0000-0099/0015.3Sum/README.md
@@ -453,6 +453,54 @@ class Solution {
}
```
+#### C
+
+```c
+int cmp(const void* a, const void* b) {
+ return *(int*) a - *(int*) b;
+}
+
+int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
+ *returnSize = 0;
+ int cap = 1000;
+ int** ans = (int**) malloc(sizeof(int*) * cap);
+ *returnColumnSizes = (int*) malloc(sizeof(int) * cap);
+
+ qsort(nums, numsSize, sizeof(int), cmp);
+
+ for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
+ if (i > 0 && nums[i] == nums[i - 1]) continue;
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int sum = nums[i] + nums[j] + nums[k];
+ if (sum < 0) {
+ ++j;
+ } else if (sum > 0) {
+ --k;
+ } else {
+ if (*returnSize >= cap) {
+ cap *= 2;
+ ans = (int**) realloc(ans, sizeof(int*) * cap);
+ *returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
+ }
+ ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
+ ans[*returnSize][0] = nums[i];
+ ans[*returnSize][1] = nums[j];
+ ans[*returnSize][2] = nums[k];
+ (*returnColumnSizes)[*returnSize] = 3;
+ (*returnSize)++;
+
+ ++j;
+ --k;
+ while (j < k && nums[j] == nums[j - 1]) ++j;
+ while (j < k && nums[k] == nums[k + 1]) --k;
+ }
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0015.3Sum/README_EN.md b/solution/0000-0099/0015.3Sum/README_EN.md
index 9f84f4eceb78f..800479adb0a06 100644
--- a/solution/0000-0099/0015.3Sum/README_EN.md
+++ b/solution/0000-0099/0015.3Sum/README_EN.md
@@ -449,6 +449,54 @@ class Solution {
}
```
+#### C
+
+```c
+int cmp(const void* a, const void* b) {
+ return *(int*) a - *(int*) b;
+}
+
+int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
+ *returnSize = 0;
+ int cap = 1000;
+ int** ans = (int**) malloc(sizeof(int*) * cap);
+ *returnColumnSizes = (int*) malloc(sizeof(int) * cap);
+
+ qsort(nums, numsSize, sizeof(int), cmp);
+
+ for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
+ if (i > 0 && nums[i] == nums[i - 1]) continue;
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int sum = nums[i] + nums[j] + nums[k];
+ if (sum < 0) {
+ ++j;
+ } else if (sum > 0) {
+ --k;
+ } else {
+ if (*returnSize >= cap) {
+ cap *= 2;
+ ans = (int**) realloc(ans, sizeof(int*) * cap);
+ *returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
+ }
+ ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
+ ans[*returnSize][0] = nums[i];
+ ans[*returnSize][1] = nums[j];
+ ans[*returnSize][2] = nums[k];
+ (*returnColumnSizes)[*returnSize] = 3;
+ (*returnSize)++;
+
+ ++j;
+ --k;
+ while (j < k && nums[j] == nums[j - 1]) ++j;
+ while (j < k && nums[k] == nums[k + 1]) --k;
+ }
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0015.3Sum/Solution.c b/solution/0000-0099/0015.3Sum/Solution.c
new file mode 100644
index 0000000000000..cce897d4a81cd
--- /dev/null
+++ b/solution/0000-0099/0015.3Sum/Solution.c
@@ -0,0 +1,43 @@
+int cmp(const void* a, const void* b) {
+ return *(int*) a - *(int*) b;
+}
+
+int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {
+ *returnSize = 0;
+ int cap = 1000;
+ int** ans = (int**) malloc(sizeof(int*) * cap);
+ *returnColumnSizes = (int*) malloc(sizeof(int) * cap);
+
+ qsort(nums, numsSize, sizeof(int), cmp);
+
+ for (int i = 0; i < numsSize - 2 && nums[i] <= 0; ++i) {
+ if (i > 0 && nums[i] == nums[i - 1]) continue;
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int sum = nums[i] + nums[j] + nums[k];
+ if (sum < 0) {
+ ++j;
+ } else if (sum > 0) {
+ --k;
+ } else {
+ if (*returnSize >= cap) {
+ cap *= 2;
+ ans = (int**) realloc(ans, sizeof(int*) * cap);
+ *returnColumnSizes = (int*) realloc(*returnColumnSizes, sizeof(int) * cap);
+ }
+ ans[*returnSize] = (int*) malloc(sizeof(int) * 3);
+ ans[*returnSize][0] = nums[i];
+ ans[*returnSize][1] = nums[j];
+ ans[*returnSize][2] = nums[k];
+ (*returnColumnSizes)[*returnSize] = 3;
+ (*returnSize)++;
+
+ ++j;
+ --k;
+ while (j < k && nums[j] == nums[j - 1]) ++j;
+ while (j < k && nums[k] == nums[k + 1]) --k;
+ }
+ }
+ }
+ return ans;
+}
diff --git a/solution/0000-0099/0016.3Sum Closest/README.md b/solution/0000-0099/0016.3Sum Closest/README.md
index 26a419cdec0e9..c724790896aff 100644
--- a/solution/0000-0099/0016.3Sum Closest/README.md
+++ b/solution/0000-0099/0016.3Sum Closest/README.md
@@ -242,6 +242,36 @@ var threeSumClosest = function (nums, target) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public int ThreeSumClosest(int[] nums, int target) {
+ Array.Sort(nums);
+ int ans = 1 << 30;
+ int n = nums.Length;
+ for (int i = 0; i < n; ++i) {
+ int j = i + 1, k = n - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (Math.Abs(t - target) < Math.Abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+ }
+}
+```
+
#### PHP
```php
@@ -285,6 +315,37 @@ class Solution {
}
```
+#### C
+
+```c
+int cmp(const void* a, const void* b) {
+ return (*(int*) a - *(int*) b);
+}
+
+int threeSumClosest(int* nums, int numsSize, int target) {
+ qsort(nums, numsSize, sizeof(int), cmp);
+ int ans = 1 << 30;
+ for (int i = 0; i < numsSize; ++i) {
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (abs(t - target) < abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0016.3Sum Closest/README_EN.md b/solution/0000-0099/0016.3Sum Closest/README_EN.md
index 92375933a0907..3366410926aee 100644
--- a/solution/0000-0099/0016.3Sum Closest/README_EN.md
+++ b/solution/0000-0099/0016.3Sum Closest/README_EN.md
@@ -241,6 +241,36 @@ var threeSumClosest = function (nums, target) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public int ThreeSumClosest(int[] nums, int target) {
+ Array.Sort(nums);
+ int ans = 1 << 30;
+ int n = nums.Length;
+ for (int i = 0; i < n; ++i) {
+ int j = i + 1, k = n - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (Math.Abs(t - target) < Math.Abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+ }
+}
+```
+
#### PHP
```php
@@ -284,6 +314,37 @@ class Solution {
}
```
+#### C
+
+```c
+int cmp(const void* a, const void* b) {
+ return (*(int*) a - *(int*) b);
+}
+
+int threeSumClosest(int* nums, int numsSize, int target) {
+ qsort(nums, numsSize, sizeof(int), cmp);
+ int ans = 1 << 30;
+ for (int i = 0; i < numsSize; ++i) {
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (abs(t - target) < abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0016.3Sum Closest/Solution.c b/solution/0000-0099/0016.3Sum Closest/Solution.c
new file mode 100644
index 0000000000000..778c1a2aca594
--- /dev/null
+++ b/solution/0000-0099/0016.3Sum Closest/Solution.c
@@ -0,0 +1,26 @@
+int cmp(const void* a, const void* b) {
+ return (*(int*) a - *(int*) b);
+}
+
+int threeSumClosest(int* nums, int numsSize, int target) {
+ qsort(nums, numsSize, sizeof(int), cmp);
+ int ans = 1 << 30;
+ for (int i = 0; i < numsSize; ++i) {
+ int j = i + 1, k = numsSize - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (abs(t - target) < abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+}
diff --git a/solution/0000-0099/0016.3Sum Closest/Solution.cs b/solution/0000-0099/0016.3Sum Closest/Solution.cs
new file mode 100644
index 0000000000000..d58947aab214b
--- /dev/null
+++ b/solution/0000-0099/0016.3Sum Closest/Solution.cs
@@ -0,0 +1,25 @@
+public class Solution {
+ public int ThreeSumClosest(int[] nums, int target) {
+ Array.Sort(nums);
+ int ans = 1 << 30;
+ int n = nums.Length;
+ for (int i = 0; i < n; ++i) {
+ int j = i + 1, k = n - 1;
+ while (j < k) {
+ int t = nums[i] + nums[j] + nums[k];
+ if (t == target) {
+ return t;
+ }
+ if (Math.Abs(t - target) < Math.Abs(ans - target)) {
+ ans = t;
+ }
+ if (t > target) {
+ --k;
+ } else {
+ ++j;
+ }
+ }
+ }
+ return ans;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/README.md b/solution/0000-0099/0017.Letter Combinations of a Phone Number/README.md
index a8ca434436f2e..6f1223d12ac1f 100644
--- a/solution/0000-0099/0017.Letter Combinations of a Phone Number/README.md
+++ b/solution/0000-0099/0017.Letter Combinations of a Phone Number/README.md
@@ -22,7 +22,7 @@ tags:
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
-
+
@@ -555,6 +555,48 @@ class Solution {
}
```
+#### C
+
+```c
+char* d[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
+
+char** letterCombinations(char* digits, int* returnSize) {
+ if (!*digits) {
+ *returnSize = 0;
+ return NULL;
+ }
+
+ int size = 1;
+ char** ans = (char**) malloc(sizeof(char*));
+ ans[0] = strdup("");
+
+ for (int x = 0; digits[x]; ++x) {
+ char* s = d[digits[x] - '2'];
+ int len = strlen(s);
+ char** t = (char**) malloc(sizeof(char*) * size * len);
+ int tSize = 0;
+
+ for (int i = 0; i < size; ++i) {
+ for (int j = 0; j < len; ++j) {
+ int oldLen = strlen(ans[i]);
+ char* tmp = (char*) malloc(oldLen + 2);
+ strcpy(tmp, ans[i]);
+ tmp[oldLen] = s[j];
+ tmp[oldLen + 1] = '\0';
+ t[tSize++] = tmp;
+ }
+ free(ans[i]);
+ }
+ free(ans);
+ ans = t;
+ size = tSize;
+ }
+
+ *returnSize = size;
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/README_EN.md b/solution/0000-0099/0017.Letter Combinations of a Phone Number/README_EN.md
index ffad07737163e..dba840d7bd8ee 100644
--- a/solution/0000-0099/0017.Letter Combinations of a Phone Number/README_EN.md
+++ b/solution/0000-0099/0017.Letter Combinations of a Phone Number/README_EN.md
@@ -551,6 +551,48 @@ class Solution {
}
```
+#### C
+
+```c
+char* d[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
+
+char** letterCombinations(char* digits, int* returnSize) {
+ if (!*digits) {
+ *returnSize = 0;
+ return NULL;
+ }
+
+ int size = 1;
+ char** ans = (char**) malloc(sizeof(char*));
+ ans[0] = strdup("");
+
+ for (int x = 0; digits[x]; ++x) {
+ char* s = d[digits[x] - '2'];
+ int len = strlen(s);
+ char** t = (char**) malloc(sizeof(char*) * size * len);
+ int tSize = 0;
+
+ for (int i = 0; i < size; ++i) {
+ for (int j = 0; j < len; ++j) {
+ int oldLen = strlen(ans[i]);
+ char* tmp = (char*) malloc(oldLen + 2);
+ strcpy(tmp, ans[i]);
+ tmp[oldLen] = s[j];
+ tmp[oldLen + 1] = '\0';
+ t[tSize++] = tmp;
+ }
+ free(ans[i]);
+ }
+ free(ans);
+ ans = t;
+ size = tSize;
+ }
+
+ *returnSize = size;
+ return ans;
+}
+```
+
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/Solution.c b/solution/0000-0099/0017.Letter Combinations of a Phone Number/Solution.c
new file mode 100644
index 0000000000000..e02c971a3a8c6
--- /dev/null
+++ b/solution/0000-0099/0017.Letter Combinations of a Phone Number/Solution.c
@@ -0,0 +1,37 @@
+char* d[] = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
+
+char** letterCombinations(char* digits, int* returnSize) {
+ if (!*digits) {
+ *returnSize = 0;
+ return NULL;
+ }
+
+ int size = 1;
+ char** ans = (char**) malloc(sizeof(char*));
+ ans[0] = strdup("");
+
+ for (int x = 0; digits[x]; ++x) {
+ char* s = d[digits[x] - '2'];
+ int len = strlen(s);
+ char** t = (char**) malloc(sizeof(char*) * size * len);
+ int tSize = 0;
+
+ for (int i = 0; i < size; ++i) {
+ for (int j = 0; j < len; ++j) {
+ int oldLen = strlen(ans[i]);
+ char* tmp = (char*) malloc(oldLen + 2);
+ strcpy(tmp, ans[i]);
+ tmp[oldLen] = s[j];
+ tmp[oldLen + 1] = '\0';
+ t[tSize++] = tmp;
+ }
+ free(ans[i]);
+ }
+ free(ans);
+ ans = t;
+ size = tSize;
+ }
+
+ *returnSize = size;
+ return ans;
+}
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1200px-telephone-keypad2svg.png b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1200px-telephone-keypad2svg.png
new file mode 100644
index 0000000000000..cbf69ae96598d
Binary files /dev/null and b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1200px-telephone-keypad2svg.png differ
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1752723054-mfIHZs-image.png b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1752723054-mfIHZs-image.png
new file mode 100644
index 0000000000000..e4d9a76bfe05c
Binary files /dev/null and b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/1752723054-mfIHZs-image.png differ
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/17_telephone_keypad.png b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/17_telephone_keypad.png
deleted file mode 100644
index ef7a0bffee3e2..0000000000000
Binary files a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/17_telephone_keypad.png and /dev/null differ
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-Telephone-keypad2.svg.png b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-Telephone-keypad2.svg.png
deleted file mode 100644
index 38764028d1835..0000000000000
Binary files a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-Telephone-keypad2.svg.png and /dev/null differ
diff --git a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-telephone-keypad2svg.png b/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-telephone-keypad2svg.png
deleted file mode 100644
index 38764028d1835..0000000000000
Binary files a/solution/0000-0099/0017.Letter Combinations of a Phone Number/images/200px-telephone-keypad2svg.png and /dev/null differ
diff --git a/solution/0000-0099/0019.Remove Nth Node From End of List/README.md b/solution/0000-0099/0019.Remove Nth Node From End of List/README.md
index 310c885f7de9a..151c80eb0c329 100644
--- a/solution/0000-0099/0019.Remove Nth Node From End of List/README.md
+++ b/solution/0000-0099/0019.Remove Nth Node From End of List/README.md
@@ -278,6 +278,38 @@ var removeNthFromEnd = function (head, n) {
};
```
+#### Swift
+
+```swift
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public var val: Int
+ * public var next: ListNode?
+ * public init() { self.val = 0; self.next = nil; }
+ * public init(_ val: Int) { self.val = val; self.next = nil; }
+ * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
+ * }
+ */
+class Solution {
+ func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
+ let dummy = ListNode(0)
+ dummy.next = head
+ var fast: ListNode? = dummy
+ var slow: ListNode? = dummy
+ for _ in 0.. 0) {
+ fast = fast.next;
+ }
+ while (fast.next != null) {
+ slow = slow.next;
+ fast = fast.next;
+ }
+ slow.next = slow.next.next;
+ return dummy.next;
+ }
+}
+```
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
+#### PHP
+```php
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $n
+ * @param Integer $n
* @return ListNode
*/
-
function removeNthFromEnd($head, $n) {
- $dummy = new ListNode(0);
- $dummy->next = $head;
-
- $first = $dummy;
- $second = $dummy;
-
- for ($i = 0; $i <= $n; $i++) {
- $second = $second->next;
+ $dummy = new ListNode(0, $head);
+ $fast = $slow = $dummy;
+ for ($i = 0; $i < $n; $i++) {
+ $fast = $fast->next;
}
-
- while ($second != null) {
- $first = $first->next;
- $second = $second->next;
+ while ($fast->next !== null) {
+ $fast = $fast->next;
+ $slow = $slow->next;
}
-
- $first->next = $first->next->next;
-
+ $slow->next = $slow->next->next;
return $dummy->next;
}
}
diff --git a/solution/0000-0099/0019.Remove Nth Node From End of List/README_EN.md b/solution/0000-0099/0019.Remove Nth Node From End of List/README_EN.md
index c2e89d64db00c..3905ab6e2d5de 100644
--- a/solution/0000-0099/0019.Remove Nth Node From End of List/README_EN.md
+++ b/solution/0000-0099/0019.Remove Nth Node From End of List/README_EN.md
@@ -275,6 +275,38 @@ var removeNthFromEnd = function (head, n) {
};
```
+#### Swift
+
+```swift
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public var val: Int
+ * public var next: ListNode?
+ * public init() { self.val = 0; self.next = nil; }
+ * public init(_ val: Int) { self.val = val; self.next = nil; }
+ * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
+ * }
+ */
+class Solution {
+ func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
+ let dummy = ListNode(0)
+ dummy.next = head
+ var fast: ListNode? = dummy
+ var slow: ListNode? = dummy
+ for _ in 0.. 0) {
+ fast = fast.next;
+ }
+ while (fast.next != null) {
+ slow = slow.next;
+ fast = fast.next;
+ }
+ slow.next = slow.next.next;
+ return dummy.next;
+ }
+}
+```
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
+#### PHP
+```php
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $n
+ * @param Integer $n
* @return ListNode
*/
-
function removeNthFromEnd($head, $n) {
- $dummy = new ListNode(0);
- $dummy->next = $head;
-
- $first = $dummy;
- $second = $dummy;
-
- for ($i = 0; $i <= $n; $i++) {
- $second = $second->next;
+ $dummy = new ListNode(0, $head);
+ $fast = $slow = $dummy;
+ for ($i = 0; $i < $n; $i++) {
+ $fast = $fast->next;
}
-
- while ($second != null) {
- $first = $first->next;
- $second = $second->next;
+ while ($fast->next !== null) {
+ $fast = $fast->next;
+ $slow = $slow->next;
}
-
- $first->next = $first->next->next;
-
+ $slow->next = $slow->next->next;
return $dummy->next;
}
}
diff --git a/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.cs b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.cs
new file mode 100644
index 0000000000000..fe8e8f8c798e3
--- /dev/null
+++ b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.cs
@@ -0,0 +1,26 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode RemoveNthFromEnd(ListNode head, int n) {
+ ListNode dummy = new ListNode(0, head);
+ ListNode fast = dummy, slow = dummy;
+ while (n-- > 0) {
+ fast = fast.next;
+ }
+ while (fast.next != null) {
+ slow = slow.next;
+ fast = fast.next;
+ }
+ slow.next = slow.next.next;
+ return dummy.next;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.php b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.php
index a03530a2304f4..004a0f484e7ad 100644
--- a/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.php
+++ b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.php
@@ -1,40 +1,31 @@
-# Definition for singly-linked list.
-# class ListNode {
-# public $val;
-# public $next;
-
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
-
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $n
+ * @param Integer $n
* @return ListNode
*/
-
function removeNthFromEnd($head, $n) {
- $dummy = new ListNode(0);
- $dummy->next = $head;
-
- $first = $dummy;
- $second = $dummy;
-
- for ($i = 0; $i <= $n; $i++) {
- $second = $second->next;
+ $dummy = new ListNode(0, $head);
+ $fast = $slow = $dummy;
+ for ($i = 0; $i < $n; $i++) {
+ $fast = $fast->next;
}
-
- while ($second != null) {
- $first = $first->next;
- $second = $second->next;
+ while ($fast->next !== null) {
+ $fast = $fast->next;
+ $slow = $slow->next;
}
-
- $first->next = $first->next->next;
-
+ $slow->next = $slow->next->next;
return $dummy->next;
}
}
diff --git a/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.swift b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.swift
new file mode 100644
index 0000000000000..310d4aa25aa78
--- /dev/null
+++ b/solution/0000-0099/0019.Remove Nth Node From End of List/Solution.swift
@@ -0,0 +1,27 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public var val: Int
+ * public var next: ListNode?
+ * public init() { self.val = 0; self.next = nil; }
+ * public init(_ val: Int) { self.val = val; self.next = nil; }
+ * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; }
+ * }
+ */
+class Solution {
+ func removeNthFromEnd(_ head: ListNode?, _ n: Int) -> ListNode? {
+ let dummy = ListNode(0)
+ dummy.next = head
+ var fast: ListNode? = dummy
+ var slow: ListNode? = dummy
+ for _ in 0..输出: true
+示例 5:
+
+
+
输入: s = "([)]"
+
+
输出: false
+
+
提示:
diff --git a/solution/0000-0099/0020.Valid Parentheses/README_EN.md b/solution/0000-0099/0020.Valid Parentheses/README_EN.md
index cf0fc8a16deba..24c94a545cabb 100644
--- a/solution/0000-0099/0020.Valid Parentheses/README_EN.md
+++ b/solution/0000-0099/0020.Valid Parentheses/README_EN.md
@@ -60,6 +60,14 @@ tags:
Output: true
+Example 5:
+
+
+
Input: s = "([)]"
+
+
Output: false
+
+
Constraints:
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md
index 264c42ada1421..e38399664ae75 100644
--- a/solution/0000-0099/0021.Merge Two Sorted Lists/README.md
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README.md
@@ -295,24 +295,19 @@ var mergeTwoLists = function (list1, list2) {
*/
public class Solution {
public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
- ListNode dummy = new ListNode();
- ListNode cur = dummy;
- while (list1 != null && list2 != null)
- {
- if (list1.val <= list2.val)
- {
- cur.next = list1;
- list1 = list1.next;
- }
- else
- {
- cur.next = list2;
- list2 = list2.next;
- }
- cur = cur.next;
+ if (list1 == null) {
+ return list2;
+ }
+ if (list2 == null) {
+ return list1;
+ }
+ if (list1.val <= list2.val) {
+ list1.next = MergeTwoLists(list1.next, list2);
+ return list1;
+ } else {
+ list2.next = MergeTwoLists(list1, list2.next);
+ return list2;
}
- cur.next = list1 == null ? list2 : list1;
- return dummy.next;
}
}
```
@@ -332,23 +327,60 @@ public class Solution {
# @param {ListNode} list2
# @return {ListNode}
def merge_two_lists(list1, list2)
- dummy = ListNode.new()
- cur = dummy
- while list1 && list2
- if list1.val <= list2.val
- cur.next = list1
- list1 = list1.next
- else
- cur.next = list2
- list2 = list2.next
- end
- cur = cur.next
+ if list1.nil?
+ return list2
+ end
+ if list2.nil?
+ return list1
+ end
+ if list1.val <= list2.val
+ list1.next = merge_two_lists(list1.next, list2)
+ return list1
+ else
+ list2.next = merge_two_lists(list1, list2.next)
+ return list2
end
- cur.next = list1 || list2
- dummy.next
end
```
+#### PHP
+
+```php
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
+class Solution {
+ /**
+ * @param ListNode $list1
+ * @param ListNode $list2
+ * @return ListNode
+ */
+ function mergeTwoLists($list1, $list2) {
+ if (is_null($list1)) {
+ return $list2;
+ }
+ if (is_null($list2)) {
+ return $list1;
+ }
+ if ($list1->val <= $list2->val) {
+ $list1->next = $this->mergeTwoLists($list1->next, $list2);
+ return $list1;
+ } else {
+ $list2->next = $this->mergeTwoLists($list1, $list2->next);
+ return $list2;
+ }
+ }
+}
+```
+
@@ -603,6 +635,72 @@ var mergeTwoLists = function (list1, list2) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
+ ListNode dummy = new ListNode();
+ ListNode curr = dummy;
+ while (list1 != null && list2 != null) {
+ if (list1.val <= list2.val) {
+ curr.next = list1;
+ list1 = list1.next;
+ } else {
+ curr.next = list2;
+ list2 = list2.next;
+ }
+ curr = curr.next;
+ }
+ curr.next = list1 == null ? list2 : list1;
+ return dummy.next;
+ }
+}
+```
+
+#### Ruby
+
+```rb
+# Definition for singly-linked list.
+# class ListNode
+# attr_accessor :val, :next
+# def initialize(val = 0, _next = nil)
+# @val = val
+# @next = _next
+# end
+# end
+# @param {ListNode} list1
+# @param {ListNode} list2
+# @return {ListNode}
+def merge_two_lists(list1, list2)
+ dummy = ListNode.new()
+ cur = dummy
+ while list1 && list2
+ if list1.val <= list2.val
+ cur.next = list1
+ list1 = list1.next
+ else
+ cur.next = list2
+ list2 = list2.next
+ end
+ cur = cur.next
+ end
+ cur.next = list1 || list2
+ dummy.next
+end
+```
+
#### PHP
```php
@@ -616,18 +714,15 @@ var mergeTwoLists = function (list1, list2) {
# $this->next = $next;
# }
# }
-
class Solution {
/**
* @param ListNode $list1
* @param ListNode $list2
* @return ListNode
*/
-
function mergeTwoLists($list1, $list2) {
$dummy = new ListNode(0);
$current = $dummy;
-
while ($list1 != null && $list2 != null) {
if ($list1->val <= $list2->val) {
$current->next = $list1;
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md
index 1aaa040d75715..5813dda5912a8 100644
--- a/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/README_EN.md
@@ -297,24 +297,19 @@ var mergeTwoLists = function (list1, list2) {
*/
public class Solution {
public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
- ListNode dummy = new ListNode();
- ListNode cur = dummy;
- while (list1 != null && list2 != null)
- {
- if (list1.val <= list2.val)
- {
- cur.next = list1;
- list1 = list1.next;
- }
- else
- {
- cur.next = list2;
- list2 = list2.next;
- }
- cur = cur.next;
+ if (list1 == null) {
+ return list2;
+ }
+ if (list2 == null) {
+ return list1;
+ }
+ if (list1.val <= list2.val) {
+ list1.next = MergeTwoLists(list1.next, list2);
+ return list1;
+ } else {
+ list2.next = MergeTwoLists(list1, list2.next);
+ return list2;
}
- cur.next = list1 == null ? list2 : list1;
- return dummy.next;
}
}
```
@@ -334,23 +329,60 @@ public class Solution {
# @param {ListNode} list2
# @return {ListNode}
def merge_two_lists(list1, list2)
- dummy = ListNode.new()
- cur = dummy
- while list1 && list2
- if list1.val <= list2.val
- cur.next = list1
- list1 = list1.next
- else
- cur.next = list2
- list2 = list2.next
- end
- cur = cur.next
+ if list1.nil?
+ return list2
+ end
+ if list2.nil?
+ return list1
+ end
+ if list1.val <= list2.val
+ list1.next = merge_two_lists(list1.next, list2)
+ return list1
+ else
+ list2.next = merge_two_lists(list1, list2.next)
+ return list2
end
- cur.next = list1 || list2
- dummy.next
end
```
+#### PHP
+
+```php
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
+class Solution {
+ /**
+ * @param ListNode $list1
+ * @param ListNode $list2
+ * @return ListNode
+ */
+ function mergeTwoLists($list1, $list2) {
+ if (is_null($list1)) {
+ return $list2;
+ }
+ if (is_null($list2)) {
+ return $list1;
+ }
+ if ($list1->val <= $list2->val) {
+ $list1->next = $this->mergeTwoLists($list1->next, $list2);
+ return $list1;
+ } else {
+ $list2->next = $this->mergeTwoLists($list1, $list2->next);
+ return $list2;
+ }
+ }
+}
+```
+
@@ -605,6 +637,72 @@ var mergeTwoLists = function (list1, list2) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
+ ListNode dummy = new ListNode();
+ ListNode curr = dummy;
+ while (list1 != null && list2 != null) {
+ if (list1.val <= list2.val) {
+ curr.next = list1;
+ list1 = list1.next;
+ } else {
+ curr.next = list2;
+ list2 = list2.next;
+ }
+ curr = curr.next;
+ }
+ curr.next = list1 == null ? list2 : list1;
+ return dummy.next;
+ }
+}
+```
+
+#### Ruby
+
+```rb
+# Definition for singly-linked list.
+# class ListNode
+# attr_accessor :val, :next
+# def initialize(val = 0, _next = nil)
+# @val = val
+# @next = _next
+# end
+# end
+# @param {ListNode} list1
+# @param {ListNode} list2
+# @return {ListNode}
+def merge_two_lists(list1, list2)
+ dummy = ListNode.new()
+ cur = dummy
+ while list1 && list2
+ if list1.val <= list2.val
+ cur.next = list1
+ list1 = list1.next
+ else
+ cur.next = list2
+ list2 = list2.next
+ end
+ cur = cur.next
+ end
+ cur.next = list1 || list2
+ dummy.next
+end
+```
+
#### PHP
```php
@@ -618,18 +716,15 @@ var mergeTwoLists = function (list1, list2) {
# $this->next = $next;
# }
# }
-
class Solution {
/**
* @param ListNode $list1
* @param ListNode $list2
* @return ListNode
*/
-
function mergeTwoLists($list1, $list2) {
$dummy = new ListNode(0);
$current = $dummy;
-
while ($list1 != null && $list2 != null) {
if ($list1->val <= $list2->val) {
$current->next = $list1;
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs
index f51146a70d7d9..c5cf87486fe07 100644
--- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.cs
@@ -11,23 +11,18 @@
*/
public class Solution {
public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
- ListNode dummy = new ListNode();
- ListNode cur = dummy;
- while (list1 != null && list2 != null)
- {
- if (list1.val <= list2.val)
- {
- cur.next = list1;
- list1 = list1.next;
- }
- else
- {
- cur.next = list2;
- list2 = list2.next;
- }
- cur = cur.next;
+ if (list1 == null) {
+ return list2;
+ }
+ if (list2 == null) {
+ return list1;
+ }
+ if (list1.val <= list2.val) {
+ list1.next = MergeTwoLists(list1.next, list2);
+ return list1;
+ } else {
+ list2.next = MergeTwoLists(list1, list2.next);
+ return list2;
}
- cur.next = list1 == null ? list2 : list1;
- return dummy.next;
}
-}
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php
index 43c1e40cec909..5ba6c289539bf 100644
--- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.php
@@ -1,40 +1,34 @@
-# Definition for singly-linked list.
-# class ListNode {
-# public $val;
-# public $next;
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
-
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
+
/**
* @param ListNode $list1
* @param ListNode $list2
* @return ListNode
*/
-
function mergeTwoLists($list1, $list2) {
- $dummy = new ListNode(0);
- $current = $dummy;
-
- while ($list1 != null && $list2 != null) {
- if ($list1->val <= $list2->val) {
- $current->next = $list1;
- $list1 = $list1->next;
- } else {
- $current->next = $list2;
- $list2 = $list2->next;
- }
- $current = $current->next;
+ if (is_null($list1)) {
+ return $list2;
+ }
+ if (is_null($list2)) {
+ return $list1;
}
- if ($list1 != null) {
- $current->next = $list1;
- } elseif ($list2 != null) {
- $current->next = $list2;
+ if ($list1->val <= $list2->val) {
+ $list1->next = $this->mergeTwoLists($list1->next, $list2);
+ return $list1;
+ } else {
+ $list2->next = $this->mergeTwoLists($list1, $list2->next);
+ return $list2;
}
- return $dummy->next;
}
-}
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb
index f27273d9fd652..db48f5d196b65 100644
--- a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution.rb
@@ -10,18 +10,17 @@
# @param {ListNode} list2
# @return {ListNode}
def merge_two_lists(list1, list2)
- dummy = ListNode.new()
- cur = dummy
- while list1 && list2
- if list1.val <= list2.val
- cur.next = list1
- list1 = list1.next
- else
- cur.next = list2
- list2 = list2.next
- end
- cur = cur.next
+ if list1.nil?
+ return list2
end
- cur.next = list1 || list2
- dummy.next
-end
+ if list2.nil?
+ return list1
+ end
+ if list1.val <= list2.val
+ list1.next = merge_two_lists(list1.next, list2)
+ return list1
+ else
+ list2.next = merge_two_lists(list1, list2.next)
+ return list2
+ end
+end
\ No newline at end of file
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs
new file mode 100644
index 0000000000000..53d85f2d7f0fa
--- /dev/null
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.cs
@@ -0,0 +1,29 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode MergeTwoLists(ListNode list1, ListNode list2) {
+ ListNode dummy = new ListNode();
+ ListNode curr = dummy;
+ while (list1 != null && list2 != null) {
+ if (list1.val <= list2.val) {
+ curr.next = list1;
+ list1 = list1.next;
+ } else {
+ curr.next = list2;
+ list2 = list2.next;
+ }
+ curr = curr.next;
+ }
+ curr.next = list1 == null ? list2 : list1;
+ return dummy.next;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php
new file mode 100644
index 0000000000000..375be195d3815
--- /dev/null
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.php
@@ -0,0 +1,37 @@
+# Definition for singly-linked list.
+# class ListNode {
+# public $val;
+# public $next;
+# public function __construct($val = 0, $next = null)
+# {
+# $this->val = $val;
+# $this->next = $next;
+# }
+# }
+class Solution {
+ /**
+ * @param ListNode $list1
+ * @param ListNode $list2
+ * @return ListNode
+ */
+ function mergeTwoLists($list1, $list2) {
+ $dummy = new ListNode(0);
+ $current = $dummy;
+ while ($list1 != null && $list2 != null) {
+ if ($list1->val <= $list2->val) {
+ $current->next = $list1;
+ $list1 = $list1->next;
+ } else {
+ $current->next = $list2;
+ $list2 = $list2->next;
+ }
+ $current = $current->next;
+ }
+ if ($list1 != null) {
+ $current->next = $list1;
+ } elseif ($list2 != null) {
+ $current->next = $list2;
+ }
+ return $dummy->next;
+ }
+}
diff --git a/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb
new file mode 100644
index 0000000000000..f27273d9fd652
--- /dev/null
+++ b/solution/0000-0099/0021.Merge Two Sorted Lists/Solution2.rb
@@ -0,0 +1,27 @@
+# Definition for singly-linked list.
+# class ListNode
+# attr_accessor :val, :next
+# def initialize(val = 0, _next = nil)
+# @val = val
+# @next = _next
+# end
+# end
+# @param {ListNode} list1
+# @param {ListNode} list2
+# @return {ListNode}
+def merge_two_lists(list1, list2)
+ dummy = ListNode.new()
+ cur = dummy
+ while list1 && list2
+ if list1.val <= list2.val
+ cur.next = list1
+ list1 = list1.next
+ else
+ cur.next = list2
+ list2 = list2.next
+ end
+ cur = cur.next
+ end
+ cur.next = list1 || list2
+ dummy.next
+end
diff --git a/solution/0000-0099/0022.Generate Parentheses/README.md b/solution/0000-0099/0022.Generate Parentheses/README.md
index 5dd9d47a628aa..b470955a10c8a 100644
--- a/solution/0000-0099/0022.Generate Parentheses/README.md
+++ b/solution/0000-0099/0022.Generate Parentheses/README.md
@@ -225,6 +225,33 @@ var generateParenthesis = function (n) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ private List ans = new List();
+ private int n;
+
+ public List GenerateParenthesis(int n) {
+ this.n = n;
+ Dfs(0, 0, "");
+ return ans;
+ }
+
+ private void Dfs(int l, int r, string t) {
+ if (l > n || r > n || l < r) {
+ return;
+ }
+ if (l == n && r == n) {
+ ans.Add(t);
+ return;
+ }
+ Dfs(l + 1, r, t + "(");
+ Dfs(l, r + 1, t + ")");
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0022.Generate Parentheses/README_EN.md b/solution/0000-0099/0022.Generate Parentheses/README_EN.md
index 6eeb019475ce1..867a20c5fb1d8 100644
--- a/solution/0000-0099/0022.Generate Parentheses/README_EN.md
+++ b/solution/0000-0099/0022.Generate Parentheses/README_EN.md
@@ -220,6 +220,33 @@ var generateParenthesis = function (n) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ private List ans = new List();
+ private int n;
+
+ public List GenerateParenthesis(int n) {
+ this.n = n;
+ Dfs(0, 0, "");
+ return ans;
+ }
+
+ private void Dfs(int l, int r, string t) {
+ if (l > n || r > n || l < r) {
+ return;
+ }
+ if (l == n && r == n) {
+ ans.Add(t);
+ return;
+ }
+ Dfs(l + 1, r, t + "(");
+ Dfs(l, r + 1, t + ")");
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0022.Generate Parentheses/Solution.cs b/solution/0000-0099/0022.Generate Parentheses/Solution.cs
new file mode 100644
index 0000000000000..6f6257e62a39e
--- /dev/null
+++ b/solution/0000-0099/0022.Generate Parentheses/Solution.cs
@@ -0,0 +1,22 @@
+public class Solution {
+ private List ans = new List();
+ private int n;
+
+ public List GenerateParenthesis(int n) {
+ this.n = n;
+ Dfs(0, 0, "");
+ return ans;
+ }
+
+ private void Dfs(int l, int r, string t) {
+ if (l > n || r > n || l < r) {
+ return;
+ }
+ if (l == n && r == n) {
+ ans.Add(t);
+ return;
+ }
+ Dfs(l + 1, r, t + "(");
+ Dfs(l, r + 1, t + ")");
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0023.Merge k Sorted Lists/README.md b/solution/0000-0099/0023.Merge k Sorted Lists/README.md
index c07f16ad90222..d06143c55db86 100644
--- a/solution/0000-0099/0023.Merge k Sorted Lists/README.md
+++ b/solution/0000-0099/0023.Merge k Sorted Lists/README.md
@@ -232,11 +232,7 @@ func (h *hp) Pop() any { a := *h; v := a[len(a)-1]; *h = a[:len(a)-1];
function mergeKLists(lists: Array): ListNode | null {
const pq = new MinPriorityQueue({ priority: (node: ListNode) => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy: ListNode = new ListNode();
let cur: ListNode = dummy;
while (!pq.isEmpty()) {
@@ -318,11 +314,7 @@ impl Solution {
*/
var mergeKLists = function (lists) {
const pq = new MinPriorityQueue({ priority: node => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy = new ListNode();
let cur = dummy;
while (!pq.isEmpty()) {
diff --git a/solution/0000-0099/0023.Merge k Sorted Lists/README_EN.md b/solution/0000-0099/0023.Merge k Sorted Lists/README_EN.md
index c202848462f5a..787342715e2e0 100644
--- a/solution/0000-0099/0023.Merge k Sorted Lists/README_EN.md
+++ b/solution/0000-0099/0023.Merge k Sorted Lists/README_EN.md
@@ -35,7 +35,7 @@ tags:
1->3->4,
2->6
]
-merging them into one sorted list:
+merging them into one sorted linked list:
1->1->2->3->4->4->5->6
@@ -233,11 +233,7 @@ func (h *hp) Pop() any { a := *h; v := a[len(a)-1]; *h = a[:len(a)-1];
function mergeKLists(lists: Array): ListNode | null {
const pq = new MinPriorityQueue({ priority: (node: ListNode) => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy: ListNode = new ListNode();
let cur: ListNode = dummy;
while (!pq.isEmpty()) {
@@ -319,11 +315,7 @@ impl Solution {
*/
var mergeKLists = function (lists) {
const pq = new MinPriorityQueue({ priority: node => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy = new ListNode();
let cur = dummy;
while (!pq.isEmpty()) {
diff --git a/solution/0000-0099/0023.Merge k Sorted Lists/Solution.js b/solution/0000-0099/0023.Merge k Sorted Lists/Solution.js
index d6f1c7d4451db..d08377efe3a0b 100644
--- a/solution/0000-0099/0023.Merge k Sorted Lists/Solution.js
+++ b/solution/0000-0099/0023.Merge k Sorted Lists/Solution.js
@@ -11,11 +11,7 @@
*/
var mergeKLists = function (lists) {
const pq = new MinPriorityQueue({ priority: node => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy = new ListNode();
let cur = dummy;
while (!pq.isEmpty()) {
diff --git a/solution/0000-0099/0023.Merge k Sorted Lists/Solution.ts b/solution/0000-0099/0023.Merge k Sorted Lists/Solution.ts
index cf5c2a4ae41d8..cf00ff0f98869 100644
--- a/solution/0000-0099/0023.Merge k Sorted Lists/Solution.ts
+++ b/solution/0000-0099/0023.Merge k Sorted Lists/Solution.ts
@@ -12,11 +12,7 @@
function mergeKLists(lists: Array): ListNode | null {
const pq = new MinPriorityQueue({ priority: (node: ListNode) => node.val });
- for (const head of lists) {
- if (head) {
- pq.enqueue(head);
- }
- }
+ lists.filter(head => head).forEach(head => pq.enqueue(head));
const dummy: ListNode = new ListNode();
let cur: ListNode = dummy;
while (!pq.isEmpty()) {
diff --git a/solution/0000-0099/0024.Swap Nodes in Pairs/README.md b/solution/0000-0099/0024.Swap Nodes in Pairs/README.md
index 38a1b4904219d..e2b5f98ec92b8 100644
--- a/solution/0000-0099/0024.Swap Nodes in Pairs/README.md
+++ b/solution/0000-0099/0024.Swap Nodes in Pairs/README.md
@@ -256,6 +256,34 @@ var swapPairs = function (head) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ if (head is null || head.next is null) {
+ return head;
+ }
+ ListNode t = SwapPairs(head.next.next);
+ ListNode p = head.next;
+ p.next = head;
+ head.next = t;
+ return p;
+ }
+}
+```
+
#### Ruby
```rb
@@ -466,6 +494,38 @@ var swapPairs = function (head) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ ListNode dummy = new ListNode(0, head);
+ ListNode pre = dummy;
+ ListNode cur = head;
+ while (cur is not null && cur.next is not null) {
+ ListNode t = cur.next;
+ cur.next = t.next;
+ t.next = cur;
+ pre.next = t;
+ pre = cur;
+ cur = cur.next;
+ }
+ return dummy.next;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0024.Swap Nodes in Pairs/README_EN.md b/solution/0000-0099/0024.Swap Nodes in Pairs/README_EN.md
index f2a3dc01f612a..e9340a634752c 100644
--- a/solution/0000-0099/0024.Swap Nodes in Pairs/README_EN.md
+++ b/solution/0000-0099/0024.Swap Nodes in Pairs/README_EN.md
@@ -269,6 +269,34 @@ var swapPairs = function (head) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ if (head is null || head.next is null) {
+ return head;
+ }
+ ListNode t = SwapPairs(head.next.next);
+ ListNode p = head.next;
+ p.next = head;
+ head.next = t;
+ return p;
+ }
+}
+```
+
#### Ruby
```rb
@@ -479,6 +507,38 @@ var swapPairs = function (head) {
};
```
+#### C#
+
+```cs
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ ListNode dummy = new ListNode(0, head);
+ ListNode pre = dummy;
+ ListNode cur = head;
+ while (cur is not null && cur.next is not null) {
+ ListNode t = cur.next;
+ cur.next = t.next;
+ t.next = cur;
+ pre.next = t;
+ pre = cur;
+ cur = cur.next;
+ }
+ return dummy.next;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0024.Swap Nodes in Pairs/Solution.cs b/solution/0000-0099/0024.Swap Nodes in Pairs/Solution.cs
new file mode 100644
index 0000000000000..ddeda2166b005
--- /dev/null
+++ b/solution/0000-0099/0024.Swap Nodes in Pairs/Solution.cs
@@ -0,0 +1,23 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ if (head is null || head.next is null) {
+ return head;
+ }
+ ListNode t = SwapPairs(head.next.next);
+ ListNode p = head.next;
+ p.next = head;
+ head.next = t;
+ return p;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0024.Swap Nodes in Pairs/Solution2.cs b/solution/0000-0099/0024.Swap Nodes in Pairs/Solution2.cs
new file mode 100644
index 0000000000000..aee6f3c492711
--- /dev/null
+++ b/solution/0000-0099/0024.Swap Nodes in Pairs/Solution2.cs
@@ -0,0 +1,27 @@
+/**
+ * Definition for singly-linked list.
+ * public class ListNode {
+ * public int val;
+ * public ListNode next;
+ * public ListNode(int val=0, ListNode next=null) {
+ * this.val = val;
+ * this.next = next;
+ * }
+ * }
+ */
+public class Solution {
+ public ListNode SwapPairs(ListNode head) {
+ ListNode dummy = new ListNode(0, head);
+ ListNode pre = dummy;
+ ListNode cur = head;
+ while (cur is not null && cur.next is not null) {
+ ListNode t = cur.next;
+ cur.next = t.next;
+ t.next = cur;
+ pre.next = t;
+ pre = cur;
+ cur = cur.next;
+ }
+ return dummy.next;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/README.md b/solution/0000-0099/0025.Reverse Nodes in k-Group/README.md
index fcdc139163f01..e407ae48a1c8a 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/README.md
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/README.md
@@ -63,9 +63,15 @@ tags:
-### 方法一:迭代
+### 方法一:模拟
-时间复杂度为 $O(n)$,空间复杂度为 $O(1)$,其中 $n$ 是链表的长度。
+我们可以根据题意,模拟整个翻转的过程。
+
+首先,我们定义一个辅助函数 $\textit{reverse}$,用于翻转一个链表。然后,我们定义一个虚拟头结点 $\textit{dummy}$,并将其 $\textit{next}$ 指针指向 $\textit{head}$。
+
+接着,我们遍历链表,每次遍历 $k$ 个节点,若剩余节点不足 $k$ 个,则不进行翻转。否则,我们将 $k$ 个节点取出,然后调用 $\textit{reverse}$ 函数翻转这 $k$ 个节点。然后将翻转后的链表与原链表连接起来。继续遍历下一个 $k$ 个节点,直到遍历完整个链表。
+
+时间复杂度 $O(n)$,其中 $n$ 为链表的长度。空间复杂度 $O(1)$。
@@ -78,30 +84,30 @@ tags:
# self.val = val
# self.next = next
class Solution:
- def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
- def reverseList(head):
- pre, p = None, head
- while p:
- q = p.next
- p.next = pre
- pre = p
- p = q
- return pre
-
- dummy = ListNode(next=head)
- pre = cur = dummy
- while cur.next:
+ def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
+ def reverse(head: Optional[ListNode]) -> Optional[ListNode]:
+ dummy = ListNode()
+ cur = head
+ while cur:
+ nxt = cur.next
+ cur.next = dummy.next
+ dummy.next = cur
+ cur = nxt
+ return dummy.next
+
+ dummy = pre = ListNode(next=head)
+ while pre:
+ cur = pre
for _ in range(k):
cur = cur.next
if cur is None:
return dummy.next
- t = cur.next
+ node = pre.next
+ nxt = cur.next
cur.next = None
- start = pre.next
- pre.next = reverseList(start)
- start.next = t
- pre = start
- cur = pre
+ pre.next = reverse(node)
+ node.next = nxt
+ pre = node
return dummy.next
```
@@ -121,34 +127,36 @@ class Solution:
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null) {
- for (int i = 0; i < k && cur != null; ++i) {
+ dummy.next = head;
+ ListNode pre = dummy;
+ while (pre != null) {
+ ListNode cur = pre;
+ for (int i = 0; i < k; i++) {
cur = cur.next;
+ if (cur == null) {
+ return dummy.next;
+ }
}
- if (cur == null) {
- return dummy.next;
- }
- ListNode t = cur.next;
+ ListNode node = pre.next;
+ ListNode nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = reverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = reverse(node);
+ node.next = nxt;
+ pre = node;
}
return dummy.next;
}
- private ListNode reverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null) {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode reverse(ListNode head) {
+ ListNode dummy = new ListNode();
+ ListNode cur = head;
+ while (cur != null) {
+ ListNode nxt = cur.next;
+ cur.next = dummy.next;
+ dummy.next = cur;
+ cur = nxt;
}
- return pre;
+ return dummy.next;
}
}
```
@@ -164,30 +172,38 @@ class Solution {
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
- var dummy *ListNode = &ListNode{}
- p, cur := dummy, head
- for cur != nil {
- start := cur
+ dummy := &ListNode{Next: head}
+ pre := dummy
+
+ for pre != nil {
+ cur := pre
for i := 0; i < k; i++ {
+ cur = cur.Next
if cur == nil {
- p.Next = start
return dummy.Next
}
- cur = cur.Next
}
- p.Next, p = reverse(start, cur), start
+
+ node := pre.Next
+ nxt := cur.Next
+ cur.Next = nil
+ pre.Next = reverse(node)
+ node.Next = nxt
+ pre = node
}
return dummy.Next
}
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
+func reverse(head *ListNode) *ListNode {
+ var dummy *ListNode
+ cur := head
+ for cur != nil {
+ nxt := cur.Next
+ cur.Next = dummy
+ dummy = cur
+ cur = nxt
}
- return pre
+ return dummy
}
```
@@ -207,40 +223,40 @@ func reverse(start, end *ListNode) *ListNode {
*/
function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- let dummy = new ListNode(0, head);
+ const dummy = new ListNode(0, head);
let pre = dummy;
- // pre->head-> ... ->tail-> next
- while (head != null) {
- let tail = pre;
- for (let i = 0; i < k; ++i) {
- tail = tail.next;
- if (tail == null) {
+ while (pre !== null) {
+ let cur: ListNode | null = pre;
+ for (let i = 0; i < k; i++) {
+ cur = cur?.next || null;
+ if (cur === null) {
return dummy.next;
}
}
- let t = tail.next;
- [head, tail] = reverse(head, tail);
- // set next
- pre.next = head;
- tail.next = t;
- // set new pre and new head
- pre = tail;
- head = t;
+
+ const node = pre.next;
+ const nxt = cur?.next || null;
+ cur!.next = null;
+ pre.next = reverse(node);
+ node!.next = nxt;
+ pre = node!;
}
+
return dummy.next;
}
-function reverse(head: ListNode, tail: ListNode) {
+function reverse(head: ListNode | null): ListNode | null {
+ let dummy: ListNode | null = null;
let cur = head;
- let pre = tail.next;
- // head -> next -> ... -> tail -> pre
- while (pre != tail) {
- let t = cur.next;
- cur.next = pre;
- pre = cur;
- cur = t;
+
+ while (cur !== null) {
+ const nxt = cur.next;
+ cur.next = dummy;
+ dummy = cur;
+ cur = nxt;
}
- return [tail, head];
+
+ return dummy;
}
```
@@ -312,7 +328,7 @@ impl Solution {
* public class ListNode {
* public int val;
* public ListNode next;
- * public ListNode(int val=0, ListNode next=null) {
+ * public ListNode(int val = 0, ListNode next = null) {
* this.val = val;
* this.next = next;
* }
@@ -320,39 +336,40 @@ impl Solution {
*/
public class Solution {
public ListNode ReverseKGroup(ListNode head, int k) {
- ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null)
- {
- for (int i = 0; i < k && cur != null; ++i)
- {
+ var dummy = new ListNode(0);
+ dummy.next = head;
+ var pre = dummy;
+
+ while (pre != null) {
+ var cur = pre;
+ for (int i = 0; i < k; i++) {
+ if (cur.next == null) {
+ return dummy.next;
+ }
cur = cur.next;
}
- if (cur == null)
- {
- return dummy.next;
- }
- ListNode t = cur.next;
+
+ var node = pre.next;
+ var nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = ReverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = Reverse(node);
+ node.next = nxt;
+ pre = node;
}
+
return dummy.next;
}
- private ListNode ReverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null)
- {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode Reverse(ListNode head) {
+ ListNode prev = null;
+ var cur = head;
+ while (cur != null) {
+ var nxt = cur.next;
+ cur.next = prev;
+ prev = cur;
+ cur = nxt;
}
- return pre;
+ return prev;
}
}
```
@@ -360,153 +377,64 @@ public class Solution {
#### PHP
```php
-# Definition for singly-linked list.
-# class ListNode {
-# public $val;
-# public $next;
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
-
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $k
+ * @param Integer $k
* @return ListNode
*/
-
function reverseKGroup($head, $k) {
$dummy = new ListNode(0);
$dummy->next = $head;
- $prevGroupTail = $dummy;
-
- while ($head !== null) {
- $count = 0;
- $groupHead = $head;
- $groupTail = $head;
-
- while ($count < $k && $head !== null) {
- $head = $head->next;
- $count++;
- }
- if ($count < $k) {
- $prevGroupTail->next = $groupHead;
- break;
- }
+ $pre = $dummy;
- $prev = null;
+ while ($pre !== null) {
+ $cur = $pre;
for ($i = 0; $i < $k; $i++) {
- $next = $groupHead->next;
- $groupHead->next = $prev;
- $prev = $groupHead;
- $groupHead = $next;
+ if ($cur->next === null) {
+ return $dummy->next;
+ }
+ $cur = $cur->next;
}
- $prevGroupTail->next = $prev;
- $prevGroupTail = $groupTail;
+
+ $node = $pre->next;
+ $nxt = $cur->next;
+ $cur->next = null;
+ $pre->next = $this->reverse($node);
+ $node->next = $nxt;
+ $pre = $node;
}
return $dummy->next;
}
-}
-```
-
-
-
-
-
-
-### 方法二:递归
-
-时间复杂度为 $O(n)$,空间复杂度为 $O(\log _k n)$,其中 $n$ 是链表的长度。
-
-
-
-#### Go
-
-```go
-/**
- * Definition for singly-linked list.
- * type ListNode struct {
- * Val int
- * Next *ListNode
- * }
- */
-func reverseKGroup(head *ListNode, k int) *ListNode {
- start, end := head, head
- for i := 0; i < k; i++ {
- if end == nil {
- return head
- }
- end = end.Next
- }
- res := reverse(start, end)
- start.Next = reverseKGroup(end, k)
- return res
-}
-
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
- }
- return pre
-}
-```
-
-#### TypeScript
-
-```ts
-/**
- * Definition for singly-linked list.
- * class ListNode {
- * val: number
- * next: ListNode | null
- * constructor(val?: number, next?: ListNode | null) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- * }
- */
-
-function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- if (k === 1) {
- return head;
- }
-
- const dummy = new ListNode(0, head);
- let root = dummy;
- while (root != null) {
- let pre = root;
- let cur = root;
-
- let count = 0;
- while (count !== k) {
- count++;
- cur = cur.next;
- if (cur == null) {
- return dummy.next;
- }
- }
-
- const nextRoot = pre.next;
- pre.next = cur;
-
- let node = nextRoot;
- let next = node.next;
- node.next = cur.next;
- while (node != cur) {
- [next.next, node, next] = [node, next, next.next];
+ /**
+ * Helper function to reverse a linked list.
+ * @param ListNode $head
+ * @return ListNode
+ */
+ function reverse($head) {
+ $prev = null;
+ $cur = $head;
+ while ($cur !== null) {
+ $nxt = $cur->next;
+ $cur->next = $prev;
+ $prev = $cur;
+ $cur = $nxt;
}
- root = nextRoot;
+ return $prev;
}
-
- return dummy.next;
}
```
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md b/solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md
index 30abf3f03033f..33b5fafc1671d 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/README_EN.md
@@ -56,9 +56,15 @@ tags:
-### Solution 1: Iteration
+### Solution 1: Simulation
-The time complexity is $O(n)$, and the space complexity is $O(1)$. Here, $n$ is the length of the linked list.
+We can simulate the entire reversal process according to the problem description.
+
+First, we define a helper function $\textit{reverse}$ to reverse a linked list. Then, we define a dummy head node $\textit{dummy}$ and set its $\textit{next}$ pointer to $\textit{head}$.
+
+Next, we traverse the linked list, processing $k$ nodes at a time. If the remaining nodes are fewer than $k$, we do not perform the reversal. Otherwise, we extract $k$ nodes and call the $\textit{reverse}$ function to reverse these $k$ nodes. Then, we connect the reversed linked list back to the original linked list. We continue to process the next $k$ nodes until the entire linked list is traversed.
+
+The time complexity is $O(n)$, where $n$ is the length of the linked list. The space complexity is $O(1)$.
@@ -71,30 +77,30 @@ The time complexity is $O(n)$, and the space complexity is $O(1)$. Here, $n$ is
# self.val = val
# self.next = next
class Solution:
- def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
- def reverseList(head):
- pre, p = None, head
- while p:
- q = p.next
- p.next = pre
- pre = p
- p = q
- return pre
-
- dummy = ListNode(next=head)
- pre = cur = dummy
- while cur.next:
+ def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
+ def reverse(head: Optional[ListNode]) -> Optional[ListNode]:
+ dummy = ListNode()
+ cur = head
+ while cur:
+ nxt = cur.next
+ cur.next = dummy.next
+ dummy.next = cur
+ cur = nxt
+ return dummy.next
+
+ dummy = pre = ListNode(next=head)
+ while pre:
+ cur = pre
for _ in range(k):
cur = cur.next
if cur is None:
return dummy.next
- t = cur.next
+ node = pre.next
+ nxt = cur.next
cur.next = None
- start = pre.next
- pre.next = reverseList(start)
- start.next = t
- pre = start
- cur = pre
+ pre.next = reverse(node)
+ node.next = nxt
+ pre = node
return dummy.next
```
@@ -114,34 +120,36 @@ class Solution:
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null) {
- for (int i = 0; i < k && cur != null; ++i) {
+ dummy.next = head;
+ ListNode pre = dummy;
+ while (pre != null) {
+ ListNode cur = pre;
+ for (int i = 0; i < k; i++) {
cur = cur.next;
+ if (cur == null) {
+ return dummy.next;
+ }
}
- if (cur == null) {
- return dummy.next;
- }
- ListNode t = cur.next;
+ ListNode node = pre.next;
+ ListNode nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = reverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = reverse(node);
+ node.next = nxt;
+ pre = node;
}
return dummy.next;
}
- private ListNode reverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null) {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode reverse(ListNode head) {
+ ListNode dummy = new ListNode();
+ ListNode cur = head;
+ while (cur != null) {
+ ListNode nxt = cur.next;
+ cur.next = dummy.next;
+ dummy.next = cur;
+ cur = nxt;
}
- return pre;
+ return dummy.next;
}
}
```
@@ -157,30 +165,38 @@ class Solution {
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
- var dummy *ListNode = &ListNode{}
- p, cur := dummy, head
- for cur != nil {
- start := cur
+ dummy := &ListNode{Next: head}
+ pre := dummy
+
+ for pre != nil {
+ cur := pre
for i := 0; i < k; i++ {
+ cur = cur.Next
if cur == nil {
- p.Next = start
return dummy.Next
}
- cur = cur.Next
}
- p.Next, p = reverse(start, cur), start
+
+ node := pre.Next
+ nxt := cur.Next
+ cur.Next = nil
+ pre.Next = reverse(node)
+ node.Next = nxt
+ pre = node
}
return dummy.Next
}
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
+func reverse(head *ListNode) *ListNode {
+ var dummy *ListNode
+ cur := head
+ for cur != nil {
+ nxt := cur.Next
+ cur.Next = dummy
+ dummy = cur
+ cur = nxt
}
- return pre
+ return dummy
}
```
@@ -200,40 +216,40 @@ func reverse(start, end *ListNode) *ListNode {
*/
function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- let dummy = new ListNode(0, head);
+ const dummy = new ListNode(0, head);
let pre = dummy;
- // pre->head-> ... ->tail-> next
- while (head != null) {
- let tail = pre;
- for (let i = 0; i < k; ++i) {
- tail = tail.next;
- if (tail == null) {
+ while (pre !== null) {
+ let cur: ListNode | null = pre;
+ for (let i = 0; i < k; i++) {
+ cur = cur?.next || null;
+ if (cur === null) {
return dummy.next;
}
}
- let t = tail.next;
- [head, tail] = reverse(head, tail);
- // set next
- pre.next = head;
- tail.next = t;
- // set new pre and new head
- pre = tail;
- head = t;
+
+ const node = pre.next;
+ const nxt = cur?.next || null;
+ cur!.next = null;
+ pre.next = reverse(node);
+ node!.next = nxt;
+ pre = node!;
}
+
return dummy.next;
}
-function reverse(head: ListNode, tail: ListNode) {
+function reverse(head: ListNode | null): ListNode | null {
+ let dummy: ListNode | null = null;
let cur = head;
- let pre = tail.next;
- // head -> next -> ... -> tail -> pre
- while (pre != tail) {
- let t = cur.next;
- cur.next = pre;
- pre = cur;
- cur = t;
+
+ while (cur !== null) {
+ const nxt = cur.next;
+ cur.next = dummy;
+ dummy = cur;
+ cur = nxt;
}
- return [tail, head];
+
+ return dummy;
}
```
@@ -305,7 +321,7 @@ impl Solution {
* public class ListNode {
* public int val;
* public ListNode next;
- * public ListNode(int val=0, ListNode next=null) {
+ * public ListNode(int val = 0, ListNode next = null) {
* this.val = val;
* this.next = next;
* }
@@ -313,39 +329,40 @@ impl Solution {
*/
public class Solution {
public ListNode ReverseKGroup(ListNode head, int k) {
- ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null)
- {
- for (int i = 0; i < k && cur != null; ++i)
- {
+ var dummy = new ListNode(0);
+ dummy.next = head;
+ var pre = dummy;
+
+ while (pre != null) {
+ var cur = pre;
+ for (int i = 0; i < k; i++) {
+ if (cur.next == null) {
+ return dummy.next;
+ }
cur = cur.next;
}
- if (cur == null)
- {
- return dummy.next;
- }
- ListNode t = cur.next;
+
+ var node = pre.next;
+ var nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = ReverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = Reverse(node);
+ node.next = nxt;
+ pre = node;
}
+
return dummy.next;
}
- private ListNode ReverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null)
- {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode Reverse(ListNode head) {
+ ListNode prev = null;
+ var cur = head;
+ while (cur != null) {
+ var nxt = cur.next;
+ cur.next = prev;
+ prev = cur;
+ cur = nxt;
}
- return pre;
+ return prev;
}
}
```
@@ -353,153 +370,64 @@ public class Solution {
#### PHP
```php
-# Definition for singly-linked list.
-# class ListNode {
-# public $val;
-# public $next;
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
-
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $k
+ * @param Integer $k
* @return ListNode
*/
-
function reverseKGroup($head, $k) {
$dummy = new ListNode(0);
$dummy->next = $head;
- $prevGroupTail = $dummy;
-
- while ($head !== null) {
- $count = 0;
- $groupHead = $head;
- $groupTail = $head;
-
- while ($count < $k && $head !== null) {
- $head = $head->next;
- $count++;
- }
- if ($count < $k) {
- $prevGroupTail->next = $groupHead;
- break;
- }
+ $pre = $dummy;
- $prev = null;
+ while ($pre !== null) {
+ $cur = $pre;
for ($i = 0; $i < $k; $i++) {
- $next = $groupHead->next;
- $groupHead->next = $prev;
- $prev = $groupHead;
- $groupHead = $next;
+ if ($cur->next === null) {
+ return $dummy->next;
+ }
+ $cur = $cur->next;
}
- $prevGroupTail->next = $prev;
- $prevGroupTail = $groupTail;
+
+ $node = $pre->next;
+ $nxt = $cur->next;
+ $cur->next = null;
+ $pre->next = $this->reverse($node);
+ $node->next = $nxt;
+ $pre = $node;
}
return $dummy->next;
}
-}
-```
-
-
-
-
-
-
-### Solution 2: Recursion
-
-The time complexity is $O(n)$, and the space complexity is $O(\log_k n)$. Here, $n$ is the length of the linked list.
-
-
-
-#### Go
-
-```go
-/**
- * Definition for singly-linked list.
- * type ListNode struct {
- * Val int
- * Next *ListNode
- * }
- */
-func reverseKGroup(head *ListNode, k int) *ListNode {
- start, end := head, head
- for i := 0; i < k; i++ {
- if end == nil {
- return head
- }
- end = end.Next
- }
- res := reverse(start, end)
- start.Next = reverseKGroup(end, k)
- return res
-}
-
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
- }
- return pre
-}
-```
-
-#### TypeScript
-
-```ts
-/**
- * Definition for singly-linked list.
- * class ListNode {
- * val: number
- * next: ListNode | null
- * constructor(val?: number, next?: ListNode | null) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- * }
- */
-
-function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- if (k === 1) {
- return head;
- }
-
- const dummy = new ListNode(0, head);
- let root = dummy;
- while (root != null) {
- let pre = root;
- let cur = root;
-
- let count = 0;
- while (count !== k) {
- count++;
- cur = cur.next;
- if (cur == null) {
- return dummy.next;
- }
- }
-
- const nextRoot = pre.next;
- pre.next = cur;
-
- let node = nextRoot;
- let next = node.next;
- node.next = cur.next;
- while (node != cur) {
- [next.next, node, next] = [node, next, next.next];
+ /**
+ * Helper function to reverse a linked list.
+ * @param ListNode $head
+ * @return ListNode
+ */
+ function reverse($head) {
+ $prev = null;
+ $cur = $head;
+ while ($cur !== null) {
+ $nxt = $cur->next;
+ $cur->next = $prev;
+ $prev = $cur;
+ $cur = $nxt;
}
- root = nextRoot;
+ return $prev;
}
-
- return dummy.next;
}
```
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cpp b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cpp
new file mode 100644
index 0000000000000..76be948c05bfc
--- /dev/null
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cpp
@@ -0,0 +1,48 @@
+/**
+ * Definition for singly-linked list.
+ * struct ListNode {
+ * int val;
+ * ListNode *next;
+ * ListNode() : val(0), next(nullptr) {}
+ * ListNode(int x) : val(x), next(nullptr) {}
+ * ListNode(int x, ListNode *next) : val(x), next(next) {}
+ * };
+ */
+class Solution {
+public:
+ ListNode* reverseKGroup(ListNode* head, int k) {
+ ListNode* dummy = new ListNode(0, head);
+ ListNode* pre = dummy;
+
+ while (pre != nullptr) {
+ ListNode* cur = pre;
+ for (int i = 0; i < k; i++) {
+ cur = cur->next;
+ if (cur == nullptr) {
+ return dummy->next;
+ }
+ }
+
+ ListNode* node = pre->next;
+ ListNode* nxt = cur->next;
+ cur->next = nullptr;
+ pre->next = reverse(node);
+ node->next = nxt;
+ pre = node;
+ }
+ return dummy->next;
+ }
+
+private:
+ ListNode* reverse(ListNode* head) {
+ ListNode* dummy = new ListNode();
+ ListNode* cur = head;
+ while (cur != nullptr) {
+ ListNode* nxt = cur->next;
+ cur->next = dummy->next;
+ dummy->next = cur;
+ cur = nxt;
+ }
+ return dummy->next;
+ }
+};
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cs b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cs
index f99c0cc7b8cb3..0ed6c2559514a 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cs
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.cs
@@ -3,7 +3,7 @@
* public class ListNode {
* public int val;
* public ListNode next;
- * public ListNode(int val=0, ListNode next=null) {
+ * public ListNode(int val = 0, ListNode next = null) {
* this.val = val;
* this.next = next;
* }
@@ -11,38 +11,39 @@
*/
public class Solution {
public ListNode ReverseKGroup(ListNode head, int k) {
- ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null)
- {
- for (int i = 0; i < k && cur != null; ++i)
- {
+ var dummy = new ListNode(0);
+ dummy.next = head;
+ var pre = dummy;
+
+ while (pre != null) {
+ var cur = pre;
+ for (int i = 0; i < k; i++) {
+ if (cur.next == null) {
+ return dummy.next;
+ }
cur = cur.next;
}
- if (cur == null)
- {
- return dummy.next;
- }
- ListNode t = cur.next;
+
+ var node = pre.next;
+ var nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = ReverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = Reverse(node);
+ node.next = nxt;
+ pre = node;
}
+
return dummy.next;
}
- private ListNode ReverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null)
- {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode Reverse(ListNode head) {
+ ListNode prev = null;
+ var cur = head;
+ while (cur != null) {
+ var nxt = cur.next;
+ cur.next = prev;
+ prev = cur;
+ cur = nxt;
}
- return pre;
+ return prev;
}
}
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go
index acde72a916dfb..30e1f8517c8b3 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.go
@@ -6,28 +6,36 @@
* }
*/
func reverseKGroup(head *ListNode, k int) *ListNode {
- var dummy *ListNode = &ListNode{}
- p, cur := dummy, head
- for cur != nil {
- start := cur
+ dummy := &ListNode{Next: head}
+ pre := dummy
+
+ for pre != nil {
+ cur := pre
for i := 0; i < k; i++ {
+ cur = cur.Next
if cur == nil {
- p.Next = start
return dummy.Next
}
- cur = cur.Next
}
- p.Next, p = reverse(start, cur), start
+
+ node := pre.Next
+ nxt := cur.Next
+ cur.Next = nil
+ pre.Next = reverse(node)
+ node.Next = nxt
+ pre = node
}
return dummy.Next
}
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
+func reverse(head *ListNode) *ListNode {
+ var dummy *ListNode
+ cur := head
+ for cur != nil {
+ nxt := cur.Next
+ cur.Next = dummy
+ dummy = cur
+ cur = nxt
}
- return pre
-}
\ No newline at end of file
+ return dummy
+}
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.java b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.java
index 056e76cd21a50..9d5cf82824617 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.java
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.java
@@ -11,33 +11,35 @@
class Solution {
public ListNode reverseKGroup(ListNode head, int k) {
ListNode dummy = new ListNode(0, head);
- ListNode pre = dummy, cur = dummy;
- while (cur.next != null) {
- for (int i = 0; i < k && cur != null; ++i) {
+ dummy.next = head;
+ ListNode pre = dummy;
+ while (pre != null) {
+ ListNode cur = pre;
+ for (int i = 0; i < k; i++) {
cur = cur.next;
+ if (cur == null) {
+ return dummy.next;
+ }
}
- if (cur == null) {
- return dummy.next;
- }
- ListNode t = cur.next;
+ ListNode node = pre.next;
+ ListNode nxt = cur.next;
cur.next = null;
- ListNode start = pre.next;
- pre.next = reverseList(start);
- start.next = t;
- pre = start;
- cur = pre;
+ pre.next = reverse(node);
+ node.next = nxt;
+ pre = node;
}
return dummy.next;
}
- private ListNode reverseList(ListNode head) {
- ListNode pre = null, p = head;
- while (p != null) {
- ListNode q = p.next;
- p.next = pre;
- pre = p;
- p = q;
+ private ListNode reverse(ListNode head) {
+ ListNode dummy = new ListNode();
+ ListNode cur = head;
+ while (cur != null) {
+ ListNode nxt = cur.next;
+ cur.next = dummy.next;
+ dummy.next = cur;
+ cur = nxt;
}
- return pre;
+ return dummy.next;
}
-}
\ No newline at end of file
+}
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.php b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.php
index c1a93a0d2264f..2545456cb44eb 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.php
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.php
@@ -1,51 +1,59 @@
-# Definition for singly-linked list.
-# class ListNode {
-# public $val;
-# public $next;
-# public function __construct($val = 0, $next = null)
-# {
-# $this->val = $val;
-# $this->next = $next;
-# }
-# }
-
+/**
+ * Definition for a singly-linked list.
+ * class ListNode {
+ * public $val = 0;
+ * public $next = null;
+ * function __construct($val = 0, $next = null) {
+ * $this->val = $val;
+ * $this->next = $next;
+ * }
+ * }
+ */
class Solution {
/**
* @param ListNode $head
- * @param int $k
+ * @param Integer $k
* @return ListNode
*/
-
function reverseKGroup($head, $k) {
$dummy = new ListNode(0);
$dummy->next = $head;
- $prevGroupTail = $dummy;
+ $pre = $dummy;
- while ($head !== null) {
- $count = 0;
- $groupHead = $head;
- $groupTail = $head;
-
- while ($count < $k && $head !== null) {
- $head = $head->next;
- $count++;
- }
- if ($count < $k) {
- $prevGroupTail->next = $groupHead;
- break;
- }
-
- $prev = null;
+ while ($pre !== null) {
+ $cur = $pre;
for ($i = 0; $i < $k; $i++) {
- $next = $groupHead->next;
- $groupHead->next = $prev;
- $prev = $groupHead;
- $groupHead = $next;
+ if ($cur->next === null) {
+ return $dummy->next;
+ }
+ $cur = $cur->next;
}
- $prevGroupTail->next = $prev;
- $prevGroupTail = $groupTail;
+
+ $node = $pre->next;
+ $nxt = $cur->next;
+ $cur->next = null;
+ $pre->next = $this->reverse($node);
+ $node->next = $nxt;
+ $pre = $node;
}
return $dummy->next;
}
+
+ /**
+ * Helper function to reverse a linked list.
+ * @param ListNode $head
+ * @return ListNode
+ */
+ function reverse($head) {
+ $prev = null;
+ $cur = $head;
+ while ($cur !== null) {
+ $nxt = $cur->next;
+ $cur->next = $prev;
+ $prev = $cur;
+ $cur = $nxt;
+ }
+ return $prev;
+ }
}
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.py b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.py
index 7326ecd429f47..8e7e5585f5597 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.py
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.py
@@ -4,28 +4,28 @@
# self.val = val
# self.next = next
class Solution:
- def reverseKGroup(self, head: ListNode, k: int) -> ListNode:
- def reverseList(head):
- pre, p = None, head
- while p:
- q = p.next
- p.next = pre
- pre = p
- p = q
- return pre
+ def reverseKGroup(self, head: Optional[ListNode], k: int) -> Optional[ListNode]:
+ def reverse(head: Optional[ListNode]) -> Optional[ListNode]:
+ dummy = ListNode()
+ cur = head
+ while cur:
+ nxt = cur.next
+ cur.next = dummy.next
+ dummy.next = cur
+ cur = nxt
+ return dummy.next
- dummy = ListNode(next=head)
- pre = cur = dummy
- while cur.next:
+ dummy = pre = ListNode(next=head)
+ while pre:
+ cur = pre
for _ in range(k):
cur = cur.next
if cur is None:
return dummy.next
- t = cur.next
+ node = pre.next
+ nxt = cur.next
cur.next = None
- start = pre.next
- pre.next = reverseList(start)
- start.next = t
- pre = start
- cur = pre
+ pre.next = reverse(node)
+ node.next = nxt
+ pre = node
return dummy.next
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.ts b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.ts
index 00c33bf2d9cec..ec3b5d0399090 100644
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.ts
+++ b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution.ts
@@ -11,38 +11,38 @@
*/
function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- let dummy = new ListNode(0, head);
+ const dummy = new ListNode(0, head);
let pre = dummy;
- // pre->head-> ... ->tail-> next
- while (head != null) {
- let tail = pre;
- for (let i = 0; i < k; ++i) {
- tail = tail.next;
- if (tail == null) {
+ while (pre !== null) {
+ let cur: ListNode | null = pre;
+ for (let i = 0; i < k; i++) {
+ cur = cur?.next || null;
+ if (cur === null) {
return dummy.next;
}
}
- let t = tail.next;
- [head, tail] = reverse(head, tail);
- // set next
- pre.next = head;
- tail.next = t;
- // set new pre and new head
- pre = tail;
- head = t;
+
+ const node = pre.next;
+ const nxt = cur?.next || null;
+ cur!.next = null;
+ pre.next = reverse(node);
+ node!.next = nxt;
+ pre = node!;
}
+
return dummy.next;
}
-function reverse(head: ListNode, tail: ListNode) {
+function reverse(head: ListNode | null): ListNode | null {
+ let dummy: ListNode | null = null;
let cur = head;
- let pre = tail.next;
- // head -> next -> ... -> tail -> pre
- while (pre != tail) {
- let t = cur.next;
- cur.next = pre;
- pre = cur;
- cur = t;
+
+ while (cur !== null) {
+ const nxt = cur.next;
+ cur.next = dummy;
+ dummy = cur;
+ cur = nxt;
}
- return [tail, head];
+
+ return dummy;
}
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.go b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.go
deleted file mode 100644
index a542ee286c3b1..0000000000000
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.go
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Definition for singly-linked list.
- * type ListNode struct {
- * Val int
- * Next *ListNode
- * }
- */
-func reverseKGroup(head *ListNode, k int) *ListNode {
- start, end := head, head
- for i := 0; i < k; i++ {
- if end == nil {
- return head
- }
- end = end.Next
- }
- res := reverse(start, end)
- start.Next = reverseKGroup(end, k)
- return res
-}
-
-func reverse(start, end *ListNode) *ListNode {
- var pre *ListNode = nil
- for start != end {
- tmp := start.Next
- start.Next, pre = pre, start
- start = tmp
- }
- return pre
-}
\ No newline at end of file
diff --git a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.ts b/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.ts
deleted file mode 100644
index db9db71869596..0000000000000
--- a/solution/0000-0099/0025.Reverse Nodes in k-Group/Solution2.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Definition for singly-linked list.
- * class ListNode {
- * val: number
- * next: ListNode | null
- * constructor(val?: number, next?: ListNode | null) {
- * this.val = (val===undefined ? 0 : val)
- * this.next = (next===undefined ? null : next)
- * }
- * }
- */
-
-function reverseKGroup(head: ListNode | null, k: number): ListNode | null {
- if (k === 1) {
- return head;
- }
-
- const dummy = new ListNode(0, head);
- let root = dummy;
- while (root != null) {
- let pre = root;
- let cur = root;
-
- let count = 0;
- while (count !== k) {
- count++;
- cur = cur.next;
- if (cur == null) {
- return dummy.next;
- }
- }
-
- const nextRoot = pre.next;
- pre.next = cur;
-
- let node = nextRoot;
- let next = node.next;
- node.next = cur.next;
- while (node != cur) {
- [next.next, node, next] = [node, next, next.next];
- }
- root = nextRoot;
- }
-
- return dummy.next;
-}
diff --git a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README.md b/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README.md
index dda26e8bdaea5..fdb81fb61551c 100644
--- a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README.md
+++ b/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README.md
@@ -250,26 +250,4 @@ class Solution {
-
-
-### 方法二
-
-
-
-#### C++
-
-```cpp
-class Solution {
-public:
- int removeDuplicates(vector& nums) {
- nums.erase(unique(nums.begin(), nums.end()), nums.end());
- return nums.size();
- }
-};
-```
-
-
-
-
-
diff --git a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README_EN.md b/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README_EN.md
index 8ac890d1cd1c5..1cdc125638954 100644
--- a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README_EN.md
+++ b/solution/0000-0099/0026.Remove Duplicates from Sorted Array/README_EN.md
@@ -251,26 +251,4 @@ class Solution {
-
-
-### Solution 2
-
-
-
-#### C++
-
-```cpp
-class Solution {
-public:
- int removeDuplicates(vector& nums) {
- nums.erase(unique(nums.begin(), nums.end()), nums.end());
- return nums.size();
- }
-};
-```
-
-
-
-
-
diff --git a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/Solution2.cpp b/solution/0000-0099/0026.Remove Duplicates from Sorted Array/Solution2.cpp
deleted file mode 100644
index c1cdf93285b2c..0000000000000
--- a/solution/0000-0099/0026.Remove Duplicates from Sorted Array/Solution2.cpp
+++ /dev/null
@@ -1,7 +0,0 @@
-class Solution {
-public:
- int removeDuplicates(vector& nums) {
- nums.erase(unique(nums.begin(), nums.end()), nums.end());
- return nums.size();
- }
-};
\ No newline at end of file
diff --git a/solution/0000-0099/0027.Remove Element/README.md b/solution/0000-0099/0027.Remove Element/README.md
index 66512c052c070..e0a104c1eb0d9 100644
--- a/solution/0000-0099/0027.Remove Element/README.md
+++ b/solution/0000-0099/0027.Remove Element/README.md
@@ -205,6 +205,22 @@ var removeElement = function (nums, val) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public int RemoveElement(int[] nums, int val) {
+ int k = 0;
+ foreach (int x in nums) {
+ if (x != val) {
+ nums[k++] = x;
+ }
+ }
+ return k;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0027.Remove Element/README_EN.md b/solution/0000-0099/0027.Remove Element/README_EN.md
index e033fd507fbbd..6bbc22e167933 100644
--- a/solution/0000-0099/0027.Remove Element/README_EN.md
+++ b/solution/0000-0099/0027.Remove Element/README_EN.md
@@ -205,6 +205,22 @@ var removeElement = function (nums, val) {
};
```
+#### C#
+
+```cs
+public class Solution {
+ public int RemoveElement(int[] nums, int val) {
+ int k = 0;
+ foreach (int x in nums) {
+ if (x != val) {
+ nums[k++] = x;
+ }
+ }
+ return k;
+ }
+}
+```
+
#### PHP
```php
diff --git a/solution/0000-0099/0027.Remove Element/Solution.cs b/solution/0000-0099/0027.Remove Element/Solution.cs
new file mode 100644
index 0000000000000..1ded258b8a3eb
--- /dev/null
+++ b/solution/0000-0099/0027.Remove Element/Solution.cs
@@ -0,0 +1,11 @@
+public class Solution {
+ public int RemoveElement(int[] nums, int val) {
+ int k = 0;
+ foreach (int x in nums) {
+ if (x != val) {
+ nums[k++] = x;
+ }
+ }
+ return k;
+ }
+}
\ No newline at end of file
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/README.md b/solution/0000-0099/0030.Substring with Concatenation of All Words/README.md
index 5d9bfce5f8868..66ddc9faa66c4 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/README.md
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/README.md
@@ -100,25 +100,21 @@ class Solution:
k = len(words[0])
ans = []
for i in range(k):
- cnt1 = Counter()
l = r = i
- t = 0
+ cnt1 = Counter()
while r + k <= m:
- w = s[r : r + k]
+ t = s[r : r + k]
r += k
- if w not in cnt:
+ if cnt[t] == 0:
l = r
cnt1.clear()
- t = 0
continue
- cnt1[w] += 1
- t += 1
- while cnt1[w] > cnt[w]:
- remove = s[l : l + k]
+ cnt1[t] += 1
+ while cnt1[t] > cnt[t]:
+ rem = s[l : l + k]
l += k
- cnt1[remove] -= 1
- t -= 1
- if t == n:
+ cnt1[rem] -= 1
+ if r - l == n * k:
ans.append(l)
return ans
```
@@ -129,34 +125,31 @@ class Solution:
class Solution {
public List findSubstring(String s, String[] words) {
Map cnt = new HashMap<>();
- for (String w : words) {
+ for (var w : words) {
cnt.merge(w, 1, Integer::sum);
}
- int m = s.length(), n = words.length;
- int k = words[0].length();
List ans = new ArrayList<>();
+ int m = s.length(), n = words.length, k = words[0].length();
for (int i = 0; i < k; ++i) {
- Map cnt1 = new HashMap<>();
int l = i, r = i;
- int t = 0;
+ Map cnt1 = new HashMap<>();
while (r + k <= m) {
- String w = s.substring(r, r + k);
+ var t = s.substring(r, r + k);
r += k;
- if (!cnt.containsKey(w)) {
+ if (!cnt.containsKey(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.merge(w, 1, Integer::sum);
- ++t;
- while (cnt1.get(w) > cnt.get(w)) {
- String remove = s.substring(l, l + k);
+ cnt1.merge(t, 1, Integer::sum);
+ while (cnt1.get(t) > cnt.get(t)) {
+ String w = s.substring(l, l + k);
+ if (cnt1.merge(w, -1, Integer::sum) == 0) {
+ cnt1.remove(w);
+ }
l += k;
- cnt1.merge(remove, -1, Integer::sum);
- --t;
}
- if (t == n) {
+ if (r - l == n * k) {
ans.add(l);
}
}
@@ -173,37 +166,42 @@ class Solution {
public:
vector findSubstring(string s, vector& words) {
unordered_map cnt;
- for (auto& w : words) {
- ++cnt[w];
+ for (const auto& w : words) {
+ cnt[w]++;
}
- int m = s.size(), n = words.size(), k = words[0].size();
+
vector ans;
+ int m = s.length(), n = words.size(), k = words[0].length();
+
for (int i = 0; i < k; ++i) {
- unordered_map cnt1;
int l = i, r = i;
- int t = 0;
+ unordered_map cnt1;
while (r + k <= m) {
- string w = s.substr(r, k);
+ string t = s.substr(r, k);
r += k;
- if (!cnt.count(w)) {
+
+ if (!cnt.contains(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- string remove = s.substr(l, k);
+
+ cnt1[t]++;
+
+ while (cnt1[t] > cnt[t]) {
+ string w = s.substr(l, k);
+ if (--cnt1[w] == 0) {
+ cnt1.erase(w);
+ }
l += k;
- --cnt1[remove];
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.push_back(l);
}
}
}
+
return ans;
}
};
@@ -213,30 +211,33 @@ public:
```go
func findSubstring(s string, words []string) (ans []int) {
- cnt := map[string]int{}
+ cnt := make(map[string]int)
for _, w := range words {
cnt[w]++
}
m, n, k := len(s), len(words), len(words[0])
for i := 0; i < k; i++ {
- cnt1 := map[string]int{}
- l, r, t := i, i, 0
+ l, r := i, i
+ cnt1 := make(map[string]int)
for r+k <= m {
- w := s[r : r+k]
+ t := s[r : r+k]
r += k
- if _, ok := cnt[w]; !ok {
- l, t = r, 0
- cnt1 = map[string]int{}
+
+ if _, exists := cnt[t]; !exists {
+ cnt1 = make(map[string]int)
+ l = r
continue
}
- cnt1[w]++
- t++
- for cnt1[w] > cnt[w] {
- cnt1[s[l:l+k]]--
+ cnt1[t]++
+ for cnt1[t] > cnt[t] {
+ w := s[l : l+k]
+ cnt1[w]--
+ if cnt1[w] == 0 {
+ delete(cnt1, w)
+ }
l += k
- t--
}
- if t == n {
+ if r-l == n*k {
ans = append(ans, l)
}
}
@@ -253,33 +254,29 @@ function findSubstring(s: string, words: string[]): number[] {
for (const w of words) {
cnt.set(w, (cnt.get(w) || 0) + 1);
}
- const m = s.length;
- const n = words.length;
- const k = words[0].length;
const ans: number[] = [];
- for (let i = 0; i < k; ++i) {
+ const [m, n, k] = [s.length, words.length, words[0].length];
+ for (let i = 0; i < k; i++) {
+ let [l, r] = [i, i];
const cnt1: Map = new Map();
- let l = i;
- let r = i;
- let t = 0;
while (r + k <= m) {
- const w = s.slice(r, r + k);
+ const t = s.substring(r, r + k);
r += k;
- if (!cnt.has(w)) {
+ if (!cnt.has(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.set(w, (cnt1.get(w) || 0) + 1);
- ++t;
- while (cnt1.get(w)! - cnt.get(w)! > 0) {
- const remove = s.slice(l, l + k);
- cnt1.set(remove, cnt1.get(remove)! - 1);
+ cnt1.set(t, (cnt1.get(t) || 0) + 1);
+ while (cnt1.get(t)! > cnt.get(t)!) {
+ const w = s.substring(l, l + k);
+ cnt1.set(w, cnt1.get(w)! - 1);
+ if (cnt1.get(w) === 0) {
+ cnt1.delete(w);
+ }
l += k;
- --t;
}
- if (t === n) {
+ if (r - l === n * k) {
ans.push(l);
}
}
@@ -295,40 +292,50 @@ public class Solution {
public IList FindSubstring(string s, string[] words) {
var cnt = new Dictionary();
foreach (var w in words) {
- if (!cnt.ContainsKey(w)) {
- cnt[w] = 0;
+ if (cnt.ContainsKey(w)) {
+ cnt[w]++;
+ } else {
+ cnt[w] = 1;
}
- ++cnt[w];
}
- int m = s.Length, n = words.Length, k = words[0].Length;
+
var ans = new List();
+ int m = s.Length, n = words.Length, k = words[0].Length;
+
for (int i = 0; i < k; ++i) {
+ int l = i, r = i;
var cnt1 = new Dictionary();
- int l = i, r = i, t = 0;
while (r + k <= m) {
- var w = s.Substring(r, k);
+ var t = s.Substring(r, k);
r += k;
- if (!cnt.ContainsKey(w)) {
+
+ if (!cnt.ContainsKey(t)) {
cnt1.Clear();
- t = 0;
l = r;
continue;
}
- if (!cnt1.ContainsKey(w)) {
- cnt1[w] = 0;
+
+ if (cnt1.ContainsKey(t)) {
+ cnt1[t]++;
+ } else {
+ cnt1[t] = 1;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- --cnt1[s.Substring(l, k)];
+
+ while (cnt1[t] > cnt[t]) {
+ var w = s.Substring(l, k);
+ cnt1[w]--;
+ if (cnt1[w] == 0) {
+ cnt1.Remove(w);
+ }
l += k;
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.Add(l);
}
}
}
+
return ans;
}
}
@@ -346,47 +353,53 @@ class Solution {
function findSubstring($s, $words) {
$cnt = [];
foreach ($words as $w) {
- if (!isset($cnt[$w])) {
- $cnt[$w] = 1;
- } else {
+ if (isset($cnt[$w])) {
$cnt[$w]++;
+ } else {
+ $cnt[$w] = 1;
}
}
+
+ $ans = [];
$m = strlen($s);
$n = count($words);
$k = strlen($words[0]);
- $ans = [];
- for ($i = 0; $i < $k; ++$i) {
- $cnt1 = [];
+
+ for ($i = 0; $i < $k; $i++) {
$l = $i;
$r = $i;
- $t = 0;
+ $cnt1 = [];
while ($r + $k <= $m) {
- $w = substr($s, $r, $k);
+ $t = substr($s, $r, $k);
$r += $k;
- if (!array_key_exists($w, $cnt)) {
+
+ if (!isset($cnt[$t])) {
$cnt1 = [];
$l = $r;
- $t = 0;
continue;
}
- if (!isset($cnt1[$w])) {
- $cnt1[$w] = 1;
+
+ if (isset($cnt1[$t])) {
+ $cnt1[$t]++;
} else {
- $cnt1[$w]++;
+ $cnt1[$t] = 1;
}
- ++$t;
- while ($cnt1[$w] > $cnt[$w]) {
- $remove = substr($s, $l, $k);
+
+ while ($cnt1[$t] > $cnt[$t]) {
+ $w = substr($s, $l, $k);
+ $cnt1[$w]--;
+ if ($cnt1[$w] == 0) {
+ unset($cnt1[$w]);
+ }
$l += $k;
- $cnt1[$remove]--;
- $t--;
}
- if ($t == $n) {
+
+ if ($r - $l == $n * $k) {
$ans[] = $l;
}
}
}
+
return $ans;
}
}
@@ -396,44 +409,4 @@ class Solution {
-
-
-### 方法二
-
-
-
-#### C++
-
-```cpp
-class Solution {
-public:
- vector findSubstring(string s, vector& words) {
- unordered_map d;
- for (auto& w : words) ++d[w];
- vector ans;
- int n = s.size(), m = words.size(), k = words[0].size();
- for (int i = 0; i < k; ++i) {
- int cnt = 0;
- unordered_map t;
- for (int j = i; j <= n; j += k) {
- if (j - i >= m * k) {
- auto s1 = s.substr(j - m * k, k);
- --t[s1];
- cnt -= d[s1] > t[s1];
- }
- auto s2 = s.substr(j, k);
- ++t[s2];
- cnt += d[s2] >= t[s2];
- if (cnt == m) ans.emplace_back(j - (m - 1) * k);
- }
- }
- return ans;
- }
-};
-```
-
-
-
-
-
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/README_EN.md b/solution/0000-0099/0030.Substring with Concatenation of All Words/README_EN.md
index 02dffbb52991e..3f410f7e61eda 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/README_EN.md
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/README_EN.md
@@ -106,25 +106,21 @@ class Solution:
k = len(words[0])
ans = []
for i in range(k):
- cnt1 = Counter()
l = r = i
- t = 0
+ cnt1 = Counter()
while r + k <= m:
- w = s[r : r + k]
+ t = s[r : r + k]
r += k
- if w not in cnt:
+ if cnt[t] == 0:
l = r
cnt1.clear()
- t = 0
continue
- cnt1[w] += 1
- t += 1
- while cnt1[w] > cnt[w]:
- remove = s[l : l + k]
+ cnt1[t] += 1
+ while cnt1[t] > cnt[t]:
+ rem = s[l : l + k]
l += k
- cnt1[remove] -= 1
- t -= 1
- if t == n:
+ cnt1[rem] -= 1
+ if r - l == n * k:
ans.append(l)
return ans
```
@@ -135,34 +131,31 @@ class Solution:
class Solution {
public List findSubstring(String s, String[] words) {
Map cnt = new HashMap<>();
- for (String w : words) {
+ for (var w : words) {
cnt.merge(w, 1, Integer::sum);
}
- int m = s.length(), n = words.length;
- int k = words[0].length();
List ans = new ArrayList<>();
+ int m = s.length(), n = words.length, k = words[0].length();
for (int i = 0; i < k; ++i) {
- Map cnt1 = new HashMap<>();
int l = i, r = i;
- int t = 0;
+ Map cnt1 = new HashMap<>();
while (r + k <= m) {
- String w = s.substring(r, r + k);
+ var t = s.substring(r, r + k);
r += k;
- if (!cnt.containsKey(w)) {
+ if (!cnt.containsKey(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.merge(w, 1, Integer::sum);
- ++t;
- while (cnt1.get(w) > cnt.get(w)) {
- String remove = s.substring(l, l + k);
+ cnt1.merge(t, 1, Integer::sum);
+ while (cnt1.get(t) > cnt.get(t)) {
+ String w = s.substring(l, l + k);
+ if (cnt1.merge(w, -1, Integer::sum) == 0) {
+ cnt1.remove(w);
+ }
l += k;
- cnt1.merge(remove, -1, Integer::sum);
- --t;
}
- if (t == n) {
+ if (r - l == n * k) {
ans.add(l);
}
}
@@ -179,37 +172,42 @@ class Solution {
public:
vector findSubstring(string s, vector& words) {
unordered_map cnt;
- for (auto& w : words) {
- ++cnt[w];
+ for (const auto& w : words) {
+ cnt[w]++;
}
- int m = s.size(), n = words.size(), k = words[0].size();
+
vector ans;
+ int m = s.length(), n = words.size(), k = words[0].length();
+
for (int i = 0; i < k; ++i) {
- unordered_map cnt1;
int l = i, r = i;
- int t = 0;
+ unordered_map cnt1;
while (r + k <= m) {
- string w = s.substr(r, k);
+ string t = s.substr(r, k);
r += k;
- if (!cnt.count(w)) {
+
+ if (!cnt.contains(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- string remove = s.substr(l, k);
+
+ cnt1[t]++;
+
+ while (cnt1[t] > cnt[t]) {
+ string w = s.substr(l, k);
+ if (--cnt1[w] == 0) {
+ cnt1.erase(w);
+ }
l += k;
- --cnt1[remove];
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.push_back(l);
}
}
}
+
return ans;
}
};
@@ -219,30 +217,33 @@ public:
```go
func findSubstring(s string, words []string) (ans []int) {
- cnt := map[string]int{}
+ cnt := make(map[string]int)
for _, w := range words {
cnt[w]++
}
m, n, k := len(s), len(words), len(words[0])
for i := 0; i < k; i++ {
- cnt1 := map[string]int{}
- l, r, t := i, i, 0
+ l, r := i, i
+ cnt1 := make(map[string]int)
for r+k <= m {
- w := s[r : r+k]
+ t := s[r : r+k]
r += k
- if _, ok := cnt[w]; !ok {
- l, t = r, 0
- cnt1 = map[string]int{}
+
+ if _, exists := cnt[t]; !exists {
+ cnt1 = make(map[string]int)
+ l = r
continue
}
- cnt1[w]++
- t++
- for cnt1[w] > cnt[w] {
- cnt1[s[l:l+k]]--
+ cnt1[t]++
+ for cnt1[t] > cnt[t] {
+ w := s[l : l+k]
+ cnt1[w]--
+ if cnt1[w] == 0 {
+ delete(cnt1, w)
+ }
l += k
- t--
}
- if t == n {
+ if r-l == n*k {
ans = append(ans, l)
}
}
@@ -259,33 +260,29 @@ function findSubstring(s: string, words: string[]): number[] {
for (const w of words) {
cnt.set(w, (cnt.get(w) || 0) + 1);
}
- const m = s.length;
- const n = words.length;
- const k = words[0].length;
const ans: number[] = [];
- for (let i = 0; i < k; ++i) {
+ const [m, n, k] = [s.length, words.length, words[0].length];
+ for (let i = 0; i < k; i++) {
+ let [l, r] = [i, i];
const cnt1: Map = new Map();
- let l = i;
- let r = i;
- let t = 0;
while (r + k <= m) {
- const w = s.slice(r, r + k);
+ const t = s.substring(r, r + k);
r += k;
- if (!cnt.has(w)) {
+ if (!cnt.has(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.set(w, (cnt1.get(w) || 0) + 1);
- ++t;
- while (cnt1.get(w)! - cnt.get(w)! > 0) {
- const remove = s.slice(l, l + k);
- cnt1.set(remove, cnt1.get(remove)! - 1);
+ cnt1.set(t, (cnt1.get(t) || 0) + 1);
+ while (cnt1.get(t)! > cnt.get(t)!) {
+ const w = s.substring(l, l + k);
+ cnt1.set(w, cnt1.get(w)! - 1);
+ if (cnt1.get(w) === 0) {
+ cnt1.delete(w);
+ }
l += k;
- --t;
}
- if (t === n) {
+ if (r - l === n * k) {
ans.push(l);
}
}
@@ -301,40 +298,50 @@ public class Solution {
public IList FindSubstring(string s, string[] words) {
var cnt = new Dictionary();
foreach (var w in words) {
- if (!cnt.ContainsKey(w)) {
- cnt[w] = 0;
+ if (cnt.ContainsKey(w)) {
+ cnt[w]++;
+ } else {
+ cnt[w] = 1;
}
- ++cnt[w];
}
- int m = s.Length, n = words.Length, k = words[0].Length;
+
var ans = new List();
+ int m = s.Length, n = words.Length, k = words[0].Length;
+
for (int i = 0; i < k; ++i) {
+ int l = i, r = i;
var cnt1 = new Dictionary();
- int l = i, r = i, t = 0;
while (r + k <= m) {
- var w = s.Substring(r, k);
+ var t = s.Substring(r, k);
r += k;
- if (!cnt.ContainsKey(w)) {
+
+ if (!cnt.ContainsKey(t)) {
cnt1.Clear();
- t = 0;
l = r;
continue;
}
- if (!cnt1.ContainsKey(w)) {
- cnt1[w] = 0;
+
+ if (cnt1.ContainsKey(t)) {
+ cnt1[t]++;
+ } else {
+ cnt1[t] = 1;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- --cnt1[s.Substring(l, k)];
+
+ while (cnt1[t] > cnt[t]) {
+ var w = s.Substring(l, k);
+ cnt1[w]--;
+ if (cnt1[w] == 0) {
+ cnt1.Remove(w);
+ }
l += k;
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.Add(l);
}
}
}
+
return ans;
}
}
@@ -352,47 +359,53 @@ class Solution {
function findSubstring($s, $words) {
$cnt = [];
foreach ($words as $w) {
- if (!isset($cnt[$w])) {
- $cnt[$w] = 1;
- } else {
+ if (isset($cnt[$w])) {
$cnt[$w]++;
+ } else {
+ $cnt[$w] = 1;
}
}
+
+ $ans = [];
$m = strlen($s);
$n = count($words);
$k = strlen($words[0]);
- $ans = [];
- for ($i = 0; $i < $k; ++$i) {
- $cnt1 = [];
+
+ for ($i = 0; $i < $k; $i++) {
$l = $i;
$r = $i;
- $t = 0;
+ $cnt1 = [];
while ($r + $k <= $m) {
- $w = substr($s, $r, $k);
+ $t = substr($s, $r, $k);
$r += $k;
- if (!array_key_exists($w, $cnt)) {
+
+ if (!isset($cnt[$t])) {
$cnt1 = [];
$l = $r;
- $t = 0;
continue;
}
- if (!isset($cnt1[$w])) {
- $cnt1[$w] = 1;
+
+ if (isset($cnt1[$t])) {
+ $cnt1[$t]++;
} else {
- $cnt1[$w]++;
+ $cnt1[$t] = 1;
}
- ++$t;
- while ($cnt1[$w] > $cnt[$w]) {
- $remove = substr($s, $l, $k);
+
+ while ($cnt1[$t] > $cnt[$t]) {
+ $w = substr($s, $l, $k);
+ $cnt1[$w]--;
+ if ($cnt1[$w] == 0) {
+ unset($cnt1[$w]);
+ }
$l += $k;
- $cnt1[$remove]--;
- $t--;
}
- if ($t == $n) {
+
+ if ($r - $l == $n * $k) {
$ans[] = $l;
}
}
}
+
return $ans;
}
}
@@ -402,44 +415,4 @@ class Solution {
-
-
-### Solution 2
-
-
-
-#### C++
-
-```cpp
-class Solution {
-public:
- vector findSubstring(string s, vector& words) {
- unordered_map d;
- for (auto& w : words) ++d[w];
- vector ans;
- int n = s.size(), m = words.size(), k = words[0].size();
- for (int i = 0; i < k; ++i) {
- int cnt = 0;
- unordered_map t;
- for (int j = i; j <= n; j += k) {
- if (j - i >= m * k) {
- auto s1 = s.substr(j - m * k, k);
- --t[s1];
- cnt -= d[s1] > t[s1];
- }
- auto s2 = s.substr(j, k);
- ++t[s2];
- cnt += d[s2] >= t[s2];
- if (cnt == m) ans.emplace_back(j - (m - 1) * k);
- }
- }
- return ans;
- }
-};
-```
-
-
-
-
-
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cpp b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cpp
index abe7c53d28ef5..bcadd9565442d 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cpp
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cpp
@@ -2,37 +2,42 @@ class Solution {
public:
vector findSubstring(string s, vector& words) {
unordered_map cnt;
- for (auto& w : words) {
- ++cnt[w];
+ for (const auto& w : words) {
+ cnt[w]++;
}
- int m = s.size(), n = words.size(), k = words[0].size();
+
vector ans;
+ int m = s.length(), n = words.size(), k = words[0].length();
+
for (int i = 0; i < k; ++i) {
- unordered_map cnt1;
int l = i, r = i;
- int t = 0;
+ unordered_map cnt1;
while (r + k <= m) {
- string w = s.substr(r, k);
+ string t = s.substr(r, k);
r += k;
- if (!cnt.count(w)) {
+
+ if (!cnt.contains(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- string remove = s.substr(l, k);
+
+ cnt1[t]++;
+
+ while (cnt1[t] > cnt[t]) {
+ string w = s.substr(l, k);
+ if (--cnt1[w] == 0) {
+ cnt1.erase(w);
+ }
l += k;
- --cnt1[remove];
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.push_back(l);
}
}
}
+
return ans;
}
-};
\ No newline at end of file
+};
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cs b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cs
index e631e724cf196..ec0eb534b2344 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cs
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.cs
@@ -2,40 +2,50 @@ public class Solution {
public IList FindSubstring(string s, string[] words) {
var cnt = new Dictionary();
foreach (var w in words) {
- if (!cnt.ContainsKey(w)) {
- cnt[w] = 0;
+ if (cnt.ContainsKey(w)) {
+ cnt[w]++;
+ } else {
+ cnt[w] = 1;
}
- ++cnt[w];
}
- int m = s.Length, n = words.Length, k = words[0].Length;
+
var ans = new List();
+ int m = s.Length, n = words.Length, k = words[0].Length;
+
for (int i = 0; i < k; ++i) {
+ int l = i, r = i;
var cnt1 = new Dictionary();
- int l = i, r = i, t = 0;
while (r + k <= m) {
- var w = s.Substring(r, k);
+ var t = s.Substring(r, k);
r += k;
- if (!cnt.ContainsKey(w)) {
+
+ if (!cnt.ContainsKey(t)) {
cnt1.Clear();
- t = 0;
l = r;
continue;
}
- if (!cnt1.ContainsKey(w)) {
- cnt1[w] = 0;
+
+ if (cnt1.ContainsKey(t)) {
+ cnt1[t]++;
+ } else {
+ cnt1[t] = 1;
}
- ++cnt1[w];
- ++t;
- while (cnt1[w] > cnt[w]) {
- --cnt1[s.Substring(l, k)];
+
+ while (cnt1[t] > cnt[t]) {
+ var w = s.Substring(l, k);
+ cnt1[w]--;
+ if (cnt1[w] == 0) {
+ cnt1.Remove(w);
+ }
l += k;
- --t;
}
- if (t == n) {
+
+ if (r - l == n * k) {
ans.Add(l);
}
}
}
+
return ans;
}
}
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.go b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.go
index 21ff0def7e273..81cd58b695518 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.go
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.go
@@ -1,31 +1,34 @@
func findSubstring(s string, words []string) (ans []int) {
- cnt := map[string]int{}
+ cnt := make(map[string]int)
for _, w := range words {
cnt[w]++
}
m, n, k := len(s), len(words), len(words[0])
for i := 0; i < k; i++ {
- cnt1 := map[string]int{}
- l, r, t := i, i, 0
+ l, r := i, i
+ cnt1 := make(map[string]int)
for r+k <= m {
- w := s[r : r+k]
+ t := s[r : r+k]
r += k
- if _, ok := cnt[w]; !ok {
- l, t = r, 0
- cnt1 = map[string]int{}
+
+ if _, exists := cnt[t]; !exists {
+ cnt1 = make(map[string]int)
+ l = r
continue
}
- cnt1[w]++
- t++
- for cnt1[w] > cnt[w] {
- cnt1[s[l:l+k]]--
+ cnt1[t]++
+ for cnt1[t] > cnt[t] {
+ w := s[l : l+k]
+ cnt1[w]--
+ if cnt1[w] == 0 {
+ delete(cnt1, w)
+ }
l += k
- t--
}
- if t == n {
+ if r-l == n*k {
ans = append(ans, l)
}
}
}
return
-}
\ No newline at end of file
+}
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.java b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.java
index b0c366a84d982..98f5b91328122 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.java
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.java
@@ -1,38 +1,35 @@
class Solution {
public List findSubstring(String s, String[] words) {
Map cnt = new HashMap<>();
- for (String w : words) {
+ for (var w : words) {
cnt.merge(w, 1, Integer::sum);
}
- int m = s.length(), n = words.length;
- int k = words[0].length();
List ans = new ArrayList<>();
+ int m = s.length(), n = words.length, k = words[0].length();
for (int i = 0; i < k; ++i) {
- Map cnt1 = new HashMap<>();
int l = i, r = i;
- int t = 0;
+ Map cnt1 = new HashMap<>();
while (r + k <= m) {
- String w = s.substring(r, r + k);
+ var t = s.substring(r, r + k);
r += k;
- if (!cnt.containsKey(w)) {
+ if (!cnt.containsKey(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.merge(w, 1, Integer::sum);
- ++t;
- while (cnt1.get(w) > cnt.get(w)) {
- String remove = s.substring(l, l + k);
+ cnt1.merge(t, 1, Integer::sum);
+ while (cnt1.get(t) > cnt.get(t)) {
+ String w = s.substring(l, l + k);
+ if (cnt1.merge(w, -1, Integer::sum) == 0) {
+ cnt1.remove(w);
+ }
l += k;
- cnt1.merge(remove, -1, Integer::sum);
- --t;
}
- if (t == n) {
+ if (r - l == n * k) {
ans.add(l);
}
}
}
return ans;
}
-}
\ No newline at end of file
+}
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.php b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.php
index 666c296650ef1..db668e5e1e50a 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.php
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.php
@@ -1,4 +1,5 @@
class Solution {
+
/**
* @param String $s
* @param String[] $words
@@ -7,47 +8,53 @@ class Solution {
function findSubstring($s, $words) {
$cnt = [];
foreach ($words as $w) {
- if (!isset($cnt[$w])) {
- $cnt[$w] = 1;
- } else {
+ if (isset($cnt[$w])) {
$cnt[$w]++;
+ } else {
+ $cnt[$w] = 1;
}
}
+
+ $ans = [];
$m = strlen($s);
$n = count($words);
$k = strlen($words[0]);
- $ans = [];
- for ($i = 0; $i < $k; ++$i) {
- $cnt1 = [];
+
+ for ($i = 0; $i < $k; $i++) {
$l = $i;
$r = $i;
- $t = 0;
+ $cnt1 = [];
while ($r + $k <= $m) {
- $w = substr($s, $r, $k);
+ $t = substr($s, $r, $k);
$r += $k;
- if (!array_key_exists($w, $cnt)) {
+
+ if (!isset($cnt[$t])) {
$cnt1 = [];
$l = $r;
- $t = 0;
continue;
}
- if (!isset($cnt1[$w])) {
- $cnt1[$w] = 1;
+
+ if (isset($cnt1[$t])) {
+ $cnt1[$t]++;
} else {
- $cnt1[$w]++;
+ $cnt1[$t] = 1;
}
- ++$t;
- while ($cnt1[$w] > $cnt[$w]) {
- $remove = substr($s, $l, $k);
+
+ while ($cnt1[$t] > $cnt[$t]) {
+ $w = substr($s, $l, $k);
+ $cnt1[$w]--;
+ if ($cnt1[$w] == 0) {
+ unset($cnt1[$w]);
+ }
$l += $k;
- $cnt1[$remove]--;
- $t--;
}
- if ($t == $n) {
+
+ if ($r - $l == $n * $k) {
$ans[] = $l;
}
}
}
+
return $ans;
}
}
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.py b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.py
index e40d0de4ced8e..1a8cdfd50d6fe 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.py
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.py
@@ -5,24 +5,20 @@ def findSubstring(self, s: str, words: List[str]) -> List[int]:
k = len(words[0])
ans = []
for i in range(k):
- cnt1 = Counter()
l = r = i
- t = 0
+ cnt1 = Counter()
while r + k <= m:
- w = s[r : r + k]
+ t = s[r : r + k]
r += k
- if w not in cnt:
+ if cnt[t] == 0:
l = r
cnt1.clear()
- t = 0
continue
- cnt1[w] += 1
- t += 1
- while cnt1[w] > cnt[w]:
- remove = s[l : l + k]
+ cnt1[t] += 1
+ while cnt1[t] > cnt[t]:
+ rem = s[l : l + k]
l += k
- cnt1[remove] -= 1
- t -= 1
- if t == n:
+ cnt1[rem] -= 1
+ if r - l == n * k:
ans.append(l)
return ans
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.ts b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.ts
index 01ff17558a90c..8e7d3ccc0527a 100644
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.ts
+++ b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution.ts
@@ -3,33 +3,29 @@ function findSubstring(s: string, words: string[]): number[] {
for (const w of words) {
cnt.set(w, (cnt.get(w) || 0) + 1);
}
- const m = s.length;
- const n = words.length;
- const k = words[0].length;
const ans: number[] = [];
- for (let i = 0; i < k; ++i) {
+ const [m, n, k] = [s.length, words.length, words[0].length];
+ for (let i = 0; i < k; i++) {
+ let [l, r] = [i, i];
const cnt1: Map = new Map();
- let l = i;
- let r = i;
- let t = 0;
while (r + k <= m) {
- const w = s.slice(r, r + k);
+ const t = s.substring(r, r + k);
r += k;
- if (!cnt.has(w)) {
+ if (!cnt.has(t)) {
cnt1.clear();
l = r;
- t = 0;
continue;
}
- cnt1.set(w, (cnt1.get(w) || 0) + 1);
- ++t;
- while (cnt1.get(w)! - cnt.get(w)! > 0) {
- const remove = s.slice(l, l + k);
- cnt1.set(remove, cnt1.get(remove)! - 1);
+ cnt1.set(t, (cnt1.get(t) || 0) + 1);
+ while (cnt1.get(t)! > cnt.get(t)!) {
+ const w = s.substring(l, l + k);
+ cnt1.set(w, cnt1.get(w)! - 1);
+ if (cnt1.get(w) === 0) {
+ cnt1.delete(w);
+ }
l += k;
- --t;
}
- if (t === n) {
+ if (r - l === n * k) {
ans.push(l);
}
}
diff --git a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution2.cpp b/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution2.cpp
deleted file mode 100644
index 2e88ae3ac098f..0000000000000
--- a/solution/0000-0099/0030.Substring with Concatenation of All Words/Solution2.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-class Solution {
-public:
- vector findSubstring(string s, vector& words) {
- unordered_map d;
- for (auto& w : words) ++d[w];
- vector ans;
- int n = s.size(), m = words.size(), k = words[0].size();
- for (int i = 0; i < k; ++i) {
- int cnt = 0;
- unordered_map