diff --git a/.clang-format b/.clang-format index a11d3e8be..24ca02860 100644 --- a/.clang-format +++ b/.clang-format @@ -56,7 +56,7 @@ BreakConstructorInitializers: BeforeColon BreakInheritanceList: BeforeColon BreakStringLiterals: true ColumnLimit: 100 -CommentPragmas: '^ IWYU pragma:' +CommentPragmas: '(IWYU pragma:|SPDX-)' CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: true # Kept the below 2 to be the same as `IndentWidth` to keep everything uniform @@ -113,6 +113,7 @@ PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 200 PointerAlignment: Left +QualifierAlignment: Right RawStringFormats: - Language: Cpp Delimiters: diff --git a/.devcontainer/cuda12.0-gcc11/devcontainer.json b/.devcontainer/cuda12.0-gcc11/devcontainer.json index 1535cefbd..06f034bae 100644 --- a/.devcontainer/cuda12.0-gcc11/devcontainer.json +++ b/.devcontainer/cuda12.0-gcc11/devcontainer.json @@ -1,6 +1,6 @@ { "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-gcc11-cuda12.0-ubuntu22.04", + "image": "rapidsai/devcontainers:26.04-cpp-gcc11-cuda12.0-ubuntu22.04", "hostRequirements": { "gpu": true }, diff --git a/.devcontainer/cuda12.0-llvm14/devcontainer.json b/.devcontainer/cuda12.0-llvm14/devcontainer.json index 33804ed68..64d141aab 100644 --- a/.devcontainer/cuda12.0-llvm14/devcontainer.json +++ b/.devcontainer/cuda12.0-llvm14/devcontainer.json @@ -1,6 +1,6 @@ { "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-llvm14-cuda12.0-ubuntu20.04", + "image": "rapidsai/devcontainers:26.04-cpp-llvm14-cuda12.0-ubuntu20.04", "hostRequirements": { "gpu": true }, diff --git a/.devcontainer/cuda13.0-gcc13/devcontainer.json b/.devcontainer/cuda13.0-gcc13/devcontainer.json deleted file mode 100644 index 0ae541055..000000000 --- a/.devcontainer/cuda13.0-gcc13/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-gcc13-cuda13.0-ubuntu24.04", - "hostRequirements": { - "gpu": true - }, - "initializeCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ${localWorkspaceFolder}/.{aws,cache,config}" - ], - "containerEnv": { - "SCCACHE_REGION": "us-east-2", - "SCCACHE_BUCKET": "rapids-sccache-devs", - "AWS_ROLE_ARN": "arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs", - "HISTFILE": "${containerWorkspaceFolder}/.cache/._bash_history", - "DEVCONTAINER_NAME": "cuda13.0-gcc13", - "CUCO_CUDA_VERSION": "13.0", - "CUCO_HOST_COMPILER": "gcc", - "CUCO_HOST_COMPILER_VERSION": "13" - }, - "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/.config,target=/home/coder/.config,type=bind,consistency=consistent" - ], - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd" - ], - "settings": { - "clangd.arguments": [ - "--compile-commands-dir=${workspaceFolder}/build/latest" - ] - } - } - }, - "name": "cuda13.0-gcc13" -} diff --git a/.devcontainer/cuda13.0-llvm20/devcontainer.json b/.devcontainer/cuda13.0-llvm20/devcontainer.json deleted file mode 100644 index 76936f8f2..000000000 --- a/.devcontainer/cuda13.0-llvm20/devcontainer.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-llvm20-cuda13.0ext-ubuntu24.04", - "hostRequirements": { - "gpu": true - }, - "initializeCommand": [ - "/bin/bash", - "-c", - "mkdir -m 0755 -p ${localWorkspaceFolder}/.{aws,cache,config}" - ], - "containerEnv": { - "SCCACHE_REGION": "us-east-2", - "SCCACHE_BUCKET": "rapids-sccache-devs", - "AWS_ROLE_ARN": "arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs", - "HISTFILE": "${containerWorkspaceFolder}/.cache/._bash_history", - "DEVCONTAINER_NAME": "cuda13.0-llvm20", - "CUCO_CUDA_VERSION": "13.0", - "CUCO_HOST_COMPILER": "llvm", - "CUCO_HOST_COMPILER_VERSION": "20" - }, - "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", - "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", - "mounts": [ - "source=${localWorkspaceFolder}/.aws,target=/home/coder/.aws,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/.cache,target=/home/coder/.cache,type=bind,consistency=consistent", - "source=${localWorkspaceFolder}/.config,target=/home/coder/.config,type=bind,consistency=consistent" - ], - "customizations": { - "vscode": { - "extensions": [ - "llvm-vs-code-extensions.vscode-clangd" - ], - "settings": { - "clangd.arguments": [ - "--compile-commands-dir=${workspaceFolder}/build/latest" - ] - } - } - }, - "name": "cuda13.0-llvm20" -} diff --git a/.devcontainer/cuda12.9-gcc13/devcontainer.json b/.devcontainer/cuda13.1-gcc14/devcontainer.json similarity index 86% rename from .devcontainer/cuda12.9-gcc13/devcontainer.json rename to .devcontainer/cuda13.1-gcc14/devcontainer.json index a33105965..81f7c4c8f 100644 --- a/.devcontainer/cuda12.9-gcc13/devcontainer.json +++ b/.devcontainer/cuda13.1-gcc14/devcontainer.json @@ -1,6 +1,6 @@ { "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-gcc13-cuda12.9-ubuntu24.04", + "image": "rapidsai/devcontainers:26.04-cpp-gcc14-cuda13.1-ubuntu24.04", "hostRequirements": { "gpu": true }, @@ -14,10 +14,10 @@ "SCCACHE_BUCKET": "rapids-sccache-devs", "AWS_ROLE_ARN": "arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs", "HISTFILE": "${containerWorkspaceFolder}/.cache/._bash_history", - "DEVCONTAINER_NAME": "cuda12.9-gcc13", - "CUCO_CUDA_VERSION": "12.9", + "DEVCONTAINER_NAME": "cuda13.1-gcc14", + "CUCO_CUDA_VERSION": "13.1", "CUCO_HOST_COMPILER": "gcc", - "CUCO_HOST_COMPILER_VERSION": "13" + "CUCO_HOST_COMPILER_VERSION": "14" }, "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", @@ -38,5 +38,5 @@ } } }, - "name": "cuda12.9-gcc13" + "name": "cuda13.1-gcc14" } diff --git a/.devcontainer/cuda12.9-llvm18/devcontainer.json b/.devcontainer/cuda13.1-llvm21/devcontainer.json similarity index 85% rename from .devcontainer/cuda12.9-llvm18/devcontainer.json rename to .devcontainer/cuda13.1-llvm21/devcontainer.json index 6140f6007..1f95f76d7 100644 --- a/.devcontainer/cuda12.9-llvm18/devcontainer.json +++ b/.devcontainer/cuda13.1-llvm21/devcontainer.json @@ -1,6 +1,6 @@ { "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-llvm18-cuda12.9-ubuntu22.04", + "image": "rapidsai/devcontainers:26.04-cpp-llvm21-cuda13.1-ubuntu24.04", "hostRequirements": { "gpu": true }, @@ -14,10 +14,10 @@ "SCCACHE_BUCKET": "rapids-sccache-devs", "AWS_ROLE_ARN": "arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs", "HISTFILE": "${containerWorkspaceFolder}/.cache/._bash_history", - "DEVCONTAINER_NAME": "cuda12.9-llvm18", - "CUCO_CUDA_VERSION": "12.9", + "DEVCONTAINER_NAME": "cuda13.1-llvm21", + "CUCO_CUDA_VERSION": "13.1", "CUCO_HOST_COMPILER": "llvm", - "CUCO_HOST_COMPILER_VERSION": "18" + "CUCO_HOST_COMPILER_VERSION": "21" }, "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", @@ -38,5 +38,5 @@ } } }, - "name": "cuda12.9-llvm18" + "name": "cuda13.1-llvm21" } diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 0ae541055..81f7c4c8f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "shutdownAction": "stopContainer", - "image": "rapidsai/devcontainers:25.12-cpp-gcc13-cuda13.0-ubuntu24.04", + "image": "rapidsai/devcontainers:26.04-cpp-gcc14-cuda13.1-ubuntu24.04", "hostRequirements": { "gpu": true }, @@ -14,10 +14,10 @@ "SCCACHE_BUCKET": "rapids-sccache-devs", "AWS_ROLE_ARN": "arn:aws:iam::279114543810:role/nv-gha-token-sccache-devs", "HISTFILE": "${containerWorkspaceFolder}/.cache/._bash_history", - "DEVCONTAINER_NAME": "cuda13.0-gcc13", - "CUCO_CUDA_VERSION": "13.0", + "DEVCONTAINER_NAME": "cuda13.1-gcc14", + "CUCO_CUDA_VERSION": "13.1", "CUCO_HOST_COMPILER": "gcc", - "CUCO_HOST_COMPILER_VERSION": "13" + "CUCO_HOST_COMPILER_VERSION": "14" }, "workspaceFolder": "/home/coder/${localWorkspaceFolderBasename}", "workspaceMount": "source=${localWorkspaceFolder},target=/home/coder/${localWorkspaceFolderBasename},type=bind,consistency=consistent", @@ -38,5 +38,5 @@ } } }, - "name": "cuda13.0-gcc13" + "name": "cuda13.1-gcc14" } diff --git a/.devcontainer/launch.sh b/.devcontainer/launch.sh index 157a49bef..86c38bd67 100755 --- a/.devcontainer/launch.sh +++ b/.devcontainer/launch.sh @@ -1,18 +1,6 @@ #! /usr/bin/env bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. launch_devcontainer() { diff --git a/.devcontainer/make_devcontainers.sh b/.devcontainer/make_devcontainers.sh index 2df603c4e..8cf297347 100755 --- a/.devcontainer/make_devcontainers.sh +++ b/.devcontainer/make_devcontainers.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # This script parses the CI matrix.yaml file and generates a devcontainer.json file for each unique combination of # CUDA version, compiler name/version, and Ubuntu version. The devcontainer.json files are written to the diff --git a/.devcontainer/verify_devcontainer.sh b/.devcontainer/verify_devcontainer.sh index 439be1b5a..9a5ca7cf4 100755 --- a/.devcontainer/verify_devcontainer.sh +++ b/.devcontainer/verify_devcontainer.sh @@ -1,4 +1,6 @@ #!/bin/bash +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 function usage { echo "Usage: $0" diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index d2be5c900..cbed4fee7 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + blank_issues_enabled: true contact_links: - name: Question diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index a96f6afb6..5f1ddbc1d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + name: Enhancement description: Suggest an idea to improve cuCollections title: '[ENHANCEMENT]: ' diff --git a/.github/actions/compute-matrix/action.yml b/.github/actions/compute-matrix/action.yml index fbbe49b54..69803205b 100644 --- a/.github/actions/compute-matrix/action.yml +++ b/.github/actions/compute-matrix/action.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. name: Compute Matrix description: "Compute the matrix for a given matrix type from the specified matrix file" diff --git a/.github/actions/compute-matrix/compute-matrix.sh b/.github/actions/compute-matrix/compute-matrix.sh index db79721d1..b58f10a70 100755 --- a/.github/actions/compute-matrix/compute-matrix.sh +++ b/.github/actions/compute-matrix/compute-matrix.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. set -euo pipefail diff --git a/.github/actions/configure_cccl_sccache/action.yml b/.github/actions/configure_cccl_sccache/action.yml index 458669688..62521fb2c 100644 --- a/.github/actions/configure_cccl_sccache/action.yml +++ b/.github/actions/configure_cccl_sccache/action.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. name: Set up AWS credentials and environment variables for sccache description: "Set up AWS credentials and environment variables for sccache" diff --git a/.github/copy-pr-bot.yaml b/.github/copy-pr-bot.yaml index 895ba83ee..214845ccc 100644 --- a/.github/copy-pr-bot.yaml +++ b/.github/copy-pr-bot.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + # Configuration file for `copy-pr-bot` GitHub App # https://docs.gha-runners.nvidia.com/apps/copy-pr-bot/ diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml index 046cb9cfa..ad79a8c35 100644 --- a/.github/workflows/build-and-test.yml +++ b/.github/workflows/build-and-test.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. name: build and test @@ -47,8 +35,8 @@ jobs: uses: ./.github/workflows/run-as-coder.yml with: name: Test ${{inputs.test_name}} - runner: linux-${{inputs.cpu}}-gpu-v100-latest-1 + runner: linux-${{inputs.cpu}}-gpu-h100-latest-1 image: ${{inputs.container_image}} command: | nvidia-smi - ${{ inputs.test_script }} \ No newline at end of file + ${{ inputs.test_script }} diff --git a/.github/workflows/dispatch-build-and-test.yml b/.github/workflows/dispatch-build-and-test.yml index b37da8ec7..18c3d0858 100644 --- a/.github/workflows/dispatch-build-and-test.yml +++ b/.github/workflows/dispatch-build-and-test.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. name: Dispatch build and test diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4b6b5aba1..8e009d425 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # This is the main workflow that runs on every PR and push to main name: pr diff --git a/.github/workflows/run-as-coder.yml b/.github/workflows/run-as-coder.yml index 573ef134a..e1ce95f03 100644 --- a/.github/workflows/run-as-coder.yml +++ b/.github/workflows/run-as-coder.yml @@ -1,17 +1,5 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. name: Run as coder user diff --git a/.github/workflows/verify-devcontainers.yml b/.github/workflows/verify-devcontainers.yml index 2ba13a8a9..c3c930cfd 100644 --- a/.github/workflows/verify-devcontainers.yml +++ b/.github/workflows/verify-devcontainers.yml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + name: Verify devcontainers on: diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 229963b86..d670586f0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,3 +1,6 @@ +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + ci: autofix_commit_msg: | [pre-commit.ci] auto code formatting @@ -15,6 +18,17 @@ repos: - id: clang-format types_or: [c, c++, cuda] args: ['-fallback-style=none', '-style=file', '-i'] + - repo: https://github.com/rapidsai/pre-commit-hooks + rev: v1.6.0 + hooks: + - id: verify-copyright + args: [--fix, --spdx] + exclude: ^[.]github/ISSUE_TEMPLATE/bug_report[.]yml$ + files: | + (?x) + [.](cmake|cpp|cu|cuh|h|hpp|inl|sh|py|yaml|yml)$| + CMakeLists[.]txt$| + ^include/cuco/detail/__config$ - repo: local hooks: - id: check-doxygen diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a068b424..7f9886e12 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,24 +1,15 @@ #============================================================================= -# Copyright (c) 2018-2025, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on #============================================================================= cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR) -set(rapids-cmake-version 25.12) +set(rapids-cmake-branch "main") if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/CUCO_RAPIDS.cmake) file(DOWNLOAD - https://raw.githubusercontent.com/rapidsai/rapids-cmake/release/${rapids-cmake-version}/RAPIDS.cmake + https://raw.githubusercontent.com/rapidsai/rapids-cmake/${rapids-cmake-branch}/RAPIDS.cmake ${CMAKE_CURRENT_BINARY_DIR}/CUCO_RAPIDS.cmake) endif() include(${CMAKE_CURRENT_BINARY_DIR}/CUCO_RAPIDS.cmake) @@ -91,7 +82,7 @@ target_compile_features(cuco INTERFACE cxx_std_17 cuda_std_17) ################################################################################################### # - Optionally download RoaringFormatSpec test data ----------------------------------------------- -option(CUCO_DOWNLOAD_ROARING_TESTDATA "Download RoaringFormatSpec test data" ON) +option(CUCO_DOWNLOAD_ROARING_TESTDATA "Download RoaringFormatSpec test data" ${default_build_option_state}) include(${CMAKE_CURRENT_LIST_DIR}/cmake/roaring_testdata.cmake) ################################################################################################### diff --git a/README.md b/README.md index 0357c97e8..fa5885281 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,5 @@ # cuCollections - - - -
ExamplesDoxygen Documentation (TODO)
- `cuCollections` (`cuco`) is an open-source, header-only library of GPU-accelerated, concurrent data structures. Similar to how [Thrust](https://github.com/thrust/thrust) and [CUB](https://github.com/thrust/cub) provide STL-like, GPU-accelerated algorithms and primitives, `cuCollections` provides STL-like concurrent data structures. `cuCollections` is not a one-to-one, drop-in replacement for STL data structures like `std::unordered_map`. Instead, it provides functionally similar data structures optimized for efficient use with GPUs. @@ -212,37 +207,37 @@ We plan to add many GPU-accelerated, concurrent data structures to `cuCollection `cuco::static_set` is a fixed-size container that stores unique elements in no particular order. See the Doxygen documentation in `static_set.cuh` for more detailed information. #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJx9VgtvIjcQ_ivTraqSu-UVKTqJPFSapCq6EzmF3J1OpSLGa1grxqZ-wFHEf--MvcvjHk0kYD3jmW9mvs_rbeaEc9Jol_X-2mayyHrdPFNMzwObi6yX8VCwLM-cCZbTc_vVWMMruDXLjZXz0kODn8F55_y8iR8XOQw_Du4Gfbh9eHz_8Nh_GjwMW7QhbnonudBOFBB0ISz4UkB_yTh-VZYcPgpLaOC81YEGOYyzyjbOzi5jlI0JsGAb0MZDcALDSAczqQSIL1wsPUgN3CyWSjLNBaylL2OqKk6EA5-rIGbqGfoz3LHEp9mxJzC_h05_pffLXru9Xq9bLMJuGTtvq-Ts2u8Gt_fD0X0Toe-3fdAK2wtW_BOkxcKnG2BLRMbZFPEqtgZjgc2tQJs3hHxtpZd6noMzM79mVsQ4hXTeymnwJ82rcWL9xw7YPqaxcf0RDEbjDH7vjwajPMb5NHj68-HDE3zqPz72h0-D-xE8POKwhncDGhU-_QH94Wd4Oxje5SCwdZhKfFlaqgKhSmqrKFIPR0KcwJiZBMstBZczyaGmEczNSliNZcFS2IVMhEOQRYyj5EJ65uPaN8XFVO2xHuufpeYqFAKueOCm7WgLnzjhWzyUN197FAw9ivYsaE6Rmbo5tvvSBufbhVhhlslKcG9sq_yeizJznJb6vtHhXAWSrPV1fmlwHIItTjbFOl30bL9K_Pgt8rZE78k0qJeJ-MKwwwIrSuaplWIGd2KBvfGWeYEdctTRiqmHJuC8KQKOm6JB__3AHYT3hK5kjcuApEKOqA3SbWUSE2fWLGLAuBkHE50CaZWmWhiancHhVWNS8kXAs8T5WP-MxIhZnrnRpCb3HCkIhApxvojNAQpOUmqP0pO6sTKyOBvrLa5jKsrwVmzgGmH5S2oSQLsN94ul34BTxifgVhAZhfZJTfTbrvD3OKNFqYXCFqyYCsK1qG7kZXoCV5qgcBN2TSicOG5ygZdVHl8yTx3Ac0UgWcFwHiwJEo8b-l4GDwXzjCqJODmNhKQBgiBOsMxJDQGLaHYPNQzDYkohUy9I6AgiNU-QBHCMRa_n5L9i4o_i6rCYxA3XcNH5tdPpHCLe4vmGWgdOB5HEBk2Zq5SPvr-AMgwnx4jWtIMFzHkITNZJsmLsTuvi8rsgDtGvk5ELqRp7VO3jOGfH2IirgdPAIgfiCYzdVYJh0Oc66nM11TT6ZheYixSM7UydqvsZm06qR4B7xl_hFG4owbaOmFc--4Fsvx3NbneEFCWKTSSUScf7EW07OXRzOM-h1cpB7mhD0nyvd3JoJBC0Z9-Y-Jrae9ehG1EGUzFH4p_lSRRCF_S7c9S8QWQFdk6phATFYJIymSup2jgqPPQSf34Y9ijmCHHSmUFKRr0E5X9cztQYdYOeeA6fFFR3rBT8BeTsgI80WekeCYh6icfSAWZ9JvxP_TFbbTpKhncBOdskZe7zlWyFZ5kQOm0jV8JcMRbdIuRJNCJv6yrJYGaNk1R15goGvTOIX0h0WRBb_Ga7q-FgyY3T4GewrVRh8Gi4usITaBQ4xxflT_BHzF5jbo0xRnYJuxTKCh-sBlIzruDdii4r-BqwhytYplecd88vQhfNZunT_SxrYr5r_vp19w00meXltVtM3nSg2URVe_zwWIkomootpvHSpuT0KCbnXOHiKt2wcAFFql-yXV7bUTsndmRGtvs7_v8HAzB-mg==)) -- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJztWG1v4zYS_itTFcU5G_klQfdaeJPgfMkWNVokRZJtUdSFSlO0xYssqiJlxw3y3-8ZUrLsTbZov9ynS4DEEofPPPPCmaGfIqus1aaw0fiXp0in0fgkjnJRLGuxVNE4knUqojiypq4kPw_fzAp6Q5em3FZ6mTnqySM6HZ2e9vHnbUzXP06vphO6vLn94eZ2cj-9uR7wBr_pey1VYVVKdZGqilymaFIKiX_NSkw_qorZ0OlgRD0WmEXN2iw6eudRtqamldhSYRzVVgFGW1roXJF6lKp0pAuSZlXmWhRS0Ua7zKtqcDwd-rkBMXMnIC-wo8TTYl-ShNtR55_MuXI8HG42m4HwtAemWg7zIGyH308v31_fve-D-m7bhyKHe6lSv9e6guHzLYkSzKSYg28uNmQqEstKYc0ZZr6ptNPFMiZrFm4jKuVxUm1dpee1O3BeyxP27wvAfaKA4yZ3NL2bRfTvyd30LvY4P03vv735cE8_TW5vJ9f30_d3dHOLYF1fTTlUePqGJtc_03fT66uYFFwHVeqxrNgKUNXsVpUGH94pdUBjYQItWyqpF1pSm0a0NGtVFTCLSlWtdEg4kEw9Tq5X2gnn370wzqsazopZ8bkuZF6nis5kLc3Q8haZWOUGss4uPpZIBSTS4aIuJCOL_GJ_3WVVbd0wVWtoSdZKOlMNstdEcrNEtPLXFy3iqpBkgxf6jYGlILhWybIydWlfioBeqhYHsNogikqsvOjwTcihf_ncbqhWaqEqVpmoR4FgKBgfpOaVVgu6Uiu40UG1gjMtO79J6s5fDVbfauic_DC13QndEyors4YAwoSTVvTNxsdvp582mZYZSWTaXPE5bBLYwWzp_KnziKxamoJPGQK7qMzKryHTAwsspntBHg6BYVXloJZZgPyD2loGNniVCZv597VlNqbg_TtXk3e1z0OF80lO2IcZGMFP8Aeiti1VIVYKmetu1SKm3YtpUdZuytyRCPB-kixzMxd5ktDa6JQkom1WyX5YA81egGJO8SGK541j7NLx2Oo_VOKoOJoVTzCVWKdFCQH7JZ3Ty2x5x74gdpx1fPxI1LBfLhNGwo6gdTxu3jTiXshxtgBzOR7zxzQpReU0n4GzRjoOixkyLU3muZEPF73wRttk_3Xv6KhBhvv_-SUs8IQoB9-E603Kmpb4f6VXg0dE228LD0PqyHUAOn2kw59z6u3taiCm6SMejimw8U9HB4iMiQyEqT2GPINvybuWOBSDJjjsgJje9HwKHbNybxFL8a7j831T_MLzrHhm9L-dNHvvb2r3F7PJHwv793Io_ggf6Y6i-f_M-h9k1tyYvCEKe9qqlkKR70JtOP8s6xbklweNMypRwBd0fk4jaAmh_AUbfgXmvop3nJh_IW3hDIw1uuhxnrU5EWrld2rLoIVrbESlfb8q3ZZsbhyqfKVQ3LnRq8KFSYU_V2t8nkX8EjxyTBNrkdfKDug-w3LzRDYzdZ5yJ7AqRzfFJlvLrNHjMuG4EWBmUxgEyEhZVzzsYJTj_8hmSoUT3AY8zy47FVNM4MmkpQAj-iedDdf1as6QTZ9AmoJEOP6Kx4uDw9PhFvUq8RvO6e3oH6PRqEO8xOyIOQqtDedIw0FzYZupCrJfwPcipYXgkWF3NDpgXk3CKrBHg7fvXiXRoZ-HRal03tuxGu7jHO1z4-ZeSw5Y1wz9iAsX50oAeRa12IhWCG7IgP4JCesbsvcqO4xar3rX81wFmrsZ4AyxuGANTy1i3MjswvL0MkDPz3t8keVwJffyMCntAvU0iukkptOYBoOYtE_vMFWNxwdjWSDBe3buCaeplW6h_XkbzNUS6X8U-x0DVaT8ebTnwmkYL9gNC13BX5nIF-2Q1M0afmRSzgevayivqGiecND3onf6ukKrEPx0p9ELh9iIpinQ5YerCRaqLiafmDzOzs5OTr-GE0-_vri46HW9DyNaL0QpCP450fhTtO_gex4feZpCJahz9-kQcWG8CNXrIEhtFmRKPnDtE3kejOZqU5gNdTUU1aBx-YCujVOhaGwUlcJysneDp18QOdfPLZ-BXZFR9Ftbg3-j4C5M9bso0FJhBBV53LjcbQxfaVbGV74W3cz_o_h4tSnADb2bX3HBakdbBhW4dy38TtdOq61ey7tQ5ngt3_IVja82C2_rXGVirTtu93yDTQ3qKN9p-YIIw4BK4CnDHYvJhqxgSS_Hd6pclIdZEsz_KDcOs6IV-igvukSIQyTbhb1A4nauF9s2Ak0sYYuCSaoI21h0r1FCzIMmfhHVrs0gXjCL3oGqVnNzbPkWx_UI5RGNDtXFbZ-ed4MDWukhOHfQUEsNwnR2hkp4V0uJq-tn9I3X3nIezIAR-abKUJVydVUQ9wC8ieKIvz5Al666L0WiYi3lyenb-gTLpnThG5OoD33n8vj45Cvqi0pm53aVfDWifh-9wOGPgyUq7ediNfdfo-R6vocppczxch2-88ALlPbiIXqO23XE62Adpy56_tX__hezoiBz)) -- [One single storage for multiple sets](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_subsets_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWQtvGkkS_iu9nHTCNgbjXC5ZbKP12U4ObWTnYmdXq3U028w00Od5sN09YBbx3--rfgzDI1Fy2pOOCBNmqquqv_rq0cOyoYXWssh1o_frsiGTRq_baqQ8H5d8LBq9RlwmvNFq6KJUMX3vHD7m7JBdFdOFkuOJYc34gJ2enL44xp-XLXb70-B6cMmu7j68v_tw-TC4u23TArvonYxFrkXCyjwRipmJYJdTHuPD32mxn4Qib9hp-4Q1SeCx4e89Ng7OrJZFUbKML1heGFZqATVSs5FMBRPPsZgaJnMWF9k0lTyPBZtLM7GmvB7rDvvFKymGhkOeY8UU30Z1ScZN5Tq9JsZMe53OfD5vc-t2u1DjTuqEdefd4Orm9v7mGK5Xyz7mKeBlSvxeSoWNDxeMT-FZzIfwN-VzVijGx0rgninI87mSRubjFtPFyMy5ElZPIrVRcliaDfCCn9h_XQDw8RzAXd6zwf1jg_3j8n5w37J6fh48_PPu4wP7-fLDh8vbh8HNPbv7gGDdXg8oVPj2hl3e_sJ-HNxet5gAdDAlnqeKdgFXJcEqEofhvRAbbowK55aeiliOZMwCjdi4mAmVY1tsKlQmHeHgZGL1pDKThht7bWdz1lTnMX_M_yLzOC0Twc7jMi46mpbEkRYmUmLUjstJf1sq4ZBKOlwpvujvvTUq85gM83TjvpmoUptOImZwIpqJ2BSqPdkngqCWsdh_T8c8b-94VRTAAK7PRDRWRTnVOyI8HRdgwSTb9Bn-JmK0cU0WiLrgm4J5mQklY6u0c-h4-IPND78fXQ6Bmo7EM0c4BaBzMkMlxYhdiwyBMHBRaDYp5sRLSrMiF2xYpk8Ma5kGIBRY3IvhgBEsK1MjoY157RRdijZIkVn1Mk_kTCYlT5lHgOI9k9y7dawlvEco2eX7gV4XjYcC8gYU-QNG4JtawB3YBj0t0XiaLth8InLo4SlxzGY8SAv6AGWWcMMZpIrY2rSOBW-thQnXE3K5hTIwVRyEiOGkLtLSyst8VqQzgCGAVrEgC5xpfKQBEA8G8X8scrs3CHkgXK48UJESxPTcAksMzynraZEWU64siG5_W87SvqoLJC9QfFCwcipdQrWtcmsFhGND1K14IsXMlZuSPLXmUirXc2GLdl7kx8XcZiQhbhZTsUb8B1RW4T12FKEKQ4aTihvkyrRU0wKVD9RIF202MCRGVVnmRiCPbUnTlkIwn4GrVr0nBc8Nm6MCQyYprEQwVvF_nfu8JKaRbSpGLB5HmvhArwv2-gwfnU7nnKHvfLzGn3WOsbeUY1TYX8MGqJposjgBrtQwCEgXpx0bwzJ-Qm2xdi5Yt7JxW2ZDlChohGxcKiWwEZ0WoLzTamG3mp3BHc23bP2C5pOzHc0iFRnUatcTtFDGEuH3UqgFweGC-iQWEUUOSoB40PKjWNh4BqmpKob4jDQaVib8AgDLqIr2esgYwVXkpc49stQt9r_cKhQijhSKKHWiUETPg0P9fnDmgawRU1WRanb1lo0Vz8uUI7yLz5r46pc1YeuM8565PbKm29SfZCAon7V1G1QtqXPTvnHtABW203G7RNhsNajlqi8MIRL-a4iZQzLQzN2rIGzV-dc_c3be7c_gUH9CJm_bw_Vgkz5yDojqvvR6QeIsLK2WhFdwd7Prrt39VqypA_d6LkFATeRr5NrAf6kJzbHXw5TF08gUayJ-s7Y92fLNOrZxr7LhHp1zHSQX03tX82yT2pvtkQcmiuoFcL1pO93UeHPbd8ou2LLbYi9aDEP5qxb7vsW6-N7FhS6udHGp-_3KE-smm5qFL2IYOeEkTXyoQK6Y0f8V9ZPHBl1EcqUYK2c8LYWm7oPb_huV-zJNqAlpFLGYFOgynjgzZsINVXrM7mhPqHQx6icNvRjp6XNaGus76n5V29Z7FuRkRDeCE9jjcfdsY85xM8zAoghvauCiRBbVcFI1xto4xuw4VnXBG6rgu53EjTuaSWhB_nmNNmDSW_3t9re65VpjpTafMZ88mr0vqFMqijv1PxtJqiNeZzH8NxDUvglG0TgthuB3xGaFDNaagWSHlVoUpSVRlvJc45wCDMeUvzuDp0WOsXV3YoamRIiOkZr4bxLBYSNtbQ-Nwd10eTtEpXvqN90VqaP65eaBPa6B-OwtDYxuS00MEVdvD2gYFM9bxmXyDNtNu_paZu1nIGa_DJJnfDny7dR-O2CdMATUd6H4PJQmSsQLdtiswD4iA84nK-vwq8Qv6ovbSqAKJJFDrFC66aqfW3PgTWJrjmg24tSzDSZayzN7DMJ-7SiKtucW0iIao5qQYRIm0folQ-PHx9HRAVu6SrPpWdsHmgLSsoT6VX5y-1g95qs97L9MU68D2We57-fCUVG6I9eXCK6EDYcqQb1tlhNQQ67dGdPu0bceS2wBLq9PdUhwHAKRKfyL7vyPsmOE8P3f58YW-f9U9n-R-4TOtzGfVtR4_0FojH84D2DcpzIqR4h79fxkM9r-UBDIx6JIT9BkEoSK8kBZVdY3aGnWtskukCHICi_i8mXlVSwwc7p5vhn8-orUguv_ora6maAb_jrBWmis49BYB61t-bUnJT06caES2s4uGpgcwX2Rr_GAMVNkMr5Tzb-6nbbYoTP63cVOwn9u85_BrvJp4JzxUCImGt6n7KS1Jz9pBKiSkzndIQY-JFMFoEfNx8Z9GcdC6-_YG-vxhrJwjGk_wsfGgQ9eqFoUqQwn2GZISni5PgKFTo0woFS4rptsJo2dCvIyo0PU30OzuVkf6ewDvglHZeMskaORsEc1ehYntB1MkD97NLrFNru0OynRSFdNWva_dDNCnGC9vzwFiPX3i63337beLzfeq3oKY4qSSTDtrLqnT3Wz_aZjQ0247Ue0JhzaSAe3op4RkDhjR0eyIkddDT3iQFWMhhxVys_6Mddm03wYiF1pyPiTiJwS8YyDvznfN0TvTsXNOtBE8YOK5PTxuc2DHCNiBm0VhQ0z7UmtMGFuHclnxDCzz6aKDDOlCEvslGYKw1NCIRCNpt7KoMfLn-sjbdl1crbGsyZUA7WOIf1FhDYwrus7uqiLY-O-cHgnf5W0q0_2xFUtqgNDg_S-PVBS26MnqO3mbEZhDEW5woBYvN3bSF8EfZHTdBGk25YINXyv3NO-_Q_ASu0fcaMI-PytDOn1Idcye3389BBt-dDy7KKTTuTP1GBCdbJbrlrVKYgegRKvlnTh3n01y7xM06lRq9Uq1IZBjn4N6P_wD-CCP9VPBGMMABh2whmHSLF2G4NYWN7cPYsEjOq0rahezR9rIP1j0xpMX-LXTtLunO1rF5ab9GptbIIKfPMAFKvo9mnlCRic3KwCIdmDpaWLS4VALSS7qCBIy9q75uRqI9ndE3N6rlR74l7Dr2q8uhpqdqfw2pnLdkR79fz8nI69p6_7_X5zrcbj0B4LUzupvJHbLSwoo37_tapIXglTqtxWDmyx0WpQKcK4oNa_szXyWRx3T1-WXdymR9z2R7jGMShwER8ddV-xY67iyYXOolcn7PgYzckc2wqbiOQ45dnQ_jKXymFNZxzHKS7O3M9ouIBBPn9qrFrhPoK3cR-IN1af7L__ALzCdP8=)) -- [Using shared memory as storage](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/shared_memory_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWA1vGzcS_SvEHgrIqSzZwRUtFNk41fbhhOTsg-0kKKpiTXEpiefVUuVypaiG__u9GXK1K9nppQ7iRPyYGb55fDPUU1LqsjS2KJPBr0-JyZLBaTfJZTGv5Fwng0RVmUy6SWkrp-hz_82kEG_EhV1tnZkvvOioI_H25O3fj_Hrh664_jS-HI_Exc3tf25uR_fjm-sebeBNH4zSRakzURWZdsIvtBitpMI_caYrPmlH0Yi3vRPRoQWTJM5NkqN3bGVrK7GUW1FYL6pSw4wpxczkWugvSq-8MIVQdrnKjSyUFhvjF-wq2uFwxC_RiJ16ifUSO1b4NGuvFNLvQqefhferQb-_2Wx6ksPuWTfv52Fx2f8wvri6vrs6Rui7bR-LHPAKp3-vjMPBp1shV4hMySnizeVGWCfk3GnMeUuRb5zxpph3RWlnfiOdZjuZKb0z08rvgVfHifO3FwA-WQC40Z0Y300S8fPobnzXZTufx_f_uvl4Lz6Pbm9H1_fjqztxc4tkXV-OKVX49E8xuv5FvB9fX3aFBnRwpb-sHJ0CoRqCVWcBwzut98KY2RBWudLKzIwSNY3E3K61K3AssdJuaQLhEGTGdnKzNF56HntxOHbVnxST4m-mUHmVaTFUlbL9kraotNS-p6rF-eGKTGJF1p9VhSLLMj9cYS1igYm1TufOVquyF4z034TU_YMpVS6Qgixd6qV121R_kQBAw2FYMnVGz8QlJgvAL73GAUo6cCRSEyOlNtgSwVZzLq9hE3sRUy4B8532t3qGWNJ0ntupzNNUrK3JsB9byVj6CDR13vHblS7kUsctg4H-4nXhUxoXa5mbLA0jlPz_90OgwsJy5bewvx2-MI5BtnwudosQTAG26vxoUjyRj35ffAYRjCu9kHluFZ2LkWifHbhYRzDVjHnAoR560cA9AxcWgNl0lZ0h1QCoysLfvLJVKaaVetS-pNEyt77sxu2bhVELdr5h-2utYMz8AQO5lVnJbtI0JjYVL84J4CodMGTDv7aR7PFs5-i3d5Q6dniNma7YaAoOLKiU5zNJ5SuZ705ip_9FIGLm7JKnHe6-dE4yEYSscPvrpWe7UOJI6vSMA-rsJTWEx6rIceDAFAXuvkEgEkjt0Nctz9Foyy9ma5-dl7ntiqfn5m_cfdScn_KlKuewHPadlpC5XNlH0RcX96PGDcODKase4e7l_RsMSMnTYCLldZ2Wm3EBYcTx_9A7_GrAqpKkBSmP_ku6bbSIjXAEJBNmZ6HDEzvk7raFWjhb1LZDjAh5KR-BV-VAxHov65RYSCo5hSkXQQyjpxKGOgfQMLfr9GcWEkGFC6yOpUkWW9GolPHbXnOFFnKtKQ5oS1GCzEthSEkwImsX0bBfSI9IVyvrcCfoELVN4kRB9aXDoNCNkhDrB3BEO_9w1CQojBDZkB8CzOmpKbI0JMq6shM0IqxrHfMKxbBOfZhEBjiMMJSFmCMT2eFX1SXSBB8RREA1MgIYBEJEtjO3cWoz45ZgI4l_llsClPN5WlI6LVcw_CpQFtFf0Moa1dA86DYVa1BRrkgsgo5TexHB7ArT071uPGVHoU4j0hBUA18vTsepr7BMebnPMSJw2CliQFQROdo_49q-CNUwoD0Bh02oQwikZGGYkuaixqLnoLYnXBxWYFJWDJUPu7MyDxWg9zUsEkTagL7Fsd1wNY_km8oytB1sqcHh4YCWLSfoVGAIilzMtYvmm3WRm3VFuBh9uhrdD4gatdBQ7pCcPWfoJxoXYciEjgLwUfOlgaWx7lCS2ltAulYev3IB6g2t5F7UcFMSX8DN9JiJTrj5jbde_YGpciSeBEpd4WedSXJ1e3tzOxDvcQ--y1gygiV4TCLpxPOkeKYIsAU0MkWH2oS6FIfcvud7hAX7ojRJWOfRHNYqT1BJNKo4-xpYcZnb61vxAOD2Ty-xg7nZ2ykzAcZ8cNiCPlSvA69gMxjCfz7-zOsP2wwEeB7yQG3mK63F0_Hpc83yzyaDYiLvh0VdZJXj9tJZZGx-kGG2HPqFoApn4rQ2edFcfsF1SNCKV_bXihL2xt3_xr1cVktRVMspdKbuRer6U6sd3X5uBQ_6oIhvEGy2DpdT1i90PdR_erOkVs4ZejDUtiKG3AUMDXUCpycnJ-eEMhkE5DqIwEMTPnFE0bMFFYbOgA3vHhqetDvHs685qDG75AvFQUfARQm9WYYAg8E4kYaJfcM5dkuXxiXDiGw3zuK6yir3KWrsIq3FiHly3gAPacqaKKiDYQ9zpDFAv5IO5cXjOSnkFHreCo066L14mjad3HxLs4yfFmLfuIMeJdTkcDUr8eDUocv5S9vxqEFmfkdrmXrLqHzj9lcS8s2OWfTgPo09vXV_xXMNMjdrw9Y9PD9_Ub5INfECpNtIWWzVGsilhvTjRc-5a9rZmPvm-YBrYMKV4pUbzdUiXsnwdKLLsXFyRZJHjeTereS2XEjSw4eGGg8HDKp7crBo18zUzBoM6tlhi7MXwIEk1JaabDeaQaeEaq7RYHJ5cNByetmEiHe3lqV075hNj2eo-aVOgntj8EOX9FXAbm-HLvARl0godOWC6QKw45XumhrMD4zI7ddUtP0AEWch_yG_1Mek7enha4z7MzJ0Wlfq6blVXD9InHPRTl_onAUlg0SyfnXsuv2Dl_KwnbDz4XB4CkV7-9M5fO6_qF552b4LVSuTl6hqSre6OO6-UICTbhLl2jXfoiXFWqnTtz9Up5i2Kx--YkuOcX_P1Pffn_4ojqVTi7Nymf54Io6Pga4_5jAynR3ncjnl791yM23ZVErlGFyHL8kwgOdm8Zg8d-t5gLs3n-l18vwb__kfZVnMsw==)) -- [Using set as mapping table to handle large keys or indeterministic sentinels](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/mapping_table_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy1WQ1v20YS_SsDHe4iJZRkKck1UGyjOqdFjRb2IXZaFLYhr8iVRITkqsulFJ3g_35vZknqw3KdHnIOHIvk7OybmTcfS60buc7z2GR5Y3CzbsRRY9ALGonKpoWa6sagERaRagSN3BQ25Ovuy9uMXtKZma9sPJ05aoYt6h_13wR08ev5h_MhnV1-_Pflx-H1-eVFh2VF_pc41FmuIyqySFtyM03DuQrxp3wS0K_aMhDqd46oyQK3jfLZbaP1XrSsTEGpWlFmHBW5hpo4p0mcaNJfQj13FGcUmnSexCoLNS1jN5OtSj0Ch34vlZixU5BXWDHH1WRbkpSrofPPzLn5oNtdLpcdJbA7xk67iRfOu7-cn_1wcfVDG9DrZZ-yBJ4lq_8oYgvDxytScyAL1Rh4E7UkY0lNrcYzZxj50sYuzqYB5Wbilspq0RPFubPxuHA7zqtwwv5tAbhPZXDc8IrOr24b9K_h1flVIHp-O7_-6fLTNf02_PhxeHF9_sMVXX5EsC4-nHOocPUjDS9-p5_PLz4EpOE6bKW_zC1bAagxu1VH3odXWu_AmBgPK5_rMJ7EIVUMoqlZaJvBLJprm8aeawAZiZ4kTmOnnNx7ZJxs1b3NbrO_xVmYFJGm47AITTfnJeEo164TFrPTfYlIQSLqKmvV6vTgI1fME73zyM1skbtupBfYe7TQoTO2s686NvC0Vqnc7r70cf5e-JcitjBy5Di6I_1FwVsa6Go6fD-2sZ7QB53CVmeV0znNzJJDz0yeqXxGMIgUnEOJMZ-LOYmyipkG6RZnKqFIOVWrvWeH3PvlIp5TXoQzViOPBoONs-45jLt3AfseC-ZzYx3Ik6zoTfcdqOo0fdar3Af7mrNsEylSNgbpaaxDxdAPQLAamljSmRRkOENKgs7tYRa1r5ZqTs2z4VVLdBuwoow_cwibIhNybf2tJm79UWh4Lm8FTBrxxEzZiNODMqxc8FalBXlpQlsMqDj2zl9iyw5dG9KZeLUymndNlJ1q2TwPoEJzolqDNOf04tzkYKY6c5VBiQk_V7b6SuHZX-YtJRqwOvSTWeKDDXydqpUuTZFEkFGS-IqrmUCCK4AmldIV6RBMg3ejAplm6i1mqLlki8zFqUbhyh3T4zGqTeEdRlHMzlRJsgoOxYpDiCggWFHEuc6pCvZ4R0MsNEkSS2HGU5MUQoFUu5mJtuhRG1fWO9FrxXt4sIiRPgr8Bu5MJ1CuuFZHKIacB0VWcGvIE4MQohDy3hXLCclShK6wGtFjH1c6FioppP4pBqbtAhr8PdGeIp1BUco4AsRVjONXKgck2J526MI4XfpWEAnz4ICSdytxxoE9uVZNcAtlXc_UIkax8H4IUX7H9QacY776aqmMHARazrRHEWfzwomh5FZz0SvNS38RqkfaccXMPAZsHUcHkIA8lZsU92MwCBSMNgQQWLnUI6iPmFpbJQjGVTFlLnoKMDrpLXnBeb5CLBnETo3KRDnH0KJYCid8CSyrFrQ9qloD30_bEkjOttLjcGMZmA0xifNIKAIIh0ogSX3vVCo_CcT7du_el9DHnsrVRNdFS4VhyfV7VnbT7t3ds1CciaNrtWegkUkFF9OZ48I1CiSHmFtJwBRcafghENftHvaLMbzCC23hZ9ur2WKsct-4S2M3kfsesdU-fmVDYYRcsDYhZMfPCzs3XJG5-nXo3JW8gEanQVQBk0uzgRNTFA1RX5cbR0uMQ5CJfMyqzVQyBWI3SzeNuG56vpt9QvTaVSbUfmFVlcluaWpr_UrH_krpmi63vCEJUO7iNHYHOdGUcTNTKHTX6Li-DlC6GvlN1hCvr5rX2BEiL4UaLRrQiD-s-b8HWj-wrMdOG_RnMx1-RsgnNUpPuoipE2KLOjTwSmxrNnqulroOcNI_qfby5iazXFif6IkDMUCKnGsiVOovu5K2lPTT9ROiVqMiZvQCPtEvKgtkqtmzwS_o8p_RqJxuRt5XPNvR2JikbMLGNltNUOZ1f-QYb0DVBSC1_BrWI46HO7vegaBJQm9I-w4puao8FKFUWcT0syCptImHNJ5PosFgqt3x0WlTQnkDRHctOjl5UsCKgO_6m5896d5z6np_SV3_OXX9v6Tu9XPqXu-o40MRCbdr-stT3H94_1y6SnWaFFlYFX9fex-V2U19kubsSfjNctkX1jqZ_eXXZPMWm1UB9Ac4LGAPEveSx0TZyw86k9hiWigpvM3gp4vtV3FWEPwPcXKxNBcZnmCNYMRCV6ObYu7N6F5A3h-IxzXPE2XXFKE_j8fCYLaQrSrX_8Mvw5AuXhPTQoNx5fgYx8sbHC3x4bHZfpEXCuigVO-x1E5KHFjS_4olT4F6Xa29Obr7U1wbwd7d10PbrOp_rfrXpeDd3S1i32ASMAc4zqmKsyYHo_I7uHo92x0c6lmxPLVgcs2qM041bPAIyT1_rpPEE7zgD7yQY86a_Uj3M_TtFBnBeFyUKRRQiMNWIF0i2BaTPnccmQKTWkBvPv1yevq-xHueqinXe95WxNC-_iOAZ8WUTZEn24akxuoKNpoOj-244kabItXy2I-TpfpNQ3liJuaXPkxUmGANT90y0G8dKXy9EJbTTPKQTnyYxTR_9j-GZ07X-45Z93pFQC_UCxzp0Hkfu2Td6wTUx-9r_L7pPDwEuwQ6VPj_35r7fdY8flrzW2j8J36_w--7b4r5G2ieqCT_Gnc8vN8LrbDupIxwh6-avhD7Vz2Dwc67Hok3Rb7P-DW-NNc5qHAI3ctAlfkeIzdwuC6z5r7OTtKZKXBgF1CL8u3WcmaS6vBnVTbV5SacvNWri_K9yfCqzg89mcRhrKUZKH9YKpPeZPKmrMzoocD0eV3iqTJTDkdyYD6YOFgeijakEKqFPzj7c9LWIYl1bfbYDJJoLG41gndGtdoTavdKH27FhTWN5s7isXd3h_9rtjqokmWERJoPmlyadt9hrf0N_YV74bHwgUM7cqdrCfhL6j8E3p1jrgJvj_5OiVEReMRhfoJ_W0QU7ZUt68dWPcnh-qc6k6wrS59f4rdNoF_ZEb87QCSPe8FmIhJ6nq53rzcbPDzJ1Xz_HP22ntT34uLXjGTNyRNJUgf-dH0UEAD2kYDIP598_D7WH-ibW8o6Y41-0OT3d1s3cS5ttlrb7Ciy-I9C-_03P88jaXLcW_vZv6VthL2gh9FhXMOAtdAjnFmaWyIVxkdqsiLdCdSJ7xH8yp1f0x3SEezvXVm5N0MhTta_5fDzAm8lD-SFPnLRlTWiitegGhdIxtKmwIwB6eg9_oiC9_TqVdzaGnQ_lgb7t1mEzVnj_isHL-7nP1_7brZsuInvNiMs_ymH3iM_uTSCBvfuONF28x1SI1uEYa__tujhsZk7_wVTow0fnISvXvW-o7ay4ewkT0ffHVG7jRLi2pLUkY7aiUrH8q1TEo-3dIZhmODmwn9PhBvoOtnnxkNQPUcW7TwHZRoPd_Lvv3bzBxQ=)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJx9Vg1vIjcQ_SvTPbWFHAsLUu4k8qGi5CKhnpLoEp0qlWpjvANrxWtz_qChiP_esZeFzTVXRSLBM_PmzZsZO9vEorVCK5uM_9wmokjGw14imVp6tsRknHBfsKSXWO0ND98HJzMFJ_Bwf_1HeiMkXunVxohl6R7xxY3h8BU6vAujbDRK6eNDD26_Tq-nE7i6-3J_92XyOL27hV9gcnMz_TydPH566MNESoiRFgxaNGss-sdUnwVHZTGdFqicWAg0Y5isGC8xHfWz4DeYqZl6JxSXvkA4557rgXXMCZ5bdH3uy8vvPQpGHsVg4RV3JAGTl227K423blDgmnLna-ROm375lovUS8GZfNto8ZtHxbH_fX6hrTPIqldBUlTC2eg5OKml_m1BMkNJ3vncy-ccX1i1kkgV1ea5EbiAa6yoic4whxa8peaBXoArEY4iwCwJCLMkosHkfmqjxBHnkVyDNR4DMxSv5AaEWmvO5sRgYXQVAWMwU0V08hYLWGgDhRZqCXqFRCHME0jxjPAkqGvGPYE2McsT18oxOqQTBQwCK-L5jJsjFeqkUA4qcuustSi6M7Wlc0oVMvyOG7ggWu4siAQwGMCnauU2YKV2NXGDqzBCyhG1-eYwTlR-OBQKJUmwZtKj7Ye6Le6_gS21lxREqqGkjlOQ9bzc53Elc0GBDShcowHNuTdEBTY6_l55BwVzLFQSefLQEnxZGcBAMacy84YCFZEOjzXc-moeIGstwOlAohYPi-BDkzoeW_EP5q6Fq3yVx4ALOM1-zbLsiHilKyKEwBntiSCB5iz0Ksp-mv0MUjPqHAtjHSKYp5xH4GDNaythZ_3TszdJHNEvaiNHITsHVoM2TrfNLcyq56FhcQb-Fq4EUlciI9CnBvVp39W69ekQmI0jGOWslWr0jKKHrSeCh4k_py5chgTbBrG39zk0ZPvf1ux2Laa0oiRiYFnv8aFF26wHwx6MetDv90DsQkC98-Pxq0ujJhFiDsJ0z9reDXQnrsEclzT43V69FKiK8HfWEm8ap4KUoxszMqFl0PVmMluGamOr6NKr5-eHsC3MB-IZ7oywybQvXroflzPXWl6SpyeMdkGNYiXyZxCLI7-wk_u9pwGkfYnX0pFmcyf8T_0xW2NqJfuKRiw29WYe8pVsTXcZoqrDgmvgvJ9YcouU82ikuW2qDAa96LxK1WTe0whvRpgvGnQRXyK32e4aOlRy5zV4F7b7rdB0NZyf0w304DmnF_cnuInZG879GWEkZ7CroQw6bxSEbaYTen85LTM9A-b4TCdqzflwdOqHZNYrV7_hSUr5Lvj798OPkDLDywtb5R8zSFPaakcfjirBIpWsmseHXYp5C5NzLumQLrfwPwEd0JKq52TXa-y0O6_sNBnJ7q_48y9b4Nyb)) +- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJztV21v2zYQ_is3DducRpYdY90K1w4WNCtgbGiLJisG1INGUyeLi0xqIuXEC_Lfd0e9uk2L7cs-rQWSiHd87nj38O54H1i0Vhltg_n7-0AlwfwsDHKht5XYYjAPZJWIIAysqUrJ35Mnaw1P4OrN5a_jlyrHF6Y4lGqbuWu8c3PoPmEkT2A2nc3G9OO7EF69W12uLuDF67dvXr-9uF69fgVfw8XLl6ufVxfXP15FcJHn4HdaKNFiucck6k39rCRqi-NVgtqpVGE5h4tCyAzHs2jKepO1XusvlZZ5lSAsZCXNxDrhlIwtukhW2fmHGokgjWSSVlo6CoHIz4dyl5WVdZME92Q73qN0poyyx1Rys1VS5I8LLf5ZoZYYfWTfmAJLcnCP8bY0VWE_ViH3EkyPYJWxrkSx86qTJ3U6fkgpFdC4WmKKJZuM8U7sihzp8LXWplSYwiXuKN-OTKOFylKewaTgMoQ-Xg3W2CqyefFmZX0uPMpAqSjNnhQsCNBGj82tVnoLnX24zZTMQAoNGyRLmIAzoLSjY0sHt8plHpFNS6OdUBpLSEuz8zKlGy9ImGDUJXkyIQxiiCOz7AU5f4MHy8CGljJhM79eWfbGaN7fhRp8qCE1JSDRB5ywN2vyiOJE8aCsHQrUYodwhe4tpiF0CytdVG7FvhMRKPpxvM3NRuRxDHujEpCUbbOLh2mt3RzVUOxTeIzi_Q4posl8btVfGDvQJ2t9T0cFtmmJ4eT9FpbwMVuecyyAA2cd3hUliIrOL7cxI9GO2up83qw06l7JMVsIczuf859JXIjSKb4Di0Y7rIUZMS2JN7mRN-ejekXZeLg8OjlpkCn8331LJ_AOQU7-xkQy5s-Sgq6SS7WL7ijbflv9MYHeuR5AJXdw_G8Jo8GuBmKV3NHHKdTe-K-TI0TGJAbSUUcMuaDYgg8tcCqiJjkcgBCejDyFTtm4PxFr8a7T5fAoXvCw1g-M_q9JM1h_Xbl_yCZ_Ley_41D4AT7RvdLJ_8z6D5i1MSZvHKXztFUtIUO-C7Xp_BzrUvDiqAlGKTTFApZLmJKVOpXvacNvhDk08ZyJ-Q9oS8GAHe0YMc9aTtS18ic8MKh2zRmp0v64K9wBbG6oL4sSqbgX3J6J_AlsDl2rhnXAi-RHvg5gL_IKbQTXGYmbL7CZqfKEO4HFnLopbbKVzBo7LhOOG8EBNO6pCxgpq5JcgYPxv4nNkAgnuA14P3t2IrsYUyTj1gU6xPisP8OrardhyKZPEE3Jifr6Y8I6w8vT4-pqF_sNS3g6_WY6nfaIL8yOHKILJOgeKQrQRnB3M5r6z9PpVxR7kUAqeGTorkYPzNK4lhL2NHr6_FEnevRlLZSo8lHn1WSIczL0jZt7JTlhfTPkhgoU4hwFIa-DFpuyVSe3ZsD4DIT1DdlHlQMGbVR96HmuIje7GWBBuThnC_ctYtjodGm5_zhBDw8Df4nlFEru5fWk1CXqfhrCWQizEKIoBOXpXU9V8_nRWFY7wXu68NS3qdVuof19iza4JfqfhH5HhDrhv6eDEK7q8YLDkKqS4pWJPG2HpH7W8CMTOp-8vqE8YqL5oos-yN7scYMWKflJZ9Er17kRTVOAF79cXpCg7HPyicljsViczZ5REGfPzs_PR33voxFtVGepVvy8o-Gn3L6i2PP4yNMUVYIqd59OERfG87p6HSWpZUGG8oZrn6B3gDfF1UabW-hrKFWDJuQRvDLEGV80bhEKYZns_eDpBSLn-nngO9AVGYTf2xr8O9Thoqm-ywJskUZQkYdNyN2tATrbzvjK16KbzR_I16ulADf0fn7dVN1oy6ACEpX6na6dVlu7lndRmWNZfqBiDhQcTP1ZN5iJvep9u6b2CImhOqoNHa0oaENGqEB--gOjd7ZmBWt6PUOlNBfFMUvq43_AjWNWtEof8KInQlhnshUMEvkOS5Ue2gw0uaSzIB0Jdb2NVQeNktQ8aOyFVO1aBrHApKMjU63l5tryK47rEZVH5d-G7nD_0A0O1EqPwbmD1rXUUJoWC6qEV5WU9Ab-Al56663P0ZowAt9UGapEV5UauAfQCr2IJbUA6tJl_3AO9F7Ks9nT6ozEpnD1qzoYk72lPD09-x7GopTZ0u7i76cwHlMvcPTD0UkwGedit_FP7VxtBphSypwWKY_8SqcFKu36JngIWznl60hOty54-M3__xvZnH50)) +- [One single storage for multiple sets](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/device_subsets_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWQtv28gR_itzKnCQbT0sp7nkZFs4I04C4QInjd2iQBzwVuRK2poidbukbJ2g_95v9kFRj6RJcQUqQ5K53J2Z_eabx1KrhpHGqDwzjf6nVUMljX6v1UhFNinFRDb6jbhMRKPVMHmpY77uHt9ndEy3H67_2X6jUvkqny-1mkyLO_lU9Km6pGZ8RGenZ8_a-PipRTf_GF4Pr-jV-48f3n-8uhu-v6Ef6erNm-G74dXd69sOXaUp2ZWGtDRSL2TS2ah6p2KZGdkeJjIr1FhJ3aeruYinsn3WOeV53fvsPvuLyuK0TCRdxGWcd00hChVHRhaRluNOXE4Hu7MSgVlJV2gtloODt8ZlFhdASKRb94upLk3RTeQCpkULGRe57kwPTdEyKWN5-J6JRdbZsyrP51LD9IWMJjov52ZvikgnuVbFdLZtM-xN5HhrTOWm0FJsT8zKmdQqtkK7x86lv4zhTvL7MeUIqJlIPonZPJWAzs0ZaSXHdC1nYEwBE6Whaf5IRU6lkZRnkkZl-kBYSwaAgEN8L4YBhaRZmRYK0shLJ5ElhJ2Ocz2z4lWWqIVKSpGSRwBqaKGEN6ttFKyHK-nqw9BYeth1dznmF2qm_oAS2KaXMAe6WyTNXMZKpOmSHqcygxyRqmxCj8CO5NMcpALKlIhCEGblsdVpDQvWWg1TYaZscosEzbUAIWIYafK0tPNVtsjTBcCQQCtfsgZBBl9pAMSDga3SRGZ2b5jkgXBEv5sqCEixjcwCW0wlZVImdpGRc6EtiG5_O8byvqoBni8RGxTnWSEUtHWscKsFhKORJNxWEjFGI8aKbWF1KQfgo7QBnOVZO3_M-BYjXizncoP4L1kOW5zFjiKEf1lxUnGDTZmXep4jxYAa6bJDw4KnYS0QK2SWQD_oYSyFoH4GrlrxnhQiK-hRLHlOktsZQVnF_04V-6JkprFu-FVTPIkM84Ffl_TyHF_dbveCkIP-fo2PTYzRW44xysf0EjpA1cSwxilwhSYLpPPTno5RGT8gt1g9l9SrdNyUs5HULBFz41JrJC0yaQ7KO6kWdivZKdyTfEObFySfnu9JlqmcQaw1VSE16sIS4fdS6iXD4Zz6IJcRew5CgHiQ8qtcWn-GWXOdj_AdGeTTmfQLACxxFu33ETFS6MjPuvDItnjCwZdbhUQkEEIRh04UkuhFMGgwCMbcsTZmqs5TQ6_e0kSLrEwF3Lv8oopvflkVNs8468ntkZpuU3-SgiB80TEdULUcgTi8b4wdIcN2u26XcJvNBrVY9YkheMJfBp85JAPN3L0Kwladf4Nzp-fd4QgO-SdE8q4-jAed_JUJQFS3pd8PM87D0mpJeAVzt6vuxtzvxZorcL_vAgTURLxGrgz8l5JQHPt9-TuqS1TkGyJ-t7QD0fLdMnZxr6LhFpVz4yTn01uX82yROhjtkQcmiuoJcLNp293UeHMzcMIuadVr0bMWPW_Rixb93KIernsY6GGkh6Hez2tPrNezebH0SUxoZtKc-zSkcZvMQs9G9w0eRHCl9w1aiLSUhqsPbvsrTvdlmnARMkhiMQswZTx1aoqpKDjTL1H6FpzpYuRPbJmWuf2el4W1HXm_ym2bPUs2MuIbwQjssd073-pzXA8ztCjCmhq4SJF51ZxUhbHWjpFtx6oq-Joz-H4lce2OIQUpiD8v0TpMea2_3fxW11wrrFzmZ-SDx9CHnCulZr9z_bOe5DziZeajfwFB44tgFE3SfAR-R7TIVdDWDCQ7rsQiKa2YshznBm00MJxw_O41nhY5ok11ooK7REydIDTxbxLB4ELZ3B4Kg7vp4naETPcwaLoRZaL6cPPo6Jylw-1vuWF0W2qiiXj19oibQfm0o1wlT9DdtKuv1azzBMTsxTB5wsWJL6f26oi6oQmo70KLx5CaOBAv6bhZgX3CCpxNdq7Dr5p-WV_c0RJZIIkcYrk2TZf93JojrxJbc0SzHueaXaCjtTxjd_J-bSuKsucW8iJuo5qYQwoqUfoVofDj6-TkiFYu02xb1vGOZoe0LKE-qc9uH-v7bH2A_XzacosQfZb7vi8c52WW_CeCa2ndoUtQb5flDNRIGIhFdbN79KXHEluCy7bvt-IR4HyWM1wQv2LO_yg6xnDf_31s7JD_T2X_V7nP6Hwf83lFjfcfpUH7h_MA2n1Oo2oMv1vvsKu2ve0PBYF8FEVmiiKTwFUcB9qKsrZBSrO2TbpEhCAq_BQXL2svYome0_XzzWDXN4QWTP8bl9XtAN2y102sucYaDol10DqWXwdC0qMT5zrh7eyjgc4R3JfZBg8oK_KZit_r5o9upy06dkp_uNwL-C9t_gvYVTYNnTEeSvjEwPqUTlsH4pNbgCo4yckOPvAumWsAPW7eN27LOJbG_EBvrMVbwsIxpnMPGxtH3nkha7GnZjjBNkNQwsrNEShUargBqcJV3WQ7aGxXkJUzPkT9FIrN682RDtKXwBuZTVCixmNpj2oaXaI0tjFB_ByQ6Bbb6DLupMQtXdVp2X_5ZgQ_QftgdQYQ6-9nO--_7ryfb73X9RBGF6WSoNppdU-f6moHTceG2uSOb9GaMGgrHNyKekRgxjmdnKiKHHUx_IgDWTEaCWQp3-vHwhTb6kND7FLDTDzIyAmRTzj4FxeHmuj9rrhZB5opflSRnL--tHmQY8zM4K0isaGnPa0lJvStY_UEH87ss6l8hp5ShiW2SyvyQqSMQiAad72VQo-XP9dHxrLr9HyDZ21SDdQ6hvwJD21hXJd3clmfjo37xOGN_KR4V5_tiataVAeGG-lDe-CgtkdPUNv12cRuDEm5woBZvFvbWF4EeZGTdBlmdywRavi-ck_7Dj8AK407L3AS8PFbKTKbQ65l9ub46SHasaHl2cUnncifqcGE6mS3WreqUxA_AmVerXjg1l0Wq6xM03mh1-t1yA3DDPUa0P_hH8AFe2wR4IEJGgA0O-GMw6TYmI1GLCxv7p9FAkZ12lZUr_qPDZD-sWkNpq_xay9o9872tYHVNr1aW5vgBN88AsUqun1eewIGI7ezQAj2oGnl_FIhUHPJPipw0qr2rhm53gp298ScnyvVnrjX8KsKr6mamv0uvHbmshXRjl5cXPCx9-zlYDBobsR4HDoTWdROKm_UbgkLwrjef6sonq9lUerMZg5ssdFqcCpCu6A3v8U0skUc986elz3c5kfc9oeaRhsUuIxPTnovqC10PL00s-jFKbXbKE5F22bYRCbtVMxG9tebVI1qMuM4TjGI5pt_-MEAGvnsobFuhftw3tZ9IN5Yf7Z__waeANMA)) +- [Using shared memory as storage](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/shared_memory_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWItuGzcW_RViFl3IqSQ_sH1AkYXV2glgNJsUjrddoC5GFIeSuB6RKjkjRTX87z2Xj5mR7HRTGw6iIe-D5557eEePmZPOKaNdNvrlMVNFNjrvZyXXy5ovZTbKRF3wrJ85U1tBn09f3Wv2in388fq_g7eqlFdms7dquaru5KdqxJqPrCdO2MXZxT8G-OfbPnv_0831zZRdfbj98cPt9O7mw3v2dzZ9-_bm3c307s3HIZuWJfOWjlnppN3KYtiGeqeE1E4ObgqpK7VQ0o7YdMPFSg4uhme07_Re3-u_KS3KupBsLGphTl3FKyVyJ6uhqFeT4x0Fx47idFFrUQECXh7vMGYjLVxsZb60pt64YXBy-iqg8M8FEGBuxa0s8rVcG7vP5Se-3pQSAcOWuVVywa6xqF0FZ9Kx2gFbZhasWsG6yZEpHX2x4GvYnKuS8Alb5FRy59hHWd3KBXLJ82Vp5rzMc7Y1qoA9TMlZ_iCtlmWv2m-k5msZTUYjlAkQ5vScbXmpijw86SPY__shUOFhvan28L8fP3OOh97zhDWbkAwqhlRO7vUjxTg9ZT9LtlDWVYyXpRF0Lo9E9-zAxViCaWGsX53hULNhdHDngQsblGPCrDdWORgDVGEQb1mb2rF5LR4kCIWnrjSV60fz3UqJlQ--8_63UsCZ-h0OSsML58PkeSxszp6dE8DVMmDoHf_SRXLoV3snv76m0vmA77HSZztJyYEFtaj8mbioal42JzHz_yERtrBm7Zct3zFuLfdEYLyuTLP1skklPsmtXPiEegdFDemdvE554MCUBdcgG5gHpBr0ZSdydNqJi9UUs_e8tn32-NT-ReuT9vxUL1Fbi-3wbyUv2LwU5oGdsqu7aRvGw4MlIx4Q7nn_jUbVSrk8uMj9vl4nzI1WOFCJQjb4JcBqp_SSSh7jO-o22uSd-AxIJlTjoecXGuQ-7rVYWaOT75AjUl7zB-BVWxAx2XJSE7biDizXyq2CksVIDo56R9B4bqfyFwYSoU1FrJZspyowVe9Zq1Kq2g_bFlrxraQ8oC3agcxrpkhJ8ISnENFxteIVMt1sjEVP0CGST-KElmB_z4NCHcUd0gJHpK1mJ22BwhMiG-pDgFk5V7rIQ6GMdb2gEWFf55hvoNWp9GERFfBphEdFyDky0Qf8rLpEmuAjkgioRkYAg0CIyHbPbZxaLdje1GzHiX8GZEDvMbHMHZXTIKjXGM2Mln2_M6FKOymnDhUTqFtpSSyCjgOyBGafqaEc9uMpe2LZp0xDUi18w7gclz7DMlHxQ44RgYMliwkBipDtn3HtUIQSDLg9wWEV7iEk4rwwzElza10wvuSgQ2gcr8CkrHjkZs1ZPQ8FoK8SLBxE2oG-emB2miwj-ebcy3PouVmLw-yIlp0g87qCIyiyXkob3bf7IjfTjXA1_enN9G5E1EhCQ7VDcQ6CcZyrCREeoXQ4rQR8SHAugaUy9liSuiYgXaeOn2mAZNAp7lWCm4r4DG5PjwXrhc5vow3TB0-VE_bIcNXpatG7z97c3n64HbEf0AdfFV4ygidEzCLp2NO9fqIMYAIaKd2jMSFdxaG2P_g-woZDUbrPvM7fZyypPEHFm-mM-WsOH3-rFd3b8z3DkMgUTT9rWHhuDhtlJsA8HyxMKgxF28Ar-AyO8J___MvvPx4zkOAk1EF-2tgXRovHwflTYvnPqoBiou7HlzorakshN9agYsujCnvPYV4IqnDJzpPLq7b5mb-HGO14wT4pSrCN1v9GX67rNdP1eg6dSbNIun-S2lH3-1HwaA6K-AbB9t4Rcu71C1MPzZ-VWtMoZxWflzL5ihj6KWCsaBI4Pzs7mxDK5BCQyyACszZ94ojgmKpxw9AZYPB61vKkOzlefi5AwuzaN5RPOgLOHPRmHRIMDuNCHhYOHZew5jaPW8YR2X5cRbvyuqxy3LGrPImR58mkBR7SVLRZ0ATjIyxRxgD9hltcL5W0oPUcet5JjSbog3zaMZ3CfMmwjJ8OYl9oQS8lNOT428wJ8C5MOX_JHC81qMxvGC3zynhUvtD8hYJ8cWAvegifx5ne2L8SOYHsh7Vxpw8nk2fXF6lmIS11I1Wxc9dALiWkX8hQ6XacjbVvXx_QBiq0lN-5k_62iC0ZXp2oOXaWb0jyaJA86Eo_ljNOejhrqTE7YlCaycGiZphJzBqN0uq4w9kr4EASavBaTndpoxl0SqjmFgOmvx4stJzebELGTdd6KT04ZjvjKRp-aZLwszH4IdH3RWvbowY-8VckFLq2wbUG7Kzktr2D_QtG5PZLKtp9AWGXof6hvjTH5N3l8UuM-zMy9Dot9fjUuVzfcZxz1S1fmJwZFYNEMr11NNP-0ZvyuFuwyXg8PoeiXXw_QczDN6oX3mxfh1ur4Ne41YTsTHF--sIFnPWzKNe2_aYl01shzi--qc-xbDZV-BomG6B_L8XXX59_xwbcitWlW-ffnbHBAOhWA59GIYtByddz_91MqeYdn0KIEg8xndLXOniA1039kD310zrAPVgv5DZ7-tX__gGTrirD)) +- [Using set as mapping table to handle large keys or indeterministic sentinels](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_set/mapping_table_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy1WQtPG0kS_isln25jJ2ODDdlE5qFFyUaHLkpWCTmdBMg0M227lZlpp6cH8Fn89_uqemb8wCzsKQcCMzPVX72-qq4eFq1CF4WxedEani9aJmkN-1ErVfmkVBPdGrbiMlGtqFXY0sV8vfPyIqeX9PWP9__ufjCpfmdnc2cmU3-m7_yQmktqxx0a7A72u_j1a0Sf_nX6_vSE3n3-8sfnLydnp58_0S908uHD6cfTk7Pfv_boJE1JVhbkdKHdjU56S1UfTazzQndPE517MzbaDelkpuKp7g56uyy3c5Ff5H8zeZyWiabDuIztTuGVN_Go0L4Xl9PjTYlEQSLZUc6p-fHWR76cpXrtkZ-6svA7ib6BRaMbHXvrepvQxhbeaZXJ7Z2XIWS_jREuytRsZvLJyKvrVI_0ncqgAdaxSBC7dkaP6b3OkBTvlNcFTe0teUtloWmqiinBIVIFKUqt_V7OSMDIjslP8YEomlyllCivGtgrDshVWC7iBRVlPGUYeTQcLoN1BYyNuzD7CgtmM-s82Tyd0_7OW7qee03f9bwImTqbmoJSkxleY3NSzoBddK1jxaZvMcFpILGkt5mJwZ5sppzunuRJ9-utmlH73cnXjmDbmXaCWtAY1kEpGRDChVtt3PpRakSu6ESk8kQiMVUuuQUe5Vh5w6oqD4rKha44AHFR8TZcQmWPzizpXKJaO81aU-UmWpQXESCwdDZzFiwkOI4EGU5mBobWDqU2_l77qrxoYcMKO_ZiWKphVo_-YW_xh4vwEEAN6K0t0wQyKmFwRbkNiUYoYE2m8lhTomMwDdFNSg2pRsUUpUSuRLFkmmLwkenx0KpeQ5CTJDEcTJWm82hbrjiFyAKSlSSOm0Y-YfaEQEMstmlquJVw_dq0FApk2k9tskKPxjmnf5TGBVwn0cODG4PyUeA37M51CnDlkefExFIHZQ7hhIrUIoUmF901ywnFUsa-dBrZ4xjXGDcqRWhYddNYqnuCnqGcQVHKOQOwQfPCGhwmwfesR5-s11VsxSJhHgJQ8W4uwdiis8wTPcatBCqm6sagWYQ4xCpnrZUCrrFI8HUx07HhJNDtVAcrTD4rvThKfj4T3Ngy1e6E6on22mUmDzZAtUm2WALy1GFS3GbBIFAwWRJAzCqkHwE-YWqttCA4V-eUuRgowNYVjF6UXOdz5JKNWOtRuYBzDh2apXAitMCqawHtQdcayhrqSiK52qqII4xVYpbEJK4joQhM2NYCSfp7r4b8JiZedftXoYU-jFShxrppWiqOK65fMdh5t395xUIml0A3sO9AI5uJXUxnzgv3KJAcYn4uCVMIpeWHsLiiv1S2OMMrgtCK_ex70EB0rZj7iF_l7DJzvyG3OuSv2lDYQm5YyxRy4Gelm1nuyNz9enTqK14A0WsQVYwpZLNBEDM0DYFv2o2nWzVnmSTkrFam0gks9tOs12zEzaYXdrNvyF63roQmLgxVu-xvbeNtWOk5Xhmd0eeVaEgBVFq8hnaQE5sybuYKje4MO27oA5TNR0HJAuLNVfsMGiHyUqjRoSGN-I8F_7qnxT3LBttpaf27qY6_I-XjxspAOplFYqhoUoOoGNewMXC1wtrCyfCk1hXcTaeFsD7VYw9igBQF90RA6rt1SVdJhnHrEVGn0RFzeoGY6Be1BzLVbPgQFuzwx2hUTTejECt9N3N0bW1abcLWtTttUGZvMPJsb0T1BUzqhDWMI4FHOHdCAEGTlPZJhx1SalUFU4RSVRPTTxpJlU88pPF8kgyHE-0Pd4_bkspzWHTZoaOjRwWcCIRdf_m1Id1_Cq7_l-AGT8EN_hLc3lNwe2twB4wl3G7oL09x__7gqXKV7jQu87hu_qH3Pmizy_4km3Mg4U-r5dBYm2IOl8-p5hU2qxLWb-GwGLuVuJ95TBRdYdAZG4dpoaLwKoMfb7bP4qxY8D_kyRvZXGR4gjdiIxb6xroJ5t6crsTIqy35OON5oto1RejP83FjMVuIqjr0v4RlGNIlauJabDGuHB7SRev8osV_PHQ7LApCEW2V6j-UWiuJLUsGz1jymFF79drz3cs_tWsp2L98vmnLVYPnwu9VgpeXF8h9i0nAHOA8Z8rkbU5GHXdw9Wy6Pjg0s2J1asHkmtdnnHrY4BGS9_yZTtNA8JL_4IWcc0YOI90_gbfWZMTGw7IqoYhiHLYi2SWiVTHZ5w4TW2JSi2j_28fj44PK3tNMTbjfs1oRw_b1HzF4Wk7YFXmy6khmna7NxqbDYzuueKPNUGqFCeNkBb_cUB6ZiW8xsTBR4YKzPHXLQL9ypAj9QlhOU6lDOgppFtfC2f8QkTlebAZm0e-XEb1QL3Ckw877MCSLfi-iAX728LPfu7-P1gm0rfH_v5EHA0a-fhz5NRB_xc8b_Lz9qTb_BOSxSovnhOP-YCO1wrqjKsM9vmqHRhxe9QyHa-96JN-UhH0mrAmtualBhUPoRgWqPOwxcgOH66pqrprqJJ3bEgd2MepGB-rfTm1aH_6cyie6UsLFW7-6qN6bnHxt6kOPxyY2WjYDFQ5LVdHbXPeWFX0iZoa6ruypK1MOR3Jg3lo4WB4LGkoI3SIcnMM5aeWQxFhLHctBEhuLn48QnVEDe0TdfhXDlbww0mjmHR6HcPf4V7vTQ5esMiTSfNDk1rT-DmsRbug73gsPhQ-c2pE_XkjCX9LgPgrhvOYu8Hr375RalYBHnOZH-LdCREGvfVk89OpRDjdf9ZlkUXv69JKgNgW-ciN-d4BMHvaj5UQk9DxerF8vFdw_ytVi8xz9upnUN_IS1oxkzdEjRdIk_nixGxEMHKAAUX-h-Ph9bDjQt1fAetca-0Gb39-t3MS5tN3prLKjzM2PUgf9y6-nLWlz3jub1b-CNoIu4LB1GNcwYN3oEc4s7RWR2sYHMHmZrSXqKOwRiQEjUS3bMKJN3bWXGzMU8uTCW44wL7AqeUCMjlr0VY-o8zWsxwWSsbQtZhqYtHuADwE4oFevTGdl0P1SORzeZhGUM-LmK4cgHua_0PvOV3w4N5fLEZY_qqF3N0wurajFe7dJtVv-s6GV38Rxf_C67OOxnfnwn4hWFzE4il-96r-hrnLx9KjIRm92qdtFC_FdKepEJ91UZdfy74nUXK9gxnGc4ibaEr-OxA3sOvn31n1UP0cVrT0HZVr3l_L9X_fJZgs=)) ### `static_map` -`cuco::static_map` is a fixed-size hash table using open addressing with linear probing. See the Doxygen documentation in `static_map.cuh` for more detailed information. +`cuco::static_map` is a fixed-size hash table using open addressing with linear probing by default. It supports switching to double hashing. See the Doxygen documentation in `static_map.cuh` for more detailed information. #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVw1v2zYQ_Ss3DcOcVv4KEBRw4mBe0mJGC6eI0xZFXSg0RcdEJFEjKaee4f--O5Ky5cRA2wKxTd7H47t3R2kTGWGMVIWJBt82kUyjQT-OMlY8VOxBRIOIVymL4sioSnP63X01K-AVXKlyreXD0kKLn8Bp77TXxj9nMUw-j6_HI7i6uf14czu6G99MOuTgnD5ILgojUqiKVGiwSwGjknH8CDsxfBaa0MBppwctMphFYW8WnZy7KGtVQc7WUCgLlREYRhpYyEyA-MFFaUEWwFVeZpIVXMCTtEuXKsRxcOBrCKLmlqE9Q48Sfy2alsDsDjr9W1pbDrrdp6enDnOwO0o_dDNvbLofxldvJ9O3bYS-c_tUZEgvaPFvJTUefL4GViIyzuaIN2NPoDSwBy1wzypC_qSllcVDDEYt7BPTwsVJpbFazit7QF6NE8_fNED6WIHEjaYwns4i-Hs0HU9jF-fL-O6fm0938GV0ezua3I3fTuHmFos1uR5TqfDXOxhNvsL78eQ6BoHUYSrxo9R0CoQqiVaReg6nQhzAWCgPy5SCy4XkUMsIHtRK6AKPBaXQufSCQ5Cpi5PJXFpm3dqLw7lU3VkxK36XBc-qVMAFr7jqGnLhSc7KDq-Wl4cWdqkrY7upWGGUZCW4VbpDRi9MsDIsO74lrdAMHbtcVQUVJalXfmJvNSsMspH_xMFgcoEaPb67i9J5fjqeM3vowo1NU7E4WJMKJSFYfrDouDYuXveV1-hfrneWaJ3Mq-wxET8YVlkgq357rqVYwLXIsT6IyQqskqGqhm7ZFwI1RxFQchQNRh_HZt_8d2hKu24ZUNio02yNkl8p3w0LrXIX0DmjOJxRRfOClJUq0o8qiVAnlUw-ovRRItqiNF2OhSy8_MEIS_gexXoPwalIFhYbXxatlZLpyazY4A4modjvxRq7fIgx7fl-9TPLKrFbpfVuF97mpV2DyZT1R9GCWkQU1vc4fdcr_D6LaFEWIkNSVhTJdIgJ7Bb_C8xSVRk6IY8iQ52ik6n4MuSxS2aJE5x2AlsIFOeVpjGBQ5A-y8pCyiyjMzr8nIpEDQuCICZIQFJDcENsCO2-O50_13N7h2rvEawDmkmVzwmE47XrTKFkUhuaXfO6GIK6GlWRDgZG_icS20hSVDlBMhj4rPdnr9fbB7_CkY3jCzjNVonszpkJwwxt_4BMMRQCo04mD1Zhzn1g2k38Lsbudc7Oj4LYRx_6TS5k1tqh6jbjnDSxkfQrTtUGErq7VGZRHQ2L67XgJdPuO_nSh3GKdtw2SKv5ddr0R6GoQ6DJhoh3HeXUCTvUcTDY1XbzssrbQyOXcHOsuNtt44A4KJB76hs_kurmcQfxUiVTP5oGg4PBeoHCuwzFdzzuCHU39s6pjt1qmHbm4gGb8SRu-ndEkdJS79D_MKnT7y6th_iLiUMjPk8dlg-Te2XOkbDnfNBEUEH_m00v7iHzm37cx49OpwMbGcvtdldfbzfcYcrZI6ryxUXR8gWvrV7cPBcNSV9uMGUQCD6lDQalVjxjMk-0sJUuErsuxYUXA6WnOsW-7y8vQyKAb6EfjxYlnHQIR5n7DkkSipK03CnlCWzqwAAeBhxHsKFM3-T3Ogl-3Z7XvtuTRveNXW6kPssCjY55aixsETKihwCPsOUM4mD3GpqCCOGmSCNdX3SpLJDfn-s7SM0ZH1NaCPwObx-P0lGKkoB-DKdODlsnHIPRkE5mjOKS0axvSum-meC-PvwCuxLjwT0FTaxK6JJDsu7xRhSm-NPi8xk-_MWH7mgAw-HRoX5fM0aBfrkXm8Frw8bZ8bldLtb-viIGqDhNcjGh5f45vL4lGrTPlcrCgEbnkCXxLsPDjnDPa61jaJ5hDLiPCrcGLhfQep4QFRyuBoWX68UFjvlpxTk-AP8G79yJ6Hwh3gzjROew9eGC3ulSwxV8a6LXEHy40vuXq6hYcd4_Pav6uK1K69-8ojZmHPLXr_tvoM00Xw5NnrzpQbuNl5vFPxZPI9J2xvK5ex3L5LwRk3Oe4eLKvzvhAt5VxWO0jet9bMCDfZR3tP3u_v8PKKbiNA==)) -- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWftvG8cR_lc2LNJSFp9G3QCUKES1nZZIKgeS4iCwjPPybkkufK_c7ZFiCP3v_WZ270XRFpX-Uhkwydvdec83M3u7Tq7yXCdx3pl82HV00JmMe51QxstCLlVn0vGLQHZ6nTwpMp9-D1_cxeKFeJ2k20wvV0Z0_RPxcvRy1Md_f--Jq_ezN7NL8frd9c_vri9vZ--uBnSAD_2kfRXnKhBFHKhMmJUSl6n08eFWeuK9ykga8XIwEl3acNdxa3edkzOmsk0KEcmtiBMjilyBjM7FQodKqHtfpUboWPhJlIZaxr4SG21WzMrRYXHEb45IMjcS-yVOpPi1aO4U0lSi09_KmHQyHG42m4FksQdJthyGdnM-_Gn2-u3Vzds-RK-O_RKHMK_I1O-FzqD4fCtkCsl8OYe8odyIJBNymSmsmYQk32Ta6HjZE3myMBuZKaYT6Nxkel6YlvFKOaF_cwPMJ2MY7vJGzG7uOuKflzezmx7T-XV2--93v9yKXy-vry-vbmdvb8S7azjr6s2MXIVfP4jLq9_Ej7OrNz2hYDqwUvdpRlpAVE1mVYG14Y1SLTEWiRUrT5WvF9oXZRiJZbJWWQy1RKqySNuAg5AB0wl1pI00_OyRcsxqeBffxX_RsR8WgRLnfuEnw5yO-F4k04FfrC72dwQSO4Lhooh9oizDi4PrpkhD1Voyq6zIzTBQawjgrZVvkmywOrRF3Su_IOJemsCl28O7tFGZBI3hHzr1yh-Ht-YIE4WYHTxSJ5KmfcKH8IFatJ7pBDGgZNR6yMbNmd7whQ3K7zlZnIKZWnjqXsKvCna06_NMq4V4oyJ4xEBeBb_k5EeXH_aoyDUYXP48y9nzOg70WgeFDEWSkpbsz1B_RnzCj5kZLrClBoPZl_dLkI6XYXmQAo_OCh9hPVcUQ2AYIdKRL04WP4Esay1JPiZ_16kDhJREHphtqvJagO8BIErcEno4A1AikSpBpTlBUVpkaYIER16F24GYGdpG4KNjoxCunLn5KtmwbSI4gck7KWVsxAZAgz1BwjtKZjJcJkj2VVSJNGx5yXphxibIxWe1zXFcGpHKPG_mGQRAfgbAFMMmMZYNJUatq0llJiPxH5mKW5ih9CQ2lRaEjVRG0dc68KPazhCzECMtoLELX7FZwSJiLcNCeWRW2D9GihtNsAYBwGcygci82CL4ns4cRRJWPkQVIqcqeEz459IGAF2ZbWub1EbgjR90_FG4oBDXpdJNg7AJNyvtr1wA5igiYdgKvX2CpOtcLRGQt6DC3xjvHNkMSMg8rBsTR3ifitX-GDq8ExCa54mv2fFc5xTKEvH4Mou4iDwWguibxCD98GgOf5TSAZYd-f2zZNJ969p6ZpOg5D4Q75Aqh0K2EajOpMzDilrWFccxKYwVt1z9ssh54fuoUIsiBNtyu8soo5BtJOg5hUwsI0Vx1BPVLxfijSdVjDaeVeEFKPW8ZZjMZeh5Yp3ogJoPbEZQWtZdyjIXYVR2n_grU6wKoSPO1FnUCJkjzqFqTCa5_gMpVkXCEcfq3CIHHnEAKfSi5buTu3hHx2RB8ASbTREPKFbBLLgf3ItTMQ8T_7P98cL-eKOjwf0ZQWJbbj8pYtJ8KkbUEFKmAh66RPS8UupE7KyUw6ENRldKvhaT9oBeiC496lb--ADSH08qikyTocjRzJQpMtSuTyYr1CcioLlGEPGFznIDhSPbKi31WsWcoBuZN8hVIU7J92khw9wSojO0W4Zkqy1qB_o8Dm1RyuoCbeBij3qjySSVOtu1Feg1Q4WfPDR1EuL01Fn2jEV6TT8aiXYwx9ieJYkH-8V9kD9Op2KZ6YA9ue9W3kgf4PVLGlBw2ayyDiaWj7igUETavwyCbjO2emVI0IDwcKCG_pBkDcev5JpaDLRUDPAl7Pfw3c9UpGLDrtMZyGZofNMEnQogmM1HHXwSq_-jytqAzKPLGtpMGObrZe3ZJY2IbpsEniw1z0ToA8hbucyzFasFvQeQ9SAA_g_YdAT6zOos5uzNWzHHfW0JIGhvqzhwXVzd49m6SgPZRtPMZyoO5XHq-NCQdk_sCquzQGaQQiVKEL99ZDurgc9u_6bez_Ta0PdIoZ7LS2mRwXmENzX6E3ZQSYZlo0id1vhDM9lkYkkR71Y0tPq-nttrveTlmN2VZ5PtYscq9C9yhcQJHs5K-qy8Qsp7EvAxLklEaPWzrZdkGDvBNJT3qFVnzwcyhh1kGAyn4y7FZhlVBc0yFIogNaUkPKufchmvnjowfBulZivyMEGoYP6H5DR-w6L2_oC-Z2t8x4SDhzpWIWYbG_4DSrUSPnIaSoowoATPVYhBFoeA4ivHh8EQTtqKWK0pKX2_oDGOLljok2AJsCwJ61h-n4YiugwQikSkSPdKEdjGU9Efs3ZWr_39FtSqE263k-aqiQxDi7VUxRha5qrZ1e11AyWTCm6m4tXob6PRqCb-GnFieK50E_aBZlfsdqPe6KEnduPeGB-DwUDsdE8_cBjYCX0yaV0LnMMqF04yZt2tAOCseajk2m1sHXACdk96zfM23Xpi1D7fZsrGrdg63DuOsYuSfdbucZN5abgkQhjAlXThpRGWc5m7GyYY-VsRJhLtryS5KgStPUKrnl2lbm3w6uyg92rqU7voKx1WGolhk05LNprRC5_ShAscT0B3nZIassImkc21_pidTR-2NeOgbERbGZh8RWBVIapTYVuq-jphV3J4shG2J6ts2T3Om4dn0WBBd4ey6Rg6hHdsX0QFSqhJOH53x4oQgo_MvDRL5rDnOUMoPQ_UQhah8VYyX3nlfRuTBu2H2l__UgaOipO4n2xivuKMCsP3oNmhdoXhCSUl2eTVGA6XcNsOGLQ-K287HIvPKiM4LN3nwpvrDFdHfHMNsl1qRFM94nBTlDRmBuV69rwmnHv8cCo-fBSeKz2e1-VF7DwR_QsxT5JQ7Fx1FlR0xbfi5YmY0uAiGoa5hJLMOUeA0zUb3UFVTXDdMj1qhw_jA2xy0Zq9uuNSz7385DLmUSpCk5ev_nHW3sMlzy47eK-T8rR5uC_GJ0jT-gkT2puKz8_PK3q9xt6Li4tu7agjZsvW3yFE_XMk9rDxmUSeMUy3mdtI-jPsqksTKtLdk8FSGbRqzYEZMWTE-Tkw8ap9X1IenWCJNjTJfRh9pEcWKOIg_HICP5233N02bnefmb90_GD20kKp6f4I8LU4Kwn2DsaNaBZRJ9G1MpiU1tzMGB4NoSq0Y3XJFKrRrdWN_RMtAxFDn4jcqLqGhvmPKP41gUb9f0TCGs0q4EHobptvrfg-uXKlhRv8qoTfYJRdeyliJD8rr_l6o9soNnxs91zOD1YDGjeYJkKMelSyPNm6dgc3cJhmF1sbeZ9oeUBgeyrGhLX8m4l_oksZGW4kzatZoeo6j54aFczOfawR-HjJotv2wdNJWpvoOXsh6Z77nj59oO4wZv_V0m0UoCOQxZWohtOAJeeji66j5Sy5tz4u18-eZPFQJStmTGtszJT7IHVjb5i-EbcyA4PqjjujOzpCkeZ4SZfFoNk5K6-RnBIjewfU6XXoHTBm86x-s92J174_fvmqGGM5SY197d3pQ46pf3o6_k70ZeavpnnkfTcS_T6KpMF_9i1PP5TRnN-Fh3reoOn7foiHa_viGg8QWvHnzkOvXAditdbhtc7DR_73Xx4ZenE=)) -- [Custom data types, key equality operators and hash functions](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/custom_type_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJytV41vGjcU_1febtoG7XFAtqkVASSWtBpaRaaQtqpKdTE-A1bu7NvZB2GI_33P9h0cH21SaURKgp_9_Hvv_d6HN55iSnEplNf5vPF45HXavhcTMc_JnHkdj-YR8XxPyTyj5nvzxUTAC7iS6Trj84WGGq3DReui3cBfv_kw-jC8Hg7g6ub275vbwd3wZhSYA_bQO06ZUCyCXEQsA71gMEgJxT-FxIcPLDNo4CJoQc1smHiFbOLVL62WtcwhIWsQUkOuGKrhCmY8ZsAeKUs1cAFUJmnMiaAMVlwv7FWFHgsHPhVK5FQT3E_wRIrfZtWdQPQOuvkstE47zeZqtQqIhR3IbN6M3WbVfDe8ejMav2kg9N2x9yJG90LG_sl5hoZP10BSREbJFPHGZAUyAzLPGMq0NMhXGddczH1QcqZXJGNWT8SVzvg01wfOK3Gi_dUN6D4i0HGDMQzHEw_-GIyHY9_q-Ti8-_Pm_R18HNzeDkZ3wzdjuLnFYI2uhyZU-O0tDEaf4K_h6NoHhq7Dq9hjmhkrECo3bmWR8-GYsQMYM-lgqZRRPuMUShrBXC5ZJtAsSFmWcEc4BBlZPTFPuCbarp0YZ69qTsRE_MgFjfOIQZfmVDaVOULDhKQBzRf94x0Rac5yQY1WEverMr3IcqWbEVviDeGSUS2zYHFuC9csIyhtUpkLE5WwXHliv86IUOiO5IkDsZwjFeLzwp2SwFnXbMJ7xbJGxGZcYJgf2Br0OkWCYOhzqoHiKZmEuB6addig65BS-teLUAO5rH6bXhqNAGG4kEqHIf5T-CM8VlOrw2b73L2l_sc6dIBsHrc-TPG31bC9PGfFksQ5O2uHlZyxZHZgiXrakr2i59hS2X1gzcxao75tjVMGC6IWgIGNTZof22WFG4did3le3iVTR5havXYcT4oJon-Gh7r7DwtgUfA2WGB0ngl4CMglGGTfRGeIgwWJxF-FaK50O45xTqWMn4ExXij_hI-FLFuoYwvMJfYmKC1BBQGBXs_sDhx3d05HV2Ht5qK2lDyqT4Q9aRWaSgVKR52O4v9iEEHkSZgSninowevWL61Wq6ALumbMNLBEY9lXzGQ3i5WRkBwLsYPHklSvLf5yBwLsHdu1abS3l2dPOirtzvZOKVacLRBdZYxoZop3WTZMR-IizbUJWtPlirVnd5_9Fk7ZHHtHD1zp6HQS8oAXnFShmvPxwa6T2tYtqNivteq-O2DKaaeTZpLGhCehi5E1wNZiFCGK7pFf_FNz-_0CAcDnLxVa1awpvL5n8l7t5tjdfHtGM65ukfr1esWbsmQ1QbqkbhBot1o-sgBULDV2G2V6kuk2c75kwoWt4uodMQIYSW27XaGcmgmA42bsvRRrCR5-EHJl1K3MzBHHGDfMPY20sxeiUkwJ0yIxvLEkEcwILSL8uvVTsAuogdor7N_3uI1bYI8aIXUrFPeNSYbY_c3WL537tU-hpKT15pTg36fDemlzjuzP0XNYap4NP0b9JAuRjVN0d7ftVwsreqGSUEMbAlXGwFUCpLe0MTeexoFsTwKnx1ZvZuIUlSsWoIn2vmCCOR64GNcqSegfZOTLfQWqMPOWIfgox1Lszrtmvs9pt2pcg3XrTMqeSezvTumnPt9M-YOE3Of0U58nc_440asZXVp4MLd1TT_qm6JrxngW1c65-5ppM3UKdPcMMIA21geex7gKmJoJFufPQ04okrAqI0oqFLrLGROIgnun8z6AId5j2-x9JZSf-Zd7iCRT4hdsEI84sPtwv0OOUtPuZiRW7D4o-VWIVa2ixz_gR4Vh_t4PgaVfzTrP4rwzjyRblmaExxCZmcsQzbQrRIJZ64YWY-JuPgiKw_8XkkLdYFccS_fjM2d_4qiVYsDCnazS4sy6nBXcO7muioCJyCycYV8xkUzr0Oi70WZHxqnhnps0Z1A7AGEoaysw5pmGbhefWuOcUnwi_QBvLYMMyWw9VMEEzfYuzfBidBXKzRSCK_iuNg9VfLpm--e3J5aUti9-z9solql2b3OvgTf26MuX7VfQIBld9FQSvmpBo4Ezj27YvhCxqBGTZGof7DGfVnRSSmNcXLrXNS5gYxQP3tYv5VhZD-ToJ2_7xf78BwHUjUo=)) -- [Key histogram](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/count_by_key_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWQtPI0cS_it9PkVnL34AuU1OBqMlsLlYyUEEbKIIVpN2T9tuMQ_fTA_GQfz3-6p6eh7GLHusxNr9qKqux1dfN0-dXOe5SZO8M7596piwMz7odyKZLAq50J1xRxWh7PQ7eVpkir6P3t0l4p04S1ebzCyWVnRVTxzuH347wK_3fXHx2_R8eirOLq9-vbw6vZleXgxpA2_6xSid5DoURRLqTNilFqcrqfBfOdMXv-mMrBGHw33RpQV3nXLurtM7YimbtBCx3IgktaLINcSYXMxNpIV-VHplhUmESuNVZGSitFgbu2RVpRw2R_xRCklnVmK9xI4Vvs2bK4W0len0s7R2NR6N1uv1ULLZwzRbjCK3OB_9Mj37eHH9cQDTq22fkgjuFZn-b2EyHHy2EXIFy5Scwd5IrkWaCbnINOZsSpavM2NNsuiLPJ3btcw0ywlNbjMzK2zLed5OnL-5AO6TCRx3ei2m13cd8cPp9fS6z3J-n978dPnpRvx-enV1enEz_XgtLq8QrIvzKYUK334Upxd_iJ-nF-d9oeE6qNKPq4xOAVMNuVWHzofXWrfMmKfOrHyllZkbJXwaiUX6oLMExxIrncXGJRyMDFlOZGJjpeWxF4djVaO75C75u0lUVIRaHKtCpaOctqgglquhKpYn2ytmo1mUqnv3O4DvC6XLhc1loYSgcCRtGhu1e25eJIqMk1Fr3i6zIrejUD_A0OBBK5tmw-WuJTaTSQ7nxMMXZsbSblkEjaGevxgziW2NmRTx1jJuDbIjc9YxeucS8AMXhkqLxAazTXCvN4F-lIgiOcOtmGVGz8W5juF_mGo1opBT1MpqcCcUuYGK01-nOcfZJKF5MGEhI5EipmX0InOPbETUMjuaYwk-sw4So9LE6kdLUqUzaDDbDGBQLaAvzFAPWb4UqGqbLjIZC0oegYV5jSTT19VLWJosIm8HZS2bolATM00JSKHQZJs_mkpxtAcjyU4Wf9epswu5M0cR2c1KNwz4APTR4oagp_QnVSFZHlaOJBxbFdkqBTqgKKPNUEwtLSPkQkA1cp3LPl-ma_ZRjKiy-NJKmVixBkphTZjyCq9MRosUSLGMK5NGrbC7oE7ZBTk7j8rN-T0XpA_wohOSiQAoVVBIWYNJVoUVORBLAz4bJ7YrSdH4gQrq2vylxdmn81PB9QWX_6Vbq_4jV-IGLvNJBEd6b8OfOiPZrQ0_683UIs5TVm8sBRXeXC_hPfEgo0IHFAJKI6SDNYSfcAv0jMeU1TTZEvgpMTgCy7ws7JeFIiZbcgvE57t_BnUD-MBSb03yWZRJIa78QZqHxL4UCoxalgmYowNFUSv1tgWS_TO9QABuIIU_MViWYgEfrho5jNwmSPC2lKSIA15BQmxqURsYmuH8fitlAJ86b-5NC-s2F-yx12VQjwHWWCfMGeEOg9yzGnkJ8AA0Oc_VidLn4klkrClcjW9lzBsjddCAYkGwiNKZjIJAPKQmbKFYlxKsDAS1ti_9-NQis99a6-NeefOtDY002_Jh7y55os0F4ZHzxhW3ITER6E_jcWPo2Ovt1247IbojgiBfggWEcELlpcbG8fgGjr9GVhNiUxCC3H05IjwQwp9HESiJKE1pQUZYPhEL_H9u4uEjkqFSe9TcZcLHrfNOGgDwzlX_NHyEiD3kKjpSyN9K5ZU33VQrwyZin1WhVlByXdJ0XHm9J56c30cjj-PUKbi4fKUxsStbCaXngdshC6y5zaMUvjR5kOg1SfwMfWW6DJ3AANUQUGfoEp0Yj1fSZE-k-xamfO6Lg2fmm_gxc5hXSapMY-PmJoNbGUBbUICFftXLs-_tlZKfhY6ARE2BfEyUakSbNh6U6byDE3xTmY51Yt2p_TY-MiESJVYox2NHZ-iwnFjfHlJiuanSmhx8VwcOkU-eyFuDk1wjScLnIy-WfDXXVi0DGYbdAy8hRoPLNkGagalBRSQfdehd9Vx6DMHcmzSzjeefXVbglMTPwVUb4JIXSoFkzoso2lTYIuBzhzbUWTU4t8u4UgrhmTuqpF2wUpT5Ad6QhA7AWnno2GA7DRvV1G0WUG94XcTdl9FzZ6WkaCS8mCCfq9TYGQVX3q9HgcuxqajrA_HOEcnxOJPrYJUSdcgCJXPb3YYcH4dtUY04vnDB23FF3Dh0UIxMNEmX4NjDG-JwQVzILqVlrxAXSOddoG5vr_x8Rtna6538i4JTZrRJTFzE9dWI2YTM1BJtWtki466cx8H3-zWIQiZDkE_qo3qKVbSnSus-xiu7EZTiKKuM-AddZ1BE7j5Gn7MHfAbpw6BJdAS659rkkPqgpwo58bQiCqmV5zqCkdiEtF2WetgBzKcSTYy1YlW4sGYlrQqllUSp-CQMyXS5EppMZHLuTSixtqShFOtjbDnpDg5cSNxxtyU4SlPJaO_nLV6Cj1ybIKB6ZrrZ2R201GoqjjER7_f_sb_vIByCfqoYJVdpkyo4R-Qeyiq6TA7ZoYK8EBZ8R6arCBSxjvIkMifbut3KkG-2NvS4End07bvOj3w_rRl7vz5OjPKio9OtImcOiMzYsgT2c22Ql1awAxJ3aaEzorqQCjq3Q_dqQet8DbcujBzU0uGu5qsO6D17BqSwfK0pKbmP1lB8fOnrpcy37cYtYoNfqH93gaksqe6lJdD48Vje64AbDAor8KzZ5d9-r__1ixvnGhISdHt-d3OG-W7Xz9x-BuUpfRR0OTdMj3ofVcwTqhXQkLysC4NEqJNitJ0UvSPx3Ej70wggSF4toZ7bS0Uk6qbkUJK9_XoIPbafbBPAbrPSzsqOp-jpyACQZjIv32pQSt-gV8pQzCVJ3FEUNBu4WSJOw_e14KkjHLXRgCaiCDnh532SrhPKXBk-0GtYX6w134Tp4YxyFEpkpApm7p5oeBNd2YXjMcWuopB0yErFRLzq8-bR6T5cKMLfmrntMJh6dqhzbgcNfwwrh9Bm4jjE1-ob-lPTpLf4etOVb651mip0fnqJ08__lwzG56ddWP01cqhJczwABLgV2ZRT_-lrTYigR2bBKktnKNVj5nM0Huq5LCIbADqWgX_sYtGQ_VyH8d_aIn5JmgyQU_xEGReW3zGzXRdhbofgZek6F39uUe4_61cbj6alEsAuO6am-vc6o5bcSIHAUV16-cOnkr5vafCVt1VHjvxQPkPA4fvvjtprHG_iaf6ZNDBlr7l5IA56yPh6hAU1L6jH9dyJi8_x8XElvt_YenJy0vU32Z3AWN9FtxFmSHyi22vAzJUG3Qb9cM9tVFT03hZFDiMQO91gQ_Xl4o0GBY5EGVI1qIYJt_ufXavavd2RDi_APT-9KsJF1B0ggNHdht7aGy1ZfriJtEut7omJtmHRbSvfLui9Bxc2tUVAKk8HioVMth0OU4lffKHTNICZe6F2z5cUgtKC8g2OH2N0ZuabBnMkfrrbMrersst7G3IDEGyXYTs9s-0wjRsvBtt9tkEnnSZuubM0jerLadl6XZuEE17APS2quizdBLa8WT9AugFcl1x_waBFeYA8Xbtb4N_uIKRz5C-MpWYimxjp9Dt0fTSRzuo_WnWSB6UODt8XB5hOV9b9RaszgPyJ2ts7-F4M6G4x4QuFGAyABha_3BvsIJLxjP_MFZlZQ6ZSKsLgg_ubFAbQxZL7znPfzwN5WvPwZ-f5M__7H7PCY_4=)) -- [Pre-allocated memory](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/preallocated_memory_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJylWAtv4zYS_itzOuDOzvoRe9vrQbGNpskuarRNiji7xeJ8EGiKtolIokpScVwj__1mSEmWnTi923OAJBbn8c3HmeFQu8AIY6TKTBD-axfIOAgHnSBh2apgKxGEAS9iFnQCowrN6Xv_bJ7BGVypfKvlam2hxdswPB9-24Gbz9Pr6SVc3d79ent3eT-9vemRrJP_WXKRGRFDkcVCg10LuMwZxz_lSgc-C01AYNg7hxYJzINybR60L5yVrSogZVvIlIXCCDQjDSxlIkA8cZFbkBlwleaJZBkXsJF27VyVdhwc-FIaUQvLUJ6hRo7flk1JYLaGTp-1tXnY7282mx5zsHtKr_qJFzb9n6dXH25mH7oIvVb7lCXILGjxeyE1Br7YAssRGWcLxJuwDSgNbKUFrllFyDdaWpmtOmDU0m6YFs5OLI3VclHYA_IqnBh_UwDpYxkSdzmD6WwewA-Xs-ms4-z8Nr3_8fbTPfx2eXd3eXM__TCD2zvcrJvrKW0VfvsIlzdf4KfpzXUHBFKHrsRTrikKhCqJVhF7DmdCHMBYKg_L5ILLpeRQZRCs1KPQGYYFudCp9LmGIGNnJ5GptMy6Zy-Cc67682ye_VVmPCliASNecNU3pMKjlOU9XqwnxxIxQ4m4z7Rm28mrS86tOVZUCiGi5UcRrbQqctN7YRuVpTqwKRWyL1jqJPtnfu-_dzmJ1LEkUZzhzkSpSJXeRuKJIY8CcXvBhZZiCde4mKEdlEQeDPGG-bgP02cy2uvWBiEWj0gTeLv7Qrunkii9gFmrjQH8RRlGBcNeGD0wg-wzSzlVu3E28RlVFcVkZSp63gnHTFsIMrssEpcBnGExwAYTR7hS3bDMkmf2qCQC3mYsxdTwrrxh74aqHtVREYtA6QfKFgfOi3a5J0dmGLbIHqVWWSoya_ZRf48dQRzGTp0BjcY1teQlL3SuCKTKkm0Ppi5Y6iYyswLzz5WicYRhHqa4t8485gXaSimcDXYOlImVk6icsWSlsHrX6T5n-334gRmM125zYeZZYSiszywpBIyhQIfvh5G9qBZ-ElvsM2MCclGqzzBGjDmBR1Ly4Yg0t1swibJoknQcN1Smfil6ENvIVIrgTHYHaNE7PpZ2lvfyY6ASCUNM8zDMilRoTBVfLCNnYBKGqcxa7QriL5hGaHMpV4VneJ45XSP_EJFtuOPUNiVCH8Pg_Pzv5-fnlYl7pAf5ky53XBYlgmXYCbiKRcVOrtUC_0YGW2-KlkmHwHIVhglCZzoqRUaDTvk8FktWJDZaM7OOlkXGCd8IOZtMataNVRqrzRssP5XdRcEfhI1KkZF_mDOpyUbH7-SkA4OX1rRY1hbHbv8x88WBszCshGptLMkDzSaWfdWSiAOAifa_fhzkr1H0WWHX2NBi3APsk5HvG19vzKUJno0siaxyu_I1tl7Ji68xc7xxkyo5fz3dcudZVJIQRcAK7An7bMeykjH2euwpFsYEyG9jyh5E1FwcvRZAvec-8QaTScs_KXV8cXXqmprsnn1BNgA1SHbn4OhFFlaxhqFvAt51E1zPLbTaEwqgUnPWLg58YcvCwsXjO-L4GwOG8wsAKm3N-ANgH1lgOeOBJq1IjReFFpU6jgY0LbjO0S4p_1Ek2G6hKlhqthzzDts7nVmIGk8XGu6WWqVHR2KJ8QDcQVV5Q1RGLXS3a8ZVyzQe7F5jo3NIRS9mlrXazzSgIjpb6OzAZ7V1VXPevWzTzydTtqnr3O9ea9tv6b9earvTKq8k5BvSHiC5iZrdYXSyYbzlusE85fPzwUTlB6VphiMybsoffvw8sf3uBI6iVaIWGHMEbvyQqIq0aySs3nxXtpRW1Wd8kCIXtYwrbVigpweSeTEpUqzSVBw4ufKQdIXQgF2CBN_zETx4JUM3AIrJKZMejbeyVmy55x6S-7dnthlvnSbKCG0B06zrkgXo4DLQwgfQndDzs2H7JFOk-2dcnaKq1MZNRBGKQQtMqDjylCltyorwcg2SPuC9qiSjNEJjmjiKofZDkYxL-Wn81HuCd54Y98Xh2UPp-X9b-0OcmOg4I2cwbJ-i8SMip8uK71Tb0iLm2hGxJ5hcUuBv8niKRaf5pxyS1AkGE6Ue8C6RVxQe8OYcv0mdE8WrHw5QKFqh6dE_xFzD6ZXr-abgHC-K7iaAMphpmcLyxKNhCaqweWHbbkeW0Cqt_qVhFkfvVrsNO98ZSt_LehzFkPHi4CYfNNg5PY5Mdo1zyLdkasqIW1i-jlgctwaVenkhUxpvnWg6YU8i9hvwXOYCnWspo3G33Dqaya3IYRD-t42o2XVGI5pNB8N_TvBA956uPl3dRlefri-j-7svLcJ17eKYYWmv8ZZDdd9ucO28D8Oquo1Kj8vDNPK-djvswPvh_-n1ffiiGCjwuiBq542cP3ZdZcxaYBv1aWCgSy8ZBHcXxaXzgD3xH99QXJhFQ5-YBkvy_bBqlT6VcHfWeEGLGlt-IrxfRMrz7UccGGbbdKGS1t-OFTtw8IUmLLVsoYt2u31RefM4xX7MGTpU5ayjLEsas46DX7NDrP1eIG10o64K4RgEjMdHPuqScEc4PrIwGsE8mPlqCx1XzhPTwocwD0jEH_lZnPiEBpHg5f91Wx-ZTF5V8kDLkYaua89BJyjfA-j968Ige-R8MPy2GOCyyq1_lxh00dqYv3s3-A66TPP12KTRd-fQ7WKEtutGKrxudxOWLtwLxkQuGjY55wk-fPSvBPGB1UX2EDx3qnVsfwfrWP_B87_dz38Ak3P-7g==)) -- [Heterogeneous Lookup](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/heterogeneous_lookup_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy1WWtz2zYW_SsY7WwrxdTLjjeNLGurOO5E09Tu2k4znThDQyQkoqZIlgCtaDXub997L8CXRdn9skpm-ADu-9wDgN62lFBKxpFqjb5sW9JvjYZOK-TRMuNL0Rq1vMznLael4iz18Ln_6jZir9hZnGxSuQw0a3sddjg4PHbYxW-z97MpO7u8-vXyanozu7zo4Vya_1F6IlLCZ1nki5TpQLBpwj242BGH_SZSdIQd9gasjRNuW3bsttU5IS2bOGMrvmFRrFmmBKiRii1kKJj45olEMxkxL14loeSRJ9ha6oBMWT3kDvvdKonnmsN8DhIJPC2qMxnXhev4C7RORv3-er3ucXK7F6fLfmgmq_7H2dn5xfV5F1wvxD5FIWSWpeLPTKYQ-HzDeAKeeXwO_oZ8zeKU8WUqYEzH6Pk6lVpGS4epeKHXPBWkx5dKp3Ke6Vrycj8h_uoESB-PIHHTaza7vm2xd9Pr2bVDej7Pbj5cfrphn6dXV9OLm9n5Nbu8gmJdvJ9hqeDpJza9-J39PLt47zABqQNT4luSYhTgqsS0Ct_k8FqImhuL2LilEuHJhfRYjiC2jB9EGkFYLBHpShqsgZM-6QnlSmqu6d1OcGSqfxvdRv-QkRdmvmBjL_PivkIRz13xpOdlweTpDJ_3F1nkoVYeTnbGlPb7OktCURvSQZop3fcFgCLsp3ztpmIhUgE4cj2udC9onv4AvroPwtNx2jwliJV-doLUIuUw2vfiLEIAuPmbF-brlEcKMr-qC1RFJBhPBV_R6_4rg8wfqWMCAULxUkQizpQbxvF9lrjiG4cyC0hrgeMf56kUC_ZerKBIYFILxYJ4jZiFiqL5uipmVCnTfXdYsNGorNhdyQk32L3WIvNr-hsUOmwdSC9gPAzjtSIqqLhQM8rZvdiQCb1JEKhcm0ZZUEU1W6TxipDmxRGSgEi_VyhD8x1SEmeaBfwBgQtmFjJVGmeDh5mnAb-kPp7_AYXNuaNJWRntLALWiTZsHaf3CwoBZdB5XmgAKYXE5kOsIgJOUCJFRMAdOMHBIQWERgRiglFFKGTDassD5g-AZZoNz39mIgWf5Er06plXAByhjG2u8oolXKZjMOug7ckdqU8FsoEgkLK7NtypOHWl7zAv4FEkws4dAx7Ki1JCwQcG9HS4gdhQ9KgrQrHCQlAfKlLepM8hfwE8qwRU52WJgDJtXcqKgJfALzAAAKrGcGeLpMpKfGhAF6ZLRJgrYmoPGg3ySvkGrmJA4jyUesOIWOJUmRx7QLZxgr0ngHpJ-W0LFyBAO6gCAs5xoDDpohSPI8gGei9z0jMQ0-uY2eQox2AdQ53HOjCADmzB_HqQ6KSp8B3l9M5YNSsLhmu9JM5IOHYBOEChLYCvJT2XhGvqZAy5GMMpa4LFCWP9PvvZxmiQi0uBBW4cjVgTSnL9SRrPhVEPlhmyM1KFPxpRDIWd541R2KCu0VYVQbnZBx5mwiUlpwxakesTosc-kJwXQm5McSvTABxzqddSCdpe8JSaCpTBJoMUMD8WKvqeKANciyQ4ZYFHiovOMWvdbXT26ezSfX9-9nF6de6-m918nl2fu2eXv_w6vZq--3jeLo13cufqsEVoEnIsDAmqCJNKoai-lEqLhryDAHgPZrfVI9UITS2ADRAilmClRvBwj_ZVSFw5lA1qvgGSPL0HuaDVtmV9lbFOb7Hahb0xKo34SmBtJzjkunZddRmhQcn_Qi5sp8Vpu9NGFFDvf4dudcw9ipJqxniWk8N3kPsFg0Kb1XM02l3a26ji5KkgsPUfgK7TKiyXQo8HkzaIdwwaPwOZK0IhpR6T3jPpwCTZ6VSBzq5-GTXpH76kXwmQ9wsDw7qBVOgsjZhdcDG8cSWHk7aJ6hUbHg3ZgfHBxP54Gz02Q-0p-ZWgM80g_m-QA_1zGVHP4BJZkClZyY0DBMFuAULS_hIQQZNLYe3F4scP1w4rnq4-XD9F5jyOwyokQSBHXBgAd1-Vz2mgnodoKBb6BYyCzl2Mgmo6gz0rmZaSFhztXUijBx122oh2NNHpUM4Rk2c27ybjeaaNAft7amC438CwMHBCohUDFuhVCwVIYUGABpVRG2BPCaV84HGlRhlRtnJBFnawCpL0mtJQpo-mQ-n1hhah4ndaWfm23aHDusPH_aJE1aVoydwg2hssjL8U2BRg7hHewffE7FX_Oh78E_YgHNYyTmeEwg5OOTVpfbqJ3poXQMIQXK2_t9WIX7HDR6dWmPJnNeTBb4u7vyVBQW4r93ul9vTd9gUzIeyjeeriDgGW7DHUoGklmWyb3m4fH_Ok521RO6eNy-pOGF0QHLYtK5UfDsDsUe5obeC1w35oGDgcHjts2DBwNICBgRkwUGr2rAQPekZP5NvRv3rHC4e9HvYO4XL4pjeEy9FR74cCXgQZZGDlzsVSRhVOWPF70LlzWGwbL_NZO6fP7SAPxLQs1AJ2R3LlGhYhL8eVXWEZrlNpgsmknRf6i820SXmP3Gx37GQzYG7zoa8Vvm1jx8tOXqYKm73swhbtfZFfc1Nw-3iS63nsdGwK8XuC2bm2K4l0alk9qFJKp2zt_9Deu_l4Y89j9kwOyyb3fWm-TpS7U6BTEdLXFWZXx2Bnv7fnKPLcWQIXyTjK6RM0N-3HzWnTrKcYAF8CsypdPWxUVngq3n4IF5t6RDDuzSFRtmjFkG0t6JXDIaCMHLMbZPwQhnahGE-FTHfB_6PXx39b6O3bt9A30DODQW6JvkJBmFjFTd6R-wPChR5jscd71S7C6iHptjtmdaWvUbtTCpSXr0Tkmxf59HxS51k_6tywgHb1n3FlIWvDz7lBqp76QOtwsoEmU1mo4fzDvXvcneHnLNqQJgAV5Iuqw5VvXVUcBLlN6nF7f7JP0OQ7KLJj19UyXXslqxkKTFhGkm5tYOh7u7pHkDBlcAKXcemoTecJOzgoOae67zJnbZAsRIBUds8QOT5PK_GUE8kLD3fH4zF-7TZfIszu2fYpvMbB3V0ZOdAxgkUnw_3TVXVXePhUuOSgRmOH9fkd1p0022nn0f4bxinloG8E97bhzGd8IygXxXTI79NMODntmL3VqXXM1hQTiDvBxiTewvtWfqDBi10lBvAO3rQc-j4jQziLFH_xaEUPnjc8PM6GMBwn2vw5pNUF1afewcHwDevy1AtO1cp9M2DdLmz-dJc2X77wuyFfzelvJKGcV3R6nhfCS3vogRdwDonuW49OPg6MWhuHbm89fqV__wPolNZF)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVo1u2zYQfpWbhq12K8tygKyAEwcz2gYwVrRBEwQD6kKhKToiIpEuSXnxDL_77kjJllMDKwLYMe__u-943EZWWCu1stH46zaSeTQexVHJ1GPNHkU0jnidsyiOrK4Np9_D13MFr-H25v3fg2tZind6tTHysXB34tmNYf8TerwPZ-lZOsCPP2L4dD97P5vCu89fbj5_md7NPn-C32F6fT37OJvefbhNYFqW4C0tGGGFWYs8OYT6KLlQVgxmuVBOLqUwY5iuGC_E4CxJSW84V3P1q1S8rHMBl7zmemgdc5JnFVslvC6uXmrkbCidMMxpc9WVuMLU1g1zscao2VpwVEiKUyrie83K0yKLMqG4OC11him71KZKfkirYu7YhFuX52J5dCa1dUaw6uiwlJV01vsbvg59-nOJPYICtbNFXT5l4plVq1IgHEG8MFIs4b2okAGYkxMWaoudB70EVwg4IAjziDzMI-8Npjcz6_vj_dyhKkn9MTCD9qrcgFRrzdkCM1gaXXmH3pip3CvVVuSAKECupXoEvaJmEBmhlE8CzZEHDrTxMZYSrbQCBlY4yu9JbA4p-PZL5aBiUvXWWub9udqiBIOQ77_EBgAm6NNdHE7vWVmL_SmdD4fwoVq5DdhSu1CKEStipHKY7GKzZycCQodSiRJBWZMnmxASVjS_wBa6LtEIcRQl0giNbM2LJo4rmCNMNqDEWhjQnNcGU4GN9t-r2kHOHKMaff6cmiSeVwYEpZghAFmbAoAvbzDy1YW6Xur7rA4WjXaTzae6WlASHtehV4UVk8aC01RBaIbISR0JOR5b-a_IXCeIqitKyaLj8_RVmqYH5-90hdVgRgxnViK6C0at9908T3-DUjMkAqNBIwtWY8yDY5JmQYq-0-T84mQSB--TIORClr19VsOun343N6J-zanbQET_R7oCm9t6w-YGLgTKDEaevvRlPaM9th3QWnw9N0Mp5HUCdCVhxvuJ8uyEfdZxo7Dv7fbHLu-OlXzA7anm7nadAvGiQOxpbsKV1A6PLyRQlVTD1TQeH917l0i8q6b5Hsc9oP2LrlHru9dRTRbiEYexH3ftE6FyOkqP7Y-Dev7uw4YUfzJwM4gvQzfHx8EDMxcI2Es86EbQDf-32zROEfntKB7hV5IksJWx3O32_Q161OGcjccVe0JOthd81q6YXtNur8N1TY163EsvO3S-2mK4rvbKaF4yWWVGuNqozG1W4jIQgUJTj-Iw81dXTRiAr80snmxIU-UETqL2DbKsaUjW8xXKPmxbxwAhDTidwZYifZXf2iD47-6itd31O5M387ERdlz9AUKPOg0Vjgcp0eYOGfa8QtzovYEuGRp3twgjrS5aKEvE9_-53dDMK59iWeP4GjdPyNJDinSAUQxnngo7TxqL3hBOZq3mktE936XRQzfAQ1v8EicS_cEDOc2czmjBIVgPuA2FVa8ciGdpXXxsjgowmZy80B9axMjRT89h13mr2Kn9Xhi53IRdRQhQc7rgYkDHC3_cbogO7Auty-ZyRuMmShZMJoETbWf8U6p3KpsXOTZ5nyRum7hcQu9lQGRwsxY0LtbLS7zib2vO8fn7C1z7iqi-xt8c_UQXsAvuGr7TQsMTfA5z3Gf4sDKHV3Ok1pyPzs7rEYr1yoUndTTAiBP-5s3oLQyY4cXEVtnbFAYDXGwOPxxWI_JByaqFf2eXctHxyTkv8RAfB_RExwPcU-op2sWtHAfwSI70jnbf_N9_4DIiEA==)) +- [Device-ref APIs for individual operations](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzNWXtvGzcS_ypTFe1JsZ4G0gJ6GDWS5iBcLwkStzggDjbULmURXu3ukVzJqqDv3pnhch-yEsu9f84BIu2SnOdvXtS-ZaQxKk1Ma_xp31JRazzqtmKR3OXiTrbGrTCPRKvbMmmuQ3oevLhN4AV8fP_6P703Kpav0myn1d3K3sgHO4byEdphBy6Hl8Me_vdTF97-MX89v4ZX7z68f_fh-mb-7i38CNdv3sx_m1_f_PqxD9dxDHzSgJZG6o2M-hWr31QoEyN780gmVi2V1GO4zkS4kr3L_pD2DW6T2-R7lYRxHkmYhnmYDowVVoXBWmT9MF9dHe-IBO6IBss8CS2aQMRXJ9dtnsWysWRXOjd2EMkNihVsZGhT3V-d2iIfZJgT8SBLYxXuTu9SVmqBNAZ_qizwD6e3GvnfXCah7D9SZy1s80SIwkdy2XinUmO1FOvGy1itlTVMb_DC-feXJfoWCgW1XAbyQazRDGhHt77QSi7htVwjdCzKKw3kBiED6RLsyh8Fo5DB9fu5gWWqQSWR2qgoFzGkGWlJwINY3UtcQp_bwRK3sNuZy_zr-wWSTu5ifxCQOp2FUCSwkIC7keFaRrjuZQlTlGWjBMnH5G9bFUBIydsW2F0mTSXAL0lqJdyslIHCAKCcKlGpOcoEWa6zFCMJ0iTe9WFuaRueRe5WJhGKYVMwq3TLtlmjE5h8IaVILGzFjvZEKe_wzER8l2plV-tSpEHDS84LczaBgXu5M3hcWMiEMUzIZDKkcIkg0zJSITqKTGIdGwqMSlebCS3W8G-RwQ2awXsSN3kLoo2kJvQ1DvxL7uaIWRQjy1HjAr6wXaFFYCPiXAZkVrR_skE51QIVQwGQz3iMIvNig-AfdOYskmjlU1RR5ExGjwm_9zaA3xOhd5VNKiPwxk8q-QwFKOCDV7puEDbhdqXCVQFAA1uFGawOvWOCpOtC3iEgb5AKf0sQw56sxqTLPJwb04LwMRWn_Tl0eKcBhEIaKnb8FqEEErMm8fg6iyRfBywE0bepxfDDVwv0h5dOYKQ58sdnyaTH1gV0R6xcEHjufXiHoXIKsjWgFiZlHk5UXxQKjmlunbh-9esimzwMsdQt8xjZ-u1FRFmJ0UaCTgkyiVhLwlEXyqcC4rU3JUZr70p4YSoNgrs4XYg4CGCTqgiTU4ybEZSOdZuirEBYF6V44s-HWAmhM85UUVSDzBnnsGqMx0b9iSFWIuGMY1VskQPPOIAh9KLhu85tsqdjIqf0hDabIR6wWEXz6KH_ABewiNPw3j28cA-v1br_MKGU2JQ7TPOENJ_BcEJrGKmYHtpEdFoq1YG9k3IwcGAsSsm3MOkOqCW06VW79McnJP25U1JkmpyKCppa2lxj7fpidS6_EAHFNYKIL5U2FhVGBNHjndrIhAN0K0yNXAlxCr4vSxEbR4jO0G4Rk612WDuUcdAGL2sBtH6BPeqNxuNMKL1vKtCtQ4XfHOo6AVxcFJadsEiv6KEWaCdjjO3pSRzcl-KD_HExgzutIvbksVt5I30gr9-ziMDloso5mFg-4oKFYq3C6yhq17HV9ZDoINnDiRr6JtU1x6_EhloMbKk4wfu038XvoZZr7EHZdUojWY3tapZip4IpmM0Hix32AfL_qLLWUubZZQ3bTDTMt8vas0saEd3VCTxZap6ZoU9k3tJlgatYjdR7IrOeTID_Q246I_vMqyjm6DUNzHFf6xMItrclDooururxXF3Fd3qrECHKlhz8cer4sCFtd9wKq7PEyCCFfJYgfseZbVIlPrf9u2o_02umvkcKdYu4FC4zFB7hTbX-hB3kybBshNRZlX9oJhuPHSni3UBDo-_rFnudlwIT4gARuGC72rMKvSsjMXCiw8TTZ-UlhnwgMH2MPIk1tvp6F6Q6khqZxuIBa9Xk-YmM0w5GGBpOJW3CpkdVTrMMQRFJzSgIJ9VbLuPl2yIZ_rrO7A5MnCJUhKb0kdHQnJARMfv4AZomHJqXExnjbOPg36dQ8-nD0FCSxxEFuJExDrJ4CLP4quDDyRCdtINEbigowzCnMQ52KX9SWsK0LCjXsfwhDUXyIdMgSURCeuBFYBvPoDdi7Zxex_tdUitPFLsLad7WM8PA5VqqYpxaFrLe1R11A55JmW5m8HL4j-FwWBF_hTixPFcWE_aJZhf2-2F3eOjCftQd4Ue_34e96qoDw8BN6ONx41pgila5KiRj1u0yAUzqhzzXdm1rnwOw3enWz7tw68Kweb7JlI1bsi3y3nmMC5Qcsy5e15l7w6VrhAG6UmQiVAjLhTCIIpyKBRr5B4hTge2vILnKDFp5hFYDt0rdWv_l5KT3KuoztxhKFZcawaBOpyEbzeh5SGHCBY4noNuWp4ZR4YLIxVpvxM6mD9eaMShraPPA5CsCpwpRnYFrqarrhL3n8GQj7E6W0bJ_HDeHZ9FgQfenoukcOpTv2L6ICiyhNmX87s8VIUY-QgeZThdozymnUHofyaXIYxushFkF_r6NSSPtQ-Wvf0qLjkrSpJduqZHowjq3gtoafapd4fSEJSXdmnIMR5dw245p0PnM33YULO6lpnTo3VfAm-sMV0f8VjTIbqmGpmrE4aYorc0MsujZTUXYBPxyBp8-Q1CUniBo8yLu7EDvChZpGsO-qM5ARRd-gMsOzGhwgZphrlFJ5mwQ4HTNRndQZRNctUyP2uHT-QFtctWYvdojr-dRfHIZCygUUZPLlz9Nmnu45LnlIr1XQXlRP9yDUQfDtHrDhI6m4ul0WtLr1vZeXV21K0edMVs2_k5l1L9H4ig3PpPIM4bpJnOHpL_Drrw0oSLd7vTvpMVWrT4wI4YsTKeYE98270v80TEu0YY6uU_Dz_TKJYokir8ewE_HLXe3tdvdZ8YvHT8ZvbTgNT0eAb6FM0-wexI3UC-ihUQfpMVJacPNjOXREFVF7VhdMoWsdWtVY_9Ey0DEsE_E2Ci7hpr5zyj-FYFa_X9EwhnNKRCg0O0m30rxY3J-pZE3-KcS_gXDd-1exLW4l0H95412rdjwsf1zOR-cBjRuME2EGPWoZHmydeUObuBwml3uHPK-0HKfku0FjCjX8jMT_0KXMiLeCppXdS6rOo89NVYwN_exRsgnSJftpg-eDtLKRM_Zi5Ieue_p0yfqDufsHx3dWgE6I7MUJarmNMwl0-FVu6BVWPJofeTXJ0-yOJTBijOmMzbOlMdJ6qO7YfoOboRGBuUdt6Y7Osoi9fGSLouRZmvir5EKJYbuDqjVbYXYu-JsrqtfP1vJJgxHly_zES6nmXU_jbZ6KMcsvLgY_Qw9ocPVzKyDn4fQ62GRtPif-5WnF4v1gn8vjdWiRjMMwxhfIgbpp1Z8gdBK7luHrl_HjNVYR6-1Dp_5318W0dhz)) +- [Custom data types, key equality operators and hash functions](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/custom_type_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJytVwtv2zYQ_is3DWvlVpLtDFsLxzZgtAtgoGiLJhsG1IVCU5RFRCI1kXKTCf7vO1IPy4-mKTAbMCzy-N3ruzuqchRTikuhnMnnyuGRMxl7TkrEpiQb5kwcWkbE8Rwly4Ka5-GLlYAXcP3x7d_-FU_ZG5k_FHyT6Bt2ryfQPYJLB3Axuhj7-PO7B-__Wr5dLuDNh08fP3xa3Cw_vIdnsLi6Wr5bLm7-uA5gkaZgTyoomGLFlkXBXtU7TplQzF9GTGgec1ZMYJETmjD_IhgZueFKrMTPXNC0jBhMaUnlUGmiOQ0zkge0TObHEhEZxqWgGt0n6fxkj2tWEC2Lgx2dFKXSw4ht0aJwyygKBMk5kVRuOCXp-U1dEKFiWWTBsVlcKl0wktnl4RD-xFj4EYu5YBHcsQfQDzlbCRQqqQaKYDILcT0061BhKIAL_etFqIFc9p_WlwYRIAwTVBGG-KfxIjyGcQdQ7Z4q2-LfD2ACpLrfebDGX4uwuzznxZakJTvrh90540l84In6vid7oKf40pM-8Ca23qjHvanBICEqAcx3StbpiV92s6qt6JSXrS6Z10RzB-5xPilWpn4Gd4P6HwjJ7inLNVRYJbosBNwF5BKMZY9aZ4jD_ilJ-k0Tjcpa4tjOtZTpE2xME-Wd8LHZKxJ17IFRYjVB6wkCBARmMyMd1Nztgo6hgoxw4W4ljwYrYU9aQHafF6B0NJko_i8mEUSZhTnhhYIZvB49H41GDV0wNNdMA8t0_gDK9BHBUmV2SKllYx7Lcv1g7W8l0MDZsV-VP95dnj1ZU6k7OzulWHO2segN1rpmQAS07QZkjEzPS22SNqxrxfrT6bNP4ZptuLAKIjKZZOQO4duuErZgbh3hngyVpbFt04lMGxrO3dHA64vnhaQp4VlY58cab_sqbqEF06OYeKeuzueNfoDPX3qUcq0bfLBn8R62Og41351BxtUd0n4w6EVStowmSJUcvnKdwHg08pABoFKJg6VU6DjohMGGb5moU9YLc0eKAN5LzApKNuCU4LDhKMwVUOwjePhOyK8G7itDVTi8OM6nQiPlrEIExXLAXJjUppJEEBPaZPf16JegS6Yxddb4v59XVb2AMxVNmvbo7RmXDKnn1c5rg_utTwPSUro6JfePYdgoVeeI_hScwzbzZPNTxCdFiGxcY7inY6_fVDEKvWJa2hSoNgd1F0B6S5tzE-n1Q48ENY7t3MzkKWpXrIEm2_tmCeZ4UOfY7RWgd1CNL_fdp8fMTwyNj0psw_X5epDv67leNaHBnnVSsGeK-gfL-XtRfqTYD0pxX82Pf75b68cF3q_k-oI0mRzcsKZmBs1No9XEjDX3XJjfMgxBhtvAY8DE2RwfRBzzKWDNsCxLTPYBFxTJWJ8JLQUa7PaeCETBbY15G8AS9djRettL4Wf-5RYiyZR4jkPhnius2dvOctw1Iy4mqWK3QcurZlu5PRzvgBc9Znn7OASWdq4NnrXzJsEGZdtRTHgKkblnGYKZEYWWYLXWFxXjYncnCJrD_5clDdyia4pt-EnB9ieOxicmLOz2sCO2PDDrMm7n2LG6vgVMRGbhDPuaW8h6AP68vs50ZFwb7tW3yxjcAyMMZW3nxRrTMJ3CyrkuKcX3pZ_gyjLIkMz2QRWs0G3n0lxYDFYDbm4euILvT1RmOb4tFfvXLEdsKR1f_FaOcVvmun4Hc3zUOKMvX45fgU8KmsxUFr4age_jPUf7dh5ELPJTkq3ti1nK1z1MSmmKi1tUhHi4gANR3Dk7r93Hjnqwj3Fydl_s9z99O9MX)) +- [Key histogram](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/count_by_key_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVWYtuG7kV_RVWxbajWA_b22QL2RLW6ySt0G0SxN6igG3MUhzKIjwP7ZBjWyv433suOZyhxnK8TQBbGpL3fc89HG97Wmqtilz3Jlfbnkp6k6NBL-X5bcVvZW_SE1XCe4OeLqpS0Pfxm-ucvWEXX97_d_hRpfK8WG9Kdbsyl_LRTFjzlUWiz44Pj78f4se7Afv0n_n7-Rk7__z1y-evZ5fzz5_YX9jZx4_zn-dnlx8uRuwsTZk9qVkptSzvZTJqVf2shMy1HM4TmRu1VLKcsLM1Fys5PB4d0r7xdX6d_1nlIq0SyU5FJYqxNtwoEWd8PRLVatbdsRgv0kLcuZ9xKZNKyHpjuC3hY2VkyU1RPl_RJhljJVNi_9qyyoVBfHm6s25WZaXNOJH3cCy-lwLCR6t9W0zJc70symz0zIGMm46t0JjI5bNnKjc7z1ShTSl5tvMwVZky2uoYv3FZ_nGJDDNRVLmJF5v4Tm5i-cizdUphcjsWpZJL9l5mKCGYaqRmlUbpsGLJzEoy5yHTCirOvsw1gytM5Ym6V0nFU1asKbJUgCxVdxJLyL0ZL7EFn60OEiOK3KDASCp3Bg0XmyEMagUMmBrJkZXP2UppU9yWPGPFvSwZNmpbTVbg_GX1HJbmt6m3g0GYNUXwnC0kw25KhSTbvGuigGv3ipOdVvx1r607VNXyusfMZi0DA37MCyPZJYxkdTyZcpFJmkDCJrauynWBBmVFnm5GbG5oG85Cu5F5AjNMwfSqeLAxypBVK762kueGPfAN7UkKu8Mr4-ltUSqzyhqTxjtpd0md2xBoGzzGKQgUd81IX7GEASQTCRCiopRaDSpfV4Zp-VslczRT67FZc8rGT9RqF-p3yc5_eX_GbOch5L_LnV3_5mt2iZD5IkIgfbQRT1mS7J0D_5KbOVoUJpN6363sYYXosXueVjKmFFAZoRyMWiAICAv0TCZU1bS4I_CXXMEFK_NzZb4tFDnpyK2Qn3d_i03rvpV6pfIbVhcF--odCZ3EuQIKlFjVBajZgwIwhqXXFUj2L-QtEnAJKfZTjhr2YgEfrhttGiHeCe5KyasstjtIiCkMegOPFvDfH6UKsF7r8GxRGXe4shF7WUaCjgTWGCfMGeGcQe0ZiboEeACaXOTaQhnY5sl5Jildwbc658GTNmlAsTi-TYsFT-OY3Rcq2UGxiAqsTsQAJnzrny8tMvu1vT7vTTRfOxCUWSeG_et8S4crwiMXja92QLEpw-SaTIJHp17voA3b7IROx7FecQw2BKGJUnBwMrlE4C9Q1YTYlIRYuy8nhAeMeX8EgRJLi4I2lITlU3aL3-9VNnpEMTRqT8JTKnns-DsNAOCN6_558ggRB6hVTKTEfquVN9F0SzsVNmWHVhV6BS0XkabTJup9tnVxH489jtOksM3lO-0B8OdHCZXnkTvBK-y50mmBWCod5_KBJN5AX10uIycwRjfENBkiIhqTyZqrcku6r2DKzYAdPfVPnES1hHmNpMY0a9xSlQirBdAdKMBGv-u57wcHteQnJlMgUSjQuolWTenQxoMy-Tuc4ZsoZQb-5Lz2x6zLhEhUWAmfTBydIWdtYX1_TIXllmprtMDcjB0iz7YUreFMSxRJ8nTixVKsltKIVcyTJDryEjIMuHITF2UiS6hI-aNMfKie6oghmQfTsNrs-pOrCngpigyILANw0ZUQ4LHLKk03DbYwxNyhDU1WCbLoKq6WQnjmXOV0Clayuj7AG_LEAdhOHTqeuFuGQTdFYQP1RxdVFj3PnvOViiIoeDZFPTelsTcLrr1fzoJtx1BR5BPxxhHJyaTkD_G6IOpQxoJrE3Uhx-ehKyrI47MQvJ5X5M2mDopRiSqPCI49vCEPn4gLmRU3NirEBYplBNTtH9Sfz6la-_3Z3yk5dUWrXGVVhiL7rVLAN8cmeClWGNPCVKWdyjqLfzhsQRQyLQT5oj5pl6yK3aXaug_Z2mwYlTjaqiT-sabrSU71tdg0VxUifXQzyWUKuufG5IjmoKcKmnhalSY0yrVMYSQOoWxXtR4bAMunckmMtWFVm8L-JgqScMOJUllPLCTLxzUqm0y05NybUGNtTUMp16c4MouGRy4lzt2uBEdpGhm75-0RL8FnbpcgoHsWMpzsDlpaNQ3HmLK3h389PHQQDkH_bBil7dKQKrhAaA9lDV2mgOxRQVFIqnWKpqarCBRZHbUnXJNtUdQY8l3nQN924p6pfd37CAwxAWMftO5kaC9ynW4V2nJAVEbHEthve4OitIYdkLhPC_mI7kIpSG1G1z0fbd_DOxdGm9Q64K7nmwnoI3sOpDD2WlNTcp-tEfvwPNYrrrt24xaxwQ_0v7vANJY099IoRK2M38nYjhe0Vew5s6u-w_7gj24NfBoRCkR9fzZcsVw38itXN6A7dXziyNaF6tPco27ZolMBC_nznlAogrYgxt2C6J-wp6Dkz1IAIEW0hnk7WhoS0Q4kh5A20i-nz-P6rEv-orDLzutpJ_iaCwUwWnAN7MD1kKONvsOc5AlbcpK4pyFoNXarRJpGb1vBc0c2WqMBS0QPNGHnXV485FS1PLnnqJsBe5D2FlwB0ag-oYSnorKs3ZMMb6JruWQyodw19JGcbFRM2YsxD12nu3AlCHtb1rbHYJrXidR2FATxGDUBocPEb4irtbfzbWjSa1w9DOWre52mBpm3zzH66f-SYbF5uw-n_4gcajebD4AAbkSmsKW__aMmpNDDy3hdFgu06qnlcvQ8kUtepSYGbKxi_6LLiobspzaN_5AG-cuLfIiagoQBENNwwsly3yXYjkJwsuJBs187dPvX9o2NR9JaCSDXBqal-XeypHEclEDsaC69D8Snmrp3NPjO6_SRIz5UzxBw_Pbdye4ex5nssv03DTDlIDw8ZEd9VHz7xAoKL6en7drM5ef09LQRPwiOzmazyN9i9wJjew_tIsyIuETUD2DmqwTVBvVwr9qoqehdW5o6jEDuZMCE2ovFK8MJ_IgqpBlOgQlXhzduTO0_7giHF-BePb0owmXUORDD6CjQ20ZjR5Z_HCLtSoo7YqG7sOiO1e8t6F0PLmuiQz6aSMfCCpl2Aw5TiVt8Y9IEwGxnoXSvLikFtQX1-zf7IkaWarkJWCNx0_2WuVONXT7akBuDXLsK2xuZbsAkbrt4uDtnAyrpNNmRuyiKtL2Y1qPXjUkE4Rnc06ZmytItoBPN9uWje4CrkpsveGjQHiBOF-4G-KdrCOmd-MtirZmIJp70Bj26OqpUlu2fO3r5vRBHx2-rIywXa-P-FtIbQv5UHBwc_cCGdK-Y2ssEGw6BBgY_3PvXYcqzhf0DSaoWgUwhRIqHyBL9bQUPMMXyu97TwK8DeXbWEc_e0439_z-baMmG)) +- [Pre-allocated memory](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/preallocated_memory_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJylWI1u2zYQfpWbBmxyaju2u7aDYhvLkgUztv6gSYcNyyDQFBURkUiNpJJ4Rt59R1KSZcfOts5FHZu6--7u493x6HWgmdZcCh1Ev68DngTRuB_kRNxU5IYFUUCrhAT9QMtKUfv9-OhawBFcfjj_dXDBc3Ymy5XiN5m5Yg8mgvYrhLQHk9Hk1QDfXvfh3S-L88UpnL3_-OH9x9Orxft38BWcXlwsfl6cXv1wOYTTPAenqUExzdQdS4YbUz9zyoRmg0XChOEpZyqC05LQjA0mw5GVO74W1-JLLmheJQymtKLyWBtiOI0LUg5plc13JRKCEskxUYqs5nsf5bzgRu8qSlkyhch3LL5Rsir18Ak2KnO5hcmlNoqRwkkeH3kav0uRQihxPc8lJYYlccEKqVYxeyBFmTP02wsuFWcpnONDgTgoqaHSuEUgU9iECffcZBZv0AJCwu6QPPC4jlKHeJVxDbUV0Jm814BvYCTiMiBPQLdgwGTEAAK0ZhwmrlFZlDYmwws29EYoEbBkFjatckilwhXMOrjPmGKwkhXcE2GsZXInOTq8EqTgtDblgb0ZzFNAdVQUcC_VLRc33jkvOqCeHC4wbCbuuJKiwHzRm6i_E9Kw7djxo_Upaam1VspKldI6KUW-GsLCBYu6wIVhIkF8dFc7wjIkBffWwWNeIFZhw7knKyuTSCfRGCP5jVTocTFsc_b4GL4nGuM1q5Lpa1FpG9YvJK8YzKBCgy8nsTlpHvzEVgD4ANdPavVLWxOC5XBnlXw4rCjNCnQuDUJaHccNeyjrR_EtW8W6UQQHORgjoje8K-2QN_IzsCUSRZjmUSSqgilMFV8sUwcwj6KCi7DXuPgW0wgxU35TeYavhdPV_C8Wm445SrCqObo-g_Fo9PVoNGogrpAe5I-73HFZlDMiGP6VCWvYKZVc4t9YY2coENnqWGepjKIcXScqrkWm4369nrCUVLmJM6KzOK0Etf5NkbP5vGVdG6mw2jxg_WpwlxW9ZSauRaZ-sSRcWYy-38l5H8ZP0RRLW8SZ23_MfLZlLIoaoVYbS3JLs-vLpmqtiHMAE-2_vpzLn6Pos8Jk2NAS3APsk7HvG58P5tKE_VmRPDbS7crnYO3Ji8-B2d24eZOcHw633GsR1yTEMZAKe8Im27GseIK9HnuKgZl1yG9jQW5Z3H043RdAu-c-8cbzeehXah1fXP22pubrR1-QHYc6JLtzcPokC5tYo8g3AW-669zQPQh7cxtAo-bQTrZsYcvCwq1EElN8x4BhdAJgS1sRegvYR5ZYznigccMK7UUhtKV-hw0m5f4E6NWU_8hybLfQFKxtthTzDtu7PbPQazxdBO5CqmSxcyTWPm45t1VVHsiWUYjm1t24WpnOwnofG_1tKoYJMSTsPZ5YMMVMpcSWzWbrmua8ftqmHw-mbFfXmV_va9vP6e8vtfVhlT0J-Yy0d9CaibvdYXqwYTxnusO8zefHrYnKD0oLwQ3HTfmLueP3wPa7EziOb3K5xJhjcOMHR1WkXSFh7ea7srVp1bxmWyly0sq40oYlWrq1Mk8mRRsr1w0HTq4-JF0hdNyunQTf89F58EoaHXQxOWWrZ8db3iqGbt275D4O9UrQ8DBROGsbwDQbuGQBe3BpCHEBBnO7fjTpHWTK6v4TV4eoqrVxE1HExqAYJlQSe8qk0nVFeLkOST_g2F-TUYPYMY3txNDasZHMavlF8jB8gBeeGPfF-bNxZeg_hptD3DLRdyBHMOkdovECPQeC_12nWtWImGs7xB5gMrWBP8vjIRad5j9yaKUOMJhLeYt3ibKhcIs3Z_hZ6pwoXthwgELRxpuh_WCZ6xg9cz1fV5TijdPdBFAGM01ILE88GlKQlSkr03M7kkJYo37RgcXRO-z1YO07Q207bcdRDBkvDm7yQcD-4XFkvu6cQ74l26aMfjNDs5gkSThu1OsLmVQJUwidkweW-A14rHPBnmsFseNuvXV2JjeshHH0bxtRt-tMp3Y2HU--neOB7i2dfTp7H599Oj-Nrz7-Flq_zl0cl1jaGd5ybN33Olw765OoqW4ti93y0J28b81O-vBy8j-tvoyeFIMNvC2I1ngn53dNNxmTMWyjPg00DPASVTLqLoqps4A98fU3Ni7MoolPTI0l-XLStEqfSrg7GV7Q4s6WHwjvLStoubrAgeFyVSxlHn61q9iHrS92wpJpiCZ6vd5JY837yTZjzsR5Vc860pC8M-s491t2LGt_VkibvVE3hbDrBMxmOzbaknBHOC4ZmE7hOrj01RY5rpwlglduB3UdWBF_5Isk9wkNLMfL_36sC8LzvUre0Xqksde1x6Af1L8DqM3vSoG4o3Q8eVWN8bEsjf_RKRgg2oy-eDF-AwOiaDbTRfxmBIMBRmgGbqTC6_YgJ8XS_RKV82UHk1Ka4yImmv0RCxeMqsRt8NhvnmP723qO9R88_uH-_Q1cSF30)) +- [Heterogeneous Lookup](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_map/heterogeneous_lookup_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy1WG1z27gR_is76jQn2Xp3fLnIslqf40w8dc-p7fY6E2doiARNnCmQR4B2VI3627tYgC-SKOe-1HcTSQT27dlnFwuuWoorJRKpWpMvq5YIWpNRtxUz-ZizR96atPw8YK1uSyV55pvfg4N7CQdw-_nDv3sfRczPk3SZicdI3_FvegLlT2j7HRgPx8c9_OfHLvzyr8sPl2dwfn3z-frm7O7y-hd4A2cfP15eXZ7dXdz24SyOgSQVZFzx7JkH_crUlfC5VLx3GXCpRSh4NoGzlPkR7437Q7NvcC_v5Z-E9OM84DD1cz8ZKM208L0FS_t-Hs22dwRsEObS1xg-i2c7a0LzjOkk211ROhjoPI35xpKOslzpQcA1E_EgYy9exkOecelzz2dK96Pm7c8Ym_fMfTTVvCVKlK5vqG8RuJZxtqDHgwObnb-GmBmIOAaQPHLJk1x5cZI85anHv7EFOo54mJ129zwTPIQPfIE00BgyVxAlL6ATSHkWJtliUxVYVQpehI7gwSA9mVRQP_RLzXeRUOAsQrChv0FhF14i4UfA4jh5UbBM8roLG0YZPPElmdDLlIOOmAY0FYiQANcQZskCH3PwE4npkDz7QRkZ2t8lJUmuIWLPQj4aM6HIlDa70cPc18AkqU_mvyHukIR7lVXRXkpYMLmElyR7CikEI2OcZ6UGlFKQKx5grFyCQE5n2rggJDrB0CEVgWZzgxcFo8pQyIbTVgTMnpFqtBt__57zDH0SC97fRF4hcbiytpkqMpYykU3RbNfYnj2Q-oynpvgkufTQxm8qyTwRdMGPmJQ87jzAHHFzSamoEIgMcYqXGJsRPerxmC9MIqhMFClv0tclf5E8ixRVF2mRnAcuL1VG0EueLXABCVSP4cElSVWZ-NTALgMXlwarAOZL8LGwEFfCm8kA-O85i4VeAnWEJFMWY59JSFLTBzgklhL3LT9ZpMh2VHXfKnmgDOi8Ek8komG8FwHPLBOIYvolAQeO6lqum1DniY4soSOXsGAzSOOkzfADYfpgrRqMCJnCSywwqVJmqgAdoNDCUPiCfvfLTmnzZA15JoZTaKLFCcBgAH9zMVrmYuYL4iZyAk0sKfSnWTLnVj1aBtM8TasIJhOKobTzujEKG9U12qozqDD7zOKce6TkFLAUmT6h9jjAJufHiI1Nbm0bkmMu9ItQpsgxuxkVFSrzuVUAQcKV_IFaBromBTrliEeKy8phBhUk_Pk_z6-9DxfnV2c3F97Pl3e_Xt5eeOfXf_98dnP289VFuzLeKZzbpK2hJjHH0ZCoamhSSxTll6B0bCgqCIn3jM0DXemTakNNzbEbGIq4Biu0IQ_zfZ6afrcsqWxZ8w2Z5Os9zEWtriw3Txnn9Mpku7Q3NUolW3CT25lZ8jx37HlAbFDiP4iFq7Qka3fahgVU-2-MWx373YiSagCWF83hDWIfAibanpaTye7J2zYqTrYFsVv_huw6rdPykevpcNZG8Y5l46_YzBWxkKA3oPctHAYkt50y0NnVL2ST_tH39CuO8kFpYLRpIOM6zyS4A9eEN61hOGvbqA5gdDSCQ-uDjX19L9fNVNtufhXpbDHw_xvlUP9cSKoZc0SWzZSsFMaRgmi3JCFp_x4RUZNHYe3l4tWn2y6Uv24-3W4zc54kcZ2SKFAwLo6wd99Uv7NIvU7RmIf6OxxFnbscfWNn4tcls0rSkaO9S2njQQdOG9luTHQ6hLnh5LnD3SJeIG0NuL9tA6P9BkalgRMSrRlwRK9bKEmKBwIWqJBtpD0BSnjwb2m20TJkvvBQFidYhSC9JRgq-Gg7pl4v6RAq_05rJ9-qN-pCb7TeL0qtuhKtOjeK9oeh9ZcCw0tM4hPf0ffUzqr_PR7-GWcQhmcZoxG-tGO2nFpYt4folX2ATRiD26jvVT3iAxivuxuJqf6chiL4VfntD0lQkKva971Se-pu9R0zMc7RLPPMhIBH9hRz0HSSzFZNT1frdQF6URYb16hpld0Z0IchhyvLWuZHQzR7VDi6sfC2Cz81LIxHx10YNSwcDXFhaBcslZo9q8hjPKNf5NvRj_3jsAtvR_0xfozf9Uf4cXTU_6mkF1HGdGDlzfmjkOXBsmBPqNGMfWYm94pra7tgltnjJzkN9eXqalgEYTdgHnAyEgvPdhDycFqbCKtQu7UCmM3aRZK_OJQt3H1ysd1xm-2C_Vosfa312rapdtEpUlTrZN93YWXsfRFfC1P4dX1S6Fl3Og4-8xLATq3tGojdDUQP6-2kU5X1P2jubr7auLuYu4_jkcmCQNhXCtVkiq2Ux_Q-A9zJGO3MenuuIa_dI8wBmciidaLmplnc3jTtWWoCYI_YVZWuXzRqpzslbz99y4HesNfM5QiUS1q55MoK62Q8QpaRY244RpzILiZjW8hWFv5_9Pb4Dwu9f_8eawbrZTgsLC2EojyZLC6LatwfkDnkTSzuaq_aZVh903DbHXuy0iuk3S0ly6tHXAb2QbG92NR51Y_NvhBiuQavuBKKjeXX3CBV2z7QGZwuzZu2PNZ492H-k5nMzJsmGkZTpIrpF3WHa6-h6jyICptU4-77yT5Bi3dUouPO1AquvZJ1hCIblpWkry4w43u7Ph8I3DI8wY9p5aiD8wQOD6ueU5-57D0bJUsRbCq794eCn6e1eKqN5IVvJuPpFO5bV_YthJ2cXZ3iY7O4O5GRAx0rWFYyft8-UXeFR9vCVQ9qNDbe3N-B3qzZTruI9i-4TpCjvgl-dwWHsi4HACIstyO-20h0i7Zj56pT55jLqQHQTIGNIN7j81ZxmTEf7pQY4jN80urSuxkR4z2kfJ_dks--Pxof5yNcTlJtX3a3eqj61D88HL2DHsv86FQtvHdD6PVw8NM9GrwCHvRitpjTG_BYzGs6fd-P8aG78OADvIPIp9a6W6xjR91Yx2pvrb_Sf_8DNZcXFw==)) ### `static_multimap` `cuco::static_multimap` is a fixed-size hash table that supports storing equivalent keys. It uses double hashing by default and supports switching to linear probing. See the Doxygen documentation in `static_multimap.cuh` for more detailed information. #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multimap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVVgtv2zYQ_is3DUXlVJYfWFbEcQJ4qYcZK5whTlsUdSHQFG0TkUiVpOx6hv_7jqTkyIuBdQlggffid3cfj9wHmmnNpdDB4Ms-4Gkw6EVBRsSqJCsWDAJapiSIAi1LRe26czEXcAF3stgpvlobCGkL-t1-r40_v0Yw_Th5NxnB3f3DX_cPo8fJ_TS2Ds7pPadMaJZCKVKmwKwZjApC8VNpIvjIlEUD_bgLoTWYB5VuHrSuXZSdLCEnOxDSQKkZhuEaljxjwL5TVhjgAqjMi4wTQRlsuVm7rao4Dg58roLIhSFoT9CjwNWyaQnEHKHbv7UxxaDT2W63MXGwY6lWncwb6877yd14Ohu3EfrR7YPIsLyg2LeSK0x8sQNSIDJKFog3I1uQCshKMdQZaZFvFTdcrCLQcmm2RDEXJ-XaKL4ozUnxapyYf9MAy0cEFm40g8lsHsBvo9lkFrk4nyaPf9x_eIRPo4eH0fRxMp7B_QM2a_puYluFq99hNP0Mf06m7yJgWDrcin0vlM0CoXJbVpb6Gs4YO4GxlB6WLhjlS06hphGs5IYpgWlBwVTOPeEQZOriZDznhhgne5Gc26ozF3PxMxc0K1MGQ1pS2dHWhSZ5mRmekyKm5fr21MysValNh8pSmNgqX6hStsFdkg2jRqrzJtwwRVDrw2AKSS05b6-x1Qx5d15rFBEa65TH_wbLJTaQkdyJuTDITi7CjeRpay72WATkui3gE9slZlcw5OMN8sVcP6s2JCuZV9Yqqzx6sLwwu8QuNbOpsMzR-gbaPRel4e9NveBoXBlaU4q9MpYXoE06GGj-NzrCFE0uu6-73W5l1ungoEBLVVKD_Ya6Wf5Q9rrdCG1BZxK1Pod2z9LCfbSjgUNic-g4NFXUGpOOYSqNpyG1h5KjMR4HupZoAk9Cbm3UrR0DWYZF0UwZxOj2xaA6qgJa7uKhySRJYUksHewwuOy-il26SDjM8pRxw7qwUaNyt9i3wrULsBwX0I8q52Px9y_bcDg1ctH251pwOFSF9XQaDE4IPPRBCsLVeWy3YHU6nLYa_UHSYQEJ1MS1eTuzGMYMp5wtE6xtN7YSkzM493RcOY_jVRzBfo_1xBz2vaiHnziOASX9S0sELwa3qJSHZgLHAxH6mtXynDyx5MWRGyKrb8NuK_pxY5-KJWjYqv28bMFWeMJq2ZevkCRVOZOQlHYat2CPo9uUSsB_lXbP4RWEU-hAvxUBP1zDoVHkieMdngDkoNvcHk_pWIt0sUZ2gnl2hqfoKrBMpIj_OeKs2S0lF8yx2dYdbLl9F_q_vL66ujrUzaqbqdeyzFLs6YZBv26pvXsaeM4TrE791u2WGJksOQLzaV83_Wo2hU3D56ROpC63CLpNVq4ZfcJgxPi88B60M8fe1XjB_QjUhZTZ7bNPE6O7LbxC_w98x1i1WQMvPlv4cuf6e8S7RELaCw4cmdzEBFHmiZPjpKxxO-KGL6I3N6wQ4Bxl9aZ8CWEj2g34BKGaPW4sY2QDwyE-BWYlpXiF_wQjRIhPAhQ6e6_FW5djuzx0H7AucX27eh8XFcFk12d3GTfHRR_S0r10cLq4g6IjP2XxoWNIZolbA_EgPNHPbXTwKVdH0V4uKMFHqX3l4btPPb9dA7GhtNe_LHuoloXxD9ugjfFu6Js3vbfQJoqub3SevO1Cu41XmMEfg1uxtJ2RfOFeuxlfNGJSSjMUbvzTFAXYB_EUHKJaj7PhRI9MDA5f3f8_JDbX8g==)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multimap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVVoFq20gQ_ZU5Hb3KqSTL5nIlimMwbQKG4pQmlIO6iM1qbS2RdnXalVPX-N9vdley5dZwPQIOmnk782bm7Ug7TzGluBTKS77sPJ55ySjwCiLWDVkzL_FokxEv8JRsamqehxdLARfw8PH93-EdL9g7WW1rvs71I_umEzg8gk8HMI7HoxB__gpg8Xn-fj6Dd_efPt5_mj3O7xfwB8zu7uYf5rPH24cIZkUB9qSCmilWb1gWHVN94JQJxcJ5xoTmK87qBGYVoTkLx1FscMOlWIrfuaBFkzGY0IbKodJEc5qWTaF5SaqINvn0R1hGhlyzmmhZT_sendeN0kMqG6Gj_JwrYxtklW4YxbPnIYr90zBB2XmvrolQK1mX0Y-0uFS6ZqS0Zi40lIQLfyN5NliKHZYLjeJiDc9sm-ptxQDgBhB3fXRtSNEw5-xcxnk4wcpKb1PzqExLBSsAbJhwZKP0zjuoMxzALdBAKcpHs29VDUpnSaL4dzwIC4Rcxq_jOG5hwyHKA5F1Q3HIBLqxwAvXOYziOEAsqEKi19UQjoCIzP5ToPOWialhaNm0UTtOKoKF1MwiKUF1cARzBTSXCIFnIV9M1BeGGVFtHAVVa-Ro82JQFbQBcSaYGApJMlgRM16QKwS-imy5KC2s8lRbk66xQa9zU5xbZccF2I4LGAft4UPzdz-PYX8KstF250aw37eNdXJKkhNBTlyQivD6PLcpGJ_yF4PefFB02EACnXBN3RYWwS3D62baBLmZxovE4jReQBW1h2-jdRTAbof9xBp2o2CE_6IoArSML40QnBnsQ-vc9ws4XAjf9czcziQpyTNL7T3E6aXdZZ2gpqd-PAh-FerKMOL0B90pZ3tia7xdne3LV0jTtpWpTxotgQ9gh1tJN7WA_2rrjsMr8BcwhPEgAL6_hn2vwXOrOVQ_6s8mN1dTWsWiVAzI7CmnTP-UXUuWiQz5HyM-9CdVyydmlWx6DqbVbgLjP19fXV3tu0F1g1S5bIoM57lhMO7GiYz6fM6Lqyt9arOlWqYrjsRc2df9c52S_D7wWNSJ1dYWQNxXZM7oMwYj2tVFamb2jcZ9yLJfovokZTE9nulztO8E51D_g98hVgfr8f3Mar7a2vke-K5QkJnxWzHZbQmiKVNrxy3Z8bbC9X-K3k_YMsAdyrqkfAV-L9oNuAKh3Tt2JWNkDZMJLL2HhlJ84_9m37dLzxgt3nmhERzH5ai7gF2Lu3eoO2OjIpni-myW2_6qGEPWVAWnZrPYi6ICt2FBS00KI9yOiCPhhH4u0d6V3F5F82JBC36eUFlW-DFSH79iPLGhdDS-bEbolpV2nzheiPFu6Js3o7cQkprmN6pM38YQhvj60vijMRXLwoKUT_a7p-BPvZiU0gKNG0yE8dCAcxDP3j7o_LgbTvyoRG__1f79C7pWKuU=)) ### `static_multiset` `cuco::static_multiset` is a fixed-size container that supports storing equivalent keys. It uses double hashing by default and supports switching to linear probing. See the Doxygen documentation in `static_multiset.cuh` for more detailed information. #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multiset/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVVwtv2zYQ_itXDUPs1s9gRQE3GeYlKWascIo4bVHUhUNTZ5uIJGokZdcL8t93R0q2nMfWJUBi844fv_vuQekusmit0pmNBl_vIhVHg34rSkS2LMQSo0Eki1hErcjqwkj-3n05zeAlnOl8a9Ry5aAhm3DcO_6lBeNPo_PREM4urz5cXg2vR5fjDvt6__dKYmYxhiKL0YBbIQxzIelfaWnBJzRMBI47PWiwwzQqbdOo-dajbHUBqdhCph0UFglGWVioBAG_S8wdqAykTvNEiUwibJRb-aNKHE8HvpQgeu4E-QvakdO3Rd0ThNtR55-Vc_mg291sNh3haXe0WXaT4Gy770dnF-PJRZuo77Z9zBJSFgz-VShDgc-3IHJiJsWc-CZiA9qAWBokm9PMfGOUU9myBVYv3EYY9Dixss6oeeEOxKt4Uvx1B5JPZCTccAKjyTSC34eT0aTlcT6Prv-4_HgNn4dXV8Px9ehiApdXlKzx-YhTRd_ewXD8Bf4cjc9bgCQdHYXfc8NREFXFsmIcNJwgHtBY6EDL5ijVQkmoKgiWeo0mo7AgR5OqUGtEMvY4iUqVE86vPQrOH9WdZtPsJ5XJpIgRTmQhddfyFjlLi8Qpi64ji9Wvh25uZQrrujGuCWq2Rum06bDTI5dFkUk-XyRP2xO9pJQ9Y7SUXKRK6zw8X2nKCYr0YJMP1nrP7stQJL_54l2R92xeJLcz_C5IZqSIgnluFC7gHFMSyBnhkGSyLGtZrg-UoMwzDCWeIWH4YWT3LXhN_mz1y0DlRdWSbKnw1jrU5MLo1KP6zZQi71Rw13J-Y81Z1JTGMmGJukW4UZQp426oRPwpNwapGnGNN74YYUeNGN_ids-HEqsyR52ossZaq7g5ze5onc7jY8h15rY5wikRdG9ZM4BuFy7S3G3BJtqFEAxygWLmQofxZ7Omz9OIF1WGCYmxFkmBtsMKUK2Gb2BXukhoE4mICRUIbbKFXJXnuJVwrAXNGorFgJayMNykNIL4f144iIUTHM6erOQ0cc8AMs8ZGyoeFEm7vw9kXKRzxg2q8AQgJkFL5N6g1MaDgVV_48zVcLMinfkNp_C6d9Tr9faIZzT4aAiA5AmlSKW5sOVIIN-fIdGCEim4FXiHKOjMPTBbZ8FK2L3O67dPktijnwajRJU0dqy6dZxmnRvXbyE5a8DV4EczSZygINCbCvWmTG0ognYfhPUV6eUMSlV6euV5HBDBwy44qfLx66767qoDWuWWXX7uHmfq_r5GnLqYNGXSodV3GbvrtaDfguMWdDotUPflhs94ZHjqMX8_1jmjgHRn8DZwGxpINOBhU7ZfxvP_qCbg8ZGf6DQ13K5hIMybweBgoNXiZMd6Fo79hbnbVpFveMA5Lqnnmq0Aj1nMn3u1bI08aUpVkoRYqQV1mAzCrjh_7LgbvyHGZ7EDlR1smFsiRahNBboIaQ7wzRekqitQdWpowSAgNSLDVBT-L51dVRaZCwXmwQ1rZJlTKpxclXPIcuXzowIl6sG5nWd6hHExnunCUUfO2Ebtsr-u2Pwj_CaUZB72PH1pstH-H6mF8tTc6DnaxhNcDmvjP2C8Es_jlEyvyqHvS-ZAvMNRA18P2M0o4hbMvsEpu9VyWF0i_1KwB0B7l0Pa1XrzmWlWnfMwV49YQvvpA0sJ1AIajWfATp-qh6a_X5_fUvVyswl3QZswbckNTk7oepsUkmrVvoB3BB7vWrUzJUKRj_YeMKHr7unt74RKXsBEp-h8qjY0--gBVGfLOkIIjkgWJgO-amiFXgb4EZueW8z-nSHK1lL2j18XfTLr3IUXiqhNp57KV6_6b6AtjFyd2nT2pgftNl05jv44UhbjdiLSuX_LSNS8himlTGhxHd4LaIFukOw2um9VdprkB3Yq5ej-m__9B3bofi8=)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/static_multiset/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyVVgtvGjkQ_ivTPd0FUt66XCUaqkNtIyFVaZVEdyeVamO8A2vFa1M_SDiU_35jLwtLEu56ikTAnvnm8zcPe5NYtFZoZZPh100ismTYbyWSqYVnC0yGCfcZS1qJ1d7w8Lt7OlVwCtdfPvzVvhAS3-vl2ohF7m7wwQ1h9xMavAmD3uDXNn381oLLPyYfJmN4__nqy-er8c3k8yX8AuOLi8mnyfjm43UHxlJC9LRg0KJZYdbZh_okOCqL7UmGyom5QDOE8ZLxHNuDTi_Ydadqqn4SikufIZxzz3XXOuYETwsvnbDoOtzn7w7NXG68dd0MVxQgXSF32nSC0TOTuVfckVBMvrwv9ULwY5sWv3tUHDtP4wttnUFWHDhJUQhno2X3tNT79zlpDTlZpzMv71J8YMVSIp2o3J4ZgXP4gAVl0hnm0IK3lEHQc3A5whMlYJoEmGkSIWH8ZWKj2BHshuzDblwGZghEyTUItdKczYjG3OgiokZnprJo5C1mMNcGMi3UAvQSiUeoLJDiDuFWUP6MuwVtYpRbg45Ir5BWFDDYUSPGd7je86HECuWgYEI1Vlpkzana0DrFC2HINHXrJcKICLq3QTOAbhc-Fku3Biu1K49gcBnKSjkiOVvvSoyECItCoSQxVkx6tJ2ggMXtL7C59pKcSESUVCDkZD3Pt3FczlzQYg2KzmJAc-4NUYG1jv-X3kHGHAvH2ZPlIU34sDSAgWcaNioedJJ2f3-QS1_MAm6pCjgdmJRaYhZsrMuGQyv-xtTVcJUv0ugwgrPeSa_X2yO-1wWxIhKMGkiQSjMWUhezcNb7GaRmlEgWWiF4ME8x98BhNy13CbvXOXv7Iok9-qjc5ChkY8eqW8dp1rmF-vU8ZA1CNdwLlwNJLJER6G2FertNbVkE7T4wGysyylkqVekZlQ_jgAgedsF5lY93u-rbVAFaW5ddfjbPM_X4WCNOXUyaBtJlq-8ytum1oN-CQQs6nRaIx63Dn3hCZbmIvUIClxkFpJEW3MDd00ACq-F-234KKUcnNQEHJ5AJS0S42zUMlPNmODwYaLVzBsN6FgbNt3W3inwjAs5wQT3XbJXwqLLwvVfL1iSSplTR7I6A1IK6nAzM5iF_wXA3fsszHsUuqexgy7nFCoTaVAC2oDnQCsJEqeoKVJ1atmApIDVigKko_F86u6r0ypUFFsFN0MgGTgVzPN_OIRsq3xE9StSTuJ0jPRJwMUu1d9SRadijdtlfV2H7R_hdU5LDsA_TlyYb-f9ILWyjLo2eoW28wOWwNv4DJipxHGfL9Go79GPJHIh3OGrg6wG7lE7cgvQbjIJZLYfVJfIvBXsAtDc5pF2tN49MsyrO01w9YwntlwNuJRBzaDSOgI1eqodmvF-Pu1S93GzCptSmnLZkBufndL1de061al_BBYFnu1btTIlQEk_7CCjpunvZ_YIJ-QqudYEupuqeZh_cG60WdYTycETSGwXhqqEVejVyumno3WL2j8tErTjvD858n7b10pUvz6RNUUf89ev-G2gzw_ORLdI3PWi36cpx9OFIWczakhWz-ByVYlbD5JxLWqTrN7xkaYFuEHWXPLaqfZrkB_tUysnjt_j3DzgV3SY=)) ### `dynamic_map` @@ -256,19 +251,20 @@ We plan to add many GPU-accelerated, concurrent data structures to `cuCollection `cuco::hyperloglog` implements the well-established [HyperLogLog++ algorithm](https://static.googleusercontent.com/media/research.google.com/de//pubs/archive/40671.pdf) for approximating the count of distinct items in a multiset/stream. #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVm1v4kYQ_isj9wvkwAbaKi2XRCUvvVp3IqfAXXQqFVl2B1jFXrv7Akmj_PfOrjExTVrVoES7M_vMM8_MLH6KDBojC2Wi4e9PkRTRsN-JMqZWjq0wGkbcCRZ1IlM4zf06OZopOIKLonzUcrW20OJtGPQGP3Rg_DW9TEdwcX3z-fpmNE2vx7H3Df6fJEdlUIBTAjXYNcKoZJz-7Swd-IraE4FB3IOWd5hFO9ssar8PKI-Fg5w9giosOIMEIw0sZYaADxxLC1IBL_Iyk0xxhK206xBqhxPowLcdSLGwjPwZnShptWx6ArN76v5ZW1sOk2S73cYs0I4LvUqyytkkn9KLq_HkqkvU98e-qIyUBY1_Oqkp8cUjsJKYcbYgvhnbQqGBrTSSzRae-VZLK9WqA6ZY2i3TGHCENFbLhbMH4tU8Kf-mA8nHFAk3mkA6mUVwPpqkk07AuU2nv11_mcLt6OZmNJ6mVxO4vqFijS9TXypa_Qqj8Tf4mI4vO4AkHYXCh1L7LIiq9LKiqDScIB7QWBYVLVMil0vJoe4gWBUb1IrSghJ1LqteI5Ii4GQyl5bZsPcquRAqmanvpOKZEwgn3PEiWT8SUlas6Btztz6bqaaLXWtnbCJwQyDzDXJb6Ng7vXIxVBmkNon_CcFzZg9PcGOFwOXBnixIdmR5OJwcVUX_JTTjmkzzhcvu5_jASDYknpV5oSUu4RJzSthqZpHSNl4mar87n91w2EjvjirpYaiQHhJGn1NTiyKVpS6WqrUppGjP1BPtE5YXegr_9pxSm1k_StTzRMBXFyi14dDIv3BuQbl8Li3mhjz7Lsvg5AQGP70HSBLofzj3mQJU8g2HBxKfTM8gnGztMfzMen86-wEV-mzhbm-9C31LatrqXBO5rkwrWOIFrijPdqdyjFEJv-g18G8RqDxSVU0p0ISJM5bajGkBnmlosnrKaRB18SDzahO1LvQOqRf3-oNB_-djP1kV2JK5zMKGZQ5935J0mmaiLJQwfnAZfD_4eA7mHi1fgxfSQzFHpiAyGEFqVrWtGc33jJ72AZ9f0kkVXQQsI6hAAUknolpxfNUkXvm9x5MRDZyREMCoilVJidArtP0iZkL8h9ztA1DfZGHaWY47cLbyd-lWUjR_ObPlktoiOJFWpN__DLZbwrtGKyYwaIS_YBl3me8lD85JTKlIKvtYwwf5m01dVaG2innzzGmDVO3RqqMFEF4468dgFk21Owg4pD1v2TP1Z16ecGY2U1d14LfOvs1qf9Q3pnd9hRyosYVpHVrCY_yFygnQ2BNROPq1OWu9GadN0r7l_DLB0IV-3Gu_HZ4aI9sppdE6raBHy2d6WfA_wXQP6pd3ikhtOO8PfnR9MhelrV44oi4BnfJ37_rH0GWar09NPj_uQbdLN5OlP5ZioOhmLF-Et5BMLhqYnPOMNjfVewNtWO3UffTcqe00Kgd2mrro-Y_w-Rvi8QMW)) -- [Device-ref APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydWQ1v2zgS_Ss8H_Ygp_5IclfswYmN8zbdrrG9pIjdLRb1QqYl2iYiSz6SiuMW-e_3hhRlybGL7jpFHEnD4Xy8eTNUvza00FpmqW70Pn9tyLjRu2g1Ep4uc74UjV4jymPeaDV0lquIrrtn05SdsTfZZqfkcmVYEDXZ5fnlv9r49brFbn8b3YyG7M3d_Ye7--FkdHfboQV20XsZiVSLmOVpLBQzK8GGGx7hq3jSYr8JRdawy845C0hg2iieTRvNK6tll-VszXcszQzLtYAaqdlCJoKJp0hsDJMpi7L1JpE8jQTbSrOyWxV6rDns90JJNjcc8hwrNrhaVCUZN6Xp9FkZs-l1u9vttsOt2Z1MLbuJE9bd96M3b2_Hb9swvVz2MU0QXqbE_3Kp4Ph8x_gGlkV8DnsTvmWZYnypBJ6ZjCzfKmlkumwxnS3Mlith9cRSGyXnuakFz9sJ_6sCCB9PEbjhmI3G0wb7aTgejVtWz6fR5Je7jxP2aXh_P7ydjN6O2d09knV7M6JU4epnNrz9nf06ur1pMYHQYSvxtFHkBUyVFFYRuxiOhaiZscicWXojIrmQEfMwYsvsUagUbrGNUGvpAAcjY6snkWtpuLH3Xjhnt-pO07_LNEryWLDrKI-y7moHTUm2xL9OlK8G07QuEvOuNnE3wq9YLAbVh2alcm26sXjEDuGjiEymOqtjIhppE8BQ51C_zBBtwdf2dvfM5fo_FoOFWiUWoXjiCJeAfe75XEmxYDdiDUeN4kbAXU3hAexm5FWvV3FrVqhqa4kthx9Gel9IE4J8oR5iFYWrbGujl2ZpO9vakMMUocgNZqD9yE5k7MzqjYCbuaCqcnAk_WuRGqoPBCRbswfkUSTYghu2gJy2u0VcxTLliTQ7JrSRa5tNpo3YuPrj6c5ukFlAbTP1kGQ8dmpgOdDhVcl0kxsWc8N95qepETAE7iGxCQcQ78ViAvNbzF2OaMnIIBlhCH_mPAlD9pjJ2FoYh87moFhF8Wj5NeANpQ2KzcS9npZfRGhY2pymX7E363bZRPFUA9dra9tBJAPrmssS0yAQ0aSo8UM5KzZPsujBSZHuXFNqcA_GElasYN_Kp3wtvIu9Xuk7aQntegtvPFkBgrG7FVr1gyuKljV8vOLEN2tgQ-3gXqYIaL5CrXTb7u7zlSlaKZ4MgsXCUNv1iKPby8ZnvoMZzmT9IEy0-vzHfsPJitQnSbYlx0CO8BYgzTaEBGwDfyNHF3NO1BrHjlMWLN7BY7CFrpmMteAOhN-AG4s9ENy1EMZqAdiWqcVmQa70t7aCVCOM55COqDAqon16wthFniTs-rrqW5TlqVHhF6GyQAmJXRVIz4QR1-baSuS4uYGIGQTVGDRtV2LAoVAm2G816B9kFxvZBWEpExRrHchrJidZtgmJ0WNCxRLfN3LdeUIF2dTZi6tyjYyfWP3Tr8j5RaP4CRevmMONvbo62NaB1KuIYIQArchHES5Vlm80gU7qsECelQ6aewy8wW3jknyArX0X1seASesPaqG8DCpZ0huefq1Gv0W11ikCS_jUQfO5YtEoRTdFwL8ctaq2bSdKBFeBdcrlxf7Z0bs0Kp3crojjAwr4NYiCfXWA2ofwH0yiYhG8s8BSC-INYb_c2jSMYyYwPjhJLDxhWdU2lEtA4hVFZ-77FzAN2wpL3ZDC2AD2KMj6gGf5Q41jZ6Rw1vEKqYABN06VZ-VPkHrRIyy1luR-jNid2jq7W15nY8sFs5p7M6tY5dggyWiqc3EZ3733U9nN_fC_II803srYIPNwein8Lnhe2EgjI_HcAkMVhh-XMeCYWJyoyVlKA2Luhw6aTvbmOY2-KJmtrlf9akladDyfgAgy_KlIR6KzYqMj8BM0p9lNbQMpltY4gMJTSlf4pONvVtEqF8xddoryBHeiOlm_z85LoBZEfWCIXmV5EtNkqrIneyvZUY5nab4OCSV61p2VJDQrVW0UOHERTBtvvSYKvCORH2JY_EOS5FOEpdGqUFDrwLOmD2dZsy6daWxzvBZqKY5Qx55bYIQDi2v-VdZZSdTZEgRGoxbJFHssCNjgDp0nFkEUVLuRC2FrH2uy7rk-hFSbdGvfsouRonLnLjenJpNiTPQx8DOKm80KPrPzyMOc1S9bLvzf8fEzjky_f42fgb5_hXeSZbnxk9NfHCNedKK_0IOyFNjlNG4sk2LQ8TWoazRRrxmrO5Q4fTwFTbTJWtUgz3tQHfajoN6PIFsm0DWkevqazT2Hlzpf9p6j1MJsfQXAO5O-xder_QoP0Jjo65UXoCJ2QmiOpU_V3am7nEEtNaum3__5qBl0C1EuGk6V3FxJHSc3Ouqhxkyu0mKQpsLzHL_Caeqwj7IK7-0Nfcl7BUV_m_vYGbC5VySunHPPRWVTPNdcpgFVpoewG9AnJ2HfJ9q52kuWRrrxpSb54sR1PRnYpdZVOl7XDyCedbHUj6qX_76ygb9499NBpRyQhd_zn5fhrz8VAXLH2V6vduSFDXYC0UG5X6WM3omUyq7WA-xLBrRu49ZVNfuTsh1SdGculghns-UEO6Byujg_PZjVDyH1UO4r76CS9tpopOIIlItaAavjOstR6riV1WmWJ1Ge-IH2yDQEzKvMnQznefLACqbKrIJqQuuIjsOKrtCuPIrxqilED3WnMOjBbj-NKUHjWN1RxykVLbf5eo5B5-SRy9LV_l0VwkjjOYqXvZkMi9OiS8FxCLr1VV_qg3kttImLau2tArHEhk70_MT7i4PE-hvvPnwkxdXT_vX19cV5i72-uGzVzBsMBsHePjpelPkv4XCsHv4MGGpO_RksFAu_iYbjtVzZYXA4WwQXjriPjxz7aaZedr2eP4qdft0wcOxLsT4R6oPR5WSkW4fWeRnv9veGsOg3_UN9n8_9kEG94tvh73-rVN1Ly2oDPWHBt7SUXdi_ezDE8dPGOI8iofXfALeXAENZKHtES41EKeJsgzVWAZgrqQ7RRac9d6Nro9WgPo1jkNq_5G-kj1F0cfk6v8Bj95IGDxtt6OtHr15d_MjaXEWrvl6HP56zdhtNyrRprMOEFLcTvp7b_xZI5LyiM4qiBDcf3Tt83DA4zz00nlv-Ofpg7Tli1Xj-w_78Hx3Ycro=)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJyNVQ1v4kYQ_SsjVzpBgg3mepeeQ6JyyeWEerpEd6hXqa7IsjvAKvba3Q-aHMp_76wNxjS0qkGI3XnzZubNrHcTGDRGFsoEye-bQIogiXtBxtTSsSUGScCdYEEvMIXT3K_7J6mCE_h6d_1beCMzvCrKJy2XKzvFR5tAs4QO78JwMPwxpJ-3Pfj86-R6Moar2y93t1_G08ntZ3gF45ubyafJePrhawTjLIPK04BGg3qNItqH-iQ5KoPhRKCyciFRJzAuGV9hOIwGHtdP1Q9S8cwJhBF3vOivnkrUWbGkb8Td6jJVbYhdaWdsX-CaqGdr5LbQkQe9gBj806HiGP2TgufMHnpwY4XAxcGeLIzVyPLKuX9S6_fzgrSDFZlmc5c9zPCR5WWGlGdtnmuJC7jGnDpjNbNowBnqCBQLuPfVJUmrvHtIA0-TBhUljO8mJtqKIpWFnEnVWRdSdFO1oX3ikmoJU_i35wLI7dwjuU8AH0sNVFqSGPkdZxaUy2fSYm4IGTvq3GgEw5_OAfp9iD--95UC1PIlyYHEo-klVJ6dhqN7XuPJ9yMq9NXCfWO9ByGNJTVt7ddm3nWmU1miOS6pzm6vBkaohF8MWvzfEKg9UiFR-L9GahRUGVOCaQE-U2bpNHiZPYKVpS4eZV5votaF3jINokE8HMbvzkCaLdmCuczCmmWOHJUg6TRNclkoQYgCGLwe_vIezANavgIvpKdijkyVyGAEqVn3dpfRrMlo0wR83pczUdJKlhFVlQKSTpRqneOLIfHKN4iNES2esRDAqIt1SymhF2zNImJC_Ifc3QNSP2SeyrAct-RsSbMIf0mKpgoLbLGgsahApBXp9z-DbZdw2hrFPgxb4a9Yxl3mZ8mTcxJTKpLKPu3oK_nbQ113YWcVs7bPRSupHaKzi1aR8MJZfwzSYKrdQcCE9rylydT77J_KJ03Vh13gY77Hs2pc_WB66AvmKjU2N51DS_XQkFnJidDYkSjcPMPLztE4XZL2GHh_giGEOBp0j4enwci2Smm0TisY0PKZbhVe5CW9B_X-8gnUmvN4-MbFZC5KW99MQUhEF_z0ND6DkGm-ujD57GwAYUhvJks_lmKgCDOWz6vrKpPzFifnPKPNNQUiPtqw2qmH4Lm3s9NRObDTqQue_6g-fwORbmIN)) +- [Device-ref APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/hyperloglog/device_ref_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydWAtv2zgS_itzOuxCTvxIsre3Byc2zttse8b2mqLxPYB6IdMSbRORSR9J5dEg__1mSFGWFLvoblskFTXvxzdDPUeGGyOUNNHw83Mksmh43o1yJtcFW_NoGKVFxqJuZFShU3oenMwlnMDtx-v_9t6KnL9Ruyct1hs74492CNUjxGkHLs4u_tLDH3_twod_T6-nE3hz8-njzafJbHrzAb6Hydu30_fTyeyX2z5M8hwcpwHNDdf3POvvVb0XKZeG96YZl1asBNdDmOxYuuG9i_4Z0Q3m8s9CpnmRcbhKi1QNNk87rnO1xn_9tNiM57JJkrGBsdkgxR8ZX43rL-1GF8YOMn6PepN7nlql-5tDJIb_r-Ay5f22fKGM1Zxt3fHgxIft7ysMGZRiNV8l_JFtdzlH-_z7pRZ8Bdd8ixmxmlluoDCYCVArWJBXw2HNrUUpqmcEqpx8nBoXMidqthEGSvFIVhO4UQ9gNxykkj31IIVcY8RXXJMbYFH6AU1k7MLJTZmEJUereAZWgSD5W0wKMEgxIGoLd1xLnqMKZmGFdMZpS5nOhGS5sE_AjRVbZrHswFi-gwdhN8Dkk1OgkFrDg9J3uWKZF4OW33MdRAm5KyxkzLJ-mfm5tBwNQfcwsTkzBj7x1QzN74J_nBLL1GIykgT9WbI8SeBeicxZmCXe5rjkonh0Aw-shDa2i5Zmw6ERX3hiQXbm8hl1w2AAM82kWSm9dba1Ihk713yWwKRqxzsUNdamc2TLXKV3nopkF4ZSg2doLNWKIxw5esm2PLg4HFa-k5TE8bvyxjcbLMHMHyVO_PiSouUMv90wjUncYm3oJ3RPaSo09MQ54qh7TnvIl9LEiX2OwYIkMY4f4-h1ufgsn9AMb7K54zbdfP5tr3C2IfF5rh7IMexd9BaLVO2oElAN-kvxIOXMcGBZhkhgqPSzJ_RYpGAaJiMvwhSG33KelTowuFvOrZOCxbaWrjY1dqnQrk6NI6QeAVYgdUqNUSMd0RuA8wLx6Oqq7luqCml18oVrFWsuUKveaW6TlBl75SgKPNwhiR3H9Rh0OpdOnUFYs_Fe1XjUyi4qcgxJRROXvL7IGybnSu0S7Glq_RGs8fe12PYfsYNc6tzDZcUjskdo_hnV6ALTNHvEh1PwdeOeLltqfZEGESkawRFWxD1P1loVO0NFJ0xSVp6jjjv7GniDx9YnuVVbvgfohTlUmMTf6oXqMa5lyeyYfK5Hv0u91i8DS_Vp4s5LzaKpFFZgwL8ctKqhtp_mnOnYOeXz4v7bN08yrZx82BDGxxTwKwQKePYFtQ_h9yCwYzF4J7GDFow3Egd2Z9Mky4DjdPOUyHjEsrpt2C4xkdcEnfjf_0CkgQfuoBupwChEjxKsWzjL7hoYuyCBi34QSA2M5cao8xz9EVAvZ4SD1grcDwG7F9tEd4frcOuwYNFwb-EE6wIV5AoBoozL7c17wgj67_WnyT8RPGT2IDKLmUen1zxowfeljRzmEeHcSnM-j8qMYR0TihM0eUtTtcUYOI8QhNDCvXleYmhKcN11Oqq3pKuOlyMlghn-T5mO3KhS0YHyw7EvvVI3QErWBgZQeCrqGp70w2G9WsUK_GO_bE_ETuxOGI3grCrUEqhbhpiNKvIM2G6n1aM7yp8oxwtZbBOqErMYLCoQWlSidhoxcRXPo1-CJAq8B5HvMrT4uzwv5hiWqFuDoG7Ls04IZ9WzPp0ycznecr3mB6Bjjy1ohC8WP_zrqLMR2GdrBDBatYim1LGiwqZdtMhdBVFQnSIfwu4-1mTdS3MJqQ_p7n5klytF7eSmsMc2k3JNDDEIO4rfzUo8c_vI3RKaj10f_m_4E3YcIb-dJ-xA384RnARV2LA5_cE14tUk-gMzSEmsXUbrxjovF53Qg6YBE82ecbITITP-GHdwTDa6BvO8L6r2PIqb8whpqwT6gdRMX6ezx_BK5uvZcxBawPVXjPUOIoz4Zrdf4gscTPTrNBBQE3siHI6VT3XtNF1OUCwNq07Q_3LQDDrCKJcDpw5uvqUOgxuOiAx7zBZalos0NV7A-A3eptpzFGq4tzf0Ne6VEP117IMTrM29IH7pnXspO5viuWVCxtSZoYT9gj47WvYjgp3LPWVlpF9fGpSvblxXs7Fjda7yx51uXkAC6iJrWFUv_nbpAn_-7udWp7TAIuj84SL59ecyQP46Oxw2rrxog9tATFzpq7XROy6p7RozADKBTsrUer665HBTdkuK6S_5GsPZ6XrCPkI5PZwdX8yal5BmKPed1-qkvTRaqRgGyketLKvDMqtV6rCV9W2W5WmRh4X2wDaENa-Vvxkui_wOSqRSTkA9oc2KzpKarMRxHqzxuikED02ncNFDu8M2pjmtY01HPabUpHwotktcdI5euRxcheuU-wBA6zk2L7yZTcrbok_B4RL0_HVfmot5I7S5j2rjqwKhxI5u9OzI94tWYsPBu4__IsH12_7V1dX5WRd-PL_oNswbj8fx3j66XlT5r8rhUD_8nmJoOPV7aqFk_Go1HO7lmoZxe7eIzz1wH1459ttMs-2Gw3AVO_65YezRl2J9JNSt1eVopLtt6wJNcPtbQ1jOm1Fb3uezsGTQrPh6-Edfa1Ws0dYAPWLB16RUUzh8e7CE8fPotkhTbsyfsNxeFxi2hXZXNGkFtiLebZDHCUDkyutLdDlpz_zqGnUjmtN4DdL7D8GRvE_T84sfi3N87T_S4Muoh_JG6enp-U_QYzrdjMw2-ekMej0cUrZHax1uSFkvZ9ul-3Sci2VNZpqmOR7SfQ_l4YHF-9xd9NIN73EONt5jrKKX39zf_wPMOtC7)) ### `bloom_filter` `cuco::bloom_filter` implements a Blocked Bloom Filter for approximate set membership queries. #### Examples: -- [Host-bulk APIs (Default fingerprinting policy)](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydVmtvGjkU_StXsx8WmuEVbVUJQiSapLtoK5IF2qpaVsjj8TBWBnvqBwRF-e977ZmBgZBqtVRqwL6Pc889vvZzoJnWXAod9P9-Dngc9HthkBGxsmTFgn5AbUyCMNDSKup-d94tBLyDG5nvFF-lBhq0CZfdy99CmHwd345HcHM_fbifjubj-0nb2Xr7z5wyoVkMVsRMgUkZjHJC8U-5E8JXphwQuGx3oeEMFkG5twiaAx9lJy2syQ6ENGA1wzBcQ8IzBuyJstwAF0DlOs84EZTBlpvUpyrjeDjwvQwiI0PQnqBHjr-SuiUQs4fuPqkxeb_T2W63beJht6VadbLCWHc-j2_uJrO7FkLfu30RGTILiv2wXGHh0Q5IjsgoiRBvRrYgFZCVYrhnpEO-VdxwsQpBy8RsiWI-Tsy1UTyy5oi8CifWXzdA-ohA4kYzGM8WAXwczcaz0Mf5Np7_cf9lDt9G0-loMh_fzeB-is2a3I5dq_DXJxhNvsOf48ltCAypw1TsKVeuCoTKHa0sLjicMXYEI5EFLJ0zyhNOoVIQrOSGKYFlQc7UmhdaQ5Cxj5PxNTfE-LVXxflUnYVYiF-4oJmNGVxRS2UnyqRcL7Hvhqk2ten1sY1JldWmQ6UVpu02X23FbIMplhtGjVTnTdgTo9YBW-YSm7Y7b6Wxuwyl1j7FwCU2hZG1X-bCoOK4aGwkj5sL8YyFgVukWLdxHIOw6-Uj22kntiH0ur92u90B7D-dTucKfmeCKWJYuQ3O_nwkkxduw0Pcd9Btvx-UkcbIrjKe64QrbSAlWeLjuWCy3PD0vpFAvErQKjMPXntoG5Xd0uhx6SvzOPCr22xVmygR8M0tszvynKmDBmaXF0I7tgCcBE5eaLL0JkOXfbB3neVk60553auYDDFLiM0MFA12mjwF5Kt3kuv365q7qnJdl_GeaxW-lKm1ift91KCBqys8kR9t9ojAPO-e47fxJFgOU7lyJK6Knru5WMDsY6yFgNoHw_tcTMRZmbtQZ79_pPMaatewRtU5P1v3LpWiG26rHbEVyrYZeo82ZnDfe80yDbFOK_nSWyHvdZdB3QAdvVj2thd1sRRWYh-mcDjaqgIcYBwafF7M5Tz3Ds6wlDOJ40aFIiwzNX_KWiRldu0scRBidxoF8BASkml2zN1ZR1F3PDoptRhlKX9Zpna107efqziFN1xane1KDeGs35eGjnN3EepU2iyGIh34q80oy1q51HixbBj44YHEzB-mw16dFTyq7i7Ur6gJD4VXjf0vcH2ZJiUG8Bbzt7W7RpjwqE6Gizui3N3W9QOhvWOuZEQyvN7wQomJIahzZamxGCushSmjsKeUR9yga8HrSd2fHqbXXTxjOZbl5oUskGArIkSOrHhfXtVWq8oNhmPTlOiUafcEif3MwnrP0yn2dIqSTvEGnUkmkS7HtgM7LI64X2xU8vIXWuNYbGcaVF8qT6yTQbMJnTJgIb9Cu0Xe5H_kPa2kvvSTvKJ5fkA6UeKLBb9XJPhl17dyPTmsnw48xVAVArr48wVfq-4NiK9CdXjUBmJDae_yve3htsxN8eINWhhoSC8ueh-gRRRNh3q9_NCFVgvvLYP_GczB4lZG1pF_Bmc8qsWklGa4uCkerriA9YrH4CWs9vHmONpH7oKXf_y_fwHeCexw)) +- [Host-bulk APIs (Default fingerprinting policy)](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJydVgtr40YQ_iuDCq2dWH6E3h3IccC9aw7DcckloRTqYtarkbVE3lX34YsJ-e-dXUm27DhHqQxGmvd88-1Iz5FBY4SSJkr-eo5EGiWjXlQwuXJshVEScZeyqBcZ5TT3z4OzuYQzuL_99Gd8LQr8qMqtFqvcPuCTTWD3CB3ehYvhxa8x_b3vwdc_Zp9mU_h4c3d7czd9mN18hZ9hen09-zKbPvx-34dpUUDwNKDRoN5g2t-n-iI4SoPxLEVpRSZQJzAtGc8xvugPvd1gLufyJyF54VKES-64GiwLpdaLTBQWdZ-7_OrQxubaGTvgyknb98pXqhQ3lHixQW6VPm2CT8idJQQXpSoE3562MviPQ8mxf1yDUMZqZOsgFtLCmgnZ2SiRdufymRoDL-Q0IItPpQbp1otH3BqgawKj4S_D4XAMu2swGFzCZ5SomcVaDd7-dCRbVm6TfdwzGPbfjetIM8JcW7A5Qia0sZCzIgvxfDBVKwK8bySQrxLEdebxaw_jlvW0DHlchM5CHXTrlXGjLFFDGG6d3YPnTX1pYLclVaWOLQCcEXLlTRbBZOKzj3eu9yX7LoEdeMF3YXNIMWOusFANGJhMjwsK3XvKJUmbc5dNrqs63nOrw5c6tbFpkhAHLVxewjz6zRWPVFjAPWD8dj0ZtYO61B7EVTVz4mFdZkKx5hJaF4UPuVCmRZ27YmeSHPC8VbUfWKeZXHfcdmkY3fGq_hJXRNtuL3j0KYO_H3XrNMx5rpSLYEW4t13GbQNyDGTZ2Z63yVJZyV2YyuFA1QTYl7Ef8GkyqyxIgoM3rOnM0rTTVNGrM3V_iNpSqeLKW9L6oul0qsJ7kLHC4CF2Jx1l2_HgpLRi1K18c6i3rdMX6O4fS02hlTPFtuYQpvvWyPEhFwZMrlyRQpWO7Ij0VjuMS2WEFRuEsDwImIfbu8mojQodVUv7ybyCprdvvBnsfyk3tGlzZoFpBKmsb8DQivdVHS0Xf0RpbeLBgTDBsdRqyQphrOCQMsuI59px6yhWrxWmjoJPuVgKes-wCtejvq9v766GdMZKasvvC1VVQqNYUuWESvAVTW-trvxiODTNmcnR0OKhMfidRf2ehlPu4JQ1nPINOLNCEVwebV_spDriQdhp6BVeaJ1Dsp0YUFtUn1hPg24XBnXAin4Vd6u82f_Ie9xJW_SDvLJ7ekF6Us4jf9-AEMR-brU828uPF55GYoWEIT2-0GcNV-uSPmL0_usnkhvORxfv3IjUqrTVp1EUU6AJPz8ffYCYaZ5PzHrxYQhxTO8tS3-WcmAaF2y9DN9LhVi2YnLOCxJuKBHFIwH1Kx-jl16jpzfHgZ6wi17-Dr9_AWLvS3Y=)) +- [Persisting L2 access](https://github.com/NVIDIA/cuCollections/blob/dev/examples/bloom_filter/persisting_l2_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJzVWI1v2zYW_1cePKyzO1v-iGOnbmPAS9uDgXTJ0my34TLINEVHRChSJ1KJvbb_-x5JSZZjJ7i7DjhMLWKLfPy97w_6U0MzrbmSujH516cGjxqTfrshiLzNyS1rTBo0j0ij3dAqz6h97768kfASPl6-_bXzngt2ptJNxm9jc83WZgLVKzRpCwa9wagNP_4yfzufwdnF1eXF1ex6fvEjvIDZ-_fz8_ns-t3HAGZCgDukIWOaZfcsCrZczjllUrPOPGLS8BVn2QRmKaEx6wyCnqXr3sgb-Q2XVOQRgzc0p6q7FEol4YoLw7KA5vF0jyJihnDRZVmmsiBO0-kuiomzXBukukf-4T2jxpJND5Bo9u-cScrc7g4bbaKIraaP17g0jhI_ISFcNu8Vj1o38hMqA92X1sKA2l_HXANbkyQVDHSsHjTgHzAKaMaIYUDgB6sleC3BxMTiZXcaOJrSr3YeVBYBoRTdzDQQXYCnLNNcGy5vgUs4HwCRUQlfOKFrPw3CMqAqw5dUycgeQGrc6BDNUaMHbmJHc_bz21kBnuXoqYTB7HIe-KVKJQaLy4r1-WDmBDs1Wc4WkCrB6QZSkpGEWY0ScocyL6y7JpO6RxfAEm6sEh2vGsq0rxi1QQIxmhmtoTK4FWpJRCdhico2pdWsfXTgJCv4RwqZSmVKO3icAp4SDD1uNrDcWCszsXoNJE3xIDE2jayjchFVZ0lNoM6O4ZYMZWLWdAW0c2anECuNiS6Mu7A5-NbF4Udmzjlq3rRL7lvdmGdWzo_8D9aGIAhaC-dT58R92wgubTiskNcDQQvUWJ2Z9ZU9tAfdbC123fmztvJjlCopNvAQM-kioVBhZaOQ-6VK7S7aoLRhG9Ap1ak7tgFtMLITiKswZVLltzEIRYmwVncxXqjBopJToQxaM2O5xuoB81VdEpQwySnCkOzWJ4oN-XYZrWgmzKIqRyjuUoURLHMiUC-bUriATi346Joh24iWEe1ToGbfjN1iOJQsrCO0wOzKZcYEsaLfsUwyocGminh82kcu9_XQ7Bq9KKdX17_C5dUFjHq9HoYOoXcPDOvoB7Lu_AT_VFgFjItIeBdx-9mG_uAEPvAfrOZYmXsf0DdpbjCKWaInOywKs2kMJfgMJIragHWM5MKUrzVZ0aGfnb2wkuk64XZth7rg0dk-SNt5-vXpxYOE_imYjIZOY_d8hmFwctKDRBevR8Gwd1y-ljSDYDgc7iy6tcEY1wpQxKiBngSD8agOerTlsWU87o32QYdHW9BXozpovx_0eqUYTtLxaB_0ZLwv6fH4eAtaerzYHASj3qACfRX0Xo0fgx4Hx8PjR6DHwdG4X4G6ZguQa-tNzNnQbFIGpxhM5rXfsm0NfY8Juk4zkHkSIplGkn7vOwzWgqrbhbODbayowq4e7YZZUeqZJEthk9w1SPzvCgy2DKy9BGUhuiyqyKMMR4_axn5KWWqK4iCJONSOFrUWhPAL152CrdYeyyu-85zCfqsKPfWb0lS-JPzvj-ewXmONjMPRsMKdfi0wDiaTSY7OOxqE5mvBTv7-AP3_O8BXq7AiQn91wP0lIDaFpq9tRnbfwOVzWW0ZkdwOuVUJWW4M0yHWghATi95hmtnOpFbNWiJOJnaQc19bdtJ5vFM7XytTfrpHQFuVAEfYs4vQzrHh9dVvbsb6BzN-8mq-8LStVu14QtbhtkSFYhC6xh26xvk0qEdE6JkxGV_mhjW9eV88B9iG4qw9hW3-icnvkZj1Mlu_JyhK85TjNHPS-xaUn5aQO0_yBHSepiqzQ8oTs6sdelgJX066xai2W7Lt2O34FbyLoVeQXNLY0uwMvcVMdCgG0BTIPnTsw1VGqJtt0MbByetdcjB2yjNl-fW-8PZ1IxFFm2rzxpU7uxmaafMw-stnHdx61rv_8aS-L23lu5pOOl8WJLaRHtCw-zhLtv53bbKwsL8eHroI-YuiUATvAnZcJUYlnD6adjtVvjLvpf1-t210xSZbG7y479jbh_JkgqMzI1GoqUpZ6AO3XU_dqXebB_5Us8GXQjt_A59Mdm7p25Zo5xPdLCcQ77DySHlrb9qtYInjumy22u5EwGRkv_drSTSXGOUG8ELgSGz6q9oVwxmj-IoD8pOgrWcFXyolpjahcGKpxG77ClyT5aecZZvt1OPQa_zLufsZzTyLcq8G_Q7FMfv3RK1qNxf7t8pVvC27uzKXMcvwSo4pJoobs-WC-STpJjicKc9cNGsiXTHBiLtosqfq0RP4_2Um9iquGTN5Jl39_nIjG-0GVUnKBR6rfiVryHtK-4PjvI_bKjX-J7RGB8P8lH7_fX8MHZLR-FQn4biH1xQsYqbjUiFiUUeQZOl-VxN8WcOklApcvLfyKYkL2DblXeNLu9zHhNrZx_BpfPnd_fsTdEMSAg==)) ### roaring_bitmap `cuco::experimental::roaring_bitmap` implements a Roaring bitmap following the [Roaring bitmap format specification](https://github.com/RoaringBitmap/RoaringFormatSpec). #### Examples: -- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/roaring_bitmap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy9WA1v2zYT_iv3qsAgN7aVpB_ZnI_NjdPNWF97sN0VQ1MIlETbhGVRI6k4XpD__h5JfSbK2nV75wCxRR7vnjs-dzzqzpFUSsYT6Qw-3jkscgZHXScmySojK-oMnDCLiNN1JM9EqJ-959cJPIdLnu4FW60VuGEHjg-PX8Hk1_FoPITL6eyX6Wy4GE8nfS1qxN-xkCaSRpAlERWg1hSGKQnxK5_pwq9UaBxw3D8EVwtcO_nctdM5NVr2PIMt2UPCFWSSohomYcliCvQ2pKkClkDIt2nMSBJS2DG1NqZyPQYO_JYr4YEiKE9wRYpPy7okEFVC15-1UunA83a7XZ8Y2H0uVl5shaX3bnx5NZlf9RB6uex9EmNgQdDfMybQ8WAPJEVkIQkQb0x2wAWQlaA4p7hGvhNMsWTVBcmXakcENXoiJpVgQaYawStwov91AQwfSTBwwzmM59cOvBnOx_Ou0fNhvPhp-n4BH4az2XCyGF_NYTrDzZqMxnqr8OktDCe_wc_jyagLFEOHpuhtKrQXCJXpsNLIxnBOaQPGkltYMqUhW7IQCgLBit9QkaBbkFKxZZZqCDIyemK2ZYooM_bIOWPKu06uk2csCeMsonAWZiH3BCcCNfoBU1uS9sNsffFIJlMsZmrvKUGYkv11ml481BQRT6rIC_FfRJcXT06yRLVPqn1KfWugIaDWIpPKi-gNOuLf0FBx0V-3icR8hYSI2yezhGHsJInrKupymvlyLxXdNpYvkQ-UNMcYbxnUvElWjSFrydjxnlsi_2ASbI0K_CCLNz69JUgFimG304FgdAkjusVNxGAoilsp9dbnKdXcLSSn1oLcjDnfZKlRDMNfxrIqFuPEZnZuCXaYL5xgmuw4vDjuoSKwygyRkPQUXr-sDYObcqFMniExt0R1YCn4VqMx-j_OLKQ3RvqtEZkjcz-5Os8lJvoK6Z8FfawlXkO2eKrWdDDDUy4ZRm1f0hoLRLgBZv3X7hbOop8orzKBfNdzIRcCI45jMouRpjAhWxrvu9plDKQyQksex3ynU8hs-MCY6MFH66wucjxTIktkP2CJmXRtlDpf45AXxDzwXh2dnJDoO0-DiIgiXquxzmMo_x6ORyCKTc-Z9vplhcPS4x_E8fql12quU5L4BzykKCzqPM7Pgnzrt2SDOZLq4ge90eX7y6k_mn6YvJsOR_5sOpyNJz_6i6v5YjRcDM-nE31IBFhhqSoTBWsj5n4aY85h0cBilCB74Ge6X-BvzOGA89hy0UXUg4HNdyQdJuo3ea74mlN-StQaod-hViAZWlrRhOpc9jd0L-EcPn5yO9C7AFuaBoNGbTsrTIJRAJr5xog-PrA_wHqpjSMCJn2JGP2bYkkXarMZVtoXx7666BSKADwPLrFwoYe_ZxRTzOApjpuKDHfIyvuCEVWeFCr-MfrNroaj_171t9EzPdTTY4UZ40IekDanDPTTQlq74LaIwQajfXiKX2dwdKg_-vfBuXmoxQWMun6aybUfENzhTafUfd8wgoqN0krbGfZr9vfBwebPdL5AHn9W70lN77dfprdNpy2LTxCsLZ6uURrQFUvcTteaoEnkdgrl90Bj3SJ9PRlfv_wLZGytB4aK_w8mYgGquPjItC18n6Olce_ztNRilpa3ZnuzOLa7jc_fFc9fseOfszVs2jo6_Bu2Hogc3h7n2irZVpFXDZEnETObtOwBUKYT91ir-BO4h7ff5gvgANjfzAyzpV-aGXcVR7AHD30iJRXK1f2zNoPnSUQT5S8JCpc1vosdXP4btghIH0pl8cL4FCjyS1vdg7v7wr7-0g_6G5NiiqZMpuhnm5t5E2tG3YdHVTcX4nIwQKoTsbe2MNXd_2ipPuY2R6XocuGlWRFSIeDsDF14S1DM3Ly0HA7o4Yd29JhZh5GIc-y5LyYoZui-dONHquxtVLI_aHmUGm16BDlilFVtu_1tJh_52KnCM8T-L9RVx_TKW-y0sfY0z8AyegVLqsuD6dxTliQ0aiFNsFd4bgfZckmFW6KpGZ9R7LyNV7ixPLeu50yccY8iV1CcogKvisoPiVRn4ZqI5xdugUWQnZ9yI2PmXWuur-sY7hBStGE4Vx3GXFK3hiQvvfl9onQ87-zLCFj6YrWngm2RvyRGBI07SNWvNMddu8NfCvu0tvG2W6ofCy7BhJbYLceRThE8gvTrBqQcS2r71ilpkjdajcarxXsCdg81cyV-23t4fn-oE6BZJnQreFGBsBXC8E5HX3O5ZuoN3lh6-Y2l5hFZ4dr8TmLRa_mHl3FrQj5Zg7oVimK67mVxc9LR04asZfFkAPU60-fiAr-SOS_joMf50n1ktI4jB4b1odYd6NrH1P7u3nIyz_uGGZww2a9boS3RWk0P_YwtI7wSm5a-6OR1F--PxrOywtWbcdCU8iMmEHfrqtPSTZmFoX4j0_yc2za_vU8qlR9gmWu_yBXFutD-zVcp_Kva7GHV1NZ-iXMKitgqjshtFc8tDPL6bSsahonE6ZqYkRzCg0Je29BC4ns4hAEc4eQzfThWxsojo_0u17pf-WUNWWDYiJWDYRkw7yMb975rp2oL8s-18wWXwc7DhY8Oqtw7608SsaWhqtN19PtRrJSiet_rJDdheHT8KjvCaQsMJ50eKjwPDw6OTqBHRLg-l1v_5BB6PSytCv8p3R5EvZhsA_OGOGZBTWcYhjEO3tiXujigubZx7rvFPFbpxjzWK-f-k_n7H7m6k-4=)) +- [Host-bulk APIs](https://github.com/NVIDIA/cuCollections/blob/dev/examples/roaring_bitmap/host_bulk_example.cu) (see [live example in godbolt](https://godbolt.org/clientstate/eJy9WAtPGzkQ_itzi1RtIMmGlEcbHteUlCq6HlSUe0hQrZxdJ7GyWW9tL5BD_Pcb2_uEpdDHXZDIrj3-5uFvxuPcOpJKyXgsncHFrcNCZ7DZdiISz1Iyo87ACdKQOG1H8lQE-t1bv4xhHT59HP3dOWYRPeLJSrDZXJ3TGzWA4hXcoAX9Xn-7g_922nDy53g0HsLR6dnH07Ph-fj0BF7A8Ph4_GE8PH_3qQvDKAKzUoKgkoorGnZLVR9YQGNJO-OQxopNGRUDGCYkmNNOv9vTct5lfBmvsTiI0pDCfpAG3BOcCBbP_AlTS5J0g3R--EAmVSxiauUpQZiS3XmSHN5HCoknVegF-C-k08NHJ1msmifVKqG-VVATUHORSuWF9Ard869ooLjozptEIj5jAYmaJ9OYXVEhSVSFqMpNcaPkSiq6rC2fSiUoqY8x3jCIQxjG2pDVZPR465YTb7QamCOAP0mjhU9vyDKJKIbdTk8Eo1MY0SWyDYOhqIRUIsuAT0HNKdR3Cy4djXLpQMT5Ik0MMAw_jqWhhYEcx7iQScg0wTVFYRKCuubwst9BILBgEkgcAo8p7GxVhsFNuFBkgkunXCyJasFU8KW2xuBfnFmT3hrpYyPyKaHBZ3euVCIHnjdjap5OugFfejXZ_K1c00JaJ1wyjNpKW2MUIH-DBTDrv3Y3dxb9RHmViliauYALgRHXqZFGSFM4IUsardraZQykMkJTHkX8GrWC2fCBUdGBC-vsNZrKUyXSWHYnLDaTro1S63sc8iYRn3jbm7u7JHztaSNCoojXqKz10JT_z44HRuSbnjFtZ6u0w9LjJ9qxs-U1qmsVJH4Tc0XhvMpjQb-kDLfabv2SLDBHEoVVGjqjoz-OTv3R6V8nH06HI__sdHg2PnnvYwk9Hw3PhwdYVxWHCQVJVZEoWBsx95MIcw6LBhajGNkDv9HVOT5jDk84jywXXbR6MLD5jqTDRH2R5YqvOeUnRM3R9FtEBZKiphmNqc5lf0FXEg7g4rPbgs4h2NI0GNRq236uEgwAaOYbJfQmEXhiYL3UytECJn2JNvpX-ZI2VGZTrLQv-746bOVAAJ4HR1i40MMvKcUUM_ZgVtvUKshwi6y8yxlR5kkO8dPod_ZuOPr9XXcZrumhjh7L1RgXsoA0OWVM38ultQtugxgsMNq9Pfzah82e_ujnjQPzUokLGLhuksq5PyG4w4tWgX1XU4LABrRE28cT3D5vbCy-hvkSefwk7m4F99XzcJswbVl8hGBN8XQN6ITOWOy22lYFjUO3lYPfAY0k_REy7mx9Axkb64Gh4n_BRCxAJRcfqLaF7ylaGveepqUWs7S8MdubRpHdbXx_nb9_x44_pWtY17XZ-wFd90R6N_0MrZRtFNmuiTxqMbNJy-4ZynTi9jXEV8zt3bzKFsAGsB_MDLOlz82M25IjRLHAJxIbdOXq_lmrwfNEt-X-lKBwUePb2MFlz7BEg_ShVBQvjE9uxaVTupJ5cHuX69df-kV_Y1KcoiqTKfrd5mbWxJpR9_5R1c6EuBwMkOpErKwuTHX3Fy3VxdzmCIou516aFQEVAvb30YVjgmKhPlS1HA7o4ft69JhZh5GIMtszX0xQzNBd4cZ7qoy9INk_tDhKDZoeQY4YsLJtt89m8oGPrTI8eIfiga46pldeYqeNtad-BhbRy1lSXh5M556wOKZhA2kmK4Xn9iSdTqlwC2sqys8odt7GK9xYnmnXcybOuEehKyhOUZFgaPyASLUfzIlYP3RzWwS59hNuZMy8a9V1dR3DHUKK1hRn0EHEJXUrlmSlN7tPFI5nnX0RAUtfrPZUsCXyl0RoQe0OUvYr9XHX7vBzzd6rbLztlqrHgkswoSV2y1GoUwSPIEUY7gGGsbJvrYImWaNVa7wavCdg91AzV-I3tXcse3-oEqBeJnQreFgaYSuE4Z2OvuZyRdVbvLF0shtLxSMyw7XZncRar-XvX8atCvloDWqXVuTTVS_zm5OOnlZkNYtHA6jXmT4XF_ilzEERBz3Op-4DpVU7MsOwPlS6A_OThFrd3llOZnlfU4MTJvt1K7QkGtX00GtsGuKV2LT0eSevu3h_ND4rKly1GQdNKT9kAu1uXLVXuCnTIKBSQv1zYNv85j6pAN_AMtd8kcuLdY7-4rsAvxXNHlZ1tOZLnJNTxFZxtNxW8UzDIKvftqJhmEiUzIkZyUy4V8grG5pL_Ao9GMAmTq7pw7FUVhwZzXe5xv3KLmvIAsNGrBwMy4COUf3ed-mUbUH2uXSecRls3V_44KDKvLP-xCGbGqo6bQc7zgQrpSh_GXTiqyDY7G-nmzhtDcNJp4OAB8HGxuYudIgI5gdy6e_2oNPB0qrwn9LtQdiJyHJifkuM2KSCGQRBhIP6DEI8HNBcWzh37Xweq3RtHuuVc_fZ_P0LZpjzEQ==)) \ No newline at end of file diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index abe32f929..597f192de 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -1,17 +1,8 @@ #============================================================================= -# Copyright (c) 2018-2025, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on #============================================================================= cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR) @@ -52,10 +43,10 @@ ConfigureBench(STATIC_SET_BENCH ################################################################################################### # - static_map benchmarks ------------------------------------------------------------------------- ConfigureBench(STATIC_MAP_BENCH - static_map/insert_bench.cu - static_map/find_bench.cu static_map/contains_bench.cu + static_map/find_bench.cu static_map/erase_bench.cu + static_map/insert_bench.cu static_map/insert_or_apply_bench.cu) ################################################################################################### diff --git a/benchmarks/benchmark_defaults.hpp b/benchmarks/benchmark_defaults.hpp index 2fc4439f4..285049f4e 100644 --- a/benchmarks/benchmark_defaults.hpp +++ b/benchmarks/benchmark_defaults.hpp @@ -1,21 +1,11 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include #include #include @@ -25,12 +15,17 @@ namespace cuco::benchmark::defaults { +#if defined(CUCO_HAS_128BIT_ATOMICS) +using KEY_TYPE_RANGE = nvbench::type_list; +using VALUE_TYPE_RANGE = nvbench::type_list; +#else using KEY_TYPE_RANGE = nvbench::type_list; using VALUE_TYPE_RANGE = nvbench::type_list; -using HASH_RANGE = nvbench::type_list, - cuco::xxhash_32, - cuco::xxhash_64, - cuco::murmurhash3_32>; //, +#endif +using HASH_RANGE = nvbench::type_list, + cuco::xxhash_32, + cuco::xxhash_64, + cuco::murmurhash3_32>; //, // cuco::murmurhash3_x86_128, // cuco::murmurhash3_x64_128>; // TODO handle tuple-like hash value diff --git a/benchmarks/benchmark_utils.hpp b/benchmarks/benchmark_utils.hpp index c36c7f018..453aaeb97 100644 --- a/benchmarks/benchmark_utils.hpp +++ b/benchmarks/benchmark_utils.hpp @@ -1,28 +1,18 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include #include +#include #include #include -#include -#include +#include #include @@ -65,7 +55,9 @@ struct lazy_discard { __device__ void device_dispatch(index_type index, value_type const& value) const { // pick some predicate that is always false, but depends on the runtime value - if (threadIdx.x > 2025 + *reinterpret_cast(&value)) { *(it + index) = value; } + if (threadIdx.x > 2025 + *reinterpret_cast(&value) + static_cast(index)) { + *(it + index) = value; + } } __host__ __device__ void operator()(index_type index, value_type const& value) const { @@ -75,13 +67,13 @@ struct lazy_discard { }; /** - * @brief An output iterator similar to `thrust::discard_iterator` but prevents the write from being + * @brief An output iterator similar to `cuda::discard_iterator` but prevents the write from being * optimized out by the compiler. */ template auto make_lazy_discard_iterator(OutputIt it) { - return thrust::tabulate_output_iterator(lazy_discard{it}); + return cuda::make_tabulate_output_iterator(lazy_discard{it}); } } // namespace cuco::benchmark @@ -93,3 +85,22 @@ NVBENCH_DECLARE_TYPE_STRINGS(cuco::utility::distribution::uniform, NVBENCH_DECLARE_TYPE_STRINGS(cuco::utility::distribution::gaussian, "GAUSSIAN", "distribution::gaussian"); + +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::XXHash_64, "xxhash_64", "cuco::xxhash_64"); +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::XXHash_32, "xxhash_32", "cuco::xxhash_32"); +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_32, + "murmurhash3_32", + "cuco::murmurhash3_32"); +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_x86_128, + "murmurhash3_x86_128", + "cuco::murmurhash3_x86_128"); +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_x64_128, + "murmurhash3_x64_128", + "cuco::murmurhash3_x64_128"); +NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::identity_hash, + "identity_hash", + "cuco::identity_hash"); + +#if defined(CUCO_HAS_128BIT_ATOMICS) +NVBENCH_DECLARE_TYPE_STRINGS(__int128_t, "I128", "__int128_t"); +#endif diff --git a/benchmarks/bloom_filter/add_bench.cu b/benchmarks/bloom_filter/add_bench.cu index 433b6acde..a89de9806 100644 --- a/benchmarks/bloom_filter/add_bench.cu +++ b/benchmarks/bloom_filter/add_bench.cu @@ -1,21 +1,9 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include "defaults.hpp" -#include "utils.hpp" #include #include @@ -25,142 +13,122 @@ #include #include -#include +#include +#include +#include #include #include #include -using namespace cuco::benchmark; // defaults, dist_from_state, rebind_hasher_t, add_fpr_summary +using namespace cuco::benchmark; // defaults, dist_from_state, rebind_hasher_t using namespace cuco::utility; // key_generator, distribution /** * @brief A benchmark evaluating `cuco::bloom_filter::add_async` performance */ -template +template void bloom_filter_add(nvbench::state& state, - nvbench::type_list, Dist>) + nvbench::type_list, + nvbench::enum_type, + nvbench::enum_type, + nvbench::enum_type>) { - using size_type = std::uint32_t; - using policy_type = cuco::default_filter_policy, - Word, - static_cast(WordsPerBlock)>; - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, policy_type>; - - constexpr auto filter_block_size = - sizeof(typename filter_type::word_type) * filter_type::words_per_block; - - auto const num_keys = state.get_int64("NumInputs"); - auto const filter_size_mb = state.get_int64("FilterSizeMB"); - auto const pattern_bits = WordsPerBlock; - - try { - [[maybe_unused]] auto const policy = policy_type{static_cast(pattern_bits)}; - } catch (std::exception const& e) { - state.skip(e.what()); // skip invalid configurations + auto constexpr words_per_block = BlockBits / cuda::std::numeric_limits::digits; + auto constexpr pattern_bits_per_word = PatternBits / words_per_block; + + // Check for a valid configuration + if constexpr ((not cuda::std::has_single_bit(static_cast(BlockBits))) or + (words_per_block == 0)) { + state.skip("Invalid filter block size"); + } else if constexpr (HorizontalLayout * VerticalLayout != words_per_block) { + state.skip("Invalid vectorization layout"); + } else if constexpr ((pattern_bits_per_word <= 0) or + (pattern_bits_per_word > cuda::std::numeric_limits::digits) or + (pattern_bits_per_word * words_per_block > 64)) { + state.skip("Invalid pattern bits per word"); + } else { + using size_type = std::uint32_t; + auto constexpr contains_vertical_layout = words_per_block; + auto constexpr contains_horizontal_layout = 1; + using policy_type = cuco::bloom_filter_policy, + Word, + words_per_block, + PatternBits, + HorizontalLayout, + VerticalLayout, + contains_horizontal_layout, + contains_vertical_layout, + false, + false, + false>; + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, policy_type>; + + auto const num_keys = state.get_int64("NumInputs"); + auto const filter_size_mb = state.get_int64("FilterSizeMB"); + + std::size_t const num_sub_filters = + (filter_size_mb * 1024 * 1024) / + (sizeof(typename filter_type::word_type) * filter_type::words_per_block); + + if (num_sub_filters > policy_type::max_filter_blocks) { + // skip invalid configurations + state.skip("num_sub_filters exceeds max_filter_blocks"); + } + + state.add_element_count(num_keys); + + filter_type filter{static_cast(num_sub_filters)}; + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end(), 0); + + state.exec(nvbench::exec_tag::timer, [&](nvbench::launch& launch, auto& timer) { + timer.start(); + filter.add_async(keys.begin(), keys.end(), {launch.get_stream()}); + timer.stop(); + filter.clear_async({launch.get_stream()}); + }); } - - std::size_t const num_sub_filters = (filter_size_mb * 1024 * 1024) / filter_block_size; - - if (num_sub_filters > std::numeric_limits::max()) { - state.skip("num_sub_filters too large for size_type"); // skip invalid configurations - } - - thrust::counting_iterator keys(0); - - state.add_element_count(num_keys); - - filter_type filter{ - static_cast(num_sub_filters), {}, {static_cast(pattern_bits)}}; - - state.collect_dram_throughput(); - state.collect_l2_hit_rates(); - - add_fpr_summary(state, filter); - - state.exec([&](nvbench::launch& launch) { - filter.add_async(keys, keys + num_keys, {launch.get_stream()}); - }); -} - -/** - * @brief A benchmark evaluating `cuco::bloom_filter::add_async` performance with - * `arrow_filter_policy` - */ -template -void arrow_bloom_filter_add(nvbench::state& state, nvbench::type_list) -{ - using size_type = std::uint32_t; - using policy_type = cuco::arrow_filter_policy; - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, policy_type>; - - auto const num_keys = state.get_int64("NumInputs"); - auto const filter_size_mb = state.get_int64("FilterSizeMB"); - - std::size_t const num_sub_filters = - (filter_size_mb * 1024 * 1024) / - (sizeof(typename filter_type::word_type) * filter_type::words_per_block); - - if (num_sub_filters > policy_type::max_filter_blocks) { - state.skip("bloom filter with arrow policy should have <= 4194304 blocks"); // skip invalid - // configurations - } - - thrust::counting_iterator keys(0); - - state.add_element_count(num_keys); - - filter_type filter{static_cast(num_sub_filters)}; - - state.collect_dram_throughput(); - state.collect_l2_hit_rates(); - - add_fpr_summary(state, filter); - - state.exec([&](nvbench::launch& launch) { - filter.add_async(keys, keys + num_keys, {launch.get_stream()}); - }); } +// Default benchmark: single layout matching default `cuco::bloom_filter_policy`. NVBENCH_BENCH_TYPES(bloom_filter_add, NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list, - nvbench::type_list, - nvbench::enum_type_list, - nvbench::type_list)) + nvbench::type_list, ///< Word + nvbench::enum_type_list<256>, ///< BlockBits + nvbench::enum_type_list<8>, ///< PatternBits + nvbench::enum_type_list<8>, ///< HorizontalLayout + nvbench::enum_type_list<1> ///< VerticalLayout + )) .set_name("bloom_filter_add_unique_size") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) + .set_type_axes_names( + {"Key", "Word", "BlockBits", "PatternBits", "HorizontalLayout", "VerticalLayout"}) .add_int64_axis("NumInputs", {defaults::BF_N}) .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); -NVBENCH_BENCH_TYPES(bloom_filter_add, - NVBENCH_TYPE_AXES(nvbench::type_list, - defaults::HASH_RANGE, - nvbench::type_list, - nvbench::enum_type_list, - nvbench::type_list)) - .set_name("bloom_filter_add_unique_hash") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", {defaults::BF_SIZE_MB}); - -NVBENCH_BENCH_TYPES(bloom_filter_add, - NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list, - nvbench::type_list, - nvbench::enum_type_list<1, 2, 4, 8>, - nvbench::type_list)) - .set_name("bloom_filter_add_unique_block_dim") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", {defaults::BF_SIZE_MB}); - -NVBENCH_BENCH_TYPES(arrow_bloom_filter_add, - NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list)) - .set_name("arrow_bloom_filter_add_unique_size") - .set_type_axes_names({"Key", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); +// Exhaustive sweep across block sizes and vectorization layouts. Uncomment for performance +// tuning / paper-style characterization; not run by default because the matrix is large. +// NVBENCH_BENCH_TYPES( +// bloom_filter_add, +// NVBENCH_TYPE_AXES(nvbench::type_list, +// nvbench::type_list, ///< Word +// nvbench::enum_type_list<64, 128, 256, 512, 1024>, ///< BlockBits +// nvbench::enum_type_list<8, 16>, ///< PatternBits +// nvbench::enum_type_list<1, 2, 4, 8, 16>, ///< +// HorizontalLayout nvbench::enum_type_list<1, 2, 4, 8, 16> ///< VerticalLayout +// )) +// .set_name("bloom_filter_add_full_sweep_u64") +// .set_type_axes_names( +// {"Key", "Word", "BlockBits", "PatternBits", "HorizontalLayout", "VerticalLayout"}) +// .add_int64_axis("NumInputs", {defaults::BF_N}) +// .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); diff --git a/benchmarks/bloom_filter/contains_bench.cu b/benchmarks/bloom_filter/contains_bench.cu index e472cf1ff..59d1a85b4 100644 --- a/benchmarks/bloom_filter/contains_bench.cu +++ b/benchmarks/bloom_filter/contains_bench.cu @@ -1,21 +1,9 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include "defaults.hpp" -#include "utils.hpp" #include #include @@ -25,156 +13,144 @@ #include #include +#include #include -#include +#include +#include #include #include -using namespace cuco::benchmark; // defaults, dist_from_state, rebind_hasher_t, add_fpr_summary +using namespace cuco::benchmark; // defaults, dist_from_state, rebind_hasher_t using namespace cuco::utility; // key_generator, distribution /** * @brief A benchmark evaluating `cuco::bloom_filter::contains_async` performance */ -template -void bloom_filter_contains( - nvbench::state& state, - nvbench::type_list, Dist>) +template +void bloom_filter_contains(nvbench::state& state, + nvbench::type_list, + nvbench::enum_type, + nvbench::enum_type, + nvbench::enum_type>) { - using size_type = std::uint32_t; - using policy_type = cuco::default_filter_policy, - Word, - static_cast(WordsPerBlock)>; - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, policy_type>; - - constexpr auto filter_block_size = - sizeof(typename filter_type::word_type) * filter_type::words_per_block; - - // if (filter_block_size <= 32) { - // cudaDeviceSetLimit(cudaLimitMaxL2FetchGranularity, 32); // slightly improves peformance if - // filter block fits into a 32B sector - // } - - auto const num_keys = state.get_int64("NumInputs"); - auto const filter_size_mb = state.get_int64("FilterSizeMB"); - auto const pattern_bits = WordsPerBlock; - - try { - [[maybe_unused]] auto const policy = policy_type{static_cast(pattern_bits)}; - } catch (std::exception const& e) { - state.skip(e.what()); // skip invalid configurations + auto constexpr words_per_block = BlockBits / cuda::std::numeric_limits::digits; + auto constexpr pattern_bits_per_word = PatternBits / words_per_block; + + // Check for a valid configuration + if constexpr ((not cuda::std::has_single_bit(static_cast(BlockBits))) or + (words_per_block == 0)) { + state.skip("Invalid filter block size"); + } else if constexpr (HorizontalLayout * VerticalLayout > words_per_block) { + state.skip("Invalid vectorization layout"); // TODO check if this is correct + } else if constexpr ((pattern_bits_per_word <= 0) or + (pattern_bits_per_word > cuda::std::numeric_limits::digits) or + (pattern_bits_per_word * words_per_block > 64)) { + state.skip("Invalid pattern bits per word"); + } else { + using size_type = std::uint32_t; + auto constexpr add_vertical_layout = 1; + auto constexpr add_horizontal_layout = words_per_block; + using policy_type = cuco::bloom_filter_policy, + Word, + words_per_block, + PatternBits, + add_horizontal_layout, + add_vertical_layout, + HorizontalLayout, + VerticalLayout, + false, + false, + false>; + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, policy_type>; + + auto const num_keys = state.get_int64("NumInputs"); + auto const filter_size_mb = state.get_int64("FilterSizeMB"); + + std::size_t const num_sub_filters = + (filter_size_mb * 1024 * 1024) / + (sizeof(typename filter_type::word_type) * filter_type::words_per_block); + + if (num_sub_filters > policy_type::max_filter_blocks) { + // skip invalid configurations + state.skip("num_sub_filters exceeds max_filter_blocks"); + } + + state.add_element_count(num_keys); + + filter_type filter{static_cast(num_sub_filters)}; + + thrust::counting_iterator key_it(0); + + // insert FPR-optimal number of keys + auto const num_build_keys = (filter_size_mb * 1024 * 1024 * 8) / (2 * PatternBits); + filter.add(key_it, key_it + num_build_keys); + + // FPR summary + thrust::device_vector result(num_keys, false); + filter.contains(key_it + num_build_keys, key_it + num_build_keys + num_keys, result.begin()); + + double const fp = thrust::count(thrust::device, result.begin(), result.end(), true); + + auto& summ_fpr = state.add_summary("FalsePositiveRate"); + summ_fpr.set_string("hint", "FPR"); + summ_fpr.set_string("short_name", "FPR"); + summ_fpr.set_string("description", "False-positive rate of the bloom filter."); + summ_fpr.set_float64("value", fp / static_cast(num_keys)); + + state.collect_dram_throughput(); + state.collect_l2_hit_rates(); + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end(), 0); + + state.add_global_memory_reads(num_keys * + ((words_per_block * sizeof(Word)) + sizeof(Key))); + state.add_global_memory_writes(num_keys * sizeof(bool)); + + state.exec([&](nvbench::launch& launch) { + filter.contains_async(keys.begin(), keys.end(), result.begin(), {launch.get_stream()}); + }); } - - std::size_t const num_sub_filters = (filter_size_mb * 1024 * 1024) / filter_block_size; - - if (num_sub_filters > std::numeric_limits::max()) { - state.skip("num_sub_filters too large for size_type"); // skip invalid configurations - } - - thrust::counting_iterator keys(0); - thrust::device_vector result(num_keys, false); - - state.add_element_count(num_keys); - - filter_type filter{ - static_cast(num_sub_filters), {}, {static_cast(pattern_bits)}}; - - state.collect_dram_throughput(); - state.collect_l2_hit_rates(); - - add_fpr_summary(state, filter); - - filter.add(keys, keys + num_keys); - - state.exec([&](nvbench::launch& launch) { - filter.contains_async(keys, keys + num_keys, result.begin(), {launch.get_stream()}); - }); -} - -/** - * @brief A benchmark evaluating `cuco::bloom_filter::contains_async` performance with - * `arrow_filter_policy` - */ -template -void arrow_bloom_filter_contains(nvbench::state& state, nvbench::type_list) -{ - // cudaDeviceSetLimit(cudaLimitMaxL2FetchGranularity, 32); // slightly improves peformance if - // filter block fits into a 32B sector - using size_type = std::uint32_t; - using policy_type = cuco::arrow_filter_policy; - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, policy_type>; - - auto const num_keys = state.get_int64("NumInputs"); - auto const filter_size_mb = state.get_int64("FilterSizeMB"); - - std::size_t const num_sub_filters = - (filter_size_mb * 1024 * 1024) / - (sizeof(typename filter_type::word_type) * filter_type::words_per_block); - - if (num_sub_filters > policy_type::max_filter_blocks) { - state.skip("bloom filter with arrow policy should have <= 4194304 blocks"); // skip invalid - // configurations - } - - thrust::counting_iterator keys(0); - thrust::device_vector result(num_keys, false); - - state.add_element_count(num_keys); - - filter_type filter{static_cast(num_sub_filters)}; - - state.collect_dram_throughput(); - state.collect_l2_hit_rates(); - - add_fpr_summary(state, filter); - - filter.add(keys, keys + num_keys); - - state.exec([&](nvbench::launch& launch) { - filter.contains_async(keys, keys + num_keys, result.begin(), {launch.get_stream()}); - }); } +// Default benchmark: single layout matching default `cuco::bloom_filter_policy`. NVBENCH_BENCH_TYPES(bloom_filter_contains, NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list, - nvbench::type_list, - nvbench::enum_type_list, - nvbench::type_list)) + nvbench::type_list, ///< Word + nvbench::enum_type_list<256>, ///< BlockBits + nvbench::enum_type_list<8>, ///< PatternBits + nvbench::enum_type_list<1>, ///< HorizontalLayout + nvbench::enum_type_list<8> ///< VerticalLayout + )) .set_name("bloom_filter_contains_unique_size") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) + .set_type_axes_names( + {"Key", "Word", "BlockBits", "PatternBits", "HorizontalLayout", "VerticalLayout"}) .add_int64_axis("NumInputs", {defaults::BF_N}) .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); -NVBENCH_BENCH_TYPES(bloom_filter_contains, - NVBENCH_TYPE_AXES(nvbench::type_list, - defaults::HASH_RANGE, - nvbench::type_list, - nvbench::enum_type_list, - nvbench::type_list)) - .set_name("bloom_filter_contains_unique_hash") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", {defaults::BF_SIZE_MB}); - -NVBENCH_BENCH_TYPES(bloom_filter_contains, - NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list, - nvbench::type_list, - nvbench::enum_type_list<1, 2, 4, 8>, - nvbench::type_list)) - .set_name("bloom_filter_contains_unique_block_dim") - .set_type_axes_names({"Key", "Hash", "Word", "WordsPerBlock", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", {defaults::BF_SIZE_MB}); - -NVBENCH_BENCH_TYPES(arrow_bloom_filter_contains, - NVBENCH_TYPE_AXES(nvbench::type_list, - nvbench::type_list)) - .set_name("arrow_bloom_filter_contains_unique_size") - .set_type_axes_names({"Key", "Distribution"}) - .add_int64_axis("NumInputs", {defaults::BF_N}) - .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); +// Exhaustive sweep across block sizes and vectorization layouts. Uncomment for performance +// tuning / paper-style characterization; not run by default because the matrix is large. +// NVBENCH_BENCH_TYPES( +// bloom_filter_contains, +// NVBENCH_TYPE_AXES(nvbench::type_list, +// nvbench::type_list, ///< Word +// nvbench::enum_type_list<64, 128, 256, 512, 1024>, ///< BlockBits +// nvbench::enum_type_list<8, 16>, ///< PatternBits +// nvbench::enum_type_list<1, 2, 4, 8, 16>, ///< +// HorizontalLayout nvbench::enum_type_list<1, 2, 4, 8, 16> ///< VerticalLayout +// )) +// .set_name("bloom_filter_contains_full_sweep_u64") +// .set_type_axes_names( +// {"Key", "Word", "BlockBits", "PatternBits", "HorizontalLayout", "VerticalLayout"}) +// .add_int64_axis("NumInputs", {defaults::BF_N}) +// .add_int64_axis("FilterSizeMB", defaults::BF_SIZE_MB_RANGE_CACHE); diff --git a/benchmarks/bloom_filter/defaults.hpp b/benchmarks/bloom_filter/defaults.hpp index f1b192aa3..8b1fd9ab8 100644 --- a/benchmarks/bloom_filter/defaults.hpp +++ b/benchmarks/bloom_filter/defaults.hpp @@ -1,41 +1,21 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once -#include - #include -#include - #include namespace cuco::benchmark::defaults { -using BF_KEY = nvbench::int64_t; -using BF_HASH = cuco::xxhash_64; -using BF_WORD = nvbench::uint32_t; +using BF_KEY = nvbench::int64_t; -static constexpr auto BF_N = 1'000'000'000; -static constexpr auto BF_SIZE_MB = 2'000; -static constexpr auto BF_WORDS_PER_BLOCK = 8; +static constexpr auto BF_N = 1'000'000'000; auto const BF_SIZE_MB_RANGE_CACHE = std::vector{1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048}; -auto const BF_PATTERN_BITS_RANGE = std::vector{1, 2, 4, 6, 8, 16}; } // namespace cuco::benchmark::defaults diff --git a/benchmarks/bloom_filter/utils.hpp b/benchmarks/bloom_filter/utils.hpp index cec7e06c3..26d2e6621 100644 --- a/benchmarks/bloom_filter/utils.hpp +++ b/benchmarks/bloom_filter/utils.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -27,21 +16,6 @@ #include -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::XXHash_64, "xxhash_64", "cuco::xxhash_64"); -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::XXHash_32, "xxhash_32", "cuco::xxhash_32"); -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_32, - "murmurhash3_32", - "cuco::murmurhash3_32"); -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_x86_128, - "murmurhash3_x86_128", - "cuco::murmurhash3_x86_128"); -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::MurmurHash3_x64_128, - "murmurhash3_x64_128", - "cuco::murmurhash3_x64_128"); -NVBENCH_DECLARE_TYPE_STRINGS(cuco::detail::identity_hash, - "identity_hash", - "cuco::identity_hash"); - namespace cuco::benchmark { template diff --git a/benchmarks/dynamic_map/contains_bench.cu b/benchmarks/dynamic_map/contains_bench.cu index 90867ee64..024fabc57 100644 --- a/benchmarks/dynamic_map/contains_bench.cu +++ b/benchmarks/dynamic_map/contains_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/dynamic_map/erase_bench.cu b/benchmarks/dynamic_map/erase_bench.cu index 5e0a02547..580fbb804 100644 --- a/benchmarks/dynamic_map/erase_bench.cu +++ b/benchmarks/dynamic_map/erase_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/dynamic_map/find_bench.cu b/benchmarks/dynamic_map/find_bench.cu index 2fd87d27c..7f605d9ef 100644 --- a/benchmarks/dynamic_map/find_bench.cu +++ b/benchmarks/dynamic_map/find_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/dynamic_map/insert_bench.cu b/benchmarks/dynamic_map/insert_bench.cu index 7c3d24bcf..f356465fc 100644 --- a/benchmarks/dynamic_map/insert_bench.cu +++ b/benchmarks/dynamic_map/insert_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/dynamic_map/retrieve_all_bench.cu b/benchmarks/dynamic_map/retrieve_all_bench.cu index 1dd34bbe1..4e1656c30 100644 --- a/benchmarks/dynamic_map/retrieve_all_bench.cu +++ b/benchmarks/dynamic_map/retrieve_all_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/hash_function/hash_function_bench.cu b/benchmarks/hash_function/hash_function_bench.cu index 001e637c0..089600629 100644 --- a/benchmarks/hash_function/hash_function_bench.cu +++ b/benchmarks/hash_function/hash_function_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/hyperloglog/hyperloglog_bench.cu b/benchmarks/hyperloglog/hyperloglog_bench.cu index 1ada00396..aeeff3dc8 100644 --- a/benchmarks/hyperloglog/hyperloglog_bench.cu +++ b/benchmarks/hyperloglog/hyperloglog_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -24,8 +13,8 @@ #include #include +#include #include -#include #include #include @@ -40,7 +29,7 @@ template // Casting is valid since the keys generated are representable in int64_t. using T = std::int64_t; - auto cast_iter = thrust::make_transform_iterator( + auto cast_iter = cuda::make_transform_iterator( first, cuda::proclaim_return_type([] __device__(auto i) { return static_cast(i); })); auto set = cuco::static_set{n, 0.8, cuco::empty_key{-1}}; diff --git a/benchmarks/roaring_bitmap/contains_bench.cu b/benchmarks/roaring_bitmap/contains_bench.cu index 6d9683f3d..77c9cef31 100644 --- a/benchmarks/roaring_bitmap/contains_bench.cu +++ b/benchmarks/roaring_bitmap/contains_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_map/contains_bench.cu b/benchmarks/static_map/contains_bench.cu index 3f9bf43b9..0f1b14b15 100644 --- a/benchmarks/static_map/contains_bench.cu +++ b/benchmarks/static_map/contains_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_map/erase_bench.cu b/benchmarks/static_map/erase_bench.cu index 519a5ee53..11c28f0b1 100644 --- a/benchmarks/static_map/erase_bench.cu +++ b/benchmarks/static_map/erase_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_map/find_bench.cu b/benchmarks/static_map/find_bench.cu index 95cf5a7fb..3e76c13a7 100644 --- a/benchmarks/static_map/find_bench.cu +++ b/benchmarks/static_map/find_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_map/insert_bench.cu b/benchmarks/static_map/insert_bench.cu index 04df7794b..f0afe192a 100644 --- a/benchmarks/static_map/insert_bench.cu +++ b/benchmarks/static_map/insert_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_map/insert_or_apply_bench.cu b/benchmarks/static_map/insert_or_apply_bench.cu index a128e7446..e978c9f18 100644 --- a/benchmarks/static_map/insert_or_apply_bench.cu +++ b/benchmarks/static_map/insert_or_apply_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -51,7 +40,7 @@ std::enable_if_t<(sizeof(Key) == sizeof(Value)), void> static_map_insert_or_appl thrust::device_vector pairs(num_keys); thrust::transform(keys.begin(), keys.end(), pairs.begin(), [] __device__(Key const& key) { - return pair_type(key, static_cast(key)); + return pair_type(key, static_cast(key) + 1); // exclude sentinel (0) }); state.add_element_count(num_keys); diff --git a/benchmarks/static_multimap/count_bench.cu b/benchmarks/static_multimap/count_bench.cu index a605ba3c7..44de007de 100644 --- a/benchmarks/static_multimap/count_bench.cu +++ b/benchmarks/static_multimap/count_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multimap/insert_bench.cu b/benchmarks/static_multimap/insert_bench.cu index c9b54e51e..11cb38dda 100644 --- a/benchmarks/static_multimap/insert_bench.cu +++ b/benchmarks/static_multimap/insert_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multimap/query_bench.cu b/benchmarks/static_multimap/query_bench.cu index 74849b742..3d5be3226 100644 --- a/benchmarks/static_multimap/query_bench.cu +++ b/benchmarks/static_multimap/query_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multimap/retrieve_bench.cu b/benchmarks/static_multimap/retrieve_bench.cu index 594533574..f07085db4 100644 --- a/benchmarks/static_multimap/retrieve_bench.cu +++ b/benchmarks/static_multimap/retrieve_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multiset/contains_bench.cu b/benchmarks/static_multiset/contains_bench.cu index 767a3d9d6..e3bf91502 100644 --- a/benchmarks/static_multiset/contains_bench.cu +++ b/benchmarks/static_multiset/contains_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multiset/count_bench.cu b/benchmarks/static_multiset/count_bench.cu index d1af6b48e..e5dd77c40 100644 --- a/benchmarks/static_multiset/count_bench.cu +++ b/benchmarks/static_multiset/count_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multiset/find_bench.cu b/benchmarks/static_multiset/find_bench.cu index 20cb7ba34..fccfcb579 100644 --- a/benchmarks/static_multiset/find_bench.cu +++ b/benchmarks/static_multiset/find_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multiset/insert_bench.cu b/benchmarks/static_multiset/insert_bench.cu index 9bd3ee9c7..76d187412 100644 --- a/benchmarks/static_multiset/insert_bench.cu +++ b/benchmarks/static_multiset/insert_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_multiset/retrieve_bench.cu b/benchmarks/static_multiset/retrieve_bench.cu index 427cc13ed..36351e58d 100644 --- a/benchmarks/static_multiset/retrieve_bench.cu +++ b/benchmarks/static_multiset/retrieve_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -22,6 +11,7 @@ #include +#include #include #include @@ -54,7 +44,7 @@ void static_multiset_retrieve(nvbench::state& state, nvbench::type_list output_match(output_size); - auto output_probe_begin = thrust::discard_iterator{}; + auto output_probe_begin = cuda::discard_iterator{}; state.exec(nvbench::exec_tag::sync, [&](nvbench::launch& launch) { set.retrieve( diff --git a/benchmarks/static_set/contains_bench.cu b/benchmarks/static_set/contains_bench.cu index 87632740c..fedf5d070 100644 --- a/benchmarks/static_set/contains_bench.cu +++ b/benchmarks/static_set/contains_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_set/find_bench.cu b/benchmarks/static_set/find_bench.cu index b59c486b2..e2d2836d2 100644 --- a/benchmarks/static_set/find_bench.cu +++ b/benchmarks/static_set/find_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_set/insert_bench.cu b/benchmarks/static_set/insert_bench.cu index 7083a49e3..c66555887 100644 --- a/benchmarks/static_set/insert_bench.cu +++ b/benchmarks/static_set/insert_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_set/rehash_bench.cu b/benchmarks/static_set/rehash_bench.cu index 593289ce2..29e1344ff 100644 --- a/benchmarks/static_set/rehash_bench.cu +++ b/benchmarks/static_set/rehash_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_set/retrieve_all_bench.cu b/benchmarks/static_set/retrieve_all_bench.cu index 15cf2750d..283a5da7f 100644 --- a/benchmarks/static_set/retrieve_all_bench.cu +++ b/benchmarks/static_set/retrieve_all_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/benchmarks/static_set/retrieve_bench.cu b/benchmarks/static_set/retrieve_bench.cu index be6902e6c..37131642c 100644 --- a/benchmarks/static_set/retrieve_bench.cu +++ b/benchmarks/static_set/retrieve_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -22,6 +11,7 @@ #include +#include #include #include @@ -54,7 +44,7 @@ void static_set_retrieve(nvbench::state& state, nvbench::type_list) auto const output_size = set.count(keys.begin(), keys.end()); thrust::device_vector output_match(output_size); - auto output_probe_begin = thrust::discard_iterator{}; + auto output_probe_begin = cuda::discard_iterator{}; state.exec(nvbench::exec_tag::sync, [&](nvbench::launch& launch) { set.retrieve( diff --git a/benchmarks/static_set/size_bench.cu b/benchmarks/static_set/size_bench.cu index f8827954a..72c2ac8b0 100644 --- a/benchmarks/static_set/size_bench.cu +++ b/benchmarks/static_set/size_bench.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/ci/build.sh b/ci/build.sh index 50cd33277..6b715cc1b 100755 --- a/ci/build.sh +++ b/ci/build.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. set -eo pipefail diff --git a/ci/doxygen_check.sh b/ci/doxygen_check.sh index 51674764f..5fe82d641 100755 --- a/ci/doxygen_check.sh +++ b/ci/doxygen_check.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # CI-specific doxygen script that downloads and uses doxygen 1.9.1 diff --git a/ci/matrix.yml b/ci/matrix.yml index 708e673de..9031ce2f0 100644 --- a/ci/matrix.yml +++ b/ci/matrix.yml @@ -1,30 +1,11 @@ -# SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -cuda_12_0: &cuda_12_0 '12.0' -cuda_12_9: &cuda_12_9 '12.9' -cuda_13_0: &cuda_13_0 '13.0' - -# The GPUs to test on -# Note: This assumes that the appropriate gpu_build_archs are set to include building for the GPUs listed here -gpus: - - 'a100' - - 'v100' +cuda_oldest: &cuda_oldest '12.0' +cuda_newest: &cuda_newest '13.1' # The version of the devcontainer images to use from https://hub.docker.com/r/rapidsai/devcontainers -devcontainer_version: '25.12' +devcontainer_version: '26.04' # Each environment below will generate a unique build/test job # See the "compute-matrix" job in the workflow for how this is parsed and used @@ -43,11 +24,9 @@ devcontainer_version: '25.12' # Configurations that will run for every PR pull_request: nvcc: - - {cuda: *cuda_12_0, os: 'ubuntu22.04', cpu: 'amd64', compiler: {name: 'gcc', version: '11', exe: 'g++'}, gpu_build_archs: '70', std: [17], jobs: ['build', 'test']} - - {cuda: *cuda_12_9, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'gcc', version: '13', exe: 'g++'}, gpu_build_archs: '70', std: [17], jobs: ['build', 'test']} - - {cuda: *cuda_12_9, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'gcc', version: '13', exe: 'g++'}, gpu_build_archs: '80,90', std: [17], jobs: ['build']} - - {cuda: *cuda_12_0, os: 'ubuntu20.04', cpu: 'amd64', compiler: {name: 'llvm', version: '14', exe: 'clang++'}, gpu_build_archs: '70', std: [17], jobs: ['build']} - - {cuda: *cuda_12_9, os: 'ubuntu22.04', cpu: 'amd64', compiler: {name: 'llvm', version: '18', exe: 'clang++'}, gpu_build_archs: '90', std: [17], jobs: ['build']} - - {cuda: *cuda_13_0, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'gcc', version: '13', exe: 'g++'}, gpu_build_archs: '80', std: [17], jobs: ['build']} - - {cuda: *cuda_13_0, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'gcc', version: '13', exe: 'g++'}, gpu_build_archs: '80,90', std: [17], jobs: ['build']} - - {cuda: *cuda_13_0, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'llvm', version: '20', exe: 'clang++'}, gpu_build_archs: '90', std: [17], jobs: ['build']} + - {cuda: *cuda_oldest, os: 'ubuntu22.04', cpu: 'amd64', compiler: {name: 'gcc', version: '11', exe: 'g++'}, gpu_build_archs: '70,80', std: [17], jobs: ['build', 'test']} + - {cuda: *cuda_newest, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'gcc', version: '14', exe: 'g++'}, gpu_build_archs: '90,100', std: [17], jobs: ['build', 'test']} + - {cuda: *cuda_newest, os: 'ubuntu24.04', cpu: 'arm64', compiler: {name: 'gcc', version: '14', exe: 'g++'}, gpu_build_archs: '80,90,100', std: [17], jobs: ['build']} + - {cuda: *cuda_oldest, os: 'ubuntu20.04', cpu: 'amd64', compiler: {name: 'llvm', version: '14', exe: 'clang++'}, gpu_build_archs: '70', std: [17], jobs: ['build']} + - {cuda: *cuda_newest, os: 'ubuntu24.04', cpu: 'amd64', compiler: {name: 'llvm', version: '21', exe: 'clang++'}, gpu_build_archs: '100', std: [17], jobs: ['build']} + - {cuda: *cuda_newest, os: 'ubuntu24.04', cpu: 'arm64', compiler: {name: 'llvm', version: '21', exe: 'clang++'}, gpu_build_archs: '100', std: [17], jobs: ['build']} diff --git a/ci/pre-commit/doxygen.sh b/ci/pre-commit/doxygen.sh index b23fc729c..498bcaab5 100755 --- a/ci/pre-commit/doxygen.sh +++ b/ci/pre-commit/doxygen.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2022-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # Skip if doxygen is not installed if ! [ -x "$(command -v doxygen)" ]; then diff --git a/ci/pre-commit/example_links.py b/ci/pre-commit/example_links.py index 1eb5073d6..8f9ed85de 100755 --- a/ci/pre-commit/example_links.py +++ b/ci/pre-commit/example_links.py @@ -1,4 +1,6 @@ #!/usr/bin/env python +# SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 import os import json diff --git a/ci/sccache_hit_rate.sh b/ci/sccache_hit_rate.sh index 8b6d2d3f5..4068cc686 100755 --- a/ci/sccache_hit_rate.sh +++ b/ci/sccache_hit_rate.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. set -euo pipefail diff --git a/ci/sccache_stats.sh b/ci/sccache_stats.sh index a834347cb..031c2c580 100755 --- a/ci/sccache_stats.sh +++ b/ci/sccache_stats.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # This script prints the sccache hit rate between two calls to sccache --show-stats. # It should be sourced in your script before and after the operations you want to profile, diff --git a/ci/test.sh b/ci/test.sh index cfcce2acd..a3ef414d7 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -1,18 +1,6 @@ #!/bin/bash -# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. # Ensure the script is being executed in its containing directory cd "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"; diff --git a/ci/update_rapids_version.sh b/ci/update_rapids_version.sh index 8140246be..a12f8a466 100755 --- a/ci/update_rapids_version.sh +++ b/ci/update_rapids_version.sh @@ -1,5 +1,6 @@ #!/bin/bash -# Copyright (c) 2025, NVIDIA CORPORATION. +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 ########################## # RAPIDS Version Updater # ########################## diff --git a/cmake/header_testing.cmake b/cmake/header_testing.cmake index 52055eeb6..5a73c09c8 100644 --- a/cmake/header_testing.cmake +++ b/cmake/header_testing.cmake @@ -1,17 +1,8 @@ #============================================================================= -# Copyright (c) 2025, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on #============================================================================= # For every public header, build a translation unit containing `#include
` diff --git a/cmake/roaring_testdata.cmake b/cmake/roaring_testdata.cmake index 168519866..88ac008b0 100644 --- a/cmake/roaring_testdata.cmake +++ b/cmake/roaring_testdata.cmake @@ -1,15 +1,8 @@ # ============================================================================= -# Copyright (c) 2025, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on # ============================================================================= # Only act if enabled diff --git a/cmake/thirdparty/get_cccl.cmake b/cmake/thirdparty/get_cccl.cmake index 6dcfef8a5..0bf7009cf 100644 --- a/cmake/thirdparty/get_cccl.cmake +++ b/cmake/thirdparty/get_cccl.cmake @@ -1,15 +1,8 @@ # ============================================================================= -# Copyright (c) 2021-2023, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except -# in compliance with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software distributed under the License -# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express -# or implied. See the License for the specific language governing permissions and limitations under -# the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on # ============================================================================= # Use CPM to find or clone CCCL diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 6724a3dc1..a709c1685 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,17 +1,8 @@ #============================================================================= -# Copyright (c) 2018-2025, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on #============================================================================= cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR) @@ -48,4 +39,5 @@ ConfigureExample(STATIC_MULTIMAP_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/ ConfigureExample(HYPERLOGLOG_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/hyperloglog/host_bulk_example.cu") ConfigureExample(HYPERLOGLOG_DEVICE_REF_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/hyperloglog/device_ref_example.cu") ConfigureExample(BLOOM_FILTER_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/bloom_filter/host_bulk_example.cu") +ConfigureExample(BLOOM_FILTER_PERSISTING_L2_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/bloom_filter/persisting_l2_example.cu") ConfigureExample(ROARING_BITMAP_HOST_BULK_EXAMPLE "${CMAKE_CURRENT_SOURCE_DIR}/roaring_bitmap/host_bulk_example.cu") diff --git a/examples/bloom_filter/host_bulk_example.cu b/examples/bloom_filter/host_bulk_example.cu index f02f6e657..a8c75fdc2 100644 --- a/examples/bloom_filter/host_bulk_example.cu +++ b/examples/bloom_filter/host_bulk_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/bloom_filter/persisting_l2_example.cu b/examples/bloom_filter/persisting_l2_example.cu new file mode 100644 index 000000000..b3ea7a4a6 --- /dev/null +++ b/examples/bloom_filter/persisting_l2_example.cu @@ -0,0 +1,101 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include + +#include +#include + +#include +#include + +int main(void) +{ + /** + * This example shows how to create a Bloom filter that marks its filter-word accesses as + * persisting in L2 and how to reserve/reset the corresponding L2 set-aside with the CUDA + * runtime API. + * + * The `PersistingL2Access=true` policy parameter makes `cuco::bloom_filter` emit per-access L2 + * persisting cache hints for global-memory filter words. The policy does not reserve cache + * capacity by itself; applications should reserve a persisting-L2 set-aside before the + * Bloom-filter phase with `cudaDeviceSetLimit(cudaLimitPersistingL2CacheSize, ...)` and reset + * persisting lines afterwards with `cudaCtxResetPersistingL2Cache()`. + * + * Use this only when the filter fits in the set-aside/L2 capacity, or when the key stream has + * enough locality that persisted filter lines are reused. If the filter is much larger than L2, + * random accesses can continually mark cold lines as persisting, thrash the persisting region, + * and slow unrelated kernels until the persisting cache is reset. + * + * NVIDIA RTX PRO 6000 Blackwell Max-Q Workstation Edition, 128 MiB L2, 200M input items: + * + * filter size | add, default | add, persisting L2 | contains, default | contains, persisting L2 + * ----------- | ------------ | ------------------ | ----------------- | ------------------------ + * 64 MiB | 4.880 ms | 3.405 ms | 2.444 ms | 2.427 ms + * 80 MiB | 8.276 ms | 3.380 ms | 4.706 ms | 2.443 ms + * 96 MiB | 11.004 ms | 3.476 ms | 4.874 ms | 2.575 ms + * 128 MiB | 22.602 ms | 9.097 ms | 5.545 ms | 5.371 ms + */ + + using key_type = int; + + int constexpr num_keys = 10'000; + + // Create a Bloom filter policy with persisting L2 access enabled. This is the same shape as the + // default policy, except the final `PersistingL2Access` parameter is `true`. + using policy_type = cuco::bloom_filter_policy, + std::uint32_t, + 8, + 8, + 8, + 1, + 1, + 8, + false, + false, + true>; ///< Persisting L2 access enabled. + auto constexpr bytes_per_block = sizeof(policy_type::word_type) * policy_type::words_per_block; + + int device = 0; + CUCO_CUDA_TRY(cudaGetDevice(&device)); + + int max_persisting_l2_cache_size = 0; + CUCO_CUDA_TRY(cudaDeviceGetAttribute( + &max_persisting_l2_cache_size, cudaDevAttrMaxPersistingL2CacheSize, device)); + + // Create a filter that occupies 80% of the maximum supported persisting-L2 set-aside, then + // reserve enough persisting L2 for that filter before launching Bloom-filter kernels. + auto constexpr l2_set_aside_fraction = 0.8; + auto const target_filter_size = + static_cast(l2_set_aside_fraction * max_persisting_l2_cache_size); + CUCO_CUDA_TRY(cudaDeviceSetLimit(cudaLimitPersistingL2CacheSize, target_filter_size)); + + auto const sub_filters = target_filter_size / bytes_per_block; + + // This filter marks global-memory filter-word loads and atomics as persisting-L2 accesses. + cuco::bloom_filter, cuda::thread_scope_device, policy_type> + filter{sub_filters}; + + thrust::device_vector keys(num_keys); + thrust::sequence(keys.begin(), keys.end(), 1); + + // Insert all keys into the filter. + filter.add(keys.begin(), keys.end()); + + thrust::device_vector result(num_keys, false); + + // Query the same keys. + filter.contains(keys.begin(), keys.end(), result.begin()); + + // Evict persisting lines so unrelated later kernels do not inherit stale cache residency. + CUCO_CUDA_TRY(cudaCtxResetPersistingL2Cache()); + + // Release the persisting-L2 set-aside. + CUCO_CUDA_TRY(cudaDeviceSetLimit(cudaLimitPersistingL2CacheSize, 0)); + + return 0; +} diff --git a/examples/hyperloglog/device_ref_example.cu b/examples/hyperloglog/device_ref_example.cu index c149f36f1..d589ec85d 100644 --- a/examples/hyperloglog/device_ref_example.cu +++ b/examples/hyperloglog/device_ref_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/hyperloglog/host_bulk_example.cu b/examples/hyperloglog/host_bulk_example.cu index 545c72d38..8226adfb7 100644 --- a/examples/hyperloglog/host_bulk_example.cu +++ b/examples/hyperloglog/host_bulk_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/roaring_bitmap/host_bulk_example.cu b/examples/roaring_bitmap/host_bulk_example.cu index dba7be9cc..d64986c61 100644 --- a/examples/roaring_bitmap/host_bulk_example.cu +++ b/examples/roaring_bitmap/host_bulk_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_map/count_by_key_example.cu b/examples/static_map/count_by_key_example.cu index dcecf4e4e..87cd53025 100644 --- a/examples/static_map/count_by_key_example.cu +++ b/examples/static_map/count_by_key_example.cu @@ -1,22 +1,12 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include #include #include #include @@ -113,8 +103,8 @@ int main(void) thrust::device_vector insert_keys(num_keys); // Create a sequence of keys. Eeach distinct key has key_duplicates many matches. thrust::transform( - thrust::make_counting_iterator(0), - thrust::make_counting_iterator(insert_keys.size()), + cuda::make_counting_iterator(0), + cuda::make_counting_iterator(insert_keys.size()), insert_keys.begin(), [] __device__(auto i) -> Key { return static_cast(i % (num_keys / key_duplicates)); }); diff --git a/examples/static_map/custom_type_example.cu b/examples/static_map/custom_type_example.cu index ffd8a8d06..2fb32cbe1 100644 --- a/examples/static_map/custom_type_example.cu +++ b/examples/static_map/custom_type_example.cu @@ -1,28 +1,18 @@ /* - * Copyright (c) 2021-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include #include -#include -#include #include #include +#include + // User-defined key type struct custom_key_type { int32_t a; @@ -63,8 +53,8 @@ int main(void) auto const empty_value_sentinel = custom_value_type{-1}; // Create an iterator of input key/value pairs - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{custom_key_type{i}, custom_value_type{i}}; })); @@ -81,9 +71,9 @@ int main(void) // Reproduce inserted keys auto insert_keys = - thrust::make_transform_iterator(thrust::make_counting_iterator(0), - cuda::proclaim_return_type( - [] __device__(auto i) { return custom_key_type{i}; })); + cuda::make_transform_iterator(cuda::make_counting_iterator(0), + cuda::proclaim_return_type( + [] __device__(auto i) { return custom_key_type{i}; })); thrust::device_vector contained(num_pairs); diff --git a/examples/static_map/device_ref_example.cu b/examples/static_map/device_ref_example.cu index d7eb34e99..87f7db213 100644 --- a/examples/static_map/device_ref_example.cu +++ b/examples/static_map/device_ref_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_map/heterogeneous_lookup_example.cu b/examples/static_map/heterogeneous_lookup_example.cu index e21575131..7a1442dfc 100644 --- a/examples/static_map/heterogeneous_lookup_example.cu +++ b/examples/static_map/heterogeneous_lookup_example.cu @@ -1,28 +1,16 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include #include #include #include #include -#include -#include #include @@ -103,8 +91,8 @@ int main() }; thrust::device_vector d_values = {36.5f, 41.2f, 27.1f, 33.8f}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(int i) { return cuco::pair{keys[i], values[i]}; diff --git a/examples/static_map/host_bulk_example.cu b/examples/static_map/host_bulk_example.cu index 507fff320..d0d73f5fc 100644 --- a/examples/static_map/host_bulk_example.cu +++ b/examples/static_map/host_bulk_example.cu @@ -1,25 +1,13 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include -#include -#include #include #include @@ -64,8 +52,8 @@ int main(void) thrust::device_vector insert_values(num_keys); thrust::sequence(insert_values.begin(), insert_values.end(), 0); // Combine keys and values into pairs {{0,0}, {1,1}, ... {i,i}} - auto pairs = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto pairs = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type>( [keys = insert_keys.begin(), values = insert_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; diff --git a/examples/static_map/preallocated_memory_example.cu b/examples/static_map/preallocated_memory_example.cu index d28560ca0..ba7455ea4 100644 --- a/examples/static_map/preallocated_memory_example.cu +++ b/examples/static_map/preallocated_memory_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_multimap/host_bulk_example.cu b/examples/static_multimap/host_bulk_example.cu index 5e0e812a8..362e9c2a8 100644 --- a/examples/static_multimap/host_bulk_example.cu +++ b/examples/static_multimap/host_bulk_example.cu @@ -1,24 +1,13 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include -#include #include #include @@ -45,8 +34,8 @@ int main(void) // Create a sequence of pairs. Eeach key has two matches. // E.g., {{0,0}, {1,1}, ... {0,25'000}, {1, 25'001}, ...} thrust::transform( - thrust::make_counting_iterator(0), - thrust::make_counting_iterator(pairs.size()), + cuda::make_counting_iterator(0), + cuda::make_counting_iterator(pairs.size()), pairs.begin(), [] __device__(auto i) { return cuco::pair{i % (N / 2), i}; }); diff --git a/examples/static_multiset/host_bulk_example.cu b/examples/static_multiset/host_bulk_example.cu index 37b4fed0b..66a7c3fef 100644 --- a/examples/static_multiset/host_bulk_example.cu +++ b/examples/static_multiset/host_bulk_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_set/device_ref_example.cu b/examples/static_set/device_ref_example.cu index 74346616a..f89f2a6b9 100644 --- a/examples/static_set/device_ref_example.cu +++ b/examples/static_set/device_ref_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_set/device_subsets_example.cu b/examples/static_set/device_subsets_example.cu index 9ad6b7dcb..aa274a395 100644 --- a/examples/static_set/device_subsets_example.cu +++ b/examples/static_set/device_subsets_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_set/host_bulk_example.cu b/examples/static_set/host_bulk_example.cu index 73336a4ff..656e2f650 100644 --- a/examples/static_set/host_bulk_example.cu +++ b/examples/static_set/host_bulk_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_set/mapping_table_example.cu b/examples/static_set/mapping_table_example.cu index 424b28661..3d38072e3 100644 --- a/examples/static_set/mapping_table_example.cu +++ b/examples/static_set/mapping_table_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/examples/static_set/shared_memory_example.cu b/examples/static_set/shared_memory_example.cu index 21d78f69f..4b5838e3b 100644 --- a/examples/static_set/shared_memory_example.cu +++ b/examples/static_set/shared_memory_example.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/include/cuco/bloom_filter.cuh b/include/cuco/bloom_filter.cuh index 3f2e69c7c..38f841db8 100644 --- a/include/cuco/bloom_filter.cuh +++ b/include/cuco/bloom_filter.cuh @@ -1,22 +1,11 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once -#include +#include #include #include #include @@ -36,33 +25,44 @@ namespace cuco { /** - * @brief A GPU-accelerated Blocked Bloom Filter. + * @brief A GPU-accelerated Bloom filter. * - * The `bloom_filter` supports two types of operations: - * - Host-side "bulk" operations - * - Device-side "singular" operations + * The `bloom_filter` supports two operation contexts: + * - Host-side bulk operations + * - Device-side operations via refs * - * The host-side bulk operations include add(), contains(), etc. These APIs should be used when - * there are a large number of keys to add or lookup. For example, given a range of keys - * specified by device-accessible iterators, the bulk `add` function will add all keys into + * The host-side bulk operations include `add()`, `contains()`, etc. These APIs should be used when + * there are a large number of keys to add or lookup from host code. For example, given a range of + * keys specified by device-accessible iterators, the bulk `add` function will add all keys into * the filter. * - * The singular device-side operations allow individual threads (or Cooperative Groups) to perform - * independent add or lookup operations from device code. These operations are accessed through - * non-owning, trivially copyable reference types (or "ref"). + * Device-side operations are accessed through non-owning, trivially copyable reference types + * (or "ref"). Refs expose per-key `add`/`contains`, cooperative variants that take a Cooperative + * Group, and cooperative bulk variants over iterator ranges `[first, last)` for use inside user + * kernels. + * + * The implementation follows the Sectorized Bloom Filter (SBF) design from "Optimizing Bloom + * Filters for Modern GPU Architectures" (arXiv:2512.15595, + * https://arxiv.org/abs/2512.15595). The bit array is partitioned into fixed-size blocks, each + * consisting of several machine-word segments. One block is selected per key by hashing; the key's + * fingerprint bits are distributed evenly across the words of that block, confining all probes to + * a single block. Fingerprint positions are generated via branchless multiplicative hashing. + * Block size, the number of fingerprint bits, and separate horizontal/vertical vectorization + * layouts for bulk `add` and `contains` are configured by the `Policy` type (see + * `cuco/bloom_filter_policy.cuh`). * * @tparam Key Key type * @tparam Extent Size type that is used to determine the number of blocks in the filter * @tparam Scope The scope in which operations will be performed by individual threads * @tparam Policy Type that defines how to generate and store key fingerprints (see - * `cuco/bloom_filter_policies.cuh`) + * `cuco/bloom_filter_policy.cuh`) * @tparam Allocator Type of allocator used for device-accessible storage */ template , cuda::thread_scope Scope = cuda::thread_scope_device, - class Policy = cuco::default_filter_policy, std::uint32_t, 8>, - class Allocator = cuco::cuda_allocator> + class Policy = cuco::bloom_filter_policy, + class Allocator = cuco::cuda_allocator> class bloom_filter { public: /** @@ -104,21 +104,17 @@ class bloom_filter { /** * @brief Constructs a statically-sized Bloom filter. * - * @note The total number of bits in the filter is determined by `words_per_block * num_blocks * - * sizeof(word_type) * CHAR_BIT`. - * * @param num_blocks Number of sub-filters or blocks * @param scope The scope in which operations will be performed - * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policies.cuh`) + * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policy.cuh`) * @param alloc Allocator used for allocating device-accessible storage * @param stream CUDA stream used to initialize the filter */ - __host__ explicit constexpr bloom_filter(Extent num_blocks, - cuda_thread_scope scope = {}, - Policy const& policy = {}, - Allocator const& alloc = {}, - cuda::stream_ref stream = cuda::stream_ref{ - cudaStream_t{nullptr}}); + __host__ explicit bloom_filter(Extent num_blocks, + cuda_thread_scope scope = {}, + Policy const& policy = {}, + Allocator const& alloc = {}, + cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); /** * @brief Erases all information from the filter. @@ -164,8 +160,10 @@ class bloom_filter { * @param stream CUDA stream used for device memory operations and kernel launches */ template - __host__ constexpr void add_async( - InputIt first, InputIt last, cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); + __host__ constexpr void add_async(InputIt first, + InputIt last, + cuda::stream_ref stream = cuda::stream_ref{ + cudaStream_t{nullptr}}) noexcept; /** * @brief Adds keys in the range `[first, last)` if `pred` of the corresponding `stencil` returns @@ -326,7 +324,7 @@ class bloom_filter { cudaStream_t{nullptr}}) const noexcept; /** - * @brief Merge another bloom filter into this. + * @brief Merge another bloom filter into `*this`. * * @note Modifies `this` in place. * @note This function synchronizes the given stream. For asynchronous execution use @@ -346,7 +344,7 @@ class bloom_filter { cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); /** - * @brief Asynchronously merge another bloom filter into this. + * @brief Asynchronously merge another bloom filter into `*this`. * * @note Modifies `this` in place. * @@ -365,7 +363,7 @@ class bloom_filter { cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); /** - * @brief Intersect another bloom filter into this. + * @brief Intersect another bloom filter into `*this`. * * @note Modifies `this` in place. * @note This function synchronizes the given stream. For asynchronous execution use @@ -389,7 +387,7 @@ class bloom_filter { cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); /** - * @brief Asynchronously intersect another bloom filter into this. + * @brief Asynchronously intersect another bloom filter into `*this`. * * @note Modifies `this` in place. * diff --git a/include/cuco/bloom_filter_policies.cuh b/include/cuco/bloom_filter_policies.cuh deleted file mode 100644 index 0d28b166a..000000000 --- a/include/cuco/bloom_filter_policies.cuh +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include -#include -#include - -#include - -namespace cuco { - -/** - * @brief A policy that defines how Arrow Block-Split Bloom Filter generates and stores a key's - * fingerprint. - * - * @tparam Key The type of the values to generate a fingerprint for. - * @tparam XXHash64 Custom (64 bit) XXHash hasher to generate a key's fingerprint. - * By default, cuco::xxhash_64 hasher will be used. - * - */ -template class XXHash64 = cuco::xxhash_64> -using arrow_filter_policy = detail::arrow_filter_policy; - -/** - * @brief The default policy that defines how a Blocked Bloom Filter generates and stores a key's - * fingerprint. - * - * @note `Word` type must be an atomically updatable integral type. `WordsPerBlock` must - * be a power-of-two. - * - * @tparam Hash Hash function used to generate a key's fingerprint - * @tparam Word Underlying word/segment type of a filter block - * @tparam WordsPerBlock Number of words/segments in each block - */ -template -class default_filter_policy { - using impl_type = cuco::detail::default_filter_policy_impl; - - public: - using hasher = typename impl_type::hasher; ///< Type of the hash function - using hash_argument_type = typename impl_type::hash_argument_type; ///< Hash function input type - using hash_result_type = typename impl_type::hash_result_type; ///< hash function output type - using word_type = - typename impl_type::word_type; ///< Underlying word/segment type of a filter block - - static constexpr std::uint32_t words_per_block = - impl_type::words_per_block; ///< Number of words/segments in each filter block - - public: - /** - * @brief Constructs the `default_filter_policy` object. - * - * @throws Compile-time error if the specified number of words in a filter block is not a - * power-of-two or is larger than 32. If called from host: throws exception; If called from - * device: Traps the kernel. - * - * @throws If the `hash_result_type` is too narrow to generate the requested number of - * `pattern_bits`. If called from host: throws exception; If called from device: Traps the kernel. - * - * @throws If `pattern_bits` is smaller than the number of words in a filter block or larger than - * the total number of bits in a filter block. If called from host: throws exception; If called - * from device: Traps the kernel. - * - * @param pattern_bits Number of bits in a key's fingerprint - * @param hash Hash function used to generate a key's fingerprint - */ - __host__ __device__ constexpr default_filter_policy(std::uint32_t pattern_bits = words_per_block, - Hash hash = {}); - - /** - * @brief Generates the hash value for a given key. - * - * @note This function is meant as a customization point and is only used in the internals of the - * `bloom_filter(_ref)` implementation. - * - * @param key The key to hash - * - * @return The hash value of the key - */ - __device__ constexpr hash_result_type hash(hash_argument_type const& key) const; - - /** - * @brief Determines the filter block a key is added into. - * - * @note This function is meant as a customization point and is only used in the internals of the - * `bloom_filter(_ref)` implementation. - * - * @tparam Extent Size type that is used to determine the number of blocks in the filter - * - * @param hash Hash value of the key - * @param num_blocks Number of block in the filter - * - * @return The block index for the given key's hash value - */ - template - __device__ constexpr auto block_index(hash_result_type hash, Extent num_blocks) const; - - /** - * @brief Determines the fingerprint pattern for a word/segment within the filter block for a - * given key's hash value. - * - * @note This function is meant as a customization point and is only used in the internals of the - * `bloom_filter(_ref)` implementation. - * - * @param hash Hash value of the key - * @param word_index Target word/segment within the filter block - * - * @return The bit pattern for the word/segment in the filter block - */ - __device__ constexpr word_type word_pattern(hash_result_type hash, - std::uint32_t word_index) const; - - private: - impl_type impl_; ///< Policy implementation -}; - -} // namespace cuco - -#include \ No newline at end of file diff --git a/include/cuco/bloom_filter_policy.cuh b/include/cuco/bloom_filter_policy.cuh new file mode 100644 index 000000000..895a31faa --- /dev/null +++ b/include/cuco/bloom_filter_policy.cuh @@ -0,0 +1,122 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include + +#include + +namespace cuco { + +/** + * @brief Sectorized Bloom filter policy with multiplicative-hashing fingerprint generation. + * + * Implements the Sectorized Bloom Filter (SBF) variant from "Optimizing Bloom Filters for Modern + * GPU Architectures" (arXiv:2512.15595). + * + * Requires a 64-bit hash function: the result is split into upper 32 bits (block selection via + * multiply-shift) and lower 32 bits (pattern generation). + * + * @tparam Key Key type to hash. + * @tparam Hash 64-bit hash functor type. Defaults to `cuco::xxhash_64`. + * @tparam Word Underlying word type of a filter block. Defaults to `std::uint32_t`. + * @tparam WordsPerBlock Words per filter block. Defaults to the number of `Word`s that fit in one + * 32-byte sector. + * @tparam PatternBits Fingerprint bits per key (paper's k). Defaults to `WordsPerBlock`. + * @tparam AddHorizontalLayout CG size for add (paper's Theta). Defaults to `WordsPerBlock` for + * fully horizontal add. + * @tparam AddVerticalLayout Words per thread per add step (paper's Phi). Defaults to `1` for fully + * horizontal add. + * @tparam ContainsHorizontalLayout CG size for contains. Defaults to `1` for fully vertical + * contains. + * @tparam ContainsVerticalLayout Words per thread per contains step. Defaults to `WordsPerBlock` + * for fully vertical contains. + * @tparam ConditionalAdd When `true`, `add` reads each word before the atomic OR and skips the + * write when the required bits are already set. Trades a read for fewer atomic writes; beneficial + * when the filter is highly contended (e.g. close to full) or the input has many duplicate keys. + * @tparam EarlyExitContains When `true`, `contains` short-circuits a thread's evaluation on the + * first missing fingerprint slice. Beneficial when queried keys have a low match rate and filter + * contention is low. + * @tparam PersistingL2Access When `true`, annotates global-memory filter accesses with an L2 + * persisting access policy. Reserve/reset persisting L2 + * separately (e.g. `cudaDeviceSetLimit`). Enable only when the working set fits the reserved + * region, otherwise persisting lines can thrash the cache and slow other work. + */ +template , + class Word = std::uint32_t, + std::uint32_t WordsPerBlock = 32 / sizeof(Word), + std::uint32_t PatternBits = WordsPerBlock, + std::uint32_t AddHorizontalLayout = WordsPerBlock, + std::uint32_t AddVerticalLayout = 1, + std::uint32_t ContainsHorizontalLayout = 1, + std::uint32_t ContainsVerticalLayout = WordsPerBlock, + bool ConditionalAdd = false, + bool EarlyExitContains = false, + bool PersistingL2Access = false> +using bloom_filter_policy = detail::bloom_filter_policy; + +/** + * @brief Deprecated compatibility alias for the old parametric Bloom filter policy API. + * + * Alias for the same policy type exposed by `bloom_filter_policy`, but with the template + * parameters from the old `parametric_filter_policy` API. + * + * @note This alias should not be used in new code and may be removed on short notice. Use + * `cuco::bloom_filter_policy` directly instead. + * + * @tparam Hash 64-bit hash functor type. + * @tparam Word Underlying word type of a filter block. + * @tparam WordsPerBlock Words per filter block. + * @tparam PatternBits Fingerprint bits per key (paper's k). + * @tparam AddHorizontalLayout CG size for add (paper's Theta). + * @tparam AddVerticalLayout Words per thread per add step (paper's Phi). + * @tparam ContainsHorizontalLayout CG size for contains. + * @tparam ContainsVerticalLayout Words per thread per contains step. + * @tparam ConditionalAdd When `true`, `add` reads each word before the atomic OR and skips the + * write when the required bits are already set. Trades a read for fewer atomic writes; beneficial + * when the filter is highly contended (e.g. close to full) or the input has many duplicate keys. + * @tparam EarlyExitContains When `true`, `contains` short-circuits a thread's evaluation on the + * first missing fingerprint slice. Beneficial when queried keys have a low match rate and filter + * contention is low. + * @tparam PersistingL2Access When `true`, annotates global-memory filter accesses with an L2 + * persisting access policy. Defaults to `false` for compatibility with the old API surface. + */ +template +using parametric_filter_policy = detail::bloom_filter_policy; + +} // namespace cuco diff --git a/include/cuco/bloom_filter_ref.cuh b/include/cuco/bloom_filter_ref.cuh index f58910afc..77e601662 100644 --- a/include/cuco/bloom_filter_ref.cuh +++ b/include/cuco/bloom_filter_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -33,7 +22,7 @@ namespace cuco { * @tparam Extent Size type that is used to determine the number of blocks in the filter * @tparam Scope The scope in which operations will be performed by individual threads * @tparam Policy Type that defines how to generate and store key fingerprints (see - * `cuco/bloom_filter_policies.cuh`) + * `cuco/bloom_filter_policy.cuh`) */ template class bloom_filter_ref { @@ -61,7 +50,7 @@ class bloom_filter_ref { * @param data Pointer to the storage span of the filter * @param num_blocks Number of sub-filters or blocks * @param scope The scope in which operations will be performed - * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policies.cuh`) + * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policy.cuh`) */ __host__ __device__ explicit constexpr bloom_filter_ref(filter_block_type* data, Extent num_blocks, @@ -76,7 +65,7 @@ class bloom_filter_ref { * @param data Pointer to the storage span of the filter * @param num_blocks Number of sub-filters or blocks * @param scope The scope in which operations will be performed - * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policies.cuh`) + * @param policy Fingerprint generation policy (see `cuco/bloom_filter_policy.cuh`) */ __host__ __device__ explicit constexpr bloom_filter_ref(word_type* data, Extent num_blocks, @@ -178,8 +167,10 @@ class bloom_filter_ref { * @param stream CUDA stream used for device memory operations and kernel launches */ template - __host__ constexpr void add_async( - InputIt first, InputIt last, cuda::stream_ref stream = cuda::stream_ref{cudaStream_t{nullptr}}); + __host__ constexpr void add_async(InputIt first, + InputIt last, + cuda::stream_ref stream = cuda::stream_ref{ + cudaStream_t{nullptr}}) noexcept; /** * @brief Adds keys in the range `[first, last)` if `pred` of the corresponding `stencil` returns @@ -265,10 +256,21 @@ class bloom_filter_ref { template [[nodiscard]] __device__ bool contains(CG group, ProbeKey const& key) const; - // TODO - // template - // __device__ void contains(CG group, InputIt first, InputIt last, OutputIt output_begin) - // const; + /** + * @brief Device function that tests if all keys in the range `[first, last)` are present in the + * filter. + * + * @tparam CG Cooperative Group type + * @tparam InputIt Device-accessible random access input key iterator + * @tparam OutputIt Device-accessible output iterator assignable from `bool` + * + * @param group The Cooperative Group this operation is executed with + * @param first Beginning of the sequence of keys + * @param last End of the sequence of keys + * @param output_begin Beginning of the sequence of booleans for the presence of each key + */ + template + __device__ void contains(CG group, InputIt first, InputIt last, OutputIt output_begin) const; /** * @brief Tests all keys in the range `[first, last)` if their fingerprints are present in the diff --git a/include/cuco/bucket_storage.cuh b/include/cuco/bucket_storage.cuh index 9d99e3d7b..280e69583 100644 --- a/include/cuco/bucket_storage.cuh +++ b/include/cuco/bucket_storage.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -252,10 +241,10 @@ class bucket_storage { struct aligned_deleter { value_type* raw_ptr_; std::size_t size_; - allocator_type& allocator_; + allocator_type allocator_; cuda::stream_ref stream_; - void operator()(value_type*) const { allocator_.deallocate(raw_ptr_, size_, stream_); } + void operator()(value_type*) { allocator_.deallocate(raw_ptr_, size_, stream_); } }; extent_type extent_; ///< Storage extent diff --git a/include/cuco/constraints.cuh b/include/cuco/constraints.cuh new file mode 100644 index 000000000..dbd7007b2 --- /dev/null +++ b/include/cuco/constraints.cuh @@ -0,0 +1,33 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include + +#include + +namespace cuco { + +/// Maximum supported key size (in bytes) for open-addressing containers. +inline constexpr std::size_t open_addressing_max_key_size = +#if defined(CUCO_HAS_128BIT_ATOMICS) + 16; +#else + 8; +#endif + +/// Maximum supported payload/mapped type size (in bytes) for open-addressing containers. +/// Tied to `open_addressing_max_key_size`: a slot stores at most a key plus an equally-sized +/// payload. +inline constexpr std::size_t open_addressing_max_payload_size = open_addressing_max_key_size; + +/// Maximum supported slot size (in bytes) for open-addressing containers. +/// Tied to `open_addressing_max_key_size`: a slot stores at most a key plus an equally-sized +/// payload. +inline constexpr std::size_t open_addressing_max_slot_size = + open_addressing_max_key_size + open_addressing_max_payload_size; + +} // namespace cuco diff --git a/include/cuco/detail/__config b/include/cuco/detail/__config index c2cc9066a..59f740e46 100644 --- a/include/cuco/detail/__config +++ b/include/cuco/detail/__config @@ -1,22 +1,12 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include +#include #include #if !defined(__CUDACC_VER_MAJOR__) || !defined(__CUDACC_VER_MINOR__) @@ -33,6 +23,15 @@ #error "CCCL version 3.0.0 or later is required" #endif +// WAR for cuCollections/804: work around the nvcc __cuda_is_local / isspacep.local +// miscompile on CUDA < 13.1. CCCL's auto-define of this macro only fires when +// NDEBUG is not set, but cuco builds Release, so define it unconditionally for +// affected toolkit versions. +#if !defined(_CCCL_ATOMIC_UNSAFE_AUTOMATIC_STORAGE) \ + && ((__CUDACC_VER_MAJOR__ < 13) || (__CUDACC_VER_MAJOR__ == 13 && __CUDACC_VER_MINOR__ < 1)) +#define _CCCL_ATOMIC_UNSAFE_AUTOMATIC_STORAGE +#endif + // WAR for libcudacxx/296 #define CUCO_CUDA_MINIMUM_ARCH _NV_FIRST_ARG(__CUDA_ARCH_LIST__) @@ -52,6 +51,10 @@ #define CUCO_HAS_INT128 #endif +#if defined(CUCO_HAS_INT128) && (CUCO_CUDA_MINIMUM_ARCH >= 900) && (__cccl_ptx_isa >= 840) +#define CUCO_HAS_128BIT_ATOMICS +#endif + #if defined(CUDART_VERSION) && (CUDART_VERSION >= 12000) #define CUCO_HAS_CG_REDUCE_UPDATE_ASYNC #endif diff --git a/include/cuco/detail/bitwise_compare.cuh b/include/cuco/detail/bitwise_compare.cuh index 1b9e80f4d..f691cf0ee 100644 --- a/include/cuco/detail/bitwise_compare.cuh +++ b/include/cuco/detail/bitwise_compare.cuh @@ -1,21 +1,11 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include #include #include @@ -63,6 +53,17 @@ struct bitwise_compare_impl<8> { } }; +#ifdef CUCO_HAS_INT128 +template <> +struct bitwise_compare_impl<16> { + __host__ __device__ inline static bool compare(char const* lhs, char const* rhs) + { + return *reinterpret_cast(lhs) == + *reinterpret_cast(rhs); + } +}; +#endif + /** * @brief Gives value to use as alignment for a type that is at least the * size of type, or 16, whichever is smaller. diff --git a/include/cuco/detail/bloom_filter/arrow_filter_policy.cuh b/include/cuco/detail/bloom_filter/arrow_filter_policy.cuh deleted file mode 100644 index 481293335..000000000 --- a/include/cuco/detail/bloom_filter/arrow_filter_policy.cuh +++ /dev/null @@ -1,189 +0,0 @@ -/* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -#include -#include -#include - -#include -#include - -namespace cuco::detail { - -/** - * @brief A policy that defines how Arrow Block-Split Bloom Filter generates and stores a key's - * fingerprint. - * - * Reference: - * https://github.com/apache/arrow/blob/be1dcdb96b030639c0b56955c4c62f9d6b03f473/cpp/src/parquet/bloom_filter.cc#L219-L230 - * - * Example: - * @code{.cpp} - * template - * void bulk_insert_and_eval_arrow_policy_bloom_filter(device_vector const& positive_keys, - * device_vector const& negative_keys) - * { - * using policy_type = cuco::arrow_filter_policy; - * - * // Warn or throw if the number of filter blocks is greater than maximum used by Arrow policy. - * static_assert(NUM_FILTER_BLOCKS <= policy_type::max_filter_blocks, "NUM_FILTER_BLOCKS must be - * in range: [1, 4194304]"); - * - * // Create a bloom filter with Arrow policy - * cuco::bloom_filter, - * cuda::thread_scope_device, policy_type> filter{NUM_FILTER_BLOCKS}; - * - * // Add positive keys to the bloom filter - * filter.add(positive_keys.begin(), positive_keys.end()); - * - * auto const num_tp = positive_keys.size(); - * auto const num_tn = negative_keys.size(); - * - * // Vectors to store query results. - * thrust::device_vector true_positive_result(num_tp, false); - * thrust::device_vector true_negative_result(num_tn, false); - * - * // Query the bloom filter for the inserted keys. - * filter.contains(positive_keys.begin(), positive_keys.end(), true_positive_result.begin()); - * - * // We should see a true-positive rate of 1. - * float true_positive_rate = float(thrust::count(thrust::device, - * true_positive_result.begin(), true_positive_result.end(), true)) / float(num_tp); - * - * // Query the bloom filter for the non-inserted keys. - * filter.contains(negative_keys.begin(), negative_keys.end(), true_negative_result.begin()); - * - * // We may see a false-positive rate > 0 depending on the number of bits in the - * // filter and the number of hashes used per key. - * float false_positive_rate = float(thrust::count(thrust::device, - * true_negative_result.begin(), true_negative_result.end(), true)) / float(num_tn); - * } - * @endcode - * - * @tparam Key The type of the values to generate a fingerprint for. - * @tparam XXHash64 64-bit XXHash hasher implementation for fingerprint generation. - */ -template class XXHash64> -class arrow_filter_policy { - public: - using hasher = XXHash64; ///< 64-bit XXHash hasher for Arrow bloom filter policy - using word_type = std::uint32_t; ///< uint32_t for Arrow bloom filter policy - using key_type = Key; ///< Hash function input type - using hash_result_type = std::uint64_t; ///< hash function output type - - static constexpr uint32_t bits_set_per_block = 8; ///< hardcoded bits set per Arrow filter block - static constexpr uint32_t words_per_block = 8; ///< hardcoded words per Arrow filter block - - static constexpr std::uint32_t bytes_per_filter_block = - 32; ///< Number of bytes in one Arrow filter block - static constexpr std::uint32_t max_arrow_filter_bytes = - 128 * 1024 * 1024; ///< Max bytes in Arrow bloom filter - static constexpr std::uint32_t max_filter_blocks = - (max_arrow_filter_bytes / - bytes_per_filter_block); ///< Max sub-filter blocks allowed in Arrow bloom filter - - public: - /** - * @brief Constructs the `arrow_filter_policy` object. - * - * @note The number of filter blocks with Arrow policy must be in the - * range of [1, 4194304]. If the bloom filter is constructed with a larger - * number of blocks, only the first 4194304 (128MB) blocks will be used. - * - * @param hash Hash function used to generate a key's fingerprint - */ - __host__ __device__ constexpr arrow_filter_policy(hasher hash = {}) : hash_{hash} {} - - /** - * @brief Generates the hash value for a given key. - * - * @param key The key to hash - * - * @return The hash value of the key - */ - __device__ constexpr hash_result_type hash(key_type const& key) const { return hash_(key); } - - /** - * @brief Determines the filter block a key is added into. - * - * @note The number of filter blocks with Arrow policy must be in the - * range of [1, 4194304]. Passing a larger `num_blocks` will still - * upperbound the number of blocks used to the mentioned range. - * - * @tparam Extent Size type that is used to determine the number of blocks in the filter - * - * @param hash Hash value of the key - * @param num_blocks Number of block in the filter - * - * @return The block index for the given key's hash value - */ - template - __device__ constexpr auto block_index(hash_result_type hash, Extent num_blocks) const - { - constexpr auto hash_bits = cuda::std::numeric_limits::digits; - // TODO: assert if num_blocks > max_filter_blocks - auto const max_blocks = cuda::std::min(num_blocks, max_filter_blocks); - // Make sure we are only contained withing the `max_filter_blocks` blocks - return static_cast(((hash >> hash_bits) * max_blocks) >> hash_bits) % max_blocks; - } - - /** - * @brief Determines the fingerprint pattern for a word/segment within the filter block for a - * given key's hash value. - * - * @param hash Hash value of the key - * @param word_index Target word/segment within the filter block - * - * @return The bit pattern for the word/segment in the filter block - */ - __device__ constexpr word_type word_pattern(hash_result_type hash, std::uint32_t word_index) const - { - word_type const key = static_cast(hash); - std::uint32_t salt{}; - - // Basically a switch (word_index) { case 0-7 ... } - // First split: 0..3 versus 4..7. - if (word_index < 4) { - // For indices 0..3, further split into 0..1 and 2..3. - if (word_index < 2) { - // word_index is 0 or 1. - salt = (word_index == 0) ? 0x47b6137bU : 0x44974d91U; - } else { - // word_index is 2 or 3. - salt = (word_index == 2) ? 0x8824ad5bU : 0xa2b7289dU; - } - } else { - // For indices 4..7, further split into 4..5 and 6..7. - if (word_index < 6) { - // word_index is 4 or 5. - salt = (word_index == 4) ? 0x705495c7U : 0x2df1424bU; - } else { - // word_index is 6 or 7. - salt = (word_index == 6) ? 0x9efc4947U : 0x5c6bfb31U; - } - } - return word_type{1} << ((key * salt) >> 27); - } - - private: - hasher hash_; -}; - -} // namespace cuco::detail \ No newline at end of file diff --git a/include/cuco/detail/bloom_filter/bloom_filter.inl b/include/cuco/detail/bloom_filter/bloom_filter.inl index f3306b2fb..3b62d1041 100644 --- a/include/cuco/detail/bloom_filter/bloom_filter.inl +++ b/include/cuco/detail/bloom_filter/bloom_filter.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -27,15 +16,15 @@ namespace cuco { template -__host__ constexpr bloom_filter::bloom_filter( - Extent num_blocks, - cuda_thread_scope, - Policy const& policy, - Allocator const& alloc, - cuda::stream_ref stream) +__host__ bloom_filter::bloom_filter(Extent num_blocks, + cuda_thread_scope, + Policy const& policy, + Allocator const& alloc, + cuda::stream_ref stream) : allocator_{alloc}, - data_{allocator_.allocate(num_blocks, stream), - detail::custom_deleter{num_blocks, allocator_, stream}}, + data_{allocator_.allocate(static_cast(num_blocks), stream), + detail::custom_deleter{ + static_cast(num_blocks), allocator_, stream}}, ref_{data_.get(), num_blocks, {}, policy} { this->clear_async(stream); @@ -66,7 +55,7 @@ __host__ constexpr void bloom_filter::add template template __host__ constexpr void bloom_filter::add_async( - InputIt first, InputIt last, cuda::stream_ref stream) + InputIt first, InputIt last, cuda::stream_ref stream) noexcept { ref_.add_async(first, last, stream); } diff --git a/include/cuco/detail/bloom_filter/bloom_filter_impl.cuh b/include/cuco/detail/bloom_filter/bloom_filter_impl.cuh index 87edd1b67..b2efb3c9e 100644 --- a/include/cuco/detail/bloom_filter/bloom_filter_impl.cuh +++ b/include/cuco/detail/bloom_filter/bloom_filter_impl.cuh @@ -1,21 +1,11 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include #include #include #include @@ -23,10 +13,14 @@ #include #include #include +#include #include #include +#include +#include #include +#include #include #include // TODO #include once available #include @@ -36,7 +30,6 @@ #include #include #include -#include #include @@ -44,204 +37,6 @@ namespace cuco::detail { -/** - * @brief Device functor for adding a single key to the bloom filter - * - * This functor is used with cuda::static_for to iterate over all words in a filter block - * and set the appropriate bits for a given key's hash value. Each iteration processes - * one word in the block using atomic operations to ensure thread safety. - * - * @tparam HashValue Type of the hash value (typically uint64_t) - * @tparam BlockIndex Type of the block index (typically size_t or uint32_t) - * @tparam Policy Filter policy type that provides word pattern generation - * @tparam WordType Underlying word type of the filter (typically uint64_t) - * @tparam Scope CUDA thread scope for atomic operations - */ -template -struct add_impl_functor { - HashValue hash_value; ///< Hash value of the key being added - BlockIndex block_index; ///< Index of the filter block to modify - Policy policy_; ///< Filter policy for generating bit patterns - WordType* words_; ///< Pointer to the filter's word array - size_t words_per_block; ///< Number of words in each filter block - - /** - * @brief Processes one word in the filter block for key insertion - * - * @tparam I Type of the integral constant passed by cuda::static_for - * @param i Integral constant representing the word index within the block - */ - template - __device__ void operator()(I i) const - { - auto const word = policy_.word_pattern(hash_value, i()); - if (word != 0) { - auto atom_word = - cuda::atomic_ref{*(words_ + (block_index * words_per_block + i()))}; - atom_word.fetch_or(word, cuda::memory_order_relaxed); - } - } -}; - -/** - * @brief Device functor for cooperative group-based batch key insertion - * - * This functor is used with cuda::static_for to process multiple keys in parallel - * within a cooperative group. Each thread in the group processes a different key - * using shuffle operations to share hash values and block indices across threads. - * - * @tparam CG Cooperative group type (e.g., thread_block_tile) - * @tparam HashValue Type of the hash value - * @tparam BlockIndex Type of the block index - * @tparam BloomFilterImpl Type of the bloom filter implementation - */ -template -struct add_group_functor { - CG group; ///< Cooperative group for parallel processing - HashValue hash_value; ///< Hash value of the current thread's key - BlockIndex block_index; ///< Block index of the current thread's key - size_t i; ///< Starting index in the key batch - size_t num_keys; ///< Total number of keys to process - size_t num_threads; ///< Number of threads in the group - BloomFilterImpl* self; ///< Pointer to the bloom filter implementation - - /** - * @brief Processes one thread's key in the cooperative group batch insertion - * - * @tparam J Type of the integral constant passed by cuda::static_for - * @param j Integral constant representing the thread index within the group - */ - template - __device__ void operator()(J j) const - { - if ((j() < num_threads) and (i + j() < num_keys)) { - self->add_impl(group, group.shfl(hash_value, j()), group.shfl(block_index, j())); - } - } -}; - -/** - * @brief Device functor for worker group-based batch key insertion - * - * This functor is used with cuda::static_for to process multiple keys in parallel - * within a worker group (subdivision of a larger cooperative group). Similar to - * add_group_functor but operates on a smaller worker group with offset handling - * for processing different portions of the key batch. - * - * @tparam WorkerGroup Worker group type (subdivision of cooperative group) - * @tparam HashValue Type of the hash value - * @tparam BlockIndex Type of the block index - * @tparam BloomFilterImpl Type of the bloom filter implementation - */ -template -struct add_worker_group_functor { - WorkerGroup worker_group; ///< Worker group (subdivision of cooperative group) - HashValue hash_value; ///< Hash value of the current thread's key - BlockIndex block_index; ///< Block index of the current thread's key - size_t i; ///< Starting index in the key batch - size_t worker_offset; ///< Offset for this worker group within the batch - size_t num_keys; ///< Total number of keys to process - size_t worker_num_threads; ///< Number of threads in the worker group - BloomFilterImpl* self; ///< Pointer to the bloom filter implementation - - /** - * @brief Processes one thread's key in the worker group batch insertion - * - * @tparam J Type of the integral constant passed by cuda::static_for - * @param j Integral constant representing the thread index within the worker group - */ - template - __device__ void operator()(J j) const - { - if ((j() < worker_num_threads) and (i + worker_offset + j() < num_keys)) { - self->add_impl( - worker_group, worker_group.shfl(hash_value, j()), worker_group.shfl(block_index, j())); - } - } -}; - -/** - * @brief Device functor for cooperative group-based single key insertion - * - * This functor is used with cuda::static_for to add a single key to the bloom filter - * using a cooperative group. Each thread in the group processes different words in - * the filter block based on thread rank and stride pattern. Used when the group size - * doesn't match the number of words per block. - * - * @tparam HashValue Type of the hash value - * @tparam BlockIndex Type of the block index - * @tparam WordType Underlying word type of the filter - * @tparam Scope CUDA thread scope for atomic operations - * @tparam Policy Filter policy type that provides word pattern generation - */ -template -struct add_impl_group_functor { - HashValue hash_value; ///< Hash value of the key being added - BlockIndex block_index; ///< Index of the filter block to modify - WordType* words_; ///< Pointer to the filter's word array - size_t words_per_block; ///< Number of words in each filter block - size_t rank; ///< Thread rank within the cooperative group - size_t num_threads; ///< Number of threads in the cooperative group - Policy policy_; ///< Filter policy for generating bit patterns - - /** - * @brief Processes one word in the filter block using cooperative group stride pattern - * - * @tparam I Type of the integral constant passed by cuda::static_for - * @param i Integral constant representing the word index within the block - */ - template - __device__ void operator()(I i) const - { - if (i() >= rank && (i() - rank) % num_threads == 0) { - auto atom_word = - cuda::atomic_ref{*(words_ + (block_index * words_per_block + i()))}; - atom_word.fetch_or(policy_.word_pattern(hash_value, i()), cuda::memory_order_relaxed); - } - } -}; - -/** - * @brief Device functor for checking if a key exists in the bloom filter - * - * This functor is used with cuda::static_for to iterate over all words in a filter block - * and check if the expected bit patterns for a given key's hash value are present. - * If any expected bit is missing, the result is set to false, indicating the key - * is definitely not in the set. - * - * @tparam HashValue Type of the hash value - * @tparam StoredPattern Type of the stored pattern array (typically array of WordType) - * @tparam Policy Filter policy type that provides word pattern generation - */ -template -struct contains_functor { - HashValue hash_value; ///< Hash value of the key being queried - StoredPattern stored_pattern; ///< Array of stored bit patterns from the filter block - Policy policy_; ///< Filter policy for generating expected bit patterns - bool* result; ///< Pointer to result flag (set to false if key not found) - - /** - * @brief Checks one word in the filter block for the expected bit pattern - * - * @tparam I Type of the integral constant passed by cuda::static_for - * @param i Integral constant representing the word index within the block - */ - template - __device__ void operator()(I i) const - { - auto const expected_pattern = policy_.word_pattern(hash_value, i()); - if ((stored_pattern[i()] & expected_pattern) != expected_pattern) { *result = false; } - } -}; - template class bloom_filter_impl { public: @@ -250,26 +45,31 @@ class bloom_filter_impl { using size_type = typename extent_type::value_type; using policy_type = Policy; using word_type = typename policy_type::word_type; + static_assert(sizeof(word_type) == 4 || sizeof(word_type) == 8, + "word_type must be 4 or 8 bytes wide for atomicOr"); + // atomicOr overloads resolve on canonical 32- and 64-bit unsigned integer types. + // Normalize by size so any policy-provided word_type (uint32_t, uint64_t, unsigned long, ...) + // resolves to a matching overload via the reinterpret_cast in atomic_or(). + using atomic_word_type = + cuda::std::conditional_t; static constexpr auto thread_scope = Scope; static constexpr auto words_per_block = policy_type::words_per_block; - __host__ __device__ static constexpr size_t max_vec_bytes() noexcept - { - constexpr auto word_bytes = sizeof(word_type); - constexpr auto block_bytes = word_bytes * words_per_block; - return cuda::std::min(cuda::std::max(word_bytes, 32ul), - block_bytes); // aiming for 2xLDG128 -> 1 sector per thread - } - - struct alignas(max_vec_bytes()) filter_block_type { - private: - word_type data_[words_per_block]; - }; + static constexpr auto add_vertical_layout = policy_type::add_vertical_layout; + static constexpr auto add_horizontal_layout = policy_type::add_horizontal_layout; + static constexpr auto contains_vertical_layout = policy_type::contains_vertical_layout; + static constexpr auto contains_horizontal_layout = policy_type::contains_horizontal_layout; + static constexpr bool conditional_add = policy_type::conditional_add; + static constexpr bool early_exit_contains = policy_type::early_exit_contains; + static constexpr bool persisting_l2_access = policy_type::persisting_l2_access; + static constexpr auto add_loop_count = + words_per_block / (add_vertical_layout * add_horizontal_layout); + static constexpr auto contains_loop_count = + words_per_block / (contains_vertical_layout * contains_horizontal_layout); static_assert(cuda::std::has_single_bit(words_per_block) and words_per_block <= 32, "Number of words per block must be a power-of-two and less than or equal to 32"); - static_assert( cuda::std::is_constructible_v, word_type&> && cuda::std::is_invocable_r_v, "Invalid word type"); + __host__ __device__ static constexpr size_t alignment() noexcept + { + // Maximum alignment is 32 bytes which is equivalent to one sector + return cuda::std::min( + static_cast(32), + static_cast(cuda::std::max(add_vertical_layout, contains_vertical_layout) * + sizeof(word_type))); + } + + struct filter_block_type { + private: + alignas(alignment()) word_type data_[words_per_block]; + }; + __host__ __device__ explicit constexpr bloom_filter_impl(filter_block_type* filter, Extent num_blocks, cuda_thread_scope, - Policy policy) noexcept + Policy policy) : words_{reinterpret_cast(filter)}, num_blocks_{num_blocks}, policy_{policy} { } @@ -290,7 +104,7 @@ class bloom_filter_impl { __host__ __device__ explicit constexpr bloom_filter_impl(word_type* filter, Extent num_blocks, cuda_thread_scope, - Policy policy) noexcept + Policy policy) : words_{filter}, num_blocks_{num_blocks}, policy_{policy} { } @@ -298,7 +112,8 @@ class bloom_filter_impl { template __device__ constexpr void clear(CG group) { - for (int i = group.thread_rank(); i < num_blocks_ * words_per_block; i += group.size()) { + for (int i = group.thread_rank(); i < static_cast(num_blocks_) * words_per_block; + i += group.size()) { words_[i] = 0; } } @@ -306,284 +121,300 @@ class bloom_filter_impl { __host__ constexpr void clear(cuda::stream_ref stream) { this->clear_async(stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) stream.sync(); -#else - stream.wait(); -#endif } __host__ constexpr void clear_async(cuda::stream_ref stream) { CUCO_CUDA_TRY(cub::DeviceFor::ForEachN( words_, - num_blocks_ * words_per_block, + static_cast(num_blocks_) * words_per_block, [] __device__(word_type & word) { word = 0; }, stream.get())); } - template - __device__ void add(ProbeKey const& key) + __host__ constexpr void merge(bloom_filter_impl const& other, + cuda::stream_ref stream) { - auto const hash_value = policy_.hash(key); - this->add_impl(hash_value, policy_.block_index(hash_value, num_blocks_)); + this->merge_async(other, stream); + stream.sync(); } - template - __device__ void add(InputIt first, InputIt last) + __host__ constexpr void merge_async(bloom_filter_impl const& other, + cuda::stream_ref stream) { - auto const num_keys = cuco::detail::distance(first, last); - for (decltype(num_keys) i = 0; i < num_keys; ++i) { - auto const hash_value = policy_.hash(*(first + i)); - this->add_impl(hash_value, policy_.block_index(hash_value, num_blocks_)); - } + CUCO_EXPECTS(this->block_extent() == other.block_extent(), + "mismatching num_blocks in merge_async"); + CUCO_CUDA_TRY(cub::DeviceTransform::Transform( + cuda::std::tuple{this->data(), other.data()}, + this->data(), + this->block_extent() * words_per_block, + [] __device__(word_type a, word_type b) { return a | b; }, + stream.get())); } - template - __device__ void add_impl(HashValue const& hash_value, BlockIndex block_index) + __host__ constexpr void intersect(bloom_filter_impl const& other, + cuda::stream_ref stream) { - add_impl_functor functor{ - hash_value, block_index, policy_, words_, words_per_block}; - cuda::static_for(functor); + this->intersect_async(other, stream); + stream.sync(); } - template - __device__ void add(CG group, ProbeKey const& key) + __host__ constexpr void intersect_async( + bloom_filter_impl const& other, cuda::stream_ref stream) + { + CUCO_EXPECTS(this->block_extent() == other.block_extent(), + "mismatching num_blocks in intersect_async"); + CUCO_CUDA_TRY(cub::DeviceTransform::Transform( + cuda::std::tuple{this->data(), other.data()}, + this->data(), + this->block_extent() * words_per_block, + [] __device__(word_type a, word_type b) { return a & b; }, + stream.get())); + } + + [[nodiscard]] __host__ __device__ constexpr word_type* data() noexcept { return words_; } + + [[nodiscard]] __host__ __device__ constexpr word_type const* data() const noexcept + { + return words_; + } + + [[nodiscard]] __host__ __device__ constexpr extent_type block_extent() const noexcept { - constexpr auto num_threads = tile_size_v; - constexpr auto optimal_num_threads = add_optimal_cg_size(); - constexpr auto worker_num_threads = - (num_threads < optimal_num_threads) ? num_threads : optimal_num_threads; + return num_blocks_; + } - // If single thread is optimal, use scalar add - if constexpr (worker_num_threads == 1) { - this->add(key); + template + __device__ void add(BuildKey build_key) + { + auto const [upper_hash, lower_hash] = policy_.split_hash(build_key); + auto const block_index = policy_.block_index(upper_hash, num_blocks_); + + if constexpr (add_horizontal_layout == 1) { + add_pattern(block_index, lower_hash); } else { - auto const hash_value = policy_.hash(key); - this->add_impl(hash_value, policy_.block_index(hash_value, num_blocks_)); +#pragma unroll + for (uint32_t thread_index = 0; thread_index < add_horizontal_layout; ++thread_index) { + add_patterns(block_index, lower_hash, thread_index); + } } } - template - __device__ void add(CG group, InputIt first, InputIt last) + template + __device__ void add(CG group, BuildKey build_key) { - namespace cg = cooperative_groups; + if constexpr (add_horizontal_layout == 1 || tile_size_v != add_horizontal_layout) { + if (group.thread_rank() == 0) { this->template add(build_key); } + group.sync(); + } else { + auto const sh = policy_.split_hash(build_key); + auto const lower_hash = sh.second; + auto const block_index = policy_.block_index(sh.first, num_blocks_); - constexpr auto num_threads = tile_size_v; - constexpr auto optimal_num_threads = add_optimal_cg_size(); - constexpr auto worker_num_threads = - (num_threads < optimal_num_threads) ? num_threads : optimal_num_threads; + add_patterns(block_index, lower_hash, group.thread_rank()); + } + } - auto const num_keys = cuco::detail::distance(first, last); - if (num_keys == 0) { return; } + template + __device__ void add_coop(CG group, BuildKey build_key) + { + constexpr auto num_threads = tile_size_v; - auto const rank = group.thread_rank(); + auto const [upper_hash, lower_hash] = policy_.split_hash(build_key); + auto const block_index = policy_.block_index(upper_hash, num_blocks_); - // If single thread is optimal, use scalar add - if constexpr (worker_num_threads == 1) { - for (auto i = rank; i < num_keys; i += num_threads) { - typename cuda::std::iterator_traits::value_type const& insert_element{ - *(first + i)}; - this->add(insert_element); - } - } else if constexpr (num_threads == worker_num_threads) { // given CG is optimal CG - typename policy_type::hash_result_type hash_value; - size_type block_index; - - auto const group_iters = cuco::detail::int_div_ceil(num_keys, num_threads); - for (size_type i = 0; (i / num_threads) < group_iters; i += num_threads) { - if (i + rank < num_keys) { - typename cuda::std::iterator_traits::value_type const& insert_element{ - *(first + i + rank)}; - hash_value = policy_.hash(insert_element); - block_index = policy_.block_index(hash_value, num_blocks_); - } - - add_group_functor - functor{group, - hash_value, - block_index, - static_cast(i), - static_cast(num_keys), - static_cast(num_threads), - this}; - cuda::static_for(functor); - } - } else { // subdivide given CG into multiple optimal CGs - typename policy_type::hash_result_type hash_value; - size_type block_index; - - auto const worker_group = cg::tiled_partition(group); - auto const worker_offset = worker_num_threads * worker_group.meta_group_rank(); - - auto const group_iters = cuco::detail::int_div_ceil(num_keys, num_threads); - - for (size_type i = 0; (i / num_threads) < group_iters; i += num_threads) { - if (i + rank < num_keys) { - typename cuda::std::iterator_traits::value_type const& key{*(first + i + rank)}; - hash_value = policy_.hash(key); - block_index = policy_.block_index(hash_value, num_blocks_); - } - - add_worker_group_functor - functor{worker_group, - hash_value, - block_index, - static_cast(i), - static_cast(worker_offset), - static_cast(num_keys), - static_cast(worker_num_threads), - this}; - cuda::static_for(functor); - } +#pragma unroll num_threads + for (int i = 0; i < num_threads; ++i) { + add_patterns( + group.shfl(block_index, i), group.shfl(lower_hash, i), group.thread_rank()); } } - template - __device__ void add_impl(CG group, HashValue const& hash_value, BlockIndex block_index) + template + __device__ void add_coop(CG group, InputIt first, Index idx, bool is_valid) { constexpr auto num_threads = tile_size_v; - auto const rank = group.thread_rank(); + uint32_t upper_hash = 0; + uint32_t lower_hash = 0; + size_type block_index = 0; + if (is_valid) { + auto const& key = *(first + idx); + auto const sh = policy_.split_hash(key); + upper_hash = sh.first; + lower_hash = sh.second; + block_index = policy_.block_index(upper_hash, num_blocks_); + } - if constexpr (num_threads == words_per_block) { - auto atom_word = cuda::atomic_ref{ - *(words_ + (block_index * words_per_block + rank))}; - atom_word.fetch_or(policy_.word_pattern(hash_value, rank), cuda::memory_order_relaxed); - } else { - add_impl_group_functor functor{ - hash_value, block_index, words_, words_per_block, rank, num_threads, policy_}; - cuda::static_for(functor); +#pragma unroll num_threads + for (int i = 0; i < num_threads; ++i) { + if (group.shfl(is_valid, i)) { + add_patterns( + group.shfl(block_index, i), group.shfl(lower_hash, i), group.thread_rank()); + } } } - template - __host__ constexpr void add(InputIt first, InputIt last, cuda::stream_ref stream) + template + __device__ void add(CG group, InputIt first, InputIt last) { - this->add_async(first, last, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) - stream.sync(); -#else - stream.wait(); -#endif + auto const num_keys = cuco::detail::distance(first, last); + if constexpr (tile_size_v == add_horizontal_layout && add_horizontal_layout > 1) { + auto constexpr num_threads = static_cast(tile_size_v); + for (cuco::detail::index_type batch = 0; batch < num_keys; batch += num_threads) { + auto const idx = batch + static_cast(group.thread_rank()); + auto const is_valid = idx < num_keys; + this->template add_coop(group, first, idx, is_valid); + } + } else { + auto const stride = static_cast(tile_size_v); + for (cuco::detail::index_type i = static_cast(group.thread_rank()); + i < num_keys; + i += stride) { + this->add(*(first + i)); + } + } } template - __host__ constexpr void add_async(InputIt first, InputIt last, cuda::stream_ref stream) + __host__ void add_async(InputIt first, InputIt last, cuda::stream_ref stream) noexcept { auto const num_keys = cuco::detail::distance(first, last); if (num_keys == 0) { return; } - if constexpr (words_per_block == 1) { - CUCO_CUDA_TRY(cub::DeviceFor::ForEachCopyN( - first, - num_keys, - [*this] __device__(key_type const key) mutable { this->add(key); }, - stream.get())); - } else { - auto const num_keys = cuco::detail::distance(first, last); - if (num_keys == 0) { return; } - - auto constexpr block_size = cuco::detail::default_block_size(); - void const* kernel = reinterpret_cast( - detail::bloom_filter_ns::add); - auto const grid_size = cuco::detail::max_occupancy_grid_size(block_size, kernel); + auto constexpr block_size = 256; + auto constexpr cg_size = static_cast(add_horizontal_layout); + auto const grid_size = cuco::detail::int_div_ceil(num_keys, block_size); - detail::bloom_filter_ns::add - <<>>(first, num_keys, *this); - } + detail::bloom_filter_ns::add_n + <<>>(first, num_keys, *this); } - template - __host__ constexpr void add_if( - InputIt first, InputIt last, StencilIt stencil, Predicate pred, cuda::stream_ref stream) + template + __host__ void add(InputIt first, InputIt last, cuda::stream_ref stream) { - this->add_if_async(first, last, stencil, pred, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) + this->add_async(first, last, stream); stream.sync(); -#else - stream.wait(); -#endif } - template - __host__ constexpr void add_if_async(InputIt first, - InputIt last, - StencilIt stencil, - Predicate pred, - cuda::stream_ref stream) noexcept + template + __device__ bool contains(ProbeKey probe_key) const { - auto const num_keys = cuco::detail::distance(first, last); - if (num_keys == 0) { return; } - - auto constexpr cg_size = add_optimal_cg_size(); - auto constexpr block_size = cuco::detail::default_block_size(); - auto const grid_size = - cuco::detail::grid_size(num_keys, cg_size, cuco::detail::default_stride(), block_size); + auto const [upper_hash, lower_hash] = policy_.split_hash(probe_key); + auto const block_index = policy_.block_index(upper_hash, num_blocks_); - detail::bloom_filter_ns::add_if_n - <<>>(first, num_keys, stencil, pred, *this); + if constexpr (contains_horizontal_layout == 1) { + return compare_pattern<0>(block_index, lower_hash); + } else { + bool result = true; +#pragma unroll + for (uint32_t thread_index = 0; thread_index < contains_horizontal_layout; ++thread_index) { + result = result && compare_patterns<0>(block_index, lower_hash, thread_index); + } + return result; + } } - template - [[nodiscard]] __device__ bool contains(ProbeKey const& key) const + template + __device__ bool contains(CG group, ProbeKey probe_key) const { - auto const hash_value = policy_.hash(key); - - auto const stored_pattern = this->vec_load_words( - policy_.block_index(hash_value, num_blocks_) * words_per_block); - - bool result = true; - contains_functor functor{ - hash_value, stored_pattern, policy_, &result}; - cuda::static_for(functor); - if (!result) { return false; } + if constexpr (contains_horizontal_layout == 1 || + tile_size_v != contains_horizontal_layout) { + return this->contains(probe_key); + } else { + auto const sh = policy_.split_hash(probe_key); + auto const lower_hash = sh.second; + auto const block_index = policy_.block_index(sh.first, num_blocks_); - return true; + return group.all(compare_patterns<0>(block_index, lower_hash, group.thread_rank())); + } } template - [[nodiscard]] __device__ bool contains(CG group, ProbeKey const& key) const + __device__ bool contains_coop(CG group, ProbeKey probe_key) const { - constexpr auto num_threads = tile_size_v; - constexpr auto optimal_num_threads = contains_optimal_cg_size(); - constexpr auto words_per_thread = words_per_block / optimal_num_threads; + constexpr auto num_threads = tile_size_v; - // If single thread is optimal, use scalar contains - if constexpr (num_threads == 1 or optimal_num_threads == 1) { - return this->contains(key); - } else { - auto const rank = group.thread_rank(); - auto const hash_value = policy_.hash(key); - bool success = true; + auto const [upper_hash, lower_hash] = policy_.split_hash(probe_key); + auto const block_index = policy_.block_index(upper_hash, num_blocks_); + bool result_out = false; -// Use pragma unroll instead of cuda::static_for to avoid CUDA 12.0 compatibility issues -#pragma unroll - for (size_type i = 0; i < optimal_num_threads; ++i) { - if (i >= rank && (i - rank) % num_threads == 0) { - auto const thread_offset = i * words_per_thread; - auto const stored_pattern = this->vec_load_words( - policy_.block_index(hash_value, num_blocks_) * words_per_block + thread_offset); +#pragma unroll num_threads + for (int i = 0; i < num_threads; ++i) { + auto const result = group.all(compare_patterns<0>( + group.shfl(block_index, i), group.shfl(lower_hash, i), group.thread_rank())); + if (i == group.thread_rank()) { result_out = result; } + } + return result_out; + } -#pragma unroll - for (size_type j = 0; j < words_per_thread; ++j) { - auto const expected_pattern = policy_.word_pattern(hash_value, thread_offset + j); - if ((stored_pattern[j] & expected_pattern) != expected_pattern) { success = false; } - } - } + template + __device__ bool contains_coop(CG group, InputIt first, Index idx, bool is_valid) const + { + constexpr auto num_threads = tile_size_v; + + uint32_t upper_hash = 0; + uint32_t lower_hash = 0; + size_type block_index = 0; + if (is_valid) { + auto const& key = *(first + idx); + auto const sh = policy_.split_hash(key); + upper_hash = sh.first; + lower_hash = sh.second; + block_index = policy_.block_index(upper_hash, num_blocks_); + } + + bool result_out = false; +#pragma unroll num_threads + for (int i = 0; i < num_threads; ++i) { + if (group.shfl(is_valid, i)) { + auto const result = group.all(compare_patterns<0>( + group.shfl(block_index, i), group.shfl(lower_hash, i), group.thread_rank())); + if (i == group.thread_rank()) { result_out = result; } } + } + return result_out; + } - return group.all(success); + template + __device__ void contains(CG group, InputIt first, InputIt last, OutputIt output_begin) const + { + auto const num_keys = cuco::detail::distance(first, last); + if constexpr (tile_size_v == contains_horizontal_layout && contains_horizontal_layout > 1) { + auto constexpr num_threads = static_cast(tile_size_v); + for (cuco::detail::index_type batch = 0; batch < num_keys; batch += num_threads) { + auto const idx = batch + static_cast(group.thread_rank()); + auto const is_valid = idx < num_keys; + auto const result = this->contains_coop(group, first, idx, is_valid); + if (is_valid) { *(output_begin + idx) = result; } + } + } else { + auto const stride = static_cast(tile_size_v); + for (cuco::detail::index_type i = static_cast(group.thread_rank()); + i < num_keys; + i += stride) { + *(output_begin + i) = this->contains(*(first + i)); + } } } - // TODO - // template - // __device__ void contains(CG group, InputIt first, InputIt last, OutputIt output_begin) - // const; + template + __host__ void contains_async(InputIt first, + InputIt last, + OutputIt output_begin, + cuda::stream_ref stream) const noexcept + { + auto const num_keys = cuco::detail::distance(first, last); + if (num_keys == 0) { return; } + + auto constexpr block_size = 256; + auto constexpr cg_size = static_cast(contains_horizontal_layout); + auto const grid_size = cuco::detail::int_div_ceil(num_keys, block_size); + + detail::bloom_filter_ns::contains_n + <<>>(first, num_keys, output_begin, *this); + } template __host__ void contains(InputIt first, @@ -592,37 +423,33 @@ class bloom_filter_impl { cuda::stream_ref stream) const { this->contains_async(first, last, output_begin, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) stream.sync(); -#else - stream.wait(); -#endif } - template - __host__ void contains_async(InputIt first, - InputIt last, - OutputIt output_begin, - cuda::stream_ref stream) const noexcept + template + __host__ void add_if_async(InputIt first, + InputIt last, + StencilIt stencil, + Predicate pred, + cuda::stream_ref stream) noexcept { - auto const always_true = thrust::constant_iterator{true}; - this->contains_if_async(first, last, always_true, cuda::std::identity{}, output_begin, stream); + auto const num_keys = cuco::detail::distance(first, last); + if (num_keys == 0) { return; } + + auto constexpr block_size = 256; + auto constexpr cg_size = static_cast(add_horizontal_layout); + auto const grid_size = cuco::detail::int_div_ceil(num_keys, block_size); + + detail::bloom_filter_ns::add_if_n + <<>>(first, num_keys, stencil, pred, *this); } - template - __host__ void contains_if(InputIt first, - InputIt last, - StencilIt stencil, - Predicate pred, - OutputIt output_begin, - cuda::stream_ref stream) const + template + __host__ void add_if( + InputIt first, InputIt last, StencilIt stencil, Predicate pred, cuda::stream_ref stream) { - this->contains_if_async(first, last, stencil, pred, output_begin, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) + this->add_if_async(first, last, stencil, pred, stream); stream.sync(); -#else - stream.wait(); -#endif } template @@ -636,102 +463,194 @@ class bloom_filter_impl { auto const num_keys = cuco::detail::distance(first, last); if (num_keys == 0) { return; } - auto constexpr cg_size = contains_optimal_cg_size(); - auto constexpr block_size = cuco::detail::default_block_size(); - auto const grid_size = - cuco::detail::grid_size(num_keys, cg_size, cuco::detail::default_stride(), block_size); + auto constexpr block_size = 256; + auto constexpr cg_size = static_cast(contains_horizontal_layout); + auto const grid_size = cuco::detail::int_div_ceil(num_keys, block_size); detail::bloom_filter_ns::contains_if_n <<>>( first, num_keys, stencil, pred, output_begin, *this); } - __host__ constexpr void merge(bloom_filter_impl const& other, - cuda::stream_ref stream) + template + __host__ void contains_if(InputIt first, + InputIt last, + StencilIt stencil, + Predicate pred, + OutputIt output_begin, + cuda::stream_ref stream) const { - this->merge_async(other, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) + this->contains_if_async(first, last, stencil, pred, output_begin, stream); stream.sync(); -#else - stream.wait(); -#endif } - __host__ constexpr void merge_async(bloom_filter_impl const& other, - cuda::stream_ref stream) + // private: + template + [[nodiscard]] __device__ static Pointer filter_access(Pointer ptr) noexcept { - CUCO_EXPECTS(this->block_extent() == other.block_extent(), - "mismatching num_blocks in merge_async"); - CUCO_CUDA_TRY(cub::DeviceTransform::Transform( - cuda::std::tuple{this->data(), other.data()}, - this->data(), - this->block_extent() * words_per_block, - [] __device__(word_type a, word_type b) { return a | b; }, - stream.get())); + if constexpr (persisting_l2_access) { + return cuda::device::is_address_from(ptr, cuda::device::address_space::global) + ? cuda::associate_access_property(ptr, cuda::access_property::persisting{}) + : ptr; + } else { + return ptr; + } } - __host__ constexpr void intersect(bloom_filter_impl const& other, - cuda::stream_ref stream) + template + __device__ constexpr cuda::std::array vec_load_words(size_type index) const { - this->intersect_async(other, stream); -#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) - stream.sync(); -#else - stream.wait(); -#endif + // The block storage is aligned to `alignment()`, but a per-lane load at offset `index` is + // only guaranteed to be aligned to `min(NumWords * sizeof(word_type), alignment())`. Hand the + // compiler the alignment that's actually delivered, not the block-level maximum. + constexpr auto load_alignment = + cuda::std::min(NumWords * sizeof(word_type), alignment()); + auto const* ptr = + reinterpret_cast const*>(words_ + index); + return *static_cast const*>( + __builtin_assume_aligned(filter_access(ptr), load_alignment)); } - __host__ constexpr void intersect_async( - bloom_filter_impl const& other, cuda::stream_ref stream) + template + __device__ constexpr void add_pattern(uint32_t block_index, uint32_t lower_hash) { - CUCO_EXPECTS(this->block_extent() == other.block_extent(), - "mismatching num_blocks in intersect_async"); - CUCO_CUDA_TRY(cub::DeviceTransform::Transform( - cuda::std::tuple{this->data(), other.data()}, - this->data(), - this->block_extent() * words_per_block, - [] __device__(word_type a, word_type b) { return a & b; }, - stream.get())); - } + static_assert(add_horizontal_layout == 1, "add_pattern() requires add_horizontal_layout == 1"); - [[nodiscard]] __host__ __device__ constexpr word_type* data() noexcept { return words_; } + if constexpr (LoopIndex < add_loop_count) { + auto const pattern = + policy_.template array_pattern(lower_hash); + auto* word_base = words_ + static_cast(block_index) * words_per_block + + LoopIndex * add_vertical_layout; - [[nodiscard]] __host__ __device__ constexpr word_type const* data() const noexcept - { - return words_; + for (int i = 0; i < add_vertical_layout; ++i) { + atomic_or(word_base + i, pattern[i]); + } + + // Recurse. + add_pattern(block_index, lower_hash); + } } - [[nodiscard]] __host__ __device__ constexpr extent_type block_extent() const noexcept + template + __device__ constexpr void add_patterns(uint32_t block_index, + uint32_t lower_hash, + uint32_t thread_index) { - return num_blocks_; + static_assert(add_horizontal_layout > 1, "add_patterns() requires add_horizontal_layout > 1"); + + if constexpr (LoopIndex < add_loop_count) { + auto const pattern = + policy_.template array_pattern( + lower_hash, thread_index); + auto* word_base = words_ + static_cast(block_index) * words_per_block + + LoopIndex * add_vertical_layout * add_horizontal_layout + + thread_index * add_vertical_layout; + + for (int i = 0; i < add_vertical_layout; ++i) { + atomic_or(word_base + i, pattern[i]); + } + + // Recurse. + add_patterns(block_index, lower_hash, thread_index); + } } - // TODO - // [[nodiscard]] __host__ double occupancy() const; - // [[nodiscard]] __host__ double expected_false_positive_rate(size_t unique_keys) const - // [[nodiscard]] __host__ __device__ static uint32_t optimal_pattern_bits(size_t num_blocks) - // template - // [[nodiscard]] __device__ constexpr auto make_copy(CG group, word_type* const - // memory_to_use, cuda_thread_scope scope = {}) const noexcept; + template + __device__ constexpr void atomic_or(word_type* word_ptr, word_type pattern) const + { + // Native atomicOr: cuda::atomic_ref::fetch_or produces consistently slower codegen here. + auto const do_or = [&]() { + auto* const p = filter_access(reinterpret_cast(word_ptr)); + auto const v = static_cast(pattern); + if constexpr (thread_scope == cuda::thread_scope_thread) { + *p |= v; + } else if constexpr (thread_scope == cuda::thread_scope_block) { + atomicOr_block(p, v); + } else if constexpr (thread_scope == cuda::thread_scope_device) { + atomicOr(p, v); + } else if constexpr (thread_scope == cuda::thread_scope_system) { + atomicOr_system(p, v); + } else { + static_assert(cuco::dependent_false, + "unsupported cuda::thread_scope for native atomic_or"); + } + }; - private: - template - __device__ constexpr cuda::std::array vec_load_words(size_type index) const - { - return *reinterpret_cast*>(__builtin_assume_aligned( - words_ + index, cuda::std::min(sizeof(word_type) * NumWords, max_vec_bytes()))); + if constexpr (ConditionalAdd) { + // Benign non-atomic read racing with atomicOr; technically UB but used throughout cuco. + if ((*filter_access(word_ptr) & pattern) != pattern) { do_or(); } + } else { + do_or(); + } } - [[nodiscard]] __host__ __device__ static constexpr int32_t add_optimal_cg_size() + /// Compare the stored pattern against the expected pattern for the given hash value. + // Precondition: contains_horizontal_layout == 1 + template + __device__ constexpr bool compare_pattern(uint32_t block_index, uint32_t lower_hash) const { - return words_per_block; // one thread per word so atomic updates can be coalesced + static_assert(contains_horizontal_layout == 1, + "compare_pattern() requires contains_horizontal_layout == 1"); + + if constexpr (LoopIndex < contains_loop_count) { + auto const stored_pattern = this->vec_load_words( + static_cast(block_index) * words_per_block + + LoopIndex * contains_vertical_layout); + auto const expected_pattern = + policy_.template array_pattern(lower_hash); + + bool match = true; + for (int i = 0; i < contains_vertical_layout; ++i) { + match &= (stored_pattern[i] & expected_pattern[i]) == expected_pattern[i]; + } + + // Recurse. + // Early exit in this implementation occurs at the granulairy of contains_vertical_layout + // words. + if constexpr (early_exit_contains) { + if (!match) { return false; } + return compare_pattern(block_index, lower_hash); + } else { + return compare_pattern(block_index, lower_hash) && match; + } + } else { + return true; + } } - [[nodiscard]] __host__ __device__ static constexpr int32_t contains_optimal_cg_size() + template + __device__ constexpr bool compare_patterns(uint32_t block_index, + uint32_t lower_hash, + uint32_t thread_index) const { - constexpr auto word_bytes = sizeof(word_type); - constexpr auto block_bytes = word_bytes * words_per_block; - return block_bytes / max_vec_bytes(); // one vector load per thread + static_assert(contains_horizontal_layout > 1, + "compare_patterns() requires HorizontalLayout > 1"); + + if constexpr (LoopIndex < contains_loop_count) { + auto const stored_pattern = this->vec_load_words( + static_cast(block_index) * words_per_block + + LoopIndex * contains_vertical_layout * contains_horizontal_layout + + thread_index * contains_vertical_layout); + auto const expected_pattern = + policy_ + .template array_pattern( + lower_hash, thread_index); + + bool match = true; + for (int i = 0; i < contains_vertical_layout; ++i) { + match &= (stored_pattern[i] & expected_pattern[i]) == expected_pattern[i]; + } + + // Per-thread early exit: short-circuit this thread's recursion if its slice already missed. + if constexpr (early_exit_contains) { + if (!match) { return false; } + return compare_patterns(block_index, lower_hash, thread_index); + } else { + return compare_patterns(block_index, lower_hash, thread_index) && match; + } + } else { + return true; + } } word_type* words_; diff --git a/include/cuco/detail/bloom_filter/bloom_filter_policy.cuh b/include/cuco/detail/bloom_filter/bloom_filter_policy.cuh new file mode 100644 index 000000000..64288d121 --- /dev/null +++ b/include/cuco/detail/bloom_filter/bloom_filter_policy.cuh @@ -0,0 +1,366 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +#include + +namespace cuco::detail { + +/** + * @brief Sectorized Bloom filter policy with multiplicative-hashing fingerprint generation. + * + * Implements the Sectorized Bloom Filter (SBF) variant from "Optimizing Bloom Filters for Modern + * GPU Architectures" (arXiv:2512.15595). + * + * Each key selects exactly one fixed-size block of `WordsPerBlock` words: the upper 32 bits of the + * 64-bit hash pick the block via multiply-shift, and the lower 32 bits drive compile-time + * salt-based multiplicative hashing that distributes `PatternBits` set bits across that block's + * words (so a 64-bit hash function is required). Confining a key's probes to one block keeps a + * lookup to a single contiguous region, minimizing memory transactions; throughput is best while + * the whole filter fits the GPU cache domain, so sizing it relative to L2 is the main lever. + * + * `add` and `contains` take independent vectorization layouts (horizontal = cooperative-group size, + * vertical = contiguous words per thread per step) because they favor opposite access patterns: + * `add` spreads a block's words across cooperating threads so atomic writes proceed in parallel + * (default: fully horizontal), while `contains` lets one thread read the whole block with wide, + * coalesced loads (default: fully vertical). `PatternBits` trades false-positive rate against + * space. + * + * @tparam Hash 64-bit hash functor whose call operator returns `uint64_t`. + * @tparam Word Underlying word type of a filter block. Must be an atomically updatable integral. + * @tparam WordsPerBlock Words per filter block. Must be a power of two and <= 32. + * @tparam PatternBits Number of fingerprint bits (k in the paper). + * @tparam AddHorizontalLayout CG size used for `add` (paper's Theta). Must be a power of two and + * `AddHorizontalLayout * AddVerticalLayout <= WordsPerBlock`. + * @tparam AddVerticalLayout Contiguous words processed per thread per `add` step (paper's Phi). + * @tparam ContainsHorizontalLayout CG size used for `contains` (paper's Theta). + * @tparam ContainsVerticalLayout Contiguous words processed per thread per `contains` step (paper's + * Phi). + * @tparam ConditionalAdd When `true`, `add` reads each word before the atomic OR and skips the + * write when the required bits are already set. This trades a read for fewer atomic writes and is + * beneficial when the filter is highly contended (e.g. close to full) or the input contains many + * duplicate keys, where most writes would be redundant. + * @tparam EarlyExitContains When `true`, `contains` short-circuits a thread's evaluation on the + * first missing fingerprint slice. Beneficial when queried keys have a low match rate (most lookups + * miss) and filter contention is low, so the common negative path exits early. + * @tparam PersistingL2Access When `true`, filter word accesses in `add` and `contains` are + * annotated with a persisting L2 access policy when the filter storage is in global memory. This + * only emits cache-policy hints on the generated memory instructions; it does not reserve + * persisting L2 capacity, and non-global storage such as shared memory is left unannotated. Pair + * this with an application-managed L2 set-aside (for example + * `cudaDeviceSetLimit(cudaLimitPersistingL2CacheSize, bytes)`) and reset the persisting cache after + * the Bloom-filter phase. Use this only when the filter fits the reserved L2 region or the key + * stream has sufficient locality: filters far larger than L2 can continually mark random lines as + * persisting, thrashing the cache and affecting unrelated kernels. + */ +template +class bloom_filter_policy { + public: + using hasher = Hash; ///< 64-bit hash functor type + using word_type = Word; ///< Underlying filter-block word type + using hash_result_type = uint64_t; ///< Hash function output type + + private: + static constexpr uint32_t max_salts = 64; + static constexpr cuda::std::array salts = { + 0x47b6137bU, 0x44974d91U, 0x8824ad5bU, 0xa2b7289dU, 0x705495c7U, 0x2df1424bU, 0x9efc4947U, + 0x5c6bfb31U, 0xb24bcdffU, 0xb6843d6dU, 0x6db04543U, 0x3a12efddU, 0xb0ddd463U, 0x8d22f6e7U, + 0xb82f1e53U, 0x7db9f86bU, 0xc7afe639U, 0xfb135cd7U, 0x693256e1U, 0x9466d871U, 0x23d3d02fU, + 0x6461d049U, 0x66a91621U, 0xbaa3006fU, 0x52fb8d99U, 0x3ea88b4fU, 0xf470cfdU, 0xb1db79a5U, + 0x9809fcd1U, 0xbced4445U, 0x2eb7c737U, 0x2cea6803U, 0x156f1955U, 0x8813c027U, 0xa26819f9U, + 0x4c3b57bdU, 0x7df94487U, 0xb975e769U, 0xb8f20cb5U, 0x5c9e2e77U, 0x5fb1735fU, 0x3a6f759bU, + 0x3c090923U, 0xfced424dU, 0xa187a6a9U, 0x6f070a41U, 0x2c85233bU, 0x7e62258bU, 0x2771ef17U, + 0x13bbf093U, 0x4ff059e5U, 0xe3ce3d0fU, 0xf1b4789fU, 0x9fbb6173U, 0x6a320cf5U, 0x1be2c481U, + 0x7ba8222bU, 0x6fd619b3U, 0x7b1bbf0dU, 0x8b8993adU, 0x448eca95U, 0x82ab09d9U, 0x2ce53909U, + 0x4f548685U}; + static constexpr uint32_t word_bits = cuda::std::numeric_limits::digits; + + public: + static constexpr uint32_t words_per_block = WordsPerBlock; ///< Number of words per filter block + static constexpr uint32_t pattern_bits = PatternBits; ///< Fingerprint bits per key + + static constexpr uint32_t add_horizontal_layout = + AddHorizontalLayout; ///< horizontal vectorization layout for add operation + static constexpr uint32_t add_vertical_layout = + AddVerticalLayout; ///< vertical vectorization layout for add operation + static constexpr uint32_t contains_horizontal_layout = + ContainsHorizontalLayout; ///< horizontal vectorization layout for contains operation + static constexpr uint32_t contains_vertical_layout = + ContainsVerticalLayout; ///< vertical vectorization layout for contains operation + + static constexpr bool conditional_add = + ConditionalAdd; ///< read-before-atomic on add (skip redundant writes) + static constexpr bool early_exit_contains = + EarlyExitContains; ///< short-circuit contains on first missing slice + static constexpr bool persisting_l2_access = + PersistingL2Access; ///< apply persisting L2 cache-policy hints to filter accesses + + static constexpr size_t max_filter_blocks = + cuda::std::numeric_limits::max(); ///< Upper bound on the number of filter blocks + /// Lower bound on `pattern_bits`: at least one bit per word so every word contributes. + static constexpr auto min_pattern_bits = words_per_block; + /// Upper bound on `pattern_bits`: the total number of bits in a filter block, capped by the + /// number of available salts. + static constexpr auto max_pattern_bits = cuda::std::min(word_bits * words_per_block, max_salts); + + private: + static constexpr uint32_t bit_index_width = cuda::std::bit_width(word_bits - 1); + // TODO: for non-multiple `(pattern_bits, words_per_block)` configs (e.g. PatternBits=12, + // WordsPerBlock=8), the salt walk in `set_bits` advances `PatternArrayIndex` every + // `max_bits_per_word` salts, packing all bits into the first + // `ceil(pattern_bits / words_per_block)` words and leaving the rest at zero. This wastes block + // capacity and inflates FPR. Distribute floor bits to every word plus one extra bit to the + // first `pattern_bits % words_per_block` words, and update the salt-to-word mapping in + // `set_bits` accordingly. + static constexpr uint32_t max_bits_per_word = + cuco::detail::int_div_ceil(pattern_bits, words_per_block); + + public: + /** + * @brief Constructs a Bloom filter policy. + * + * @param hash Hash function used to generate fingerprints. + */ + __host__ __device__ constexpr bloom_filter_policy(Hash hash = {}) : hash_{hash} + { + static_assert(pattern_bits >= min_pattern_bits, + "pattern_bits must be at least words_per_block"); + static_assert(pattern_bits <= max_pattern_bits, + "pattern_bits must be less than the total number of bits in a filter block"); + // Require exact tiling. With `words_per_block` a power of two, this is equivalent to requiring + // both `add_horizontal_layout` and `add_vertical_layout` to be powers of two with product + // <= `words_per_block`. The internal loop count uses integer division on the product; non- + // dividing layouts would leave trailing words uninserted on add while contains still expects + // non-zero patterns there, producing false negatives for every inserted key. + static_assert(words_per_block % (add_horizontal_layout * add_vertical_layout) == 0, + "add_horizontal_layout * add_vertical_layout must evenly divide words_per_block"); + static_assert( + words_per_block % (contains_horizontal_layout * contains_vertical_layout) == 0, + "contains_horizontal_layout * contains_vertical_layout must evenly divide words_per_block"); + } + + /** + * @brief Splits the 64-bit hash of a key into its upper and lower 32 bits. + * + * The upper half is used for block selection (via multiply-shift); the lower half drives the + * per-word fingerprint pattern via salt-based multiplicative hashing. + * + * @tparam Key Key type. + * + * @param key Key to hash. + * + * @return `{upper 32 bits, lower 32 bits}` of the 64-bit hash. + */ + template + __device__ constexpr cuda::std::pair split_hash(Key const& key) const + { + // The split_hash() design requires a 64-bit hash split into upper 32 bits (block selection + // via multiply-shift) and lower 32 bits (pattern generation via salt-based multiplicative + // hashing). This is a permanent design requirement, not a temporary limitation. + static_assert(cuda::std::is_same_v, + "bloom_filter_policy requires a 64-bit hash function"); + auto const hash_value = hash_(key); + return {static_cast(hash_value >> 32), static_cast(hash_value)}; + } + + /** + * @brief Determines the filter block a key maps to via fast multiply-shift modulo. + * + * @tparam Extent Size type used to determine the number of blocks in the filter. + * + * @param upper_hash_value Upper 32 bits of the key's hash. + * @param num_blocks Number of blocks in the filter. + * + * @return Block index in `[0, num_blocks)`. + */ + template + __device__ constexpr auto block_index(uint32_t upper_hash_value, Extent num_blocks) const + { + return static_cast((static_cast(upper_hash_value) * + static_cast(num_blocks)) >> + 32); + } + + /** + * @brief Generates the per-word fingerprint pattern for a key when the horizontal layout is 1. + * + * @tparam LoopIndex Outer-loop iteration index when `words_per_block / VerticalLayout > 1`. + * @tparam VerticalLayout Number of contiguous words this call produces. + * + * @param lower_hash_value Lower 32 bits of the key's hash. + * + * @return Array of `VerticalLayout` words. + */ + template + __device__ constexpr auto array_pattern(uint32_t lower_hash_value) const + { + return pattern_impl(lower_hash_value); + } + + /** + * @brief Generates the per-word fingerprint pattern for a key when the horizontal layout is > 1. + * + * @tparam LoopIndex Outer-loop iteration index. + * @tparam HorizontalLayout Cooperative-group size cooperating on a single key. + * @tparam VerticalLayout Number of contiguous words this call produces. + * + * @param lower_hash_value Lower 32 bits of the key's hash. + * @param thread_index Caller's rank within the cooperative group. + * + * @return Array of `VerticalLayout` words owned by the calling thread. + */ + template + __device__ constexpr auto array_pattern(uint32_t lower_hash_value, uint32_t thread_index) const + { + return pattern_impl(lower_hash_value, + thread_index); + } + + private: + hasher hash_; + + /** + * @brief pattern_impl - Computes the bit pattern for a vertical layout of words. + * I use the terminology of a `virtual thread` to refer to an ordering of the vertical layouts, + * namely + * virtual_thread_index = LoopIndex * HorizontalLayout + thread_index, + * where LoopIndex is the index of the outermost loop in the range: + * [0, words_per_block / (HorizontalLayout * VerticalLayout)). + * @param hash + * @return cuda::std::array - The bit pattern for the vertical layout + * defined by the LoopIndex. + */ + + // Precondition: _horizontal_layout == 1 + template + __device__ constexpr auto pattern_impl(uint32_t hash) const + { + using pattern_array_t = cuda::std::array; + + // Sanity check + constexpr uint32_t num_iterations = words_per_block / VerticalLayout; + static_assert(LoopIndex < num_iterations, + "the loop index cannot exceed the number of loop iterations"); + + pattern_array_t pattern_array{0}; + constexpr uint32_t salt_start_index = max_bits_per_word * VerticalLayout * LoopIndex; + constexpr uint32_t salt_end_index = + cuda::std::min(salt_start_index + max_bits_per_word * VerticalLayout, pattern_bits); + constexpr uint32_t pattern_array_start_index = 0; + set_bits(hash, pattern_array); + return pattern_array; + } + + // Precondition: _horizontal_layout > 1 + template + __device__ constexpr auto pattern_impl(uint32_t hash, uint32_t thread_index) const + { + using pattern_array_t = cuda::std::array; + + // Sanity check + constexpr uint32_t num_iterations = words_per_block / (HorizontalLayout * VerticalLayout); + static_assert(LoopIndex < num_iterations, + "the loop index cannot exceed the number of loop iterations"); + + // [lower_bound, upper_bound) defines the range of virtual thread indices for this loop + // iteration. + constexpr uint32_t lower_bound = LoopIndex * HorizontalLayout; + constexpr uint32_t upper_bound = lower_bound + HorizontalLayout; + + // A virtual thread flips max_bits_per_virtual_thread bits in the pattern array, excepting + // potentially some of the last virtual threads (if pattern_bits % words_per_block != 0). + constexpr uint32_t max_bits_per_virtual_thread = max_bits_per_word * VerticalLayout; + + pattern_array_t pattern_array{0}; + if constexpr (num_iterations == 1) { + thread_dispatch( + hash, thread_index, pattern_array); + } else { + uint32_t const virtual_thread_index = LoopIndex * HorizontalLayout + thread_index; + thread_dispatch( + hash, virtual_thread_index, pattern_array); + } + return pattern_array; + } + + // Dispatches a dynamic virtual thread index to a static virtual thread index by building a + // compile-time decision tree over the range [LowerBound, UpperBound) for the virtual thread + // index. This method is only used when _horizontal_layout > 1. + template + __device__ constexpr void thread_dispatch(uint32_t hash, + uint32_t thread_index, + PatternArrayT& pattern_array) const + { + // Sanity check + static_assert(LowerBound < UpperBound); + + if constexpr (LowerBound + 1 == UpperBound) { + // Base case: thread_index == LowerBound + constexpr uint32_t salt_start_index = MaxBitsPerVirtualThread * LowerBound; + constexpr uint32_t salt_end_index = + cuda::std::min(salt_start_index + MaxBitsPerVirtualThread, pattern_bits); + constexpr uint32_t pattern_array_start_index = 0; + set_bits(hash, pattern_array); + } else { + // Recursive case: thread_index > LowerBound + constexpr uint32_t mid = (LowerBound + UpperBound) / 2; + if (thread_index < mid) { + thread_dispatch( + hash, thread_index, pattern_array); + } else { + thread_dispatch( + hash, thread_index, pattern_array); + } + } + } + + // Set bits in the pattern array using salts starting from SaltIndex. + template + __device__ constexpr void set_bits(uint32_t hash, PatternArrayT& pattern_array) const + { + if constexpr (SaltIndex < SaltEndIndex) { + // Select top bit_index_width bits from salted hash to determine the bit index. + uint32_t const bit_index = + (cuda::std::get(salts) * hash) >> (32 - bit_index_width); + + // Set the bit in the pattern array. + cuda::std::get(pattern_array) |= word_type{1} << bit_index; + + // Recurse. + constexpr uint32_t next_salt_index = SaltIndex + 1; + constexpr uint32_t next_pattern_array_index = + PatternArrayIndex + (next_salt_index % max_bits_per_word == 0 ? 1 : 0); + set_bits(hash, pattern_array); + } + } +}; + +} // namespace cuco::detail diff --git a/include/cuco/detail/bloom_filter/bloom_filter_ref.inl b/include/cuco/detail/bloom_filter/bloom_filter_ref.inl index b251dceee..40eec119f 100644 --- a/include/cuco/detail/bloom_filter/bloom_filter_ref.inl +++ b/include/cuco/detail/bloom_filter/bloom_filter_ref.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -92,7 +81,7 @@ __host__ constexpr void bloom_filter_ref::add(InputI template template __host__ constexpr void bloom_filter_ref::add_async( - InputIt first, InputIt last, cuda::stream_ref stream) + InputIt first, InputIt last, cuda::stream_ref stream) noexcept { impl_.add_async(first, last, stream); } @@ -129,6 +118,16 @@ template return impl_.contains(group, key); } +template +template +__device__ void bloom_filter_ref::contains(CG group, + InputIt first, + InputIt last, + OutputIt output_begin) const +{ + impl_.contains(group, first, last, output_begin); +} + template template __host__ constexpr void bloom_filter_ref::contains( diff --git a/include/cuco/detail/bloom_filter/default_filter_policy.inl b/include/cuco/detail/bloom_filter/default_filter_policy.inl deleted file mode 100644 index eb8dbf703..000000000 --- a/include/cuco/detail/bloom_filter/default_filter_policy.inl +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -namespace cuco { - -template -__host__ - __device__ constexpr default_filter_policy::default_filter_policy( - uint32_t pattern_bits, Hash hash) - : impl_{pattern_bits, hash} -{ -} - -template -__device__ constexpr typename default_filter_policy::hash_result_type -default_filter_policy::hash( - typename default_filter_policy::hash_argument_type const& key) const -{ - return impl_.hash(key); -} - -template -template -__device__ constexpr auto default_filter_policy::block_index( - typename default_filter_policy::hash_result_type hash, - Extent num_blocks) const -{ - return impl_.block_index(hash, num_blocks); -} - -template -__device__ constexpr typename default_filter_policy::word_type -default_filter_policy::word_pattern( - default_filter_policy::hash_result_type hash, - std::uint32_t word_index) const -{ - return impl_.word_pattern(hash, word_index); -} - -} // namespace cuco \ No newline at end of file diff --git a/include/cuco/detail/bloom_filter/default_filter_policy_impl.cuh b/include/cuco/detail/bloom_filter/default_filter_policy_impl.cuh deleted file mode 100644 index 14509b9b0..000000000 --- a/include/cuco/detail/bloom_filter/default_filter_policy_impl.cuh +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#pragma once - -#include - -#include -#include -#include -#include - -#include -#include - -namespace cuco::detail { - -template -class default_filter_policy_impl { - public: - using hasher = Hash; - using word_type = Word; - using hash_argument_type = typename hasher::argument_type; - using hash_result_type = decltype(std::declval()(std::declval())); - - static constexpr std::uint32_t words_per_block = WordsPerBlock; - - private: - static constexpr std::uint32_t word_bits = cuda::std::numeric_limits::digits; - static constexpr std::uint32_t bit_index_width = cuda::std::bit_width(word_bits - 1); - - public: - __host__ __device__ explicit constexpr default_filter_policy_impl(uint32_t pattern_bits, - Hash hash) - : pattern_bits_{pattern_bits}, - min_bits_per_word_{pattern_bits_ / words_per_block}, - remainder_bits_{pattern_bits_ % words_per_block}, - hash_{hash} - { - NV_DISPATCH_TARGET( - NV_IS_HOST, - ( // This ensures each word in the block has at least one bit set; otherwise we would never - // use some of the words - constexpr uint32_t min_pattern_bits = words_per_block; - - // The maximum number of bits to be set for a key is capped by the total number of bits in - // the filter block - constexpr uint32_t max_pattern_bits = word_bits * words_per_block; - - constexpr uint32_t hash_bits = cuda::std::numeric_limits::digits; - constexpr uint32_t max_pattern_bits_from_hash = hash_bits / bit_index_width; - CUCO_EXPECTS( - pattern_bits <= max_pattern_bits_from_hash, - "`hash_result_type` too narrow to generate the requested number of `pattern_bits`"); - CUCO_EXPECTS(pattern_bits_ >= min_pattern_bits, - "`pattern_bits` must be at least `words_per_block`"); - CUCO_EXPECTS(pattern_bits_ <= max_pattern_bits, - "`pattern_bits` must be less than the total number of bits in a filter " - "block");)) - // TODO find a proper way to perform input checks/assertions on device without destroying the - // context (e.g. __trap()) - } - - __device__ constexpr hash_result_type hash(hash_argument_type const& key) const - { - return hash_(key); - } - - template - __device__ constexpr auto block_index(hash_result_type hash, Extent num_blocks) const - { - return hash % num_blocks; - } - - __device__ constexpr word_type word_pattern(hash_result_type hash, std::uint32_t word_index) const - { - word_type constexpr bit_index_mask = (word_type{1} << bit_index_width) - 1; - - auto const bits_so_far = min_bits_per_word_ * word_index + - (word_index < remainder_bits_ ? word_index : remainder_bits_); - - hash >>= bits_so_far * bit_index_width; - - word_type word = 0; - int32_t const bits_per_word = min_bits_per_word_ + (word_index < remainder_bits_ ? 1 : 0); - - for (int32_t bit = 0; bit < bits_per_word; ++bit) { - word |= word_type{1} << (hash & bit_index_mask); - hash >>= bit_index_width; - } - - return word; - } - - private: - uint32_t pattern_bits_; - uint32_t min_bits_per_word_; - uint32_t remainder_bits_; - hasher hash_; -}; - -} // namespace cuco::detail \ No newline at end of file diff --git a/include/cuco/detail/bloom_filter/kernels.cuh b/include/cuco/detail/bloom_filter/kernels.cuh index 6c918fb7d..9e7420a0c 100644 --- a/include/cuco/detail/bloom_filter/kernels.cuh +++ b/include/cuco/detail/bloom_filter/kernels.cuh @@ -1,20 +1,10 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include #include #include @@ -27,30 +17,83 @@ namespace cuco::detail::bloom_filter_ns { CUCO_SUPPRESS_KERNEL_WARNINGS - -template -CUCO_KERNEL __launch_bounds__(BlockSize) void add(InputIt first, - cuco::detail::index_type n, - Ref ref) +template +__device__ void add_n_impl(InputIt first, cuco::detail::index_type n, Ref ref) { - namespace cg = cooperative_groups; - - constexpr auto tile_size = cuco::detail::warp_size(); - - auto const tile_idx = cuco::detail::global_thread_id() / tile_size; - auto const n_tiles = gridDim.x * BlockSize / tile_size; - auto const items_per_tile = cuco::detail::int_div_ceil(n, n_tiles); + namespace cg = cooperative_groups; + using key_type = typename cuda::std::iterator_traits::value_type; + + if constexpr (CGSize > 1) { + auto const idx = cuco::detail::global_thread_id(); + auto group = cg::tiled_partition(cg::this_thread_block()); + auto const is_full_tile = + static_cast(blockIdx.x + 1) * BlockSize <= n; + if (is_full_tile) { + key_type const& key = *(first + idx); + ref.add_coop(group, key); + } else { + auto const is_valid = idx < n; + ref.add_coop(group, first, idx, is_valid); + } + } else { + auto const idx = cuco::detail::global_thread_id(); + if (idx < n) { + key_type const& key = *(first + idx); + ref.add(key); + } + } +} - auto const tile_start = tile_idx * items_per_tile; - if (tile_start >= n) { return; } - auto const tile_stop = (tile_start + items_per_tile < n) ? tile_start + items_per_tile : n; +template +CUCO_KERNEL __launch_bounds__(BlockSize) void add_n(InputIt first, + cuco::detail::index_type n, + Ref ref) +{ + add_n_impl(first, n, ref); +} - auto const tile = cg::tiled_partition(cg::this_thread_block()); +template +__device__ void contains_n_impl(InputIt first, + cuco::detail::index_type n, + OutputIt output_begin, + Ref ref) +{ + namespace cg = cooperative_groups; + using key_type = typename cuda::std::iterator_traits::value_type; + + if constexpr (CGSize > 1) { + auto const idx = cuco::detail::global_thread_id(); + auto group = cg::tiled_partition(cg::this_thread_block()); + auto const is_full_tile = + static_cast(blockIdx.x + 1) * BlockSize <= n; + if (is_full_tile) { + key_type const& key = *(first + idx); + *(output_begin + idx) = ref.contains_coop(group, key); + } else { + auto const is_valid = idx < n; + auto const result = ref.contains_coop(group, first, idx, is_valid); + if (is_valid) { *(output_begin + idx) = result; } + } + } else { + auto const idx = cuco::detail::global_thread_id(); + if (idx < n) { + key_type const& key = *(first + idx); + *(output_begin + idx) = ref.contains(key); + } + } +} - ref.add(tile, first + tile_start, first + tile_stop); +template +CUCO_KERNEL __launch_bounds__(BlockSize) void contains_n(InputIt first, + cuco::detail::index_type n, + OutputIt output_begin, + Ref ref) +{ + contains_n_impl(first, n, output_begin, ref); } -template (cg::this_thread_block()); - - while (idx < n) { - if (pred(*(stencil + idx))) { - typename cuda::std::iterator_traits::value_type const& insert_element{ - *(first + idx)}; - ref.add(tile, insert_element); + namespace cg = cooperative_groups; + using key_type = typename cuda::std::iterator_traits::value_type; + + if constexpr (CGSize > 1) { + auto const idx = cuco::detail::global_thread_id(); + auto group = cg::tiled_partition(cg::this_thread_block()); + auto const in_range = idx < n; + auto const is_valid = in_range && pred(*(stencil + idx)); + ref.template add_coop(group, first, idx, is_valid); + } else { + auto const idx = cuco::detail::global_thread_id(); + if (idx < n && pred(*(stencil + idx))) { + key_type const& key = *(first + idx); + ref.template add(key); } - idx += loop_stride; } } @@ -88,30 +131,28 @@ CUCO_KERNEL __launch_bounds__(BlockSize) void contains_if_n(InputIt first, cuco::detail::index_type n, StencilIt stencil, Predicate pred, - OutputIt out, + OutputIt output_begin, Ref ref) { - namespace cg = cooperative_groups; - - auto const loop_stride = cuco::detail::grid_stride() / CGSize; - auto idx = cuco::detail::global_thread_id() / CGSize; - - [[maybe_unused]] auto const tile = - cg::tiled_partition(cg::this_thread_block()); - - if constexpr (CGSize == 1) { - while (idx < n) { - typename cuda::std::iterator_traits::value_type const& key = *(first + idx); - *(out + idx) = pred(*(stencil + idx)) ? ref.contains(key) : false; - idx += loop_stride; - } + namespace cg = cooperative_groups; + using key_type = typename cuda::std::iterator_traits::value_type; + + if constexpr (CGSize > 1) { + auto const idx = cuco::detail::global_thread_id(); + auto group = cg::tiled_partition(cg::this_thread_block()); + auto const in_range = idx < n; + auto const is_valid = in_range && pred(*(stencil + idx)); + auto const result = ref.contains_coop(group, first, idx, is_valid); + if (in_range) { *(output_begin + idx) = is_valid ? result : false; } } else { - auto const tile = cg::tiled_partition(cg::this_thread_block()); - while (idx < n) { - typename cuda::std::iterator_traits::value_type const& key = *(first + idx); - auto const found = pred(*(stencil + idx)) ? ref.contains(tile, key) : false; - if (tile.thread_rank() == 0) { *(out + idx) = found; } - idx += loop_stride; + auto const idx = cuco::detail::global_thread_id(); + if (idx < n) { + if (pred(*(stencil + idx))) { + key_type const& key = *(first + idx); + *(output_begin + idx) = ref.contains(key); + } else { + *(output_begin + idx) = false; + } } } } diff --git a/include/cuco/detail/dynamic_map/dynamic_map.inl b/include/cuco/detail/dynamic_map/dynamic_map.inl index 670239b58..618fc5619 100644 --- a/include/cuco/detail/dynamic_map/dynamic_map.inl +++ b/include/cuco/detail/dynamic_map/dynamic_map.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/include/cuco/detail/dynamic_map/kernels.cuh b/include/cuco/detail/dynamic_map/kernels.cuh index fc6253dc7..b124c660e 100644 --- a/include/cuco/detail/dynamic_map/kernels.cuh +++ b/include/cuco/detail/dynamic_map/kernels.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/equal_wrapper.cuh b/include/cuco/detail/equal_wrapper.cuh index e6ae6b7b4..696b4c867 100644 --- a/include/cuco/detail/equal_wrapper.cuh +++ b/include/cuco/detail/equal_wrapper.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/error.hpp b/include/cuco/detail/error.hpp index 1d1ff6135..2c207574e 100644 --- a/include/cuco/detail/error.hpp +++ b/include/cuco/detail/error.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/extent/extent.inl b/include/cuco/detail/extent/extent.inl index 1b125a24f..d0d3b17a3 100644 --- a/include/cuco/detail/extent/extent.inl +++ b/include/cuco/detail/extent/extent.inl @@ -1,34 +1,20 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include -#include // TODO move to detail/extent/ +#include #include -#include #include #include #include #include -#include #include -#include namespace cuco { template @@ -116,28 +102,17 @@ struct valid_extent : cuco::utility::fast_int [[nodiscard]] auto constexpr make_valid_extent(extent ext) { - auto constexpr stride = CGSize * BucketSize; - auto constexpr max_prime = cuco::detail::primes.back(); - auto constexpr max_value = - (static_cast(cuda::std::numeric_limits::max()) < max_prime) - ? cuda::std::numeric_limits::max() - : static_cast(max_prime); - auto const size = cuco::detail::int_div_ceil( + auto constexpr stride = CGSize * BucketSize; + auto const size = cuco::detail::int_div_ceil( cuda::std::max(static_cast(ext), static_cast(1)), stride); - if (size > max_value) { CUCO_FAIL("Invalid input extent"); } if constexpr (N == dynamic_extent) { - return valid_extent{static_cast( - *cuco::detail::lower_bound( - cuco::detail::primes.begin(), cuco::detail::primes.end(), static_cast(size)) * - stride)}; + return valid_extent{ + static_cast(cuco::detail::next_prime(static_cast(size)) * stride)}; } else { return valid_extent( - *cuco::detail::lower_bound(cuco::detail::primes.begin(), - cuco::detail::primes.end(), - static_cast(size)) * - stride)>{}; + cuco::detail::next_prime(static_cast(size)) * stride)>{}; } } diff --git a/include/cuco/detail/hash_functions/identity_hash.cuh b/include/cuco/detail/hash_functions/identity_hash.cuh index cae4504a0..ac0615eed 100644 --- a/include/cuco/detail/hash_functions/identity_hash.cuh +++ b/include/cuco/detail/hash_functions/identity_hash.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hash_functions/murmurhash3.cuh b/include/cuco/detail/hash_functions/murmurhash3.cuh index 93c57a29f..1ed29366d 100644 --- a/include/cuco/detail/hash_functions/murmurhash3.cuh +++ b/include/cuco/detail/hash_functions/murmurhash3.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hash_functions/utils.cuh b/include/cuco/detail/hash_functions/utils.cuh index d049db5f0..3e67e1c09 100644 --- a/include/cuco/detail/hash_functions/utils.cuh +++ b/include/cuco/detail/hash_functions/utils.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hash_functions/xxhash.cuh b/include/cuco/detail/hash_functions/xxhash.cuh index b32b4551e..1d944103d 100644 --- a/include/cuco/detail/hash_functions/xxhash.cuh +++ b/include/cuco/detail/hash_functions/xxhash.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hyperloglog/finalizer.cuh b/include/cuco/detail/hyperloglog/finalizer.cuh index 5b79ebba6..19551fab7 100644 --- a/include/cuco/detail/hyperloglog/finalizer.cuh +++ b/include/cuco/detail/hyperloglog/finalizer.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hyperloglog/hyperloglog.inl b/include/cuco/detail/hyperloglog/hyperloglog.inl index aa2f1af88..7055997fc 100644 --- a/include/cuco/detail/hyperloglog/hyperloglog.inl +++ b/include/cuco/detail/hyperloglog/hyperloglog.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ namespace cuco { diff --git a/include/cuco/detail/hyperloglog/hyperloglog_impl.cuh b/include/cuco/detail/hyperloglog/hyperloglog_impl.cuh index 534c7a135..c8272d3b3 100644 --- a/include/cuco/detail/hyperloglog/hyperloglog_impl.cuh +++ b/include/cuco/detail/hyperloglog/hyperloglog_impl.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -28,6 +17,7 @@ #include #include +#include #include // TODO #include once available #include #include @@ -36,8 +26,6 @@ #include #include #include -#include -#include #include #include @@ -183,7 +171,7 @@ class hyperloglog_impl { __host__ constexpr void add_async(InputIt first, InputIt last, cuda::stream_ref stream) { this->add_if_async( - first, last, thrust::constant_iterator{true}, cuda::std::identity{}, stream); + first, last, cuda::constant_iterator{true}, cuda::std::identity{}, stream); } /** @@ -244,8 +232,8 @@ class hyperloglog_impl { int const shmem_bytes = sketch_bytes(); void const* kernel = nullptr; - if constexpr (thrust::is_contiguous_iterator_v) { - auto const ptr = thrust::raw_pointer_cast(&first[0]); + if constexpr (cuda::std::contiguous_iterator) { + auto const ptr = cuda::std::to_address(first); auto constexpr max_vector_bytes = 32; auto const alignment = 1 << cuda::std::countr_zero(reinterpret_cast(ptr) | max_vector_bytes); @@ -276,11 +264,11 @@ class hyperloglog_impl { } if (kernel != nullptr and this->try_reserve_shmem(kernel, shmem_bytes)) { - if constexpr (thrust::is_contiguous_iterator_v) { + if constexpr (cuda::std::contiguous_iterator) { CUCO_CUDA_TRY( cudaOccupancyMaxPotentialBlockSize(&grid_size, &block_size, kernel, shmem_bytes)); - auto const ptr = thrust::raw_pointer_cast(&first[0]); + auto const ptr = cuda::std::to_address(first); void* kernel_args[] = {(void*)(&ptr), (void*)(&num_items), (void*)(&stencil), diff --git a/include/cuco/detail/hyperloglog/hyperloglog_ref.inl b/include/cuco/detail/hyperloglog/hyperloglog_ref.inl index 219f18850..d936a3494 100644 --- a/include/cuco/detail/hyperloglog/hyperloglog_ref.inl +++ b/include/cuco/detail/hyperloglog/hyperloglog_ref.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ namespace cuco { diff --git a/include/cuco/detail/hyperloglog/kernels.cuh b/include/cuco/detail/hyperloglog/kernels.cuh index 9c1cd1fd3..ead921544 100644 --- a/include/cuco/detail/hyperloglog/kernels.cuh +++ b/include/cuco/detail/hyperloglog/kernels.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/hyperloglog/tuning.cuh b/include/cuco/detail/hyperloglog/tuning.cuh index a816ffa89..e75cf35b6 100644 --- a/include/cuco/detail/hyperloglog/tuning.cuh +++ b/include/cuco/detail/hyperloglog/tuning.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/open_addressing/constraints.cuh b/include/cuco/detail/open_addressing/constraints.cuh new file mode 100644 index 000000000..c6fdb891a --- /dev/null +++ b/include/cuco/detail/open_addressing/constraints.cuh @@ -0,0 +1,73 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#pragma once + +#include +#include +#include + +#include + +namespace cuco::detail { + +/** + * @brief Enforces compile-time constraints for open-addressing containers. + * + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam Value Type used for storage values. Requires + * `sizeof(Value) <= cuco::open_addressing_max_slot_size` + * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) + */ +template +struct open_addressing_compatible { + /// Determines if the container is a key/value or key-only store + static constexpr auto has_payload = not cuda::std::is_same_v; + + static_assert(sizeof(Key) <= cuco::open_addressing_max_key_size, + "Key size exceeds the maximum supported size (8 bytes, or 16 with sm_90+)."); + + static_assert(sizeof(Value) <= cuco::open_addressing_max_slot_size, + "Slot size exceeds the maximum supported size (16 bytes, or 32 with sm_90+)."); + + static_assert( + [] { + if constexpr (has_payload) { + constexpr auto payload_size = sizeof(typename Value::second_type); +#if defined(CUCO_HAS_128BIT_ATOMICS) + return payload_size <= 16; +#else + return payload_size <= 8; +#endif + } else { + return true; + } + }(), + "Payload size exceeds the maximum supported size (8 bytes, or 16 with sm_90+)."); + + static_assert( + cuco::is_bitwise_comparable_v, + "Key type must have unique object representations or have been explicitly declared as safe for " + "bitwise comparison via specialization of cuco::is_bitwise_comparable_v."); + + static_assert( + [] { + if constexpr (has_payload) { + return cuco::is_bitwise_comparable_v; + } else { + return true; + } + }(), + "Payload type must have unique object representations or have been explicitly " + "declared as safe for bitwise comparison via specialization of " + "cuco::is_bitwise_comparable_v."); + + static_assert(cuda::std::is_base_of_v, + ProbingScheme>, + "ProbingScheme must inherit from cuco::detail::probing_scheme_base"); +}; + +} // namespace cuco::detail diff --git a/include/cuco/detail/open_addressing/functors.cuh b/include/cuco/detail/open_addressing/functors.cuh index 4a90aba95..f3be73ffb 100644 --- a/include/cuco/detail/open_addressing/functors.cuh +++ b/include/cuco/detail/open_addressing/functors.cuh @@ -1,16 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/open_addressing/kernels.cuh b/include/cuco/detail/open_addressing/kernels.cuh index 443c83ffd..7c41e89d6 100644 --- a/include/cuco/detail/open_addressing/kernels.cuh +++ b/include/cuco/detail/open_addressing/kernels.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -646,7 +635,8 @@ CUCO_KERNEL __launch_bounds__(BlockSize) void count_each(InputIt first, * unspecified. * * @tparam IsOuter Flag indicating whether it's an outer count or not - * @tparam block_size The size of the thread block + * @tparam BlockSize The size of the thread block + * @tparam TileStride Number of tile batches assigned to each thread block * @tparam InputProbeIt Device accessible input iterator * @tparam OutputProbeIt Device accessible input iterator whose `value_type` is * convertible to the `InputProbeIt`'s `value_type` @@ -667,6 +657,7 @@ CUCO_KERNEL __launch_bounds__(BlockSize) void count_each(InputIt first, */ template (block_begin_offset + tiles_in_block)); + min(n, static_cast(block_begin_offset + tiles_per_block)); if (block_begin_offset < block_end_offset) { if constexpr (IsOuter) { @@ -707,43 +699,6 @@ CUCO_KERNEL void retrieve(InputProbeIt input_probe, } } -/** - * @brief Calculates the number of filled slots for the given bucket storage. - * - * @tparam BlockSize Number of threads in each block - * @tparam StorageRef Type of non-owning ref allowing access to storage - * @tparam Predicate Type of predicate indicating if the given slot is filled - * @tparam AtomicT Atomic counter type - * - * @param storage Non-owning device ref used to access the slot storage - * @param is_filled Predicate indicating if the given slot is filled - * @param count Number of filled slots - */ -template -CUCO_KERNEL __launch_bounds__(BlockSize) void size(StorageRef storage, - Predicate is_filled, - AtomicT* count) -{ - using size_type = typename StorageRef::size_type; - - auto const loop_stride = cuco::detail::grid_stride(); - auto idx = cuco::detail::global_thread_id(); - - size_type thread_count = 0; - auto const n = storage.capacity(); - - while (idx < n) { - thread_count += static_cast(is_filled(*(storage.data() + idx))); - - idx += loop_stride; - } - - using BlockReduce = cub::BlockReduce; - __shared__ typename BlockReduce::TempStorage temp_storage; - auto const block_count = BlockReduce(temp_storage).Sum(thread_count); - if (threadIdx.x == 0) { count->fetch_add(block_count, cuda::std::memory_order_relaxed); } -} - template CUCO_KERNEL __launch_bounds__(BlockSize) void rehash( typename ContainerRef::storage_ref_type storage_ref, diff --git a/include/cuco/detail/open_addressing/open_addressing_impl.cuh b/include/cuco/detail/open_addressing/open_addressing_impl.cuh index 7fee3ca6b..cfae2d38f 100644 --- a/include/cuco/detail/open_addressing/open_addressing_impl.cuh +++ b/include/cuco/detail/open_addressing/open_addressing_impl.cuh @@ -1,22 +1,12 @@ /* - * Copyright (c) 2023-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include +#include #include #include #include @@ -30,12 +20,12 @@ #include #include +#include #include #include +#include #include -#include -#include -#include +#include #include #include @@ -47,14 +37,16 @@ namespace detail { * * @note This class should NOT be used directly. * - * @throw If the size of the given key type is larger than 8 bytes - * @throw If the size of the given slot type is larger than 16 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given slot type is larger than `cuco::open_addressing_max_slot_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` - * @tparam Value Type used for storage values. + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam Value Type used for storage values. Requires + * `sizeof(Value) <= cuco::open_addressing_max_slot_size` * @tparam Extent Data structure size type * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality @@ -70,20 +62,7 @@ template -class open_addressing_impl { - static_assert(sizeof(Key) <= 8, "Container does not support key types larger than 8 bytes."); - - static_assert(sizeof(Value) <= 16, "Container does not support slot types larger than 16 bytes."); - - static_assert( - cuco::is_bitwise_comparable_v, - "Key type must have unique object representations or have been explicitly declared as safe for " - "bitwise comparison via specialization of cuco::is_bitwise_comparable_v."); - - static_assert(cuda::std::is_base_of_v, - ProbingScheme>, - "ProbingScheme must inherit from cuco::detail::probing_scheme_base"); - +class open_addressing_impl : private open_addressing_compatible { /// Determines if the container is a key/value or key-only store static constexpr auto has_payload = not cuda::std::is_same_v; @@ -271,7 +250,7 @@ class open_addressing_impl { template size_type insert(InputIt first, InputIt last, Ref container_ref, cuda::stream_ref stream) { - auto const always_true = thrust::constant_iterator{true}; + auto const always_true = cuda::constant_iterator{true}; return this->insert_if(first, last, always_true, cuda::std::identity{}, container_ref, stream); } @@ -294,7 +273,7 @@ class open_addressing_impl { Ref container_ref, cuda::stream_ref stream) noexcept { - auto const always_true = thrust::constant_iterator{true}; + auto const always_true = cuda::constant_iterator{true}; this->insert_if_async(first, last, always_true, cuda::std::identity{}, container_ref, stream); } @@ -494,7 +473,7 @@ class open_addressing_impl { Ref container_ref, cuda::stream_ref stream) const noexcept { - auto const always_true = thrust::constant_iterator{true}; + auto const always_true = cuda::constant_iterator{true}; this->contains_if_async( first, last, always_true, cuda::std::identity{}, output_begin, container_ref, stream); } @@ -568,7 +547,7 @@ class open_addressing_impl { Ref container_ref, cuda::stream_ref stream) const noexcept { - auto const always_true = thrust::constant_iterator{true}; + auto const always_true = cuda::constant_iterator{true}; this->find_if_async( first, last, always_true, cuda::std::identity{}, output_begin, container_ref, stream); @@ -840,60 +819,48 @@ class open_addressing_impl { using temp_allocator_type = typename std::allocator_traits::template rebind_alloc; - cuco::detail::index_type constexpr stride = std::numeric_limits::max(); - - cuco::detail::index_type h_num_out{0}; auto temp_allocator = temp_allocator_type{this->allocator()}; auto d_num_out = reinterpret_cast(temp_allocator.allocate(sizeof(size_type), stream)); - // TODO: PR #580 to be reverted once https://github.com/NVIDIA/cccl/issues/1422 is resolved - for (cuco::detail::index_type offset = 0; - offset < static_cast(this->capacity()); - offset += stride) { - auto const num_items = - std::min(static_cast(this->capacity()) - offset, stride); - auto const begin = thrust::make_transform_iterator( - thrust::counting_iterator{static_cast(offset)}, - detail::open_addressing_ns::get_slot(this->storage_ref())); - auto const is_filled = detail::open_addressing_ns::slot_is_filled{ - this->empty_key_sentinel(), this->erased_key_sentinel()}; - - std::size_t temp_storage_bytes = 0; - - CUCO_CUDA_TRY(cub::DeviceSelect::If(nullptr, - temp_storage_bytes, - begin, - output_begin + h_num_out, - d_num_out, - static_cast(num_items), - is_filled, - stream.get())); - - // Allocate temporary storage - auto d_temp_storage = temp_allocator.allocate(temp_storage_bytes, stream); - - CUCO_CUDA_TRY(cub::DeviceSelect::If(d_temp_storage, - temp_storage_bytes, - begin, - output_begin + h_num_out, - d_num_out, - static_cast(num_items), - is_filled, - stream.get())); - - size_type temp_count; - CUCO_CUDA_TRY(cuco::detail::memcpy_async( - &temp_count, d_num_out, sizeof(size_type), cudaMemcpyDeviceToHost, stream)); + auto const begin = cuda::make_transform_iterator( + cuda::counting_iterator{size_type{0}}, + detail::open_addressing_ns::get_slot(this->storage_ref())); + auto const is_filled = detail::open_addressing_ns::slot_is_filled{ + this->empty_key_sentinel(), this->erased_key_sentinel()}; + + std::size_t temp_storage_bytes = 0; + + CUCO_CUDA_TRY(cub::DeviceSelect::If(nullptr, + temp_storage_bytes, + begin, + output_begin, + d_num_out, + this->capacity(), + is_filled, + stream.get())); + + auto d_temp_storage = temp_allocator.allocate(temp_storage_bytes, stream); + + CUCO_CUDA_TRY(cub::DeviceSelect::If(d_temp_storage, + temp_storage_bytes, + begin, + output_begin, + d_num_out, + this->capacity(), + is_filled, + stream.get())); + + size_type h_num_out; + CUCO_CUDA_TRY(cuco::detail::memcpy_async( + &h_num_out, d_num_out, sizeof(size_type), cudaMemcpyDeviceToHost, stream)); #if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) - stream.sync(); + stream.sync(); #else - stream.wait(); + stream.wait(); #endif - h_num_out += temp_count; - temp_allocator.deallocate(d_temp_storage, temp_storage_bytes, stream); - } + temp_allocator.deallocate(d_temp_storage, temp_storage_bytes, stream); temp_allocator.deallocate(reinterpret_cast(d_num_out), sizeof(size_type), stream); return output_begin + h_num_out; @@ -969,21 +936,56 @@ class open_addressing_impl { */ [[nodiscard]] size_type size(cuda::stream_ref stream) const { - auto counter = - detail::counter_storage{this->allocator(), stream}; - counter.reset(stream); + using temp_allocator_type = + typename std::allocator_traits::template rebind_alloc; + auto temp_allocator = temp_allocator_type{this->allocator()}; + + auto* d_count = + reinterpret_cast(temp_allocator.allocate(sizeof(size_type), stream)); - auto const grid_size = cuco::detail::grid_size(this->capacity()); auto const is_filled = detail::open_addressing_ns::slot_is_filled{ this->empty_key_sentinel(), this->erased_key_sentinel()}; + auto const slot_begin = cuda::make_transform_iterator( + cuda::counting_iterator{size_type{0}}, + detail::open_addressing_ns::get_slot(this->storage_ref())); + + std::size_t temp_storage_bytes = 0; + + CUCO_CUDA_TRY(cub::DeviceReduce::TransformReduce(nullptr, + temp_storage_bytes, + slot_begin, + d_count, + this->capacity(), + cuda::std::plus{}, + is_filled, + size_type{0}, + stream.get())); + + auto d_temp_storage = temp_allocator.allocate(temp_storage_bytes, stream); + + CUCO_CUDA_TRY(cub::DeviceReduce::TransformReduce(d_temp_storage, + temp_storage_bytes, + slot_begin, + d_count, + this->capacity(), + cuda::std::plus{}, + is_filled, + size_type{0}, + stream.get())); + + size_type h_count; + CUCO_CUDA_TRY(cuco::detail::memcpy_async( + &h_count, d_count, sizeof(size_type), cudaMemcpyDeviceToHost, stream)); +#if CCCL_MAJOR_VERSION > 3 || (CCCL_MAJOR_VERSION == 3 && CCCL_MINOR_VERSION >= 1) + stream.sync(); +#else + stream.wait(); +#endif - // TODO: custom kernel to be replaced by cub::DeviceReduce::Sum when cub version is bumped to - // v2.1.0 - detail::open_addressing_ns::size - <<>>( - storage_.ref(), is_filled, counter.data()); + temp_allocator.deallocate(d_temp_storage, temp_storage_bytes, stream); + temp_allocator.deallocate(reinterpret_cast(d_count), sizeof(size_type), stream); - return counter.load_to_host(stream); + return h_count; } /** @@ -1120,6 +1122,17 @@ class open_addressing_impl { return this->extract_key(this->empty_slot_sentinel_); } + /** + * @brief Gets the sentinel value used to represent an empty payload slot. + * + * @return The sentinel value used to represent an empty payload slot + */ + template = 0> + [[nodiscard]] constexpr auto empty_payload_sentinel() const noexcept + { + return this->extract_payload(this->empty_slot_sentinel_); + } + /** * @brief Gets the sentinel value used to represent an erased key slot. * @@ -1200,11 +1213,12 @@ class open_addressing_impl { detail::counter_storage{this->allocator(), stream}; counter.reset(stream); - auto const grid_size = cuco::detail::grid_size(num_keys, cg_size); + auto constexpr block_size = cuco::detail::default_block_size(); + auto constexpr grid_stride = 4; + auto const grid_size = cuco::detail::grid_size(num_keys, cg_size, grid_stride, block_size); - detail::open_addressing_ns::count - <<>>( - first, num_keys, counter.data(), container_ref); + detail::open_addressing_ns::count + <<>>(first, num_keys, counter.data(), container_ref); return counter.load_to_host(stream); } @@ -1300,10 +1314,10 @@ class open_addressing_impl { auto constexpr block_size = cuco::detail::default_block_size(); - auto constexpr grid_stride = 1; + auto constexpr grid_stride = 4; auto const grid_size = cuco::detail::grid_size(n, cg_size, grid_stride, block_size); - detail::open_addressing_ns::retrieve + detail::open_addressing_ns::retrieve <<>>( first, n, output_probe, output_match, counter.data(), container_ref); @@ -1319,7 +1333,7 @@ class open_addressing_impl { * * @return The key */ - [[nodiscard]] constexpr key_type const& extract_key(value_type const& slot) const noexcept + [[nodiscard]] constexpr key_type extract_key(value_type const& slot) const noexcept { if constexpr (has_payload) { return slot.first; @@ -1328,6 +1342,19 @@ class open_addressing_impl { } } + /** + * @brief Extracts the payload from a given slot. + * + * @param slot The input slot + * + * @return The payload + */ + template = 0> + [[nodiscard]] constexpr auto extract_payload(value_type const& slot) const noexcept + { + return slot.second; + } + protected: // TODO: cleanup by using equal wrapper as a data member value_type empty_slot_sentinel_; ///< Slot value that represents an empty slot diff --git a/include/cuco/detail/open_addressing/open_addressing_ref_impl.cuh b/include/cuco/detail/open_addressing/open_addressing_ref_impl.cuh index 04e7a3db1..b84d07624 100644 --- a/include/cuco/detail/open_addressing/open_addressing_ref_impl.cuh +++ b/include/cuco/detail/open_addressing/open_addressing_ref_impl.cuh @@ -1,36 +1,27 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once #include +#include #include #include +#include #include #include #include #include +#include #include #include #include #include #include #include -#include #include #include #if defined(CUCO_HAS_CUDA_BARRIER) @@ -70,16 +61,23 @@ struct bucket_probing_results { * * @note This class should NOT be used directly. * - * @throw If the size of the given key type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given slot type is larger than `cuco::open_addressing_max_slot_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` + * @throw If the given payload type doesn't have unique object representations, i.e., + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` returning true + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) - * @tparam StorageRef Storage ref type + * @tparam StorageRef Storage ref type. Its `value_type` must fit in + * `cuco::open_addressing_max_slot_size`; + * payloads, if present, must be 4 or 8 bytes (or 16 with sm_90+) and satisfy + * `cuco::is_bitwise_comparable_v` * @tparam AllowsDuplicates Flag indicating whether duplicate keys are allowed or not */ template -class open_addressing_ref_impl { - static_assert(sizeof(Key) <= 8, "Container does not support key types larger than 8 bytes."); - - static_assert( - cuco::is_bitwise_comparable_v, - "Key type must have unique object representations or have been explicitly declared as safe for " - "bitwise comparison via specialization of cuco::is_bitwise_comparable_v."); - - static_assert(cuda::std::is_base_of_v, - ProbingScheme>, - "ProbingScheme must inherit from cuco::detail::probing_scheme_base"); +class open_addressing_ref_impl + : private open_addressing_compatible { + using storage_value_type = typename StorageRef::value_type; /// Determines if the container is a key/value or key-only store - static constexpr auto has_payload = - not cuda::std::is_same_v; + static constexpr auto has_payload = not cuda::std::is_same_v; /// Flag indicating whether duplicate keys are allowed or not static constexpr auto allows_duplicates = AllowsDuplicates; @@ -523,9 +512,9 @@ class open_addressing_ref_impl { #if __CUDA_ARCH__ < 700 // Spinning to ensure that the write to the value part took place requires // independent thread scheduling introduced with the Volta architecture. - static_assert( - cuco::detail::is_packable(), - "insert_and_find is not supported for pair types larger than 8 bytes on pre-Volta GPUs."); + static_assert(sizeof(value_type) <= 8, + "insert_and_find is not supported for slot types larger than 8 bytes on " + "pre-Volta GPUs."); #endif auto const val = this->heterogeneous_value(value); @@ -544,26 +533,17 @@ class open_addressing_ref_impl { // If the key is already in the container, return false if (eq_res == detail::equal_result::EQUAL) { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } + this->maybe_wait_for_payload(slot_ptr); return {iterator{slot_ptr}, false}; } if (eq_res == detail::equal_result::AVAILABLE) { switch (this->attempt_insert_stable(slot_ptr, bucket_slots[i], val)) { case insert_result::SUCCESS: { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } + this->maybe_wait_for_payload(slot_ptr); return {iterator{slot_ptr}, true}; } case insert_result::DUPLICATE: { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } + this->maybe_wait_for_payload(slot_ptr); return {iterator{slot_ptr}, false}; } default: continue; @@ -598,9 +578,9 @@ class open_addressing_ref_impl { #if __CUDA_ARCH__ < 700 // Spinning to ensure that the write to the value part took place requires // independent thread scheduling introduced with the Volta architecture. - static_assert( - cuco::detail::is_packable(), - "insert_and_find is not supported for pair types larger than 8 bytes on pre-Volta GPUs."); + static_assert(sizeof(value_type) <= 8, + "insert_and_find is not supported for slot types larger than 8 bytes on " + "pre-Volta GPUs."); #endif auto const val = this->heterogeneous_value(value); @@ -631,12 +611,7 @@ class open_addressing_ref_impl { if (group_finds_equal) { auto const src_lane = __ffs(group_finds_equal) - 1; auto const res = group.shfl(reinterpret_cast(slot_ptr), src_lane); - if (group.thread_rank() == src_lane) { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } - } + if (group.thread_rank() == src_lane) { this->maybe_wait_for_payload(slot_ptr); } group.sync(); return {iterator{reinterpret_cast(res)}, false}; } @@ -652,22 +627,12 @@ class open_addressing_ref_impl { switch (group.shfl(status, src_lane)) { case insert_result::SUCCESS: { - if (group.thread_rank() == src_lane) { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } - } + if (group.thread_rank() == src_lane) { this->maybe_wait_for_payload(slot_ptr); } group.sync(); return {iterator{reinterpret_cast(res)}, true}; } case insert_result::DUPLICATE: { - if (group.thread_rank() == src_lane) { - if constexpr (has_payload) { - // wait to ensure that the write to the value part also took place - this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); - } - } + if (group.thread_rank() == src_lane) { this->maybe_wait_for_payload(slot_ptr); } group.sync(); return {iterator{reinterpret_cast(res)}, false}; } @@ -1082,9 +1047,9 @@ class open_addressing_ref_impl { OutputMatchIt output_match, AtomicCounter& atomic_counter) const { - auto constexpr is_outer = false; - auto const n = cuco::detail::distance(input_probe_begin, input_probe_end); // TODO include - auto const always_true_stencil = thrust::constant_iterator(true); + auto constexpr is_outer = false; + auto const n = cuco::detail::distance(input_probe_begin, input_probe_end); + auto const always_true_stencil = cuda::constant_iterator(true); auto const identity_predicate = cuda::std::identity{}; this->retrieve_impl(block, input_probe_begin, @@ -1139,9 +1104,9 @@ class open_addressing_ref_impl { OutputMatchIt output_match, AtomicCounter& atomic_counter) const { - auto constexpr is_outer = true; - auto const n = cuco::detail::distance(input_probe_begin, input_probe_end); // TODO include - auto const always_true_stencil = thrust::constant_iterator(true); + auto constexpr is_outer = true; + auto const n = cuco::detail::distance(input_probe_begin, input_probe_end); + auto const always_true_stencil = cuda::constant_iterator(true); auto const identity_predicate = cuda::std::identity{}; this->retrieve_impl(block, input_probe_begin, @@ -1318,7 +1283,7 @@ class open_addressing_ref_impl { if (active_flag) { // perform probing // make sure the flushing_tile is converged at this point to get a coalesced load - auto const probe_key = *(input_probe + idx); + probe_type const probe_key = *(input_probe + idx); auto probing_iter = probing_scheme_.template make_iterator( probing_tile, probe_key, storage_ref_.extent()); @@ -1729,8 +1694,7 @@ class open_addressing_ref_impl { value_type expected, Value desired) noexcept { - using packed_type = - cuda::std::conditional_t; + using packed_type = cuco::detail::packed_t; auto* slot_ptr = reinterpret_cast(address); auto* expected_ptr = reinterpret_cast(&expected); @@ -1865,12 +1829,22 @@ class open_addressing_ref_impl { { if constexpr (sizeof(value_type) <= 8) { return packed_cas(address, expected, desired); - } else { + } +#if (__CUDA_ARCH__ >= 900) + else if constexpr (cuco::detail::is_packable()) { + return packed_cas(address, expected, desired); + } +#endif + else if constexpr (has_payload) { #if (__CUDA_ARCH__ < 700) return cas_dependent_write(address, expected, desired); #else return back_to_back_cas(address, expected, desired); #endif + } else { + static_assert(cuco::dependent_false, + "No valid atomic CAS path: 16-byte key in a key-only container must be " + "packable (have unique object representations) and target sm_90+."); } } @@ -1898,8 +1872,18 @@ class open_addressing_ref_impl { { if constexpr (sizeof(value_type) <= 8) { return packed_cas(address, expected, desired); - } else { + } +#if (__CUDA_ARCH__ >= 900) + else if constexpr (cuco::detail::is_packable()) { + return packed_cas(address, expected, desired); + } +#endif + else if constexpr (has_payload) { return cas_dependent_write(address, expected, desired); + } else { + static_assert(cuco::dependent_false, + "No valid atomic CAS path: 16-byte key in a key-only container must be " + "packable (have unique object representations) and target sm_90+."); } } @@ -1925,6 +1909,34 @@ class open_addressing_ref_impl { } while (cuco::detail::bitwise_compare(current, sentinel)); } + /** + * @brief Conditionally spin-waits for the payload of a non-atomically inserted slot to become + * visible. + * + * For containers where the key and value are inserted by separate instructions + * (`cas_dependent_write` / `back_to_back_cas`), an observer thread may see the key before the + * payload. This helper spins until the payload is visible. For atomic single-CAS paths (slot + * size <= 8 bytes, or a packable slot on sm_90+ via `atom.cas.b128`), the payload is already + * visible and this is a no-op. + * + * @tparam SlotPtr Pointer-like type to a slot holding a `.second` payload member + * + * @param slot_ptr Pointer to the slot whose payload may need waiting on + */ + template + __device__ void maybe_wait_for_payload(SlotPtr slot_ptr) noexcept + { + if constexpr (has_payload and sizeof(value_type) > 8) { +#if (__CUDA_ARCH__ >= 900) + if constexpr (not cuco::detail::is_packable()) { + this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); + } +#else + this->wait_for_payload(slot_ptr->second, this->empty_value_sentinel()); +#endif + } + } + // TODO: Clean up the sentinel handling since it's duplicated in ref and equal wrapper value_type empty_slot_sentinel_; ///< Sentinel value indicating an empty slot detail::equal_wrapper diff --git a/include/cuco/detail/operator.inl b/include/cuco/detail/operator.inl index 794eafec7..abcc0e649 100644 --- a/include/cuco/detail/operator.inl +++ b/include/cuco/detail/operator.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/pair/helpers.cuh b/include/cuco/detail/pair/helpers.cuh index 063e1e783..7e2a5d5b3 100644 --- a/include/cuco/detail/pair/helpers.cuh +++ b/include/cuco/detail/pair/helpers.cuh @@ -1,20 +1,12 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include + #include #include #include @@ -45,6 +37,22 @@ struct packed { using type = void; ///< `void` type by default }; +/** + * @brief Denotes the packed type when the size of the object is 1. + */ +template <> +struct packed { + using type = uint8_t; ///< Packed type as `uint8_t` if the size of the object is 1 +}; + +/** + * @brief Denotes the packed type when the size of the object is 2. + */ +template <> +struct packed { + using type = uint16_t; ///< Packed type as `uint16_t` if the size of the object is 2 +}; + /** * @brief Denotes the packed type when the size of the object is 8. */ @@ -61,6 +69,17 @@ struct packed { using type = uint32_t; ///< Packed type as `uint32_t` if the size of the object is 4 }; +#ifdef CUCO_HAS_INT128 +/** + * @brief Denotes the packed type when the size of the object is 16. + */ +template <> +struct packed<16> { + using type = unsigned __int128; ///< Packed type as `unsigned __int128` if the size of the object + ///< is 16 +}; +#endif + template using packed_t = typename packed::type; diff --git a/include/cuco/detail/pair/pair.inl b/include/cuco/detail/pair/pair.inl index 359829db3..308c0ad59 100644 --- a/include/cuco/detail/pair/pair.inl +++ b/include/cuco/detail/pair/pair.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/pair/traits.hpp b/include/cuco/detail/pair/traits.hpp index dc06c1a74..0ba38fe19 100644 --- a/include/cuco/detail/pair/traits.hpp +++ b/include/cuco/detail/pair/traits.hpp @@ -1,16 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/pair/tuple_helpers.inl b/include/cuco/detail/pair/tuple_helpers.inl index 56406f84f..f4b88f3da 100644 --- a/include/cuco/detail/pair/tuple_helpers.inl +++ b/include/cuco/detail/pair/tuple_helpers.inl @@ -1,30 +1,19 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ template struct tuple_size> : integral_constant {}; template -struct tuple_size> : tuple_size> {}; +struct tuple_size const> : tuple_size> {}; template -struct tuple_size> : tuple_size> {}; +struct tuple_size volatile> : tuple_size> {}; template -struct tuple_size> : tuple_size> {}; +struct tuple_size const volatile> : tuple_size> {}; template struct tuple_element> { @@ -42,23 +31,23 @@ struct tuple_element<1, cuco::pair> { }; template -struct tuple_element<0, const cuco::pair> : tuple_element<0, cuco::pair> {}; +struct tuple_element<0, cuco::pair const> : tuple_element<0, cuco::pair> {}; template -struct tuple_element<1, const cuco::pair> : tuple_element<1, cuco::pair> {}; +struct tuple_element<1, cuco::pair const> : tuple_element<1, cuco::pair> {}; template -struct tuple_element<0, volatile cuco::pair> : tuple_element<0, cuco::pair> {}; +struct tuple_element<0, cuco::pair volatile> : tuple_element<0, cuco::pair> {}; template -struct tuple_element<1, volatile cuco::pair> : tuple_element<1, cuco::pair> {}; +struct tuple_element<1, cuco::pair volatile> : tuple_element<1, cuco::pair> {}; template -struct tuple_element<0, const volatile cuco::pair> : tuple_element<0, cuco::pair> { +struct tuple_element<0, cuco::pair const volatile> : tuple_element<0, cuco::pair> { }; template -struct tuple_element<1, const volatile cuco::pair> : tuple_element<1, cuco::pair> { +struct tuple_element<1, cuco::pair const volatile> : tuple_element<1, cuco::pair> { }; template diff --git a/include/cuco/detail/prime.hpp b/include/cuco/detail/prime.hpp index b92362e66..ec28ecfbd 100644 --- a/include/cuco/detail/prime.hpp +++ b/include/cuco/detail/prime.hpp @@ -1,20162 +1,123 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once -#include +#include -#include -#include #include -#include namespace cuco { namespace detail { -// TODO use CTAD instead of explicitly specifying the array size once we drop support for nvcc <11.5 -inline constexpr std::array primes = { - 2, 3, 5, 7, 11, 13, 19, - 29, 37, 43, 53, 59, 67, 73, - 79, 89, 97, 103, 109, 127, 137, - 149, 151, 157, 163, 173, 179, 191, - 197, 211, 223, 229, 239, 251, 257, - 263, 269, 277, 283, 293, 307, 313, - 331, 337, 347, 353, 359, 367, 373, - 379, 389, 397, 409, 419, 431, 439, - 449, 457, 463, 479, 487, 499, 509, - 521, 541, 547, 557, 563, 569, 577, - 587, 593, 599, 607, 613, 619, 631, - 641, 647, 653, 659, 673, 683, 691, - 701, 709, 719, 727, 733, 739, 751, - 757, 769, 787, 797, 809, 821, 827, - 839, 853, 859, 877, 883, 907, 919, - 929, 937, 947, 953, 967, 977, 983, - 991, 997, 1009, 1019, 1031, 1039, 1049, - 1061, 1069, 1087, 1093, 1103, 1109, 1117, - 1123, 1129, 1151, 1163, 1171, 1181, 1187, - 1193, 1201, 1213, 1223, 1229, 1237, 1249, - 1259, 1277, 1283, 1289, 1297, 1303, 1319, - 1327, 1361, 1367, 1373, 1381, 1399, 1409, - 1423, 1429, 1439, 1447, 1453, 1459, 1471, - 1481, 1487, 1493, 1499, 1511, 1523, 1531, - 1543, 1549, 1559, 1567, 1579, 1597, 1607, - 1613, 1619, 1627, 1637, 1657, 1663, 1669, - 1693, 1699, 1709, 1721, 1733, 1741, 1747, - 1753, 1759, 1777, 1783, 1789, 1801, 1811, - 1823, 1831, 1847, 1861, 1867, 1873, 1879, - 1889, 1901, 1907, 1913, 1931, 1949, 1973, - 1979, 1987, 1993, 1999, 2011, 2017, 2027, - 2039, 2053, 2063, 2069, 2081, 2087, 2099, - 2111, 2129, 2137, 2143, 2153, 2161, 2179, - 2203, 2213, 2221, 2237, 2243, 2251, 2267, - 2273, 2281, 2287, 2293, 2309, 2333, 2339, - 2347, 2357, 2371, 2377, 2383, 2389, 2399, - 2411, 2417, 2423, 2437, 2447, 2459, 2467, - 2473, 2503, 2521, 2531, 2539, 2549, 2557, - 2579, 2591, 2609, 2617, 2633, 2647, 2657, - 2663, 2671, 2677, 2683, 2689, 2699, 2707, - 2713, 2719, 2729, 2741, 2749, 2767, 2777, - 2789, 2797, 2803, 2819, 2833, 2843, 2851, - 2857, 2879, 2887, 2897, 2903, 2909, 2917, - 2927, 2939, 2953, 2963, 2969, 2999, 3011, - 3019, 3037, 3049, 3061, 3067, 3079, 3089, - 3109, 3119, 3137, 3163, 3169, 3181, 3187, - 3203, 3209, 3217, 3229, 3251, 3257, 3271, - 3299, 3307, 3313, 3319, 3329, 3343, 3359, - 3371, 3389, 3407, 3413, 3433, 3449, 3457, - 3463, 3469, 3491, 3499, 3511, 3517, 3527, - 3533, 3539, 3547, 3557, 3571, 3581, 3593, - 3607, 3613, 3623, 3631, 3637, 3643, 3659, - 3671, 3677, 3691, 3697, 3709, 3719, 3727, - 3733, 3739, 3761, 3767, 3779, 3793, 3803, - 3821, 3833, 3847, 3853, 3863, 3877, 3889, - 3907, 3917, 3923, 3929, 3943, 3967, 3989, - 4001, 4007, 4013, 4019, 4027, 4049, 4057, - 4073, 4079, 4091, 4099, 4111, 4127, 4133, - 4139, 4153, 4159, 4177, 4201, 4211, 4217, - 4229, 4241, 4253, 4259, 4271, 4283, 4289, - 4297, 4327, 4337, 4349, 4357, 4363, 4373, - 4391, 4397, 4409, 4421, 4441, 4447, 4457, - 4463, 4481, 4493, 4507, 4513, 4519, 4547, - 4561, 4567, 4583, 4591, 4597, 4603, 4621, - 4637, 4643, 4649, 4657, 4663, 4673, 4679, - 4691, 4703, 4721, 4729, 4751, 4759, 4783, - 4789, 4799, 4813, 4831, 4861, 4871, 4877, - 4889, 4903, 4909, 4919, 4931, 4937, 4943, - 4951, 4957, 4967, 4973, 4987, 4993, 4999, - 5009, 5021, 5039, 5051, 5059, 5077, 5087, - 5099, 5107, 5113, 5119, 5147, 5153, 5167, - 5179, 5189, 5197, 5209, 5227, 5233, 5261, - 5273, 5279, 5297, 5303, 5309, 5323, 5333, - 5347, 5381, 5387, 5393, 5399, 5407, 5413, - 5419, 5431, 5437, 5443, 5449, 5471, 5477, - 5483, 5501, 5507, 5519, 5527, 5557, 5563, - 5569, 5581, 5591, 5623, 5639, 5647, 5653, - 5659, 5669, 5683, 5689, 5701, 5711, 5717, - 5737, 5743, 5749, 5779, 5791, 5801, 5807, - 5813, 5821, 5827, 5839, 5849, 5857, 5867, - 5879, 5897, 5903, 5923, 5939, 5953, 5981, - 5987, 6007, 6029, 6037, 6043, 6053, 6067, - 6073, 6079, 6089, 6101, 6113, 6121, 6131, - 6143, 6151, 6163, 6173, 6197, 6203, 6211, - 6217, 6229, 6247, 6257, 6263, 6269, 6277, - 6287, 6299, 6311, 6317, 6323, 6329, 6337, - 6343, 6353, 6359, 6367, 6373, 6379, 6389, - 6397, 6421, 6427, 6449, 6469, 6481, 6491, - 6521, 6529, 6547, 6553, 6563, 6569, 6577, - 6599, 6607, 6619, 6637, 6653, 6659, 6673, - 6679, 6689, 6701, 6709, 6719, 6733, 6761, - 6779, 6791, 6803, 6823, 6829, 6841, 6857, - 6863, 6869, 6883, 6899, 6907, 6917, 6947, - 6959, 6967, 6977, 6983, 6991, 6997, 7013, - 7019, 7027, 7039, 7057, 7069, 7079, 7103, - 7109, 7121, 7127, 7151, 7159, 7177, 7187, - 7193, 7207, 7213, 7219, 7229, 7237, 7243, - 7253, 7283, 7297, 7307, 7321, 7331, 7349, - 7369, 7393, 7411, 7417, 7433, 7451, 7457, - 7477, 7487, 7499, 7507, 7517, 7523, 7529, - 7537, 7547, 7559, 7573, 7583, 7589, 7603, - 7621, 7639, 7649, 7669, 7681, 7687, 7699, - 7717, 7723, 7741, 7753, 7759, 7789, 7817, - 7823, 7829, 7841, 7853, 7867, 7873, 7879, - 7901, 7907, 7919, 7927, 7933, 7949, 7963, - 7993, 8009, 8017, 8039, 8053, 8059, 8069, - 8081, 8087, 8093, 8101, 8111, 8117, 8123, - 8147, 8161, 8167, 8179, 8191, 8209, 8219, - 8231, 8237, 8243, 8263, 8269, 8287, 8293, - 8311, 8317, 8329, 8353, 8363, 8369, 8377, - 8387, 8419, 8429, 8443, 8461, 8467, 8501, - 8513, 8521, 8527, 8537, 8543, 8563, 8573, - 8581, 8597, 8609, 8623, 8629, 8641, 8647, - 8663, 8669, 8677, 8689, 8699, 8707, 8713, - 8719, 8731, 8737, 8747, 8753, 8761, 8779, - 8803, 8819, 8831, 8837, 8849, 8861, 8867, - 8887, 8893, 8923, 8929, 8941, 8951, 8963, - 8969, 8999, 9007, 9013, 9029, 9041, 9049, - 9059, 9067, 9091, 9103, 9109, 9127, 9133, - 9151, 9157, 9173, 9181, 9187, 9199, 9209, - 9221, 9227, 9239, 9257, 9277, 9283, 9293, - 9311, 9319, 9337, 9343, 9349, 9371, 9377, - 9391, 9397, 9403, 9413, 9419, 9431, 9437, - 9461, 9467, 9473, 9479, 9491, 9497, 9511, - 9521, 9533, 9539, 9547, 9587, 9601, 9613, - 9619, 9629, 9643, 9649, 9661, 9677, 9689, - 9697, 9719, 9733, 9739, 9749, 9767, 9781, - 9787, 9803, 9811, 9817, 9829, 9839, 9851, - 9857, 9871, 9883, 9901, 9907, 9923, 9929, - 9941, 9949, 9967, 9973, 10007, 10037, 10061, - 10067, 10079, 10091, 10099, 10111, 10133, 10139, - 10151, 10159, 10169, 10177, 10193, 10211, 10223, - 10243, 10253, 10259, 10267, 10273, 10289, 10301, - 10313, 10321, 10331, 10337, 10343, 10357, 10369, - 10391, 10399, 10427, 10433, 10453, 10459, 10477, - 10487, 10499, 10513, 10529, 10559, 10567, 10589, - 10597, 10607, 10613, 10627, 10639, 10651, 10657, - 10663, 10687, 10709, 10723, 10729, 10739, 10753, - 10771, 10781, 10789, 10799, 10831, 10837, 10847, - 10853, 10859, 10867, 10883, 10889, 10903, 10909, - 10937, 10949, 10957, 10973, 10979, 10987, 10993, - 11003, 11027, 11047, 11057, 11069, 11083, 11093, - 11113, 11119, 11131, 11149, 11159, 11171, 11177, - 11197, 11213, 11239, 11251, 11257, 11273, 11279, - 11287, 11299, 11311, 11317, 11329, 11351, 11369, - 11383, 11393, 11399, 11411, 11423, 11437, 11443, - 11467, 11483, 11489, 11497, 11503, 11519, 11527, - 11549, 11579, 11587, 11593, 11617, 11633, 11657, - 11677, 11689, 11699, 11717, 11731, 11743, 11777, - 11783, 11789, 11801, 11807, 11813, 11821, 11827, - 11833, 11839, 11863, 11887, 11897, 11903, 11909, - 11923, 11933, 11939, 11953, 11959, 11969, 11981, - 11987, 12007, 12037, 12043, 12049, 12071, 12097, - 12107, 12113, 12119, 12143, 12149, 12157, 12163, - 12197, 12203, 12211, 12227, 12239, 12251, 12263, - 12269, 12277, 12289, 12301, 12323, 12329, 12343, - 12373, 12379, 12391, 12401, 12409, 12421, 12433, - 12451, 12457, 12473, 12479, 12487, 12497, 12503, - 12511, 12517, 12527, 12539, 12547, 12553, 12569, - 12577, 12583, 12589, 12601, 12611, 12619, 12637, - 12647, 12653, 12659, 12671, 12689, 12697, 12703, - 12713, 12721, 12739, 12757, 12763, 12781, 12791, - 12799, 12809, 12821, 12829, 12841, 12853, 12889, - 12899, 12907, 12917, 12923, 12941, 12953, 12959, - 12967, 12973, 12979, 13001, 13007, 13033, 13043, - 13049, 13063, 13093, 13099, 13109, 13121, 13127, - 13147, 13159, 13171, 13177, 13183, 13217, 13229, - 13241, 13249, 13259, 13267, 13291, 13297, 13309, - 13327, 13337, 13367, 13381, 13397, 13411, 13417, - 13441, 13451, 13457, 13463, 13469, 13477, 13487, - 13499, 13513, 13523, 13537, 13553, 13567, 13577, - 13591, 13597, 13613, 13619, 13627, 13633, 13649, - 13669, 13679, 13687, 13693, 13709, 13721, 13729, - 13751, 13757, 13763, 13781, 13789, 13799, 13807, - 13829, 13841, 13859, 13873, 13879, 13901, 13907, - 13913, 13921, 13931, 13963, 13997, 14009, 14029, - 14051, 14057, 14071, 14081, 14087, 14107, 14143, - 14149, 14159, 14173, 14197, 14207, 14221, 14243, - 14249, 14281, 14293, 14303, 14321, 14327, 14341, - 14347, 14369, 14387, 14401, 14407, 14419, 14431, - 14437, 14447, 14461, 14479, 14489, 14503, 14519, - 14533, 14543, 14549, 14557, 14563, 14591, 14621, - 14627, 14633, 14639, 14653, 14669, 14683, 14699, - 14713, 14723, 14731, 14737, 14747, 14753, 14759, - 14767, 14779, 14797, 14813, 14821, 14827, 14843, - 14851, 14867, 14879, 14887, 14897, 14923, 14929, - 14939, 14947, 14957, 14969, 14983, 15013, 15031, - 15053, 15061, 15073, 15083, 15091, 15101, 15107, - 15121, 15131, 15137, 15149, 15161, 15173, 15187, - 15193, 15199, 15217, 15227, 15233, 15241, 15259, - 15269, 15277, 15287, 15299, 15307, 15313, 15319, - 15329, 15349, 15359, 15373, 15383, 15391, 15401, - 15413, 15427, 15439, 15451, 15461, 15467, 15473, - 15493, 15511, 15527, 15541, 15551, 15559, 15569, - 15581, 15601, 15607, 15619, 15629, 15641, 15647, - 15661, 15667, 15679, 15727, 15733, 15739, 15749, - 15761, 15767, 15773, 15787, 15797, 15803, 15809, - 15817, 15823, 15859, 15877, 15887, 15901, 15907, - 15913, 15919, 15937, 15959, 15971, 15991, 16001, - 16007, 16033, 16057, 16063, 16069, 16087, 16097, - 16103, 16111, 16127, 16139, 16183, 16189, 16217, - 16223, 16229, 16249, 16267, 16273, 16301, 16319, - 16333, 16339, 16349, 16361, 16369, 16381, 16411, - 16417, 16427, 16433, 16447, 16453, 16477, 16487, - 16493, 16519, 16529, 16547, 16553, 16561, 16567, - 16573, 16603, 16619, 16631, 16649, 16657, 16673, - 16691, 16699, 16729, 16741, 16747, 16759, 16787, - 16811, 16823, 16829, 16843, 16871, 16879, 16889, - 16901, 16921, 16927, 16937, 16943, 16963, 16979, - 16987, 16993, 17011, 17021, 17027, 17033, 17041, - 17047, 17053, 17077, 17093, 17099, 17107, 17117, - 17123, 17137, 17159, 17167, 17183, 17189, 17203, - 17209, 17231, 17239, 17257, 17291, 17299, 17317, - 17327, 17333, 17341, 17351, 17359, 17377, 17383, - 17389, 17401, 17417, 17431, 17443, 17449, 17467, - 17477, 17483, 17489, 17497, 17509, 17519, 17539, - 17551, 17569, 17579, 17597, 17609, 17623, 17657, - 17669, 17681, 17707, 17713, 17729, 17737, 17747, - 17761, 17783, 17789, 17807, 17827, 17837, 17851, - 17863, 17881, 17891, 17903, 17909, 17921, 17929, - 17939, 17957, 17971, 17977, 17987, 18013, 18041, - 18047, 18059, 18077, 18089, 18097, 18119, 18127, - 18133, 18143, 18149, 18169, 18181, 18191, 18199, - 18211, 18217, 18223, 18229, 18251, 18257, 18269, - 18287, 18301, 18307, 18313, 18329, 18341, 18353, - 18367, 18379, 18397, 18413, 18427, 18433, 18439, - 18451, 18457, 18481, 18493, 18503, 18517, 18523, - 18539, 18553, 18583, 18593, 18617, 18637, 18661, - 18671, 18679, 18691, 18701, 18713, 18719, 18731, - 18743, 18749, 18757, 18773, 18787, 18793, 18803, - 18839, 18859, 18869, 18899, 18911, 18917, 18947, - 18959, 18973, 18979, 19001, 19009, 19031, 19037, - 19051, 19069, 19079, 19087, 19121, 19139, 19157, - 19163, 19181, 19207, 19213, 19219, 19231, 19237, - 19249, 19259, 19267, 19273, 19289, 19301, 19309, - 19319, 19333, 19373, 19379, 19387, 19403, 19417, - 19423, 19429, 19441, 19447, 19457, 19463, 19469, - 19477, 19483, 19489, 19501, 19507, 19531, 19541, - 19553, 19559, 19571, 19577, 19583, 19597, 19603, - 19609, 19661, 19681, 19687, 19697, 19709, 19717, - 19727, 19739, 19751, 19759, 19777, 19793, 19801, - 19813, 19819, 19841, 19853, 19861, 19867, 19889, - 19913, 19919, 19927, 19937, 19949, 19961, 19973, - 19979, 19991, 19997, 20011, 20021, 20029, 20047, - 20063, 20071, 20089, 20101, 20107, 20113, 20123, - 20129, 20143, 20149, 20161, 20173, 20183, 20201, - 20219, 20231, 20249, 20261, 20269, 20287, 20297, - 20323, 20333, 20341, 20347, 20353, 20359, 20369, - 20389, 20399, 20407, 20431, 20441, 20477, 20483, - 20507, 20521, 20533, 20543, 20549, 20563, 20593, - 20599, 20611, 20627, 20639, 20663, 20681, 20693, - 20707, 20717, 20731, 20743, 20749, 20759, 20771, - 20789, 20807, 20849, 20857, 20873, 20879, 20887, - 20897, 20903, 20921, 20929, 20939, 20947, 20959, - 20981, 21001, 21011, 21017, 21023, 21031, 21059, - 21067, 21089, 21101, 21107, 21121, 21139, 21149, - 21157, 21163, 21169, 21179, 21187, 21193, 21211, - 21221, 21227, 21247, 21269, 21277, 21283, 21313, - 21319, 21341, 21347, 21377, 21383, 21391, 21397, - 21407, 21419, 21433, 21467, 21481, 21487, 21493, - 21499, 21517, 21523, 21529, 21557, 21563, 21569, - 21577, 21587, 21599, 21611, 21617, 21647, 21661, - 21673, 21683, 21701, 21713, 21727, 21737, 21751, - 21757, 21767, 21773, 21787, 21799, 21817, 21839, - 21851, 21859, 21871, 21881, 21893, 21911, 21929, - 21937, 21943, 21961, 21977, 21991, 21997, 22003, - 22013, 22027, 22037, 22051, 22063, 22073, 22079, - 22091, 22109, 22123, 22129, 22147, 22153, 22159, - 22171, 22189, 22229, 22247, 22259, 22271, 22277, - 22283, 22291, 22303, 22343, 22349, 22367, 22381, - 22391, 22397, 22409, 22433, 22441, 22447, 22453, - 22469, 22481, 22501, 22511, 22531, 22541, 22549, - 22567, 22573, 22613, 22619, 22637, 22643, 22651, - 22669, 22679, 22691, 22697, 22709, 22717, 22727, - 22739, 22751, 22769, 22777, 22783, 22807, 22817, - 22853, 22859, 22871, 22877, 22901, 22907, 22921, - 22937, 22943, 22961, 22973, 22993, 23003, 23011, - 23017, 23027, 23039, 23053, 23059, 23071, 23081, - 23087, 23099, 23117, 23131, 23143, 23159, 23167, - 23173, 23189, 23197, 23203, 23209, 23227, 23251, - 23269, 23279, 23291, 23297, 23311, 23321, 23327, - 23333, 23339, 23357, 23369, 23399, 23417, 23431, - 23447, 23459, 23473, 23497, 23509, 23531, 23537, - 23549, 23557, 23563, 23581, 23593, 23599, 23609, - 23623, 23629, 23663, 23669, 23677, 23687, 23719, - 23741, 23747, 23753, 23761, 23767, 23773, 23789, - 23801, 23813, 23819, 23827, 23833, 23857, 23869, - 23879, 23887, 23893, 23899, 23909, 23917, 23929, - 23957, 23971, 23977, 23993, 24001, 24007, 24019, - 24029, 24043, 24049, 24061, 24071, 24077, 24083, - 24091, 24097, 24103, 24109, 24121, 24133, 24151, - 24169, 24179, 24197, 24203, 24223, 24229, 24239, - 24247, 24281, 24317, 24329, 24337, 24359, 24371, - 24379, 24391, 24407, 24413, 24419, 24439, 24469, - 24481, 24499, 24509, 24517, 24527, 24533, 24547, - 24571, 24593, 24611, 24623, 24631, 24659, 24671, - 24677, 24683, 24691, 24697, 24709, 24733, 24749, - 24763, 24781, 24793, 24799, 24809, 24821, 24841, - 24847, 24859, 24877, 24889, 24907, 24917, 24923, - 24943, 24953, 24967, 24977, 24989, 25013, 25031, - 25037, 25057, 25073, 25087, 25097, 25111, 25117, - 25127, 25147, 25153, 25163, 25169, 25183, 25189, - 25219, 25229, 25237, 25243, 25253, 25261, 25301, - 25307, 25321, 25339, 25349, 25357, 25367, 25373, - 25391, 25409, 25423, 25439, 25447, 25453, 25463, - 25469, 25523, 25537, 25561, 25577, 25583, 25589, - 25601, 25609, 25621, 25633, 25639, 25657, 25667, - 25673, 25679, 25693, 25703, 25717, 25733, 25741, - 25747, 25759, 25771, 25793, 25799, 25819, 25841, - 25847, 25867, 25873, 25889, 25903, 25913, 25919, - 25931, 25939, 25951, 25969, 25981, 25997, 26003, - 26017, 26029, 26041, 26053, 26083, 26099, 26107, - 26113, 26119, 26141, 26153, 26161, 26171, 26177, - 26183, 26189, 26203, 26209, 26227, 26237, 26249, - 26261, 26267, 26293, 26309, 26317, 26339, 26347, - 26357, 26371, 26387, 26393, 26399, 26407, 26417, - 26423, 26431, 26437, 26449, 26459, 26479, 26489, - 26497, 26513, 26539, 26557, 26573, 26591, 26597, - 26627, 26633, 26641, 26647, 26669, 26681, 26687, - 26693, 26699, 26711, 26717, 26723, 26729, 26737, - 26759, 26777, 26783, 26801, 26813, 26821, 26833, - 26839, 26849, 26861, 26879, 26891, 26903, 26921, - 26927, 26947, 26953, 26959, 26981, 26987, 26993, - 27011, 27017, 27031, 27043, 27059, 27067, 27073, - 27091, 27103, 27109, 27127, 27143, 27179, 27191, - 27197, 27211, 27239, 27253, 27259, 27271, 27277, - 27283, 27299, 27329, 27337, 27361, 27367, 27397, - 27407, 27427, 27437, 27449, 27457, 27479, 27487, - 27509, 27527, 27539, 27551, 27581, 27611, 27617, - 27631, 27647, 27653, 27673, 27689, 27697, 27733, - 27739, 27749, 27763, 27773, 27779, 27791, 27799, - 27809, 27817, 27823, 27847, 27883, 27893, 27901, - 27917, 27941, 27947, 27953, 27961, 27967, 27983, - 27997, 28019, 28027, 28051, 28057, 28069, 28081, - 28087, 28097, 28109, 28123, 28151, 28163, 28181, - 28201, 28211, 28219, 28229, 28277, 28283, 28289, - 28297, 28307, 28319, 28349, 28387, 28393, 28403, - 28409, 28429, 28439, 28447, 28463, 28477, 28493, - 28499, 28513, 28537, 28547, 28559, 28571, 28579, - 28591, 28597, 28603, 28619, 28627, 28643, 28649, - 28657, 28663, 28669, 28687, 28697, 28703, 28711, - 28723, 28729, 28751, 28759, 28771, 28789, 28807, - 28813, 28837, 28843, 28859, 28867, 28879, 28901, - 28909, 28921, 28927, 28933, 28949, 28961, 28979, - 29009, 29017, 29023, 29033, 29059, 29077, 29101, - 29123, 29129, 29137, 29147, 29153, 29167, 29173, - 29179, 29191, 29201, 29207, 29221, 29231, 29243, - 29251, 29269, 29287, 29297, 29303, 29311, 29327, - 29333, 29339, 29347, 29363, 29383, 29389, 29399, - 29411, 29423, 29429, 29437, 29443, 29453, 29473, - 29483, 29501, 29527, 29537, 29567, 29573, 29581, - 29587, 29599, 29611, 29629, 29641, 29663, 29669, - 29683, 29717, 29723, 29741, 29753, 29759, 29789, - 29803, 29819, 29833, 29851, 29863, 29873, 29879, - 29917, 29927, 29947, 29959, 29983, 29989, 30011, - 30029, 30047, 30059, 30071, 30089, 30097, 30103, - 30109, 30119, 30133, 30139, 30161, 30169, 30181, - 30187, 30197, 30203, 30211, 30223, 30241, 30253, - 30259, 30269, 30293, 30307, 30313, 30319, 30341, - 30347, 30367, 30389, 30403, 30427, 30449, 30467, - 30491, 30497, 30509, 30517, 30529, 30539, 30553, - 30559, 30577, 30593, 30631, 30637, 30643, 30649, - 30661, 30671, 30677, 30689, 30697, 30703, 30713, - 30727, 30757, 30763, 30773, 30781, 30803, 30809, - 30817, 30829, 30839, 30851, 30859, 30869, 30881, - 30893, 30911, 30931, 30937, 30949, 30971, 30977, - 30983, 31013, 31019, 31033, 31039, 31051, 31063, - 31069, 31079, 31091, 31121, 31139, 31147, 31153, - 31159, 31177, 31183, 31189, 31219, 31231, 31237, - 31247, 31253, 31259, 31267, 31277, 31307, 31319, - 31327, 31333, 31357, 31379, 31387, 31393, 31469, - 31477, 31489, 31511, 31517, 31531, 31541, 31547, - 31567, 31573, 31583, 31601, 31607, 31627, 31643, - 31649, 31657, 31663, 31687, 31699, 31721, 31727, - 31741, 31751, 31769, 31793, 31799, 31817, 31847, - 31859, 31873, 31883, 31891, 31907, 31957, 31963, - 31973, 31981, 31991, 32003, 32009, 32027, 32051, - 32057, 32063, 32069, 32077, 32083, 32089, 32099, - 32117, 32141, 32159, 32173, 32183, 32189, 32203, - 32213, 32233, 32251, 32257, 32297, 32303, 32309, - 32321, 32327, 32341, 32353, 32359, 32369, 32377, - 32401, 32411, 32423, 32429, 32441, 32467, 32479, - 32491, 32497, 32503, 32531, 32537, 32561, 32569, - 32579, 32587, 32603, 32609, 32621, 32633, 32647, - 32653, 32687, 32693, 32707, 32713, 32719, 32749, - 32771, 32779, 32789, 32797, 32803, 32831, 32839, - 32869, 32887, 32909, 32917, 32933, 32939, 32957, - 32969, 32983, 32993, 32999, 33013, 33023, 33029, - 33037, 33049, 33071, 33083, 33091, 33107, 33113, - 33119, 33149, 33161, 33179, 33191, 33199, 33211, - 33223, 33247, 33287, 33301, 33311, 33317, 33329, - 33343, 33349, 33359, 33377, 33391, 33403, 33409, - 33427, 33457, 33469, 33479, 33487, 33493, 33503, - 33521, 33529, 33547, 33563, 33569, 33577, 33587, - 33599, 33613, 33619, 33629, 33637, 33647, 33679, - 33703, 33713, 33721, 33739, 33749, 33757, 33767, - 33773, 33791, 33797, 33809, 33827, 33851, 33857, - 33863, 33871, 33889, 33911, 33923, 33931, 33937, - 33961, 33967, 33997, 34019, 34031, 34039, 34057, - 34123, 34129, 34141, 34147, 34157, 34171, 34183, - 34211, 34217, 34231, 34253, 34259, 34267, 34273, - 34283, 34297, 34303, 34313, 34319, 34327, 34337, - 34351, 34361, 34367, 34381, 34403, 34421, 34429, - 34439, 34457, 34469, 34483, 34499, 34511, 34519, - 34537, 34543, 34549, 34583, 34589, 34603, 34613, - 34631, 34649, 34667, 34673, 34679, 34687, 34693, - 34703, 34721, 34729, 34739, 34747, 34757, 34763, - 34781, 34807, 34819, 34841, 34847, 34871, 34877, - 34883, 34897, 34913, 34919, 34939, 34949, 34961, - 34981, 35023, 35051, 35059, 35069, 35081, 35089, - 35099, 35107, 35117, 35129, 35141, 35149, 35159, - 35171, 35201, 35221, 35227, 35251, 35257, 35267, - 35279, 35291, 35311, 35317, 35323, 35339, 35353, - 35363, 35381, 35393, 35401, 35407, 35419, 35437, - 35447, 35461, 35491, 35507, 35521, 35527, 35533, - 35543, 35569, 35591, 35597, 35603, 35617, 35671, - 35677, 35729, 35747, 35753, 35759, 35771, 35797, - 35803, 35809, 35831, 35837, 35851, 35863, 35869, - 35879, 35897, 35911, 35923, 35933, 35951, 35963, - 35969, 35977, 35983, 35993, 35999, 36007, 36013, - 36037, 36061, 36067, 36073, 36083, 36097, 36107, - 36131, 36137, 36151, 36161, 36187, 36209, 36217, - 36229, 36241, 36251, 36263, 36269, 36277, 36293, - 36299, 36307, 36313, 36319, 36341, 36353, 36373, - 36383, 36389, 36433, 36451, 36457, 36467, 36473, - 36479, 36493, 36523, 36529, 36541, 36551, 36559, - 36571, 36583, 36599, 36607, 36629, 36637, 36643, - 36653, 36671, 36677, 36683, 36691, 36697, 36709, - 36721, 36739, 36749, 36761, 36767, 36779, 36787, - 36793, 36809, 36821, 36833, 36847, 36857, 36871, - 36877, 36887, 36899, 36913, 36919, 36929, 36943, - 36973, 36979, 36997, 37003, 37013, 37019, 37039, - 37049, 37057, 37087, 37097, 37117, 37123, 37139, - 37159, 37171, 37181, 37189, 37199, 37217, 37223, - 37243, 37253, 37273, 37307, 37313, 37321, 37337, - 37357, 37363, 37369, 37379, 37397, 37409, 37423, - 37441, 37447, 37463, 37483, 37489, 37501, 37507, - 37517, 37529, 37537, 37547, 37561, 37567, 37573, - 37579, 37589, 37607, 37619, 37633, 37643, 37649, - 37657, 37663, 37691, 37699, 37717, 37747, 37781, - 37799, 37811, 37831, 37847, 37853, 37861, 37871, - 37879, 37889, 37897, 37907, 37951, 37957, 37963, - 37987, 37993, 38011, 38039, 38047, 38053, 38069, - 38083, 38113, 38119, 38149, 38167, 38177, 38183, - 38189, 38197, 38219, 38231, 38237, 38261, 38273, - 38281, 38287, 38299, 38317, 38327, 38333, 38351, - 38371, 38377, 38393, 38431, 38447, 38453, 38459, - 38501, 38543, 38557, 38567, 38593, 38603, 38609, - 38629, 38639, 38651, 38669, 38677, 38693, 38699, - 38707, 38713, 38723, 38729, 38737, 38747, 38767, - 38783, 38791, 38803, 38821, 38833, 38839, 38851, - 38861, 38867, 38873, 38891, 38903, 38917, 38923, - 38933, 38953, 38959, 38971, 38977, 38993, 39019, - 39041, 39047, 39079, 39089, 39097, 39103, 39113, - 39119, 39133, 39139, 39157, 39163, 39181, 39191, - 39199, 39209, 39217, 39227, 39233, 39239, 39251, - 39293, 39301, 39313, 39323, 39341, 39359, 39367, - 39373, 39383, 39397, 39409, 39419, 39439, 39451, - 39461, 39499, 39509, 39521, 39541, 39551, 39563, - 39569, 39581, 39607, 39619, 39631, 39659, 39667, - 39679, 39703, 39709, 39719, 39727, 39733, 39749, - 39761, 39769, 39779, 39791, 39799, 39821, 39827, - 39839, 39847, 39857, 39863, 39869, 39877, 39883, - 39901, 39929, 39937, 39953, 39971, 39979, 39989, - 40009, 40031, 40037, 40063, 40087, 40093, 40099, - 40111, 40123, 40129, 40151, 40163, 40169, 40177, - 40189, 40213, 40231, 40237, 40253, 40277, 40283, - 40289, 40343, 40351, 40357, 40387, 40423, 40429, - 40459, 40471, 40483, 40493, 40499, 40507, 40519, - 40529, 40543, 40559, 40577, 40583, 40591, 40597, - 40609, 40627, 40637, 40693, 40699, 40709, 40739, - 40751, 40759, 40771, 40787, 40801, 40813, 40819, - 40829, 40841, 40847, 40853, 40867, 40879, 40897, - 40903, 40927, 40933, 40939, 40949, 40961, 40973, - 40993, 41011, 41017, 41023, 41039, 41047, 41057, - 41077, 41113, 41131, 41141, 41149, 41161, 41177, - 41183, 41189, 41201, 41213, 41221, 41227, 41233, - 41243, 41257, 41263, 41269, 41281, 41299, 41333, - 41341, 41351, 41357, 41381, 41387, 41399, 41411, - 41443, 41453, 41467, 41479, 41491, 41507, 41513, - 41519, 41539, 41549, 41579, 41593, 41603, 41609, - 41617, 41627, 41641, 41647, 41659, 41669, 41681, - 41687, 41719, 41729, 41737, 41759, 41771, 41777, - 41801, 41809, 41843, 41849, 41863, 41879, 41887, - 41893, 41903, 41911, 41927, 41941, 41947, 41953, - 41959, 41969, 41981, 41999, 42013, 42019, 42043, - 42061, 42071, 42083, 42089, 42101, 42131, 42139, - 42157, 42169, 42179, 42187, 42193, 42209, 42221, - 42227, 42239, 42257, 42281, 42293, 42299, 42307, - 42323, 42331, 42337, 42349, 42359, 42373, 42379, - 42391, 42397, 42403, 42409, 42433, 42443, 42451, - 42457, 42463, 42473, 42487, 42499, 42509, 42533, - 42557, 42569, 42577, 42589, 42611, 42641, 42649, - 42667, 42677, 42683, 42689, 42697, 42703, 42709, - 42719, 42727, 42737, 42743, 42751, 42767, 42773, - 42787, 42793, 42821, 42829, 42839, 42853, 42859, - 42899, 42923, 42929, 42937, 42943, 42953, 42961, - 42967, 42979, 42989, 43003, 43013, 43019, 43037, - 43049, 43063, 43093, 43103, 43117, 43133, 43151, - 43159, 43177, 43189, 43201, 43207, 43223, 43237, - 43261, 43271, 43283, 43291, 43313, 43319, 43331, - 43391, 43397, 43403, 43411, 43427, 43441, 43451, - 43457, 43481, 43487, 43499, 43517, 43541, 43573, - 43579, 43591, 43597, 43607, 43613, 43627, 43633, - 43649, 43661, 43669, 43691, 43711, 43717, 43753, - 43759, 43777, 43783, 43789, 43801, 43853, 43867, - 43889, 43913, 43933, 43943, 43951, 43961, 43969, - 43987, 43997, 44017, 44027, 44041, 44053, 44059, - 44071, 44087, 44101, 44111, 44119, 44129, 44159, - 44171, 44179, 44189, 44201, 44207, 44221, 44249, - 44257, 44263, 44269, 44279, 44293, 44351, 44357, - 44371, 44381, 44389, 44417, 44449, 44483, 44491, - 44497, 44507, 44519, 44531, 44537, 44543, 44549, - 44563, 44579, 44587, 44617, 44623, 44633, 44641, - 44647, 44657, 44683, 44699, 44711, 44729, 44741, - 44753, 44771, 44777, 44789, 44797, 44809, 44819, - 44839, 44851, 44867, 44879, 44887, 44893, 44909, - 44917, 44927, 44939, 44953, 44959, 44971, 44983, - 45007, 45013, 45053, 45061, 45077, 45083, 45119, - 45127, 45137, 45161, 45179, 45191, 45197, 45233, - 45247, 45259, 45281, 45289, 45307, 45317, 45329, - 45337, 45343, 45361, 45377, 45389, 45403, 45413, - 45427, 45433, 45439, 45481, 45491, 45497, 45503, - 45523, 45533, 45541, 45553, 45569, 45587, 45599, - 45613, 45631, 45641, 45659, 45667, 45673, 45691, - 45697, 45707, 45737, 45751, 45757, 45763, 45779, - 45817, 45823, 45833, 45841, 45853, 45863, 45869, - 45887, 45893, 45943, 45949, 45959, 45971, 45979, - 45989, 46021, 46027, 46049, 46061, 46073, 46091, - 46099, 46133, 46141, 46147, 46153, 46171, 46181, - 46187, 46199, 46219, 46229, 46237, 46261, 46271, - 46279, 46301, 46307, 46327, 46337, 46349, 46381, - 46399, 46411, 46439, 46447, 46457, 46471, 46477, - 46489, 46499, 46507, 46523, 46549, 46559, 46567, - 46573, 46589, 46601, 46619, 46633, 46639, 46649, - 46663, 46679, 46687, 46703, 46723, 46747, 46757, - 46769, 46807, 46817, 46829, 46853, 46861, 46867, - 46877, 46889, 46901, 46919, 46933, 46957, 46993, - 47017, 47041, 47051, 47057, 47087, 47093, 47111, - 47119, 47129, 47137, 47143, 47149, 47161, 47189, - 47207, 47221, 47237, 47251, 47269, 47279, 47287, - 47293, 47303, 47309, 47317, 47339, 47351, 47363, - 47381, 47387, 47407, 47417, 47431, 47441, 47459, - 47491, 47497, 47507, 47513, 47521, 47527, 47533, - 47543, 47563, 47569, 47581, 47591, 47599, 47609, - 47623, 47629, 47639, 47653, 47659, 47681, 47699, - 47711, 47717, 47737, 47743, 47777, 47791, 47797, - 47807, 47819, 47837, 47843, 47857, 47869, 47881, - 47903, 47911, 47917, 47933, 47939, 47947, 47963, - 47969, 47977, 48017, 48023, 48029, 48049, 48073, - 48079, 48091, 48109, 48119, 48131, 48157, 48163, - 48179, 48187, 48193, 48221, 48239, 48247, 48259, - 48271, 48281, 48299, 48311, 48337, 48353, 48371, - 48383, 48397, 48407, 48413, 48437, 48449, 48463, - 48473, 48479, 48487, 48497, 48523, 48533, 48539, - 48563, 48571, 48589, 48611, 48619, 48647, 48661, - 48673, 48679, 48731, 48751, 48757, 48767, 48779, - 48787, 48799, 48809, 48817, 48823, 48847, 48857, - 48869, 48883, 48889, 48907, 48947, 48953, 48973, - 48989, 49003, 49009, 49019, 49031, 49037, 49043, - 49057, 49069, 49081, 49103, 49109, 49117, 49123, - 49139, 49157, 49169, 49177, 49193, 49199, 49207, - 49223, 49253, 49261, 49277, 49297, 49307, 49331, - 49339, 49363, 49369, 49391, 49409, 49417, 49429, - 49451, 49459, 49477, 49499, 49523, 49529, 49537, - 49547, 49559, 49597, 49603, 49613, 49627, 49633, - 49639, 49663, 49669, 49681, 49697, 49711, 49727, - 49739, 49747, 49757, 49783, 49789, 49801, 49807, - 49823, 49831, 49843, 49853, 49871, 49877, 49891, - 49919, 49927, 49937, 49943, 49957, 49991, 49999, - 50021, 50033, 50047, 50053, 50069, 50077, 50087, - 50093, 50101, 50111, 50119, 50129, 50147, 50153, - 50159, 50177, 50207, 50221, 50227, 50261, 50273, - 50287, 50311, 50321, 50329, 50341, 50359, 50377, - 50383, 50411, 50417, 50423, 50441, 50459, 50497, - 50503, 50513, 50527, 50539, 50549, 50581, 50587, - 50593, 50599, 50627, 50647, 50671, 50683, 50707, - 50723, 50741, 50753, 50767, 50773, 50789, 50821, - 50833, 50839, 50849, 50857, 50867, 50873, 50891, - 50909, 50923, 50929, 50951, 50957, 50969, 50989, - 51001, 51031, 51043, 51059, 51071, 51109, 51131, - 51137, 51151, 51157, 51169, 51193, 51199, 51217, - 51229, 51239, 51257, 51263, 51283, 51307, 51329, - 51341, 51347, 51361, 51383, 51407, 51413, 51419, - 51427, 51437, 51449, 51461, 51473, 51479, 51487, - 51503, 51511, 51517, 51539, 51551, 51563, 51577, - 51593, 51599, 51607, 51613, 51631, 51637, 51647, - 51659, 51673, 51679, 51691, 51713, 51719, 51749, - 51767, 51787, 51797, 51803, 51817, 51827, 51839, - 51853, 51859, 51869, 51893, 51899, 51907, 51913, - 51929, 51941, 51949, 51971, 51977, 51991, 52009, - 52021, 52027, 52051, 52057, 52067, 52081, 52103, - 52121, 52127, 52147, 52153, 52163, 52177, 52183, - 52189, 52201, 52223, 52237, 52249, 52259, 52267, - 52289, 52301, 52313, 52321, 52361, 52369, 52379, - 52387, 52433, 52453, 52489, 52501, 52511, 52517, - 52529, 52541, 52553, 52561, 52567, 52579, 52609, - 52627, 52639, 52667, 52673, 52691, 52697, 52709, - 52721, 52727, 52733, 52747, 52757, 52769, 52783, - 52807, 52813, 52837, 52859, 52879, 52889, 52901, - 52919, 52937, 52951, 52957, 52963, 52973, 52981, - 52999, 53017, 53047, 53069, 53077, 53087, 53093, - 53101, 53113, 53129, 53147, 53161, 53171, 53189, - 53197, 53231, 53239, 53267, 53279, 53299, 53309, - 53323, 53353, 53359, 53377, 53401, 53407, 53419, - 53437, 53453, 53479, 53503, 53527, 53549, 53569, - 53591, 53597, 53609, 53617, 53623, 53629, 53639, - 53653, 53681, 53693, 53699, 53717, 53731, 53759, - 53773, 53783, 53791, 53813, 53819, 53831, 53849, - 53857, 53881, 53887, 53897, 53917, 53923, 53939, - 53951, 53959, 53987, 53993, 54001, 54011, 54037, - 54049, 54059, 54083, 54091, 54101, 54121, 54133, - 54139, 54151, 54163, 54181, 54193, 54217, 54251, - 54269, 54277, 54287, 54293, 54311, 54319, 54331, - 54347, 54361, 54367, 54377, 54401, 54409, 54419, - 54437, 54443, 54449, 54469, 54493, 54499, 54517, - 54539, 54547, 54559, 54577, 54583, 54601, 54617, - 54623, 54629, 54647, 54667, 54673, 54679, 54709, - 54721, 54727, 54751, 54767, 54773, 54779, 54787, - 54799, 54829, 54851, 54869, 54877, 54907, 54917, - 54941, 54949, 54959, 54973, 54979, 55001, 55009, - 55021, 55049, 55057, 55073, 55079, 55103, 55109, - 55117, 55127, 55147, 55163, 55171, 55201, 55207, - 55213, 55219, 55229, 55243, 55249, 55259, 55291, - 55313, 55331, 55337, 55343, 55351, 55373, 55381, - 55399, 55411, 55439, 55457, 55469, 55487, 55501, - 55511, 55529, 55541, 55547, 55579, 55589, 55603, - 55609, 55619, 55631, 55639, 55661, 55667, 55673, - 55681, 55691, 55697, 55711, 55717, 55733, 55763, - 55787, 55793, 55799, 55807, 55813, 55819, 55829, - 55837, 55843, 55849, 55871, 55889, 55897, 55903, - 55921, 55927, 55933, 55949, 55967, 55987, 55997, - 56003, 56009, 56039, 56053, 56081, 56087, 56093, - 56099, 56113, 56123, 56131, 56149, 56167, 56179, - 56197, 56207, 56237, 56249, 56263, 56269, 56299, - 56311, 56333, 56359, 56369, 56377, 56383, 56393, - 56401, 56417, 56431, 56437, 56443, 56453, 56467, - 56473, 56479, 56489, 56501, 56509, 56519, 56527, - 56533, 56543, 56569, 56591, 56597, 56611, 56629, - 56659, 56671, 56681, 56687, 56701, 56711, 56731, - 56737, 56747, 56767, 56773, 56779, 56807, 56813, - 56821, 56827, 56843, 56857, 56873, 56891, 56897, - 56909, 56921, 56929, 56941, 56951, 56957, 56963, - 56983, 56989, 56999, 57037, 57047, 57059, 57073, - 57089, 57097, 57107, 57119, 57131, 57139, 57149, - 57163, 57173, 57179, 57191, 57203, 57221, 57241, - 57251, 57259, 57269, 57283, 57301, 57329, 57347, - 57367, 57373, 57383, 57389, 57397, 57413, 57427, - 57457, 57467, 57487, 57493, 57503, 57527, 57557, - 57571, 57587, 57593, 57601, 57637, 57649, 57667, - 57679, 57689, 57697, 57709, 57719, 57727, 57737, - 57751, 57773, 57781, 57787, 57793, 57803, 57809, - 57829, 57839, 57847, 57853, 57859, 57881, 57899, - 57917, 57923, 57943, 57973, 57991, 58013, 58027, - 58043, 58049, 58057, 58067, 58073, 58099, 58109, - 58129, 58147, 58153, 58169, 58189, 58199, 58207, - 58217, 58229, 58237, 58243, 58271, 58309, 58321, - 58337, 58363, 58369, 58379, 58391, 58403, 58411, - 58417, 58427, 58439, 58451, 58477, 58511, 58537, - 58543, 58549, 58567, 58573, 58579, 58601, 58613, - 58631, 58657, 58679, 58687, 58693, 58699, 58711, - 58727, 58733, 58741, 58757, 58763, 58771, 58787, - 58831, 58889, 58897, 58907, 58913, 58921, 58937, - 58943, 58963, 58979, 58991, 58997, 59009, 59021, - 59029, 59051, 59063, 59069, 59077, 59083, 59093, - 59107, 59113, 59119, 59141, 59149, 59159, 59167, - 59183, 59197, 59207, 59219, 59233, 59239, 59263, - 59273, 59281, 59333, 59341, 59351, 59357, 59369, - 59377, 59387, 59393, 59399, 59407, 59417, 59441, - 59447, 59453, 59467, 59473, 59497, 59509, 59539, - 59557, 59567, 59581, 59611, 59617, 59627, 59651, - 59659, 59669, 59693, 59699, 59707, 59723, 59729, - 59743, 59753, 59771, 59779, 59791, 59797, 59809, - 59833, 59863, 59879, 59887, 59921, 59929, 59951, - 59957, 59971, 59981, 59999, 60013, 60029, 60037, - 60077, 60083, 60089, 60101, 60107, 60127, 60133, - 60139, 60149, 60161, 60167, 60209, 60217, 60223, - 60251, 60257, 60271, 60289, 60317, 60331, 60337, - 60343, 60353, 60373, 60383, 60397, 60413, 60427, - 60443, 60449, 60457, 60493, 60509, 60521, 60527, - 60539, 60589, 60601, 60607, 60617, 60623, 60631, - 60637, 60647, 60659, 60679, 60689, 60703, 60719, - 60727, 60733, 60757, 60763, 60773, 60779, 60793, - 60811, 60821, 60859, 60869, 60887, 60899, 60913, - 60919, 60937, 60943, 60953, 60961, 61001, 61007, - 61027, 61043, 61051, 61057, 61091, 61099, 61121, - 61129, 61141, 61151, 61169, 61211, 61223, 61231, - 61253, 61261, 61283, 61291, 61297, 61331, 61339, - 61357, 61363, 61379, 61403, 61409, 61417, 61441, - 61463, 61469, 61483, 61493, 61507, 61519, 61543, - 61553, 61559, 61583, 61603, 61609, 61627, 61637, - 61643, 61651, 61657, 61667, 61673, 61681, 61687, - 61703, 61717, 61723, 61729, 61751, 61757, 61781, - 61813, 61819, 61837, 61843, 61861, 61871, 61879, - 61909, 61927, 61933, 61949, 61961, 61967, 61979, - 61987, 62003, 62011, 62017, 62039, 62047, 62053, - 62071, 62081, 62099, 62119, 62129, 62137, 62143, - 62171, 62189, 62201, 62207, 62213, 62219, 62233, - 62273, 62297, 62303, 62311, 62323, 62347, 62383, - 62401, 62417, 62423, 62459, 62467, 62473, 62483, - 62497, 62507, 62533, 62539, 62549, 62563, 62581, - 62591, 62597, 62603, 62617, 62627, 62633, 62639, - 62653, 62659, 62683, 62701, 62723, 62731, 62743, - 62753, 62761, 62773, 62791, 62801, 62819, 62827, - 62851, 62861, 62869, 62897, 62903, 62921, 62927, - 62939, 62969, 62981, 62987, 63029, 63059, 63067, - 63073, 63079, 63097, 63103, 63113, 63127, 63149, - 63179, 63197, 63211, 63241, 63247, 63277, 63299, - 63311, 63317, 63331, 63337, 63347, 63353, 63361, - 63367, 63377, 63389, 63397, 63409, 63419, 63439, - 63463, 63473, 63487, 63493, 63499, 63521, 63527, - 63533, 63541, 63559, 63577, 63587, 63599, 63607, - 63617, 63629, 63647, 63659, 63667, 63689, 63697, - 63703, 63709, 63719, 63727, 63737, 63743, 63761, - 63773, 63781, 63793, 63799, 63809, 63823, 63839, - 63853, 63863, 63901, 63907, 63913, 63929, 63949, - 63977, 63997, 64007, 64013, 64019, 64033, 64063, - 64081, 64091, 64109, 64123, 64151, 64157, 64171, - 64187, 64217, 64223, 64231, 64237, 64271, 64279, - 64301, 64319, 64327, 64333, 64373, 64381, 64399, - 64433, 64439, 64451, 64483, 64489, 64499, 64513, - 64553, 64567, 64577, 64591, 64601, 64609, 64621, - 64627, 64633, 64661, 64667, 64679, 64693, 64709, - 64717, 64747, 64763, 64781, 64793, 64811, 64817, - 64849, 64871, 64877, 64891, 64901, 64919, 64927, - 64937, 64951, 64969, 64997, 65003, 65011, 65027, - 65033, 65053, 65063, 65071, 65089, 65099, 65111, - 65119, 65129, 65141, 65147, 65167, 65173, 65179, - 65203, 65213, 65239, 65257, 65267, 65287, 65293, - 65309, 65323, 65353, 65371, 65381, 65393, 65407, - 65413, 65419, 65437, 65447, 65479, 65497, 65519, - 65537, 65543, 65551, 65557, 65563, 65579, 65587, - 65599, 65609, 65617, 65629, 65647, 65657, 65677, - 65687, 65699, 65707, 65713, 65719, 65729, 65761, - 65777, 65789, 65809, 65827, 65837, 65843, 65851, - 65867, 65881, 65899, 65921, 65927, 65951, 65957, - 65963, 65981, 65993, 66029, 66037, 66047, 66067, - 66083, 66089, 66103, 66109, 66137, 66161, 66169, - 66179, 66191, 66221, 66239, 66271, 66293, 66301, - 66337, 66343, 66359, 66373, 66383, 66403, 66413, - 66431, 66449, 66457, 66463, 66491, 66499, 66509, - 66523, 66529, 66541, 66553, 66569, 66587, 66593, - 66601, 66617, 66629, 66643, 66653, 66683, 66697, - 66713, 66721, 66733, 66739, 66749, 66763, 66791, - 66797, 66809, 66821, 66841, 66851, 66863, 66877, - 66883, 66889, 66919, 66931, 66943, 66949, 66959, - 66973, 67003, 67021, 67033, 67043, 67049, 67057, - 67073, 67079, 67103, 67121, 67129, 67139, 67153, - 67169, 67181, 67187, 67211, 67217, 67231, 67247, - 67261, 67271, 67289, 67307, 67339, 67349, 67369, - 67391, 67399, 67409, 67421, 67427, 67433, 67447, - 67453, 67477, 67489, 67499, 67511, 67523, 67531, - 67537, 67547, 67559, 67567, 67577, 67589, 67601, - 67607, 67619, 67631, 67651, 67679, 67699, 67709, - 67723, 67733, 67741, 67751, 67757, 67763, 67777, - 67783, 67789, 67801, 67807, 67819, 67829, 67843, - 67853, 67867, 67883, 67891, 67901, 67927, 67933, - 67939, 67957, 67967, 67979, 67987, 67993, 68023, - 68041, 68053, 68059, 68071, 68087, 68099, 68111, - 68141, 68147, 68161, 68171, 68207, 68213, 68219, - 68227, 68239, 68261, 68279, 68311, 68329, 68351, - 68371, 68389, 68399, 68437, 68443, 68449, 68473, - 68483, 68489, 68501, 68507, 68521, 68531, 68539, - 68567, 68581, 68597, 68611, 68633, 68639, 68659, - 68669, 68683, 68699, 68711, 68729, 68737, 68743, - 68749, 68767, 68777, 68791, 68813, 68819, 68863, - 68879, 68891, 68897, 68903, 68909, 68917, 68927, - 68947, 68963, 68993, 69001, 69011, 69019, 69029, - 69061, 69067, 69073, 69109, 69119, 69127, 69143, - 69149, 69163, 69191, 69197, 69203, 69221, 69233, - 69239, 69247, 69257, 69263, 69313, 69337, 69371, - 69379, 69389, 69401, 69427, 69439, 69457, 69463, - 69473, 69481, 69491, 69497, 69539, 69557, 69593, - 69623, 69653, 69661, 69677, 69691, 69697, 69709, - 69737, 69761, 69767, 69779, 69809, 69821, 69827, - 69833, 69847, 69857, 69877, 69899, 69911, 69929, - 69941, 69959, 69991, 69997, 70003, 70009, 70019, - 70039, 70051, 70061, 70067, 70079, 70099, 70111, - 70117, 70123, 70139, 70157, 70163, 70177, 70183, - 70199, 70207, 70223, 70229, 70237, 70249, 70271, - 70289, 70297, 70309, 70321, 70327, 70351, 70373, - 70379, 70393, 70423, 70429, 70439, 70451, 70457, - 70481, 70487, 70501, 70507, 70529, 70537, 70549, - 70571, 70583, 70589, 70607, 70619, 70627, 70639, - 70657, 70663, 70687, 70709, 70717, 70729, 70753, - 70769, 70783, 70793, 70823, 70841, 70849, 70867, - 70877, 70891, 70901, 70913, 70919, 70937, 70949, - 70957, 70969, 70979, 70991, 70997, 71011, 71023, - 71039, 71059, 71069, 71081, 71089, 71119, 71129, - 71143, 71153, 71161, 71167, 71191, 71209, 71233, - 71249, 71257, 71263, 71287, 71293, 71317, 71327, - 71333, 71339, 71347, 71353, 71359, 71387, 71399, - 71411, 71419, 71429, 71437, 71443, 71453, 71471, - 71479, 71503, 71527, 71537, 71549, 71563, 71569, - 71593, 71633, 71647, 71663, 71671, 71693, 71699, - 71707, 71713, 71719, 71741, 71761, 71777, 71789, - 71807, 71821, 71837, 71843, 71849, 71861, 71867, - 71879, 71887, 71899, 71909, 71917, 71933, 71941, - 71947, 71963, 71971, 71983, 71993, 71999, 72019, - 72031, 72043, 72053, 72073, 72089, 72101, 72109, - 72139, 72161, 72167, 72173, 72211, 72221, 72227, - 72251, 72269, 72277, 72287, 72307, 72313, 72337, - 72353, 72367, 72379, 72421, 72431, 72461, 72467, - 72481, 72493, 72503, 72533, 72547, 72559, 72577, - 72613, 72623, 72643, 72649, 72661, 72671, 72679, - 72689, 72701, 72707, 72719, 72727, 72733, 72739, - 72763, 72797, 72817, 72823, 72859, 72869, 72883, - 72889, 72901, 72907, 72923, 72931, 72937, 72949, - 72959, 72973, 72997, 73009, 73019, 73037, 73043, - 73061, 73079, 73091, 73121, 73127, 73133, 73141, - 73181, 73189, 73237, 73243, 73259, 73277, 73291, - 73303, 73309, 73327, 73351, 73361, 73369, 73379, - 73387, 73417, 73433, 73453, 73459, 73471, 73477, - 73483, 73517, 73523, 73529, 73547, 73553, 73561, - 73571, 73583, 73589, 73597, 73607, 73613, 73637, - 73643, 73651, 73673, 73679, 73693, 73699, 73709, - 73721, 73727, 73751, 73757, 73771, 73783, 73819, - 73847, 73859, 73867, 73877, 73883, 73897, 73907, - 73939, 73951, 73961, 73973, 73999, 74017, 74027, - 74047, 74071, 74077, 74093, 74099, 74131, 74143, - 74149, 74159, 74167, 74177, 74189, 74197, 74203, - 74209, 74219, 74231, 74257, 74279, 74287, 74293, - 74311, 74317, 74323, 74353, 74363, 74377, 74383, - 74411, 74419, 74441, 74449, 74471, 74489, 74507, - 74521, 74527, 74551, 74561, 74567, 74573, 74587, - 74597, 74609, 74623, 74653, 74687, 74699, 74707, - 74713, 74719, 74729, 74747, 74759, 74771, 74779, - 74797, 74821, 74827, 74843, 74857, 74869, 74887, - 74897, 74903, 74923, 74929, 74941, 74959, 75011, - 75017, 75029, 75037, 75079, 75109, 75133, 75149, - 75161, 75167, 75181, 75193, 75209, 75217, 75223, - 75239, 75253, 75269, 75277, 75289, 75307, 75323, - 75329, 75337, 75347, 75353, 75367, 75377, 75389, - 75401, 75407, 75431, 75437, 75479, 75503, 75511, - 75521, 75527, 75533, 75539, 75553, 75571, 75577, - 75583, 75611, 75617, 75629, 75641, 75653, 75659, - 75679, 75689, 75703, 75709, 75721, 75731, 75743, - 75767, 75773, 75781, 75787, 75793, 75821, 75833, - 75853, 75869, 75883, 75913, 75931, 75937, 75967, - 75979, 75989, 75997, 76003, 76031, 76039, 76079, - 76091, 76099, 76123, 76129, 76147, 76157, 76163, - 76207, 76213, 76231, 76243, 76249, 76259, 76283, - 76289, 76303, 76333, 76343, 76367, 76379, 76387, - 76403, 76421, 76441, 76463, 76471, 76481, 76487, - 76493, 76507, 76519, 76537, 76543, 76561, 76579, - 76597, 76603, 76631, 76649, 76667, 76673, 76679, - 76697, 76717, 76733, 76753, 76771, 76777, 76801, - 76819, 76829, 76837, 76847, 76871, 76883, 76907, - 76913, 76919, 76943, 76949, 76961, 76991, 77003, - 77017, 77023, 77029, 77041, 77047, 77069, 77081, - 77093, 77101, 77137, 77153, 77167, 77191, 77201, - 77213, 77237, 77243, 77249, 77261, 77267, 77279, - 77291, 77317, 77323, 77339, 77347, 77359, 77369, - 77377, 77383, 77417, 77431, 77447, 77471, 77477, - 77489, 77509, 77521, 77527, 77543, 77549, 77557, - 77563, 77569, 77587, 77611, 77617, 77641, 77647, - 77659, 77681, 77687, 77699, 77711, 77719, 77731, - 77743, 77761, 77773, 77783, 77797, 77813, 77839, - 77849, 77863, 77893, 77899, 77929, 77951, 77969, - 77977, 77983, 77999, 78007, 78017, 78031, 78041, - 78049, 78059, 78079, 78101, 78121, 78137, 78157, - 78163, 78173, 78179, 78191, 78203, 78229, 78241, - 78259, 78277, 78283, 78301, 78307, 78317, 78341, - 78347, 78367, 78401, 78427, 78437, 78467, 78479, - 78487, 78497, 78509, 78517, 78539, 78553, 78569, - 78577, 78583, 78593, 78607, 78623, 78643, 78649, - 78691, 78697, 78707, 78713, 78721, 78737, 78779, - 78787, 78797, 78803, 78809, 78823, 78839, 78853, - 78877, 78887, 78893, 78901, 78919, 78929, 78941, - 78977, 78989, 79031, 79039, 79063, 79087, 79103, - 79111, 79133, 79139, 79147, 79153, 79159, 79181, - 79187, 79193, 79201, 79229, 79241, 79259, 79273, - 79279, 79301, 79309, 79319, 79333, 79349, 79357, - 79367, 79379, 79393, 79399, 79411, 79423, 79433, - 79451, 79481, 79493, 79531, 79537, 79549, 79559, - 79579, 79589, 79601, 79609, 79621, 79627, 79633, - 79657, 79669, 79687, 79693, 79699, 79757, 79769, - 79777, 79801, 79811, 79817, 79823, 79829, 79841, - 79847, 79861, 79867, 79873, 79889, 79901, 79907, - 79939, 79967, 79973, 79979, 79987, 79997, 80021, - 80039, 80051, 80071, 80077, 80107, 80141, 80147, - 80153, 80167, 80173, 80191, 80207, 80221, 80231, - 80239, 80251, 80263, 80273, 80279, 80287, 80309, - 80317, 80329, 80341, 80347, 80363, 80369, 80387, - 80407, 80429, 80447, 80471, 80489, 80513, 80527, - 80537, 80557, 80567, 80599, 80611, 80621, 80627, - 80651, 80657, 80669, 80677, 80683, 80701, 80713, - 80737, 80747, 80761, 80777, 80783, 80789, 80803, - 80809, 80819, 80831, 80849, 80863, 80897, 80909, - 80917, 80923, 80929, 80953, 80963, 80989, 81001, - 81013, 81019, 81031, 81041, 81047, 81071, 81077, - 81083, 81097, 81119, 81131, 81157, 81163, 81173, - 81181, 81197, 81203, 81223, 81233, 81239, 81281, - 81293, 81299, 81307, 81331, 81343, 81349, 81359, - 81371, 81401, 81409, 81421, 81439, 81457, 81463, - 81509, 81517, 81527, 81533, 81547, 81553, 81559, - 81569, 81611, 81619, 81629, 81637, 81647, 81667, - 81677, 81689, 81701, 81707, 81727, 81737, 81749, - 81761, 81769, 81799, 81817, 81839, 81847, 81853, - 81869, 81883, 81899, 81919, 81929, 81937, 81943, - 81953, 81967, 81973, 82003, 82009, 82021, 82031, - 82037, 82051, 82067, 82073, 82129, 82139, 82153, - 82163, 82171, 82183, 82189, 82207, 82217, 82223, - 82231, 82237, 82261, 82267, 82279, 82301, 82307, - 82339, 82349, 82361, 82373, 82387, 82393, 82421, - 82457, 82463, 82469, 82483, 82493, 82499, 82507, - 82529, 82549, 82559, 82567, 82591, 82601, 82609, - 82619, 82633, 82651, 82657, 82699, 82721, 82727, - 82757, 82763, 82781, 82787, 82793, 82799, 82811, - 82837, 82847, 82883, 82889, 82903, 82913, 82939, - 82963, 82981, 82997, 83003, 83009, 83023, 83047, - 83059, 83071, 83077, 83089, 83101, 83117, 83137, - 83177, 83203, 83219, 83227, 83233, 83243, 83257, - 83267, 83273, 83299, 83311, 83339, 83357, 83383, - 83389, 83399, 83407, 83417, 83423, 83431, 83437, - 83443, 83449, 83459, 83471, 83477, 83497, 83537, - 83557, 83563, 83579, 83591, 83597, 83609, 83617, - 83639, 83653, 83663, 83689, 83701, 83717, 83737, - 83761, 83773, 83791, 83813, 83833, 83843, 83857, - 83869, 83891, 83903, 83911, 83921, 83933, 83939, - 83969, 83983, 84011, 84017, 84047, 84053, 84059, - 84067, 84089, 84121, 84127, 84137, 84143, 84163, - 84179, 84191, 84199, 84211, 84221, 84229, 84239, - 84247, 84263, 84299, 84307, 84313, 84319, 84347, - 84377, 84389, 84401, 84407, 84421, 84431, 84437, - 84443, 84449, 84457, 84463, 84481, 84499, 84509, - 84521, 84533, 84551, 84559, 84589, 84629, 84649, - 84659, 84673, 84691, 84697, 84713, 84719, 84731, - 84737, 84751, 84761, 84787, 84793, 84809, 84827, - 84857, 84869, 84913, 84919, 84947, 84961, 84967, - 84977, 84991, 85009, 85021, 85027, 85037, 85049, - 85061, 85081, 85087, 85093, 85103, 85109, 85121, - 85133, 85147, 85159, 85193, 85199, 85213, 85223, - 85229, 85237, 85243, 85259, 85297, 85303, 85313, - 85331, 85361, 85369, 85381, 85411, 85427, 85439, - 85447, 85453, 85469, 85487, 85513, 85523, 85531, - 85549, 85571, 85577, 85597, 85607, 85619, 85627, - 85639, 85661, 85667, 85691, 85703, 85711, 85717, - 85733, 85751, 85781, 85793, 85817, 85829, 85837, - 85843, 85853, 85889, 85903, 85909, 85931, 85991, - 85999, 86011, 86017, 86027, 86069, 86077, 86083, - 86111, 86117, 86131, 86137, 86143, 86161, 86171, - 86179, 86197, 86209, 86239, 86249, 86257, 86263, - 86269, 86287, 86293, 86311, 86323, 86341, 86351, - 86357, 86369, 86381, 86389, 86399, 86413, 86423, - 86441, 86453, 86461, 86467, 86477, 86491, 86501, - 86509, 86531, 86539, 86561, 86573, 86579, 86587, - 86599, 86627, 86677, 86689, 86711, 86719, 86729, - 86743, 86753, 86767, 86783, 86813, 86837, 86843, - 86851, 86857, 86869, 86923, 86929, 86939, 86951, - 86959, 86969, 86981, 86993, 87011, 87037, 87049, - 87071, 87083, 87103, 87119, 87133, 87149, 87179, - 87187, 87211, 87221, 87251, 87257, 87277, 87293, - 87299, 87313, 87323, 87337, 87359, 87383, 87403, - 87421, 87427, 87433, 87443, 87473, 87481, 87491, - 87509, 87517, 87523, 87539, 87547, 87553, 87559, - 87583, 87589, 87613, 87623, 87629, 87641, 87649, - 87671, 87679, 87691, 87697, 87719, 87739, 87751, - 87767, 87793, 87803, 87811, 87833, 87853, 87869, - 87877, 87887, 87911, 87917, 87931, 87943, 87959, - 87973, 87991, 88001, 88007, 88019, 88037, 88069, - 88079, 88093, 88117, 88129, 88169, 88177, 88211, - 88223, 88237, 88259, 88289, 88301, 88321, 88327, - 88337, 88379, 88397, 88411, 88423, 88463, 88469, - 88493, 88499, 88513, 88523, 88547, 88589, 88607, - 88643, 88651, 88657, 88663, 88681, 88721, 88729, - 88741, 88747, 88771, 88789, 88799, 88807, 88813, - 88819, 88843, 88853, 88861, 88867, 88873, 88883, - 88897, 88903, 88919, 88937, 88951, 88969, 88993, - 89003, 89009, 89017, 89041, 89051, 89057, 89069, - 89083, 89101, 89107, 89113, 89119, 89137, 89153, - 89189, 89203, 89209, 89227, 89237, 89261, 89269, - 89293, 89303, 89317, 89329, 89363, 89371, 89381, - 89387, 89393, 89399, 89413, 89431, 89443, 89449, - 89459, 89477, 89491, 89501, 89513, 89519, 89527, - 89533, 89561, 89567, 89591, 89597, 89603, 89611, - 89627, 89633, 89653, 89659, 89669, 89681, 89689, - 89753, 89759, 89767, 89779, 89797, 89809, 89819, - 89833, 89839, 89849, 89867, 89891, 89897, 89909, - 89917, 89923, 89939, 89959, 89977, 89983, 89989, - 90001, 90007, 90017, 90023, 90031, 90053, 90059, - 90067, 90073, 90089, 90107, 90121, 90127, 90149, - 90163, 90173, 90187, 90197, 90203, 90217, 90227, - 90239, 90247, 90263, 90271, 90281, 90289, 90313, - 90353, 90359, 90371, 90379, 90397, 90403, 90437, - 90469, 90481, 90499, 90511, 90523, 90529, 90547, - 90583, 90599, 90617, 90631, 90641, 90647, 90659, - 90677, 90697, 90703, 90709, 90731, 90749, 90787, - 90793, 90803, 90821, 90833, 90841, 90847, 90863, - 90887, 90901, 90907, 90917, 90931, 90947, 90971, - 90977, 90989, 90997, 91009, 91019, 91033, 91079, - 91097, 91121, 91127, 91139, 91151, 91159, 91183, - 91193, 91199, 91229, 91237, 91243, 91249, 91283, - 91291, 91297, 91303, 91309, 91331, 91367, 91373, - 91381, 91387, 91393, 91411, 91423, 91433, 91453, - 91459, 91493, 91499, 91513, 91529, 91541, 91571, - 91577, 91583, 91591, 91621, 91631, 91639, 91673, - 91691, 91703, 91711, 91733, 91753, 91771, 91781, - 91801, 91807, 91813, 91823, 91837, 91867, 91873, - 91909, 91921, 91939, 91951, 91957, 91967, 91997, - 92003, 92009, 92033, 92041, 92051, 92077, 92083, - 92107, 92119, 92143, 92153, 92173, 92179, 92189, - 92203, 92219, 92227, 92233, 92243, 92251, 92269, - 92297, 92311, 92317, 92333, 92347, 92353, 92363, - 92369, 92377, 92383, 92399, 92413, 92419, 92431, - 92459, 92467, 92479, 92489, 92503, 92551, 92557, - 92567, 92581, 92593, 92623, 92639, 92647, 92657, - 92669, 92681, 92693, 92699, 92707, 92717, 92723, - 92737, 92753, 92761, 92767, 92779, 92789, 92801, - 92809, 92821, 92831, 92849, 92857, 92863, 92893, - 92899, 92921, 92927, 92941, 92951, 92957, 92987, - 92993, 93001, 93047, 93053, 93059, 93077, 93083, - 93089, 93097, 93103, 93113, 93131, 93139, 93151, - 93169, 93179, 93187, 93199, 93229, 93239, 93251, - 93257, 93263, 93281, 93287, 93307, 93319, 93329, - 93337, 93371, 93377, 93383, 93407, 93419, 93427, - 93463, 93479, 93487, 93493, 93503, 93523, 93529, - 93553, 93559, 93581, 93601, 93607, 93629, 93637, - 93683, 93701, 93719, 93739, 93761, 93787, 93809, - 93827, 93851, 93871, 93887, 93893, 93901, 93911, - 93923, 93937, 93949, 93967, 93979, 93997, 94007, - 94033, 94049, 94057, 94063, 94079, 94099, 94109, - 94117, 94151, 94169, 94201, 94207, 94219, 94229, - 94253, 94261, 94273, 94291, 94307, 94321, 94327, - 94343, 94349, 94379, 94397, 94421, 94427, 94433, - 94439, 94447, 94463, 94477, 94483, 94513, 94529, - 94541, 94547, 94559, 94573, 94583, 94597, 94603, - 94613, 94621, 94649, 94687, 94693, 94709, 94723, - 94747, 94771, 94777, 94789, 94811, 94819, 94837, - 94847, 94873, 94889, 94903, 94933, 94949, 94961, - 94993, 94999, 95009, 95021, 95027, 95063, 95071, - 95083, 95089, 95101, 95107, 95131, 95143, 95153, - 95177, 95189, 95203, 95213, 95219, 95231, 95239, - 95257, 95267, 95273, 95279, 95287, 95311, 95317, - 95327, 95339, 95369, 95383, 95393, 95401, 95413, - 95419, 95429, 95441, 95461, 95467, 95479, 95507, - 95527, 95539, 95549, 95561, 95569, 95581, 95597, - 95603, 95617, 95629, 95651, 95701, 95707, 95713, - 95723, 95731, 95737, 95747, 95773, 95783, 95789, - 95801, 95813, 95819, 95857, 95869, 95881, 95891, - 95911, 95917, 95923, 95929, 95947, 95957, 95971, - 95987, 96001, 96013, 96043, 96053, 96059, 96079, - 96097, 96137, 96149, 96157, 96167, 96179, 96199, - 96211, 96221, 96233, 96259, 96269, 96281, 96289, - 96323, 96329, 96337, 96353, 96377, 96401, 96419, - 96431, 96443, 96451, 96457, 96469, 96479, 96487, - 96493, 96517, 96527, 96553, 96581, 96587, 96601, - 96643, 96661, 96667, 96697, 96703, 96731, 96737, - 96749, 96757, 96763, 96769, 96779, 96787, 96797, - 96821, 96827, 96847, 96857, 96893, 96907, 96931, - 96953, 96959, 96973, 96979, 96989, 96997, 97003, - 97021, 97039, 97073, 97081, 97103, 97117, 97127, - 97151, 97157, 97169, 97177, 97187, 97213, 97231, - 97241, 97259, 97283, 97301, 97327, 97367, 97373, - 97379, 97387, 97397, 97423, 97429, 97441, 97453, - 97459, 97499, 97511, 97523, 97547, 97553, 97561, - 97571, 97577, 97583, 97607, 97613, 97649, 97673, - 97687, 97711, 97729, 97771, 97777, 97787, 97813, - 97829, 97841, 97847, 97859, 97871, 97879, 97919, - 97927, 97943, 97961, 97967, 97973, 97987, 98009, - 98017, 98041, 98047, 98057, 98081, 98101, 98123, - 98129, 98143, 98179, 98207, 98213, 98221, 98227, - 98251, 98257, 98269, 98297, 98317, 98323, 98347, - 98369, 98377, 98387, 98407, 98419, 98429, 98443, - 98453, 98459, 98467, 98473, 98479, 98491, 98507, - 98519, 98533, 98543, 98561, 98573, 98597, 98621, - 98627, 98639, 98663, 98669, 98689, 98711, 98717, - 98729, 98737, 98773, 98779, 98801, 98807, 98837, - 98849, 98867, 98873, 98887, 98893, 98899, 98909, - 98927, 98939, 98947, 98953, 98963, 98981, 98993, - 98999, 99013, 99023, 99041, 99053, 99079, 99089, - 99103, 99109, 99119, 99131, 99137, 99149, 99173, - 99181, 99191, 99223, 99233, 99241, 99251, 99257, - 99277, 99289, 99317, 99347, 99367, 99377, 99391, - 99397, 99409, 99431, 99439, 99469, 99487, 99497, - 99523, 99529, 99551, 99559, 99571, 99577, 99607, - 99623, 99643, 99661, 99667, 99679, 99689, 99707, - 99713, 99719, 99733, 99761, 99767, 99787, 99793, - 99809, 99817, 99823, 99829, 99839, 99859, 99871, - 99877, 99901, 99907, 99923, 99929, 99961, 99971, - 99989, 100003, 100019, 100043, 100049, 100057, 100069, - 100103, 100109, 100129, 100151, 100169, 100183, 100189, - 100207, 100213, 100237, 100267, 100279, 100291, 100297, - 100313, 100333, 100343, 100357, 100363, 100379, 100391, - 100403, 100411, 100417, 100447, 100459, 100469, 100483, - 100493, 100501, 100511, 100517, 100523, 100537, 100547, - 100559, 100591, 100609, 100621, 100649, 100669, 100693, - 100699, 100733, 100741, 100747, 100769, 100787, 100799, - 100811, 100823, 100829, 100847, 100853, 100907, 100913, - 100927, 100937, 100943, 100957, 100981, 100987, 100999, - 101009, 101021, 101027, 101051, 101063, 101081, 101089, - 101107, 101113, 101119, 101141, 101149, 101159, 101173, - 101183, 101197, 101203, 101209, 101221, 101267, 101273, - 101279, 101287, 101293, 101323, 101333, 101341, 101347, - 101359, 101377, 101383, 101399, 101411, 101419, 101429, - 101449, 101467, 101477, 101483, 101489, 101501, 101513, - 101527, 101533, 101561, 101573, 101581, 101599, 101611, - 101627, 101641, 101653, 101663, 101681, 101693, 101701, - 101719, 101737, 101747, 101771, 101789, 101797, 101807, - 101833, 101839, 101863, 101869, 101879, 101891, 101917, - 101929, 101939, 101957, 101963, 101977, 101987, 101999, - 102013, 102019, 102031, 102043, 102059, 102071, 102077, - 102101, 102107, 102121, 102139, 102149, 102161, 102181, - 102191, 102197, 102203, 102217, 102229, 102241, 102251, - 102259, 102293, 102299, 102317, 102329, 102337, 102359, - 102367, 102397, 102407, 102433, 102451, 102461, 102481, - 102497, 102503, 102523, 102533, 102539, 102547, 102559, - 102587, 102593, 102607, 102643, 102653, 102667, 102673, - 102679, 102701, 102761, 102769, 102793, 102811, 102829, - 102841, 102859, 102871, 102877, 102911, 102929, 102953, - 102967, 102983, 103001, 103007, 103043, 103049, 103067, - 103079, 103087, 103093, 103099, 103123, 103141, 103171, - 103177, 103183, 103217, 103231, 103237, 103289, 103307, - 103319, 103333, 103349, 103357, 103387, 103393, 103399, - 103409, 103421, 103451, 103457, 103471, 103483, 103511, - 103529, 103549, 103561, 103567, 103573, 103583, 103591, - 103613, 103619, 103643, 103651, 103657, 103669, 103681, - 103687, 103699, 103723, 103769, 103787, 103801, 103811, - 103837, 103843, 103867, 103889, 103903, 103913, 103919, - 103951, 103963, 103969, 103979, 103991, 103997, 104003, - 104009, 104021, 104033, 104047, 104053, 104059, 104087, - 104107, 104113, 104119, 104147, 104161, 104173, 104179, - 104207, 104231, 104239, 104281, 104287, 104297, 104309, - 104323, 104347, 104369, 104381, 104393, 104399, 104417, - 104459, 104471, 104479, 104491, 104513, 104527, 104537, - 104543, 104549, 104561, 104579, 104593, 104623, 104639, - 104651, 104659, 104677, 104683, 104693, 104701, 104707, - 104717, 104723, 104729, 104743, 104759, 104773, 104779, - 104789, 104801, 104827, 104849, 104869, 104879, 104891, - 104911, 104917, 104933, 104947, 104953, 104959, 104971, - 104987, 104999, 105019, 105031, 105037, 105071, 105097, - 105107, 105137, 105143, 105167, 105173, 105199, 105211, - 105227, 105239, 105251, 105263, 105269, 105277, 105319, - 105331, 105337, 105359, 105367, 105373, 105379, 105389, - 105397, 105407, 105437, 105449, 105467, 105491, 105499, - 105509, 105517, 105527, 105533, 105541, 105557, 105563, - 105601, 105607, 105613, 105619, 105649, 105667, 105673, - 105683, 105691, 105701, 105727, 105733, 105751, 105761, - 105767, 105817, 105829, 105863, 105871, 105883, 105899, - 105907, 105913, 105929, 105943, 105953, 105967, 105977, - 105983, 105997, 106013, 106019, 106031, 106087, 106103, - 106109, 106121, 106129, 106163, 106181, 106187, 106207, - 106213, 106219, 106243, 106261, 106273, 106279, 106291, - 106297, 106303, 106319, 106331, 106349, 106357, 106363, - 106373, 106391, 106397, 106411, 106417, 106427, 106433, - 106441, 106451, 106487, 106501, 106531, 106537, 106543, - 106591, 106619, 106627, 106637, 106649, 106657, 106663, - 106669, 106681, 106693, 106699, 106721, 106727, 106739, - 106747, 106753, 106759, 106781, 106787, 106801, 106823, - 106853, 106859, 106867, 106877, 106903, 106921, 106937, - 106949, 106957, 106963, 106979, 106993, 107021, 107033, - 107053, 107069, 107077, 107089, 107099, 107119, 107137, - 107171, 107183, 107197, 107209, 107227, 107243, 107251, - 107269, 107279, 107309, 107323, 107339, 107347, 107357, - 107377, 107441, 107449, 107467, 107473, 107507, 107563, - 107581, 107599, 107609, 107621, 107641, 107647, 107671, - 107687, 107693, 107699, 107713, 107719, 107741, 107747, - 107761, 107773, 107791, 107827, 107837, 107843, 107857, - 107867, 107873, 107881, 107897, 107903, 107923, 107941, - 107951, 107971, 107981, 107999, 108007, 108013, 108023, - 108037, 108061, 108079, 108089, 108107, 108127, 108139, - 108161, 108179, 108187, 108193, 108203, 108211, 108217, - 108223, 108233, 108247, 108263, 108271, 108287, 108293, - 108301, 108343, 108359, 108377, 108401, 108413, 108421, - 108439, 108457, 108463, 108497, 108503, 108517, 108529, - 108541, 108553, 108571, 108587, 108631, 108637, 108643, - 108649, 108677, 108707, 108727, 108739, 108751, 108761, - 108769, 108791, 108799, 108821, 108827, 108863, 108869, - 108877, 108883, 108893, 108907, 108917, 108923, 108929, - 108943, 108949, 108959, 108967, 108991, 109001, 109013, - 109037, 109049, 109063, 109073, 109097, 109103, 109111, - 109121, 109133, 109139, 109147, 109159, 109169, 109199, - 109211, 109229, 109253, 109267, 109279, 109297, 109303, - 109313, 109321, 109331, 109357, 109363, 109379, 109387, - 109397, 109423, 109433, 109441, 109451, 109469, 109481, - 109507, 109517, 109537, 109547, 109567, 109579, 109589, - 109597, 109609, 109619, 109639, 109661, 109673, 109717, - 109741, 109751, 109789, 109807, 109819, 109829, 109841, - 109847, 109859, 109873, 109883, 109891, 109897, 109903, - 109913, 109919, 109937, 109943, 109961, 109987, 110017, - 110023, 110039, 110051, 110059, 110069, 110083, 110119, - 110129, 110161, 110183, 110221, 110233, 110251, 110261, - 110269, 110281, 110291, 110311, 110321, 110339, 110359, - 110419, 110431, 110437, 110459, 110477, 110491, 110501, - 110527, 110533, 110543, 110557, 110563, 110569, 110581, - 110587, 110597, 110603, 110609, 110623, 110629, 110641, - 110647, 110681, 110711, 110729, 110749, 110771, 110777, - 110807, 110813, 110819, 110849, 110863, 110879, 110899, - 110909, 110917, 110923, 110933, 110939, 110947, 110969, - 110977, 110989, 111029, 111043, 111049, 111091, 111103, - 111109, 111119, 111127, 111143, 111149, 111187, 111211, - 111217, 111227, 111253, 111263, 111269, 111301, 111317, - 111323, 111337, 111347, 111373, 111409, 111427, 111439, - 111467, 111487, 111493, 111509, 111521, 111533, 111539, - 111577, 111593, 111599, 111611, 111623, 111637, 111653, - 111659, 111667, 111697, 111721, 111731, 111751, 111767, - 111773, 111779, 111791, 111799, 111821, 111827, 111833, - 111847, 111857, 111863, 111869, 111893, 111913, 111919, - 111949, 111959, 111973, 111997, 112019, 112031, 112061, - 112067, 112087, 112097, 112103, 112111, 112121, 112129, - 112139, 112153, 112163, 112181, 112199, 112207, 112213, - 112223, 112237, 112247, 112253, 112261, 112279, 112289, - 112297, 112303, 112327, 112337, 112349, 112361, 112397, - 112403, 112429, 112459, 112481, 112501, 112507, 112543, - 112559, 112571, 112577, 112583, 112589, 112601, 112621, - 112643, 112657, 112663, 112687, 112741, 112757, 112771, - 112787, 112799, 112807, 112831, 112843, 112859, 112877, - 112901, 112909, 112919, 112927, 112939, 112951, 112967, - 112979, 112997, 113011, 113017, 113023, 113039, 113051, - 113063, 113081, 113089, 113111, 113117, 113123, 113131, - 113143, 113149, 113159, 113167, 113173, 113189, 113209, - 113227, 113233, 113279, 113287, 113327, 113341, 113357, - 113363, 113371, 113381, 113417, 113437, 113453, 113467, - 113489, 113497, 113513, 113537, 113557, 113567, 113591, - 113621, 113647, 113657, 113683, 113717, 113723, 113731, - 113749, 113759, 113777, 113783, 113797, 113809, 113819, - 113837, 113843, 113891, 113899, 113909, 113921, 113933, - 113947, 113957, 113963, 113969, 113983, 113989, 114001, - 114013, 114031, 114041, 114067, 114073, 114083, 114089, - 114113, 114143, 114157, 114167, 114193, 114199, 114217, - 114229, 114259, 114269, 114277, 114299, 114311, 114319, - 114329, 114343, 114371, 114377, 114407, 114419, 114451, - 114467, 114473, 114479, 114487, 114493, 114547, 114553, - 114571, 114577, 114593, 114599, 114613, 114641, 114649, - 114659, 114671, 114679, 114689, 114713, 114743, 114749, - 114757, 114769, 114781, 114797, 114809, 114827, 114833, - 114847, 114859, 114883, 114889, 114901, 114913, 114941, - 114967, 114973, 114997, 115013, 115019, 115057, 115067, - 115079, 115099, 115117, 115123, 115133, 115151, 115163, - 115183, 115201, 115211, 115223, 115237, 115249, 115259, - 115279, 115301, 115309, 115319, 115327, 115337, 115343, - 115361, 115399, 115421, 115429, 115459, 115469, 115499, - 115513, 115523, 115547, 115553, 115561, 115571, 115589, - 115597, 115603, 115613, 115631, 115637, 115657, 115663, - 115679, 115693, 115727, 115733, 115741, 115751, 115757, - 115763, 115769, 115777, 115783, 115793, 115807, 115823, - 115831, 115837, 115849, 115859, 115873, 115879, 115891, - 115901, 115931, 115963, 115979, 115987, 116009, 116027, - 116041, 116047, 116089, 116099, 116107, 116113, 116131, - 116141, 116159, 116167, 116177, 116189, 116201, 116239, - 116257, 116269, 116279, 116293, 116329, 116341, 116351, - 116359, 116371, 116381, 116387, 116411, 116423, 116437, - 116443, 116461, 116471, 116483, 116491, 116507, 116531, - 116537, 116549, 116579, 116593, 116639, 116657, 116663, - 116681, 116687, 116707, 116719, 116731, 116741, 116747, - 116789, 116797, 116803, 116819, 116827, 116833, 116849, - 116867, 116881, 116903, 116911, 116923, 116929, 116953, - 116959, 116969, 116981, 116989, 117017, 117023, 117037, - 117043, 117053, 117071, 117101, 117109, 117119, 117127, - 117133, 117163, 117191, 117203, 117209, 117223, 117239, - 117251, 117259, 117269, 117281, 117307, 117319, 117329, - 117353, 117361, 117371, 117389, 117413, 117427, 117437, - 117443, 117497, 117503, 117511, 117517, 117529, 117539, - 117563, 117571, 117577, 117617, 117643, 117659, 117671, - 117679, 117701, 117709, 117721, 117727, 117751, 117757, - 117763, 117773, 117779, 117787, 117797, 117809, 117833, - 117839, 117851, 117877, 117883, 117889, 117899, 117911, - 117917, 117937, 117959, 117973, 117979, 117989, 118033, - 118043, 118051, 118057, 118081, 118093, 118127, 118147, - 118163, 118169, 118189, 118211, 118219, 118247, 118253, - 118259, 118273, 118297, 118343, 118361, 118369, 118387, - 118399, 118409, 118423, 118429, 118453, 118463, 118471, - 118493, 118529, 118543, 118549, 118571, 118583, 118589, - 118603, 118619, 118633, 118661, 118669, 118681, 118687, - 118709, 118717, 118739, 118747, 118757, 118787, 118799, - 118819, 118831, 118843, 118861, 118873, 118891, 118897, - 118903, 118913, 118927, 118967, 118973, 119027, 119033, - 119039, 119047, 119057, 119069, 119083, 119089, 119099, - 119107, 119129, 119159, 119173, 119179, 119191, 119227, - 119233, 119243, 119267, 119291, 119297, 119311, 119321, - 119359, 119389, 119417, 119429, 119447, 119489, 119503, - 119513, 119533, 119549, 119557, 119563, 119569, 119591, - 119611, 119617, 119627, 119633, 119653, 119659, 119671, - 119677, 119687, 119699, 119723, 119737, 119747, 119759, - 119771, 119783, 119797, 119809, 119827, 119839, 119849, - 119869, 119881, 119891, 119921, 119929, 119953, 119963, - 119971, 119981, 119993, 120011, 120017, 120041, 120047, - 120067, 120077, 120091, 120097, 120103, 120121, 120157, - 120163, 120181, 120193, 120199, 120209, 120223, 120233, - 120247, 120277, 120283, 120293, 120299, 120319, 120331, - 120349, 120371, 120383, 120391, 120397, 120413, 120427, - 120473, 120503, 120511, 120539, 120551, 120557, 120563, - 120569, 120577, 120587, 120607, 120619, 120641, 120647, - 120661, 120671, 120677, 120689, 120709, 120721, 120737, - 120749, 120763, 120779, 120811, 120817, 120823, 120829, - 120847, 120863, 120871, 120877, 120889, 120899, 120907, - 120917, 120929, 120937, 120943, 120977, 120997, 121007, - 121013, 121019, 121039, 121061, 121067, 121081, 121123, - 121139, 121151, 121157, 121169, 121181, 121189, 121229, - 121259, 121267, 121283, 121291, 121309, 121321, 121327, - 121333, 121343, 121349, 121357, 121367, 121379, 121403, - 121421, 121439, 121447, 121453, 121469, 121487, 121493, - 121501, 121507, 121523, 121531, 121547, 121553, 121559, - 121571, 121577, 121591, 121607, 121621, 121631, 121637, - 121661, 121687, 121697, 121711, 121721, 121727, 121763, - 121787, 121843, 121853, 121867, 121883, 121889, 121909, - 121921, 121931, 121937, 121949, 121963, 121993, 122011, - 122021, 122027, 122033, 122039, 122051, 122069, 122081, - 122099, 122117, 122131, 122147, 122167, 122173, 122201, - 122207, 122219, 122231, 122251, 122263, 122273, 122279, - 122299, 122321, 122327, 122347, 122363, 122387, 122393, - 122399, 122443, 122449, 122471, 122477, 122489, 122497, - 122503, 122509, 122527, 122533, 122557, 122579, 122597, - 122609, 122651, 122663, 122693, 122701, 122719, 122741, - 122753, 122761, 122777, 122789, 122819, 122827, 122833, - 122839, 122849, 122861, 122867, 122887, 122921, 122929, - 122939, 122953, 122963, 122971, 123001, 123007, 123017, - 123031, 123049, 123059, 123077, 123083, 123091, 123113, - 123121, 123127, 123143, 123169, 123191, 123203, 123209, - 123217, 123229, 123239, 123259, 123269, 123289, 123307, - 123323, 123341, 123373, 123379, 123397, 123407, 123419, - 123427, 123433, 123439, 123449, 123457, 123479, 123491, - 123499, 123517, 123527, 123547, 123553, 123581, 123593, - 123601, 123619, 123631, 123637, 123653, 123661, 123667, - 123677, 123701, 123707, 123719, 123727, 123733, 123757, - 123787, 123803, 123817, 123829, 123853, 123863, 123887, - 123911, 123923, 123931, 123941, 123953, 123973, 123979, - 123989, 123997, 124021, 124067, 124087, 124097, 124121, - 124133, 124139, 124147, 124153, 124171, 124181, 124193, - 124199, 124213, 124231, 124247, 124277, 124291, 124297, - 124303, 124309, 124337, 124343, 124349, 124363, 124427, - 124433, 124447, 124459, 124471, 124477, 124489, 124513, - 124529, 124541, 124561, 124567, 124577, 124601, 124633, - 124643, 124669, 124679, 124693, 124699, 124717, 124739, - 124753, 124759, 124769, 124777, 124783, 124793, 124799, - 124819, 124847, 124853, 124897, 124907, 124919, 124951, - 124979, 124987, 125003, 125017, 125029, 125053, 125063, - 125093, 125101, 125107, 125113, 125119, 125131, 125141, - 125149, 125183, 125197, 125207, 125219, 125231, 125243, - 125261, 125269, 125287, 125299, 125311, 125329, 125339, - 125353, 125371, 125383, 125399, 125407, 125423, 125429, - 125441, 125453, 125471, 125497, 125507, 125527, 125539, - 125551, 125591, 125597, 125617, 125627, 125639, 125651, - 125659, 125669, 125683, 125693, 125707, 125717, 125731, - 125737, 125743, 125753, 125777, 125789, 125803, 125813, - 125821, 125863, 125887, 125897, 125921, 125927, 125933, - 125941, 125959, 126001, 126011, 126019, 126031, 126037, - 126047, 126067, 126079, 126097, 126107, 126127, 126143, - 126151, 126173, 126199, 126211, 126223, 126229, 126241, - 126257, 126271, 126307, 126317, 126323, 126337, 126349, - 126359, 126397, 126421, 126433, 126443, 126457, 126473, - 126481, 126487, 126493, 126499, 126517, 126541, 126547, - 126583, 126601, 126611, 126631, 126641, 126653, 126683, - 126691, 126703, 126713, 126719, 126733, 126739, 126751, - 126757, 126781, 126823, 126839, 126851, 126857, 126913, - 126923, 126943, 126949, 126961, 126967, 126989, 127031, - 127037, 127051, 127079, 127103, 127123, 127133, 127139, - 127157, 127163, 127189, 127207, 127217, 127241, 127247, - 127261, 127271, 127277, 127289, 127297, 127321, 127331, - 127343, 127363, 127373, 127399, 127423, 127447, 127453, - 127481, 127487, 127493, 127507, 127529, 127541, 127549, - 127579, 127591, 127597, 127607, 127637, 127643, 127649, - 127657, 127663, 127669, 127679, 127691, 127703, 127709, - 127717, 127727, 127733, 127739, 127747, 127763, 127781, - 127807, 127817, 127837, 127843, 127849, 127859, 127867, - 127873, 127913, 127921, 127931, 127951, 127973, 127979, - 127997, 128021, 128033, 128047, 128053, 128099, 128111, - 128119, 128147, 128153, 128159, 128173, 128189, 128201, - 128213, 128221, 128237, 128257, 128273, 128287, 128311, - 128321, 128327, 128339, 128347, 128377, 128389, 128399, - 128411, 128431, 128437, 128449, 128461, 128467, 128473, - 128483, 128489, 128509, 128519, 128549, 128563, 128591, - 128599, 128621, 128629, 128657, 128663, 128669, 128677, - 128683, 128693, 128717, 128747, 128761, 128767, 128813, - 128819, 128831, 128837, 128857, 128873, 128879, 128903, - 128923, 128939, 128951, 128959, 128969, 128981, 128987, - 128993, 129001, 129011, 129023, 129037, 129049, 129061, - 129083, 129089, 129097, 129113, 129119, 129127, 129169, - 129187, 129193, 129209, 129221, 129229, 129263, 129277, - 129287, 129293, 129313, 129341, 129347, 129361, 129379, - 129401, 129419, 129439, 129449, 129457, 129469, 129491, - 129497, 129509, 129517, 129527, 129533, 129539, 129553, - 129581, 129587, 129593, 129607, 129629, 129641, 129671, - 129707, 129719, 129733, 129749, 129757, 129763, 129769, - 129793, 129803, 129841, 129853, 129887, 129893, 129901, - 129917, 129937, 129953, 129959, 129967, 130003, 130021, - 130027, 130043, 130051, 130057, 130069, 130079, 130087, - 130099, 130121, 130127, 130147, 130171, 130183, 130199, - 130211, 130223, 130241, 130253, 130259, 130267, 130279, - 130303, 130337, 130343, 130349, 130363, 130369, 130379, - 130399, 130409, 130423, 130439, 130447, 130457, 130469, - 130477, 130483, 130489, 130513, 130523, 130531, 130547, - 130553, 130579, 130589, 130619, 130631, 130639, 130649, - 130657, 130681, 130687, 130693, 130699, 130729, 130769, - 130783, 130807, 130817, 130829, 130841, 130859, 130873, - 130927, 130957, 130969, 130981, 130987, 131009, 131023, - 131041, 131059, 131071, 131101, 262187, 393271, 524347, - 655439, 786547, 917629, 1048703, 1179779, 1310851, 1441931, - 1573009, 1704103, 1835177, 1966259, 2097349, 2228423, 2359499, - 2490583, 2621669, 2752787, 2883887, 3014981, 3146069, 3277181, - 3408259, 3539359, 3670463, 3801541, 3932633, 4063711, 4194793, - 4325873, 4456951, 4588099, 4719181, 4850273, 4981349, 5112421, - 5243501, 5374573, 5505653, 5636731, 5767841, 5898931, 6030023, - 6161107, 6292201, 6423281, 6554357, 6685447, 6816527, 6947609, - 7078693, 7209779, 7340867, 7471939, 7603027, 7734119, 7865257, - 7996333, 8127409, 8258489, 8389567, 8520647, 8651723, 8782817, - 8913889, 9044977, 9176053, 9307127, 9438203, 9569299, 9700381, - 9831461, 9962567, 10093639, 10224743, 10355843, 10486921, 10618007, - 10749107, 10880201, 11011283, 11142359, 11273443, 11404529, 11535607, - 11666689, 11797771, 11928853, 12059939, 12191021, 12322109, 12453191, - 12584263, 12715379, 12846473, 12977597, 13108681, 13239757, 13370831, - 13501919, 13633001, 13764083, 13895159, 14026267, 14157371, 14288447, - 14419523, 14550611, 14681701, 14812781, 14943857, 15074929, 15206021, - 15337141, 15468227, 15599329, 15730417, 15861499, 15992573, 16123649, - 16254743, 16385819, 16516919, 16647991, 16779151, 16910227, 17041301, - 17172377, 17303453, 17434541, 17565649, 17696741, 17827847, 17958931, - 18090031, 18221123, 18352199, 18483271, 18614347, 18745429, 18876503, - 19007579, 19138661, 19269739, 19400819, 19531903, 19663003, 19794083, - 19925161, 20056247, 20187319, 20318399, 20449483, 20580563, 20711641, - 20842721, 20973793, 21104879, 21235979, 21367061, 21498133, 21629207, - 21760303, 21891391, 22022467, 22153543, 22284623, 22415699, 22546789, - 22677869, 22808941, 22940053, 23071129, 23202203, 23333279, 23464367, - 23595449, 23726539, 23857621, 23988707, 24119779, 24250861, 24381937, - 24513017, 24644107, 24775187, 24906281, 25037357, 25168439, 25299551, - 25430641, 25561729, 25692803, 25823881, 25954961, 26086043, 26217119, - 26348191, 26479267, 26610347, 26741431, 26872511, 27003583, 27134659, - 27265751, 27396833, 27527939, 27659033, 27790127, 27921217, 28052291, - 28183369, 28314457, 28445533, 28576619, 28707737, 28838809, 28969891, - 29100979, 29232143, 29363221, 29494313, 29625391, 29756483, 29887573, - 30018647, 30149723, 30280801, 30411893, 30542971, 30674047, 30805123, - 30936197, 31067269, 31198367, 31329439, 31460537, 31591649, 31722721, - 31853797, 31984891, 32115971, 32247049, 32378131, 32509223, 32640301, - 32771443, 32902517, 33033593, 33164683, 33295763, 33426851, 33557941, - 33689041, 33820141, 33951221, 34082303, 34213391, 34344463, 34475537, - 34606609, 34737721, 34868807, 34999879, 35130971, 35262047, 35393123, - 35524207, 35655283, 35786357, 35917487, 36048599, 36179699, 36310823, - 36441919, 36572999, 36704099, 36835187, 36966277, 37097353, 37228447, - 37359547, 37490623, 37621733, 37752851, 37883941, 38015039, 38146127, - 38277241, 38408317, 38539399, 38670473, 38801569, 38932651, 39063727, - 39194833, 39325933, 39457009, 39588091, 39719221, 39850303, 39981397, - 40112491, 40243579, 40374671, 40505789, 40636861, 40767953, 40899031, - 41030111, 41161187, 41292287, 41423399, 41554493, 41685577, 41816653, - 41947727, 42078809, 42209897, 42340979, 42472061, 42603161, 42734267, - 42865357, 42996463, 43127543, 43258619, 43389691, 43520777, 43651859, - 43782967, 43914041, 44045119, 44176201, 44307281, 44438363, 44569453, - 44700527, 44831653, 44962727, 45093833, 45225013, 45356089, 45487187, - 45618263, 45749387, 45880463, 46011547, 46142639, 46273727, 46404811, - 46535887, 46666973, 46798079, 46929161, 47060261, 47191343, 47322419, - 47453491, 47584601, 47715673, 47846759, 47977841, 48108937, 48240011, - 48371107, 48502187, 48633259, 48764351, 48895453, 49026533, 49157611, - 49288703, 49419781, 49550861, 49681943, 49813019, 49944121, 50075213, - 50206333, 50337407, 50468491, 50599567, 50730643, 50861719, 50992813, - 51123887, 51254969, 51386059, 51517159, 51648239, 51779311, 51910403, - 52041491, 52172563, 52303663, 52434757, 52565831, 52696921, 52828003, - 52959103, 53090207, 53221283, 53352367, 53483483, 53614559, 53745631, - 53876731, 54007819, 54138899, 54269977, 54401051, 54532129, 54663239, - 54794317, 54925411, 55056493, 55187567, 55318639, 55449721, 55580807, - 55711879, 55843013, 55974097, 56105183, 56236259, 56367373, 56498447, - 56629537, 56760643, 56891759, 57022831, 57153907, 57284989, 57416063, - 57547151, 57678307, 57809387, 57940459, 58071551, 58202647, 58333733, - 58464817, 58595897, 58726979, 58858069, 58989149, 59120221, 59251303, - 59382397, 59513471, 59644567, 59775647, 59906731, 60037823, 60168947, - 60300029, 60431167, 60562247, 60693341, 60824431, 60955513, 61086601, - 61217713, 61348787, 61479863, 61610971, 61742047, 61873157, 62004263, - 62135347, 62266433, 62397523, 62528597, 62659669, 62790769, 62921869, - 63052967, 63184061, 63315137, 63446221, 63577301, 63708391, 63839519, - 63970601, 64101673, 64232747, 64363829, 64494907, 64625983, 64757057, - 64888139, 65019211, 65150287, 65281369, 65412443, 65543603, 65674691, - 65805767, 65936851, 66067943, 66199019, 66330109, 66461189, 66592261, - 66723337, 66854419, 66985493, 67116601, 67247717, 67378793, 67509877, - 67640957, 67772039, 67903111, 68034191, 68165263, 68296337, 68427409, - 68558489, 68689561, 68820701, 68951789, 69082873, 69213959, 69345071, - 69476189, 69607273, 69738373, 69869447, 70000549, 70131629, 70262701, - 70393789, 70524869, 70655947, 70787039, 70918121, 71049229, 71180303, - 71311381, 71442461, 71573563, 71704637, 71835719, 71966819, 72097891, - 72228973, 72360053, 72491143, 72622219, 72753323, 72884407, 73015531, - 73146643, 73277741, 73408859, 73539959, 73671067, 73802149, 73933231, - 74064307, 74195383, 74326463, 74457563, 74588653, 74719727, 74850803, - 74981891, 75112979, 75244079, 75375191, 75506269, 75637357, 75768457, - 75899533, 76030607, 76161719, 76292803, 76423883, 76554977, 76686059, - 76817141, 76948217, 77079319, 77210411, 77341487, 77472589, 77603663, - 77734739, 77865811, 77996903, 78128003, 78259079, 78390203, 78521293, - 78652393, 78783473, 78914557, 79045651, 79176731, 79307803, 79438907, - 79569991, 79701073, 79832147, 79963283, 80094373, 80225459, 80356531, - 80487611, 80618683, 80749763, 80880851, 81011929, 81143047, 81274121, - 81405193, 81536269, 81667343, 81798421, 81929509, 82060591, 82191671, - 82322749, 82453823, 82584913, 82715993, 82847071, 82978153, 83109241, - 83240317, 83371427, 83502509, 83633597, 83764691, 83895769, 84026851, - 84157949, 84289021, 84420101, 84551209, 84682337, 84813413, 84944501, - 85075579, 85206661, 85337737, 85468813, 85599911, 85730999, 85862081, - 85993153, 86124277, 86255353, 86386451, 86517589, 86648669, 86779753, - 86910827, 87041909, 87173029, 87304103, 87435193, 87566317, 87697403, - 87828479, 87959551, 88090627, 88221713, 88352801, 88483877, 88614949, - 88746037, 88877119, 89008207, 89139299, 89270371, 89401451, 89532533, - 89663611, 89794687, 89925811, 90056887, 90187961, 90319039, 90450119, - 90581201, 90712273, 90843349, 90974459, 91105561, 91236643, 91367723, - 91498837, 91629911, 91760983, 91892063, 92023153, 92154241, 92285321, - 92416397, 92547529, 92678603, 92809679, 92940779, 93071887, 93202979, - 93334051, 93465131, 93596219, 93727301, 93858383, 93989473, 94120553, - 94251629, 94382719, 94513807, 94644919, 94776023, 94907117, 95038193, - 95169289, 95300363, 95431451, 95562529, 95693603, 95824679, 95955787, - 96086867, 96217981, 96349067, 96480179, 96611297, 96742379, 96873451, - 97004527, 97135609, 97266683, 97397759, 97528841, 97659929, 97791017, - 97922089, 98053171, 98184253, 98315339, 98446433, 98577539, 98708627, - 98839721, 98970793, 99101921, 99233003, 99364081, 99495247, 99626321, - 99757403, 99888487, 100019567, 100150649, 100281721, 100412797, 100543873, - 100674961, 100806047, 100937119, 101068237, 101199331, 101330441, 101461519, - 101592593, 101723669, 101854843, 101985943, 102117031, 102248117, 102379213, - 102510293, 102641381, 102772469, 102903553, 103034627, 103165747, 103296821, - 103427917, 103558991, 103690091, 103821169, 103952279, 104083391, 104214479, - 104345551, 104476637, 104607709, 104738789, 104869879, 105000953, 105132031, - 105263107, 105394183, 105525281, 105656357, 105787453, 105918529, 106049639, - 106180733, 106311817, 106442893, 106573979, 106705061, 106836151, 106967233, - 107098309, 107229433, 107360537, 107491609, 107622763, 107753839, 107884913, - 108016001, 108147089, 108278173, 108409267, 108540349, 108671441, 108802517, - 108933613, 109064687, 109195763, 109326859, 109457947, 109589027, 109720099, - 109851193, 109982269, 110113349, 110244437, 110375513, 110506609, 110637689, - 110768771, 110899843, 111030923, 111162011, 111293087, 111424193, 111555281, - 111686357, 111817471, 111948581, 112079729, 112210811, 112341883, 112472957, - 112604047, 112735157, 112866263, 112997347, 113128441, 113259533, 113390623, - 113521697, 113652787, 113783861, 113914973, 114046073, 114177149, 114308251, - 114439343, 114570419, 114701491, 114832567, 114963649, 115094729, 115225819, - 115356907, 115487993, 115619071, 115750177, 115881287, 116012359, 116143459, - 116274559, 116405657, 116536733, 116667833, 116798933, 116930039, 117061141, - 117192217, 117323321, 117454433, 117585539, 117716633, 117847727, 117978803, - 118109903, 118240987, 118372063, 118503157, 118634239, 118765313, 118896403, - 119027543, 119158619, 119289721, 119420797, 119551931, 119683073, 119814151, - 119945239, 120076337, 120207463, 120338549, 120469649, 120600751, 120731837, - 120862919, 120994001, 121125073, 121256153, 121387267, 121518343, 121649441, - 121780517, 121911593, 122042671, 122173787, 122304859, 122435933, 122567009, - 122698097, 122829191, 122960273, 123091357, 123222433, 123353519, 123484597, - 123615671, 123746743, 123877823, 124008919, 124139999, 124271083, 124402171, - 124533251, 124664327, 124795403, 124926479, 125057561, 125188639, 125319713, - 125450791, 125581867, 125712947, 125844031, 125975107, 126106193, 126237289, - 126368381, 126499487, 126630583, 126761681, 126892783, 127023859, 127154939, - 127286039, 127417133, 127548227, 127679303, 127810393, 127941467, 128072551, - 128203627, 128334709, 128465791, 128596879, 128727967, 128859053, 128990129, - 129121211, 129252287, 129383363, 129514439, 129645533, 129776627, 129907709, - 130038781, 130169863, 130300943, 130432033, 130563131, 130694219, 130825333, - 130956407, 131087483, 131218561, 131349637, 131480731, 131611811, 131742893, - 131873971, 132005047, 132136157, 132267229, 132398317, 132529409, 132660509, - 132791623, 132922709, 133053799, 133184879, 133315957, 133447031, 133578119, - 133709201, 133840279, 133971353, 134102429, 134233501, 134364611, 134495693, - 134626781, 134757877, 134888953, 135020047, 135151153, 135282227, 135413339, - 135544427, 135675509, 135806597, 135937709, 136068781, 136199873, 136330949, - 136462033, 136593131, 136724207, 136855291, 136986383, 137117459, 137248543, - 137379617, 137510701, 137641781, 137772863, 137903959, 138035071, 138166207, - 138297283, 138428369, 138559441, 138690521, 138821593, 138952687, 139083787, - 139214861, 139345939, 139477033, 139608109, 139739183, 139870273, 140001349, - 140132453, 140263531, 140394623, 140525711, 140656783, 140787859, 140918957, - 141050051, 141181123, 141312203, 141443299, 141574373, 141705479, 141836551, - 141967643, 142098721, 142229807, 142360879, 142491967, 142623067, 142754149, - 142885261, 143016343, 143147437, 143278511, 143409593, 143540669, 143671751, - 143802823, 143933921, 144064993, 144196069, 144327151, 144458269, 144589387, - 144720491, 144851579, 144982679, 145113779, 145244851, 145375933, 145507027, - 145638107, 145769179, 145900283, 146031371, 146162473, 146293601, 146424679, - 146555777, 146686853, 146817941, 146949031, 147080111, 147211189, 147342269, - 147473341, 147604427, 147735521, 147866611, 147997697, 148128779, 148259933, - 148391059, 148522139, 148653221, 148784327, 148915399, 149046473, 149177573, - 149308651, 149439733, 149570807, 149701879, 149832959, 149964043, 150095123, - 150226207, 150357287, 150488381, 150619453, 150750539, 150881659, 151012747, - 151143829, 151274923, 151406083, 151537187, 151668269, 151799353, 151930451, - 152061523, 152192597, 152323669, 152454751, 152585833, 152716909, 152848013, - 152979103, 153110179, 153241259, 153372337, 153503411, 153634487, 153765559, - 153896651, 154027751, 154158841, 154289917, 154421023, 154552109, 154683209, - 154814281, 154945363, 155076469, 155207543, 155338649, 155469733, 155600807, - 155731889, 155862977, 155994071, 156125143, 156256223, 156387299, 156518377, - 156649457, 156780529, 156911603, 157042681, 157173763, 157304839, 157435913, - 157566989, 157698077, 157829171, 157960259, 158091337, 158222411, 158353483, - 158484569, 158615651, 158746727, 158877799, 159008879, 159139951, 159271033, - 159402107, 159533183, 159664279, 159795367, 159926441, 160057519, 160188607, - 160319689, 160450781, 160581931, 160713023, 160844111, 160975189, 161106277, - 161237357, 161368439, 161499517, 161630627, 161761729, 161892847, 162023921, - 162155087, 162286177, 162417251, 162548341, 162679421, 162810497, 162941573, - 163072711, 163203797, 163334893, 163465979, 163597051, 163728167, 163859263, - 163990357, 164121437, 164252513, 164383601, 164514677, 164645749, 164776847, - 164907943, 165039037, 165170129, 165301333, 165432409, 165563483, 165694559, - 165825631, 165956723, 166087819, 166218901, 166349983, 166481057, 166612169, - 166743251, 166874339, 167005417, 167136499, 167267587, 167398681, 167529757, - 167660833, 167791913, 167923031, 168054113, 168185189, 168316283, 168447379, - 168578471, 168709543, 168840643, 168971717, 169102811, 169233899, 169364983, - 169496057, 169627187, 169758283, 169889359, 170020447, 170151547, 170282633, - 170413757, 170544841, 170675929, 170807003, 170938081, 171069161, 171200233, - 171331337, 171462427, 171593507, 171724589, 171855689, 171986783, 172117879, - 172248961, 172380053, 172511137, 172642219, 172773301, 172904387, 173035481, - 173166557, 173297647, 173428721, 173559797, 173690927, 173822029, 173953123, - 174084221, 174215297, 174346369, 174477451, 174608543, 174739627, 174870719, - 175001803, 175132883, 175263973, 175395053, 175526149, 175657249, 175788329, - 175919411, 176050493, 176181617, 176312701, 176443777, 176574859, 176705951, - 176837029, 176968153, 177099253, 177230351, 177361439, 177492551, 177623627, - 177754711, 177885793, 178016887, 178147967, 178279093, 178410173, 178541263, - 178672369, 178803451, 178934527, 179065609, 179196701, 179327783, 179458859, - 179589937, 179721013, 179852087, 179983169, 180114257, 180245371, 180376453, - 180507533, 180638639, 180769717, 180900793, 181031899, 181162987, 181294097, - 181425187, 181556261, 181687333, 181818409, 181949489, 182080567, 182211641, - 182342717, 182473799, 182604883, 182735983, 182867059, 182998147, 183129227, - 183260299, 183391421, 183522499, 183653621, 183784693, 183915779, 184046867, - 184177943, 184309033, 184440133, 184571213, 184702291, 184833409, 184964503, - 185095577, 185226653, 185357743, 185488847, 185619979, 185751073, 185882161, - 186013273, 186144353, 186275431, 186406531, 186537623, 186668707, 186799799, - 186930907, 187062019, 187193099, 187324171, 187455337, 187586417, 187717499, - 187848581, 187979657, 188110751, 188241847, 188372959, 188504053, 188635133, - 188766251, 188897333, 189028417, 189159511, 189290587, 189421669, 189552743, - 189683843, 189814951, 189946033, 190077109, 190208203, 190339277, 190470361, - 190601459, 190732547, 190863623, 190994723, 191125799, 191256893, 191387971, - 191519047, 191650133, 191781209, 191912317, 192043403, 192174517, 192305591, - 192436703, 192567821, 192698917, 192829991, 192961063, 193092139, 193223221, - 193354303, 193485403, 193616539, 193747627, 193878703, 194009791, 194140873, - 194271949, 194403031, 194534113, 194665187, 194796299, 194927399, 195058489, - 195189571, 195320647, 195451721, 195582797, 195713873, 195844967, 195976043, - 196107161, 196238233, 196369319, 196500407, 196631509, 196762591, 196893703, - 197024791, 197155873, 197286959, 197418047, 197549119, 197680201, 197811277, - 197942351, 198073427, 198204511, 198335597, 198466673, 198597769, 198728857, - 198859943, 198991019, 199122137, 199253237, 199384321, 199515397, 199646519, - 199777601, 199908691, 200039789, 200170889, 200301961, 200433059, 200564149, - 200695237, 200826337, 200957411, 201088487, 201219563, 201350641, 201481717, - 201612791, 201743909, 201875027, 202006117, 202137193, 202268291, 202399363, - 202530451, 202661549, 202792637, 202923731, 203054807, 203185889, 203316977, - 203448053, 203579171, 203710259, 203841343, 203972459, 204103553, 204234647, - 204365719, 204496849, 204627947, 204759019, 204890099, 205021171, 205152247, - 205283321, 205414409, 205545493, 205676609, 205807687, 205938779, 206069861, - 206200937, 206332031, 206463107, 206594237, 206725319, 206856409, 206987489, - 207118589, 207249667, 207380783, 207511867, 207642959, 207774031, 207905143, - 208036243, 208167317, 208298411, 208429489, 208560571, 208691647, 208822729, - 208953841, 209084929, 209216041, 209347141, 209478221, 209609293, 209740393, - 209871469, 210002567, 210133643, 210264739, 210395819, 210526903, 210657977, - 210789067, 210920167, 211051333, 211182407, 211313507, 211444609, 211575691, - 211706767, 211837841, 211968931, 212100017, 212231119, 212362201, 212493277, - 212624371, 212755481, 212886559, 213017641, 213148717, 213279797, 213410917, - 213541997, 213673079, 213804161, 213935261, 214066339, 214197419, 214328509, - 214459603, 214590797, 214721873, 214852961, 214984103, 215115217, 215246293, - 215377399, 215508479, 215639551, 215770637, 215901733, 216032819, 216163897, - 216294977, 216426079, 216557161, 216688247, 216819329, 216950423, 217081537, - 217212613, 217343689, 217474769, 217605847, 217736933, 217868023, 217999139, - 218130233, 218261321, 218392393, 218523469, 218654549, 218785649, 218916721, - 219047797, 219178871, 219309949, 219441029, 219572117, 219703193, 219834269, - 219965359, 220096451, 220227533, 220358623, 220489721, 220620793, 220751887, - 220882969, 221014049, 221145137, 221276227, 221407309, 221538391, 221669473, - 221800571, 221931649, 222062749, 222193831, 222324911, 222455983, 222587063, - 222718157, 222849239, 222980323, 223111403, 223242517, 223373593, 223504681, - 223635793, 223766887, 223897969, 224029049, 224160127, 224291233, 224422307, - 224553389, 224684477, 224815553, 224946637, 225077717, 225208793, 225339911, - 225471061, 225602149, 225733231, 225864371, 225995453, 226126531, 226257613, - 226388693, 226519861, 226650961, 226782037, 226913111, 227044189, 227175271, - 227306363, 227437447, 227568569, 227699651, 227830741, 227961821, 228092903, - 228223979, 228355051, 228486149, 228617227, 228748309, 228879383, 229010473, - 229141567, 229272649, 229403723, 229534813, 229665889, 229796971, 229928047, - 230059169, 230190269, 230321347, 230452441, 230583517, 230714591, 230845709, - 230976791, 231107867, 231238963, 231370039, 231501163, 231632237, 231763309, - 231894391, 232025471, 232156543, 232287641, 232418737, 232549859, 232680941, - 232812017, 232943093, 233074169, 233205299, 233336387, 233467523, 233598611, - 233729687, 233860787, 233991871, 234122947, 234254023, 234385097, 234516169, - 234647263, 234778337, 234909421, 235040501, 235171583, 235302659, 235433741, - 235564837, 235695937, 235827017, 235958089, 236089163, 236220239, 236351321, - 236482409, 236613491, 236744569, 236875687, 237006761, 237137833, 237268937, - 237400013, 237531113, 237662237, 237793313, 237924409, 238055483, 238186561, - 238317643, 238448729, 238579801, 238710929, 238842001, 238973083, 239104157, - 239235233, 239366321, 239497393, 239628491, 239759587, 239890687, 240021773, - 240152909, 240284003, 240415099, 240546179, 240677251, 240808333, 240939427, - 241070507, 241201591, 241332701, 241463809, 241594883, 241725959, 241857041, - 241988113, 242119201, 242250277, 242381357, 242512481, 242643581, 242774659, - 242905759, 243036841, 243167927, 243299011, 243430129, 243561223, 243692303, - 243823379, 243954499, 244085573, 244216649, 244347739, 244478827, 244609903, - 244740989, 244872073, 245003147, 245134223, 245265299, 245396401, 245527487, - 245658559, 245789633, 245920709, 246051787, 246182863, 246313939, 246445013, - 246576101, 246707189, 246838261, 246969337, 247100429, 247231529, 247362611, - 247493689, 247624763, 247755881, 247886953, 248018033, 248149129, 248280203, - 248411279, 248542361, 248673443, 248804531, 248935613, 249066689, 249197803, - 249328951, 249460037, 249591157, 249722237, 249853321, 249984407, 250115497, - 250246573, 250377667, 250508743, 250639817, 250770901, 250902023, 251033099, - 251164183, 251295271, 251426347, 251557421, 251688509, 251819609, 251950687, - 252081773, 252212879, 252343951, 252475031, 252606103, 252737267, 252868351, - 252999427, 253130513, 253261637, 253392731, 253523807, 253654931, 253786003, - 253917143, 254048219, 254179297, 254310409, 254441491, 254572601, 254703697, - 254834791, 254965873, 255096971, 255228073, 255359161, 255490241, 255621329, - 255752411, 255883513, 256014613, 256145689, 256276789, 256407919, 256539001, - 256670077, 256801199, 256932289, 257063371, 257194451, 257325529, 257456603, - 257587679, 257718763, 257849843, 257980927, 258112031, 258243137, 258374213, - 258505297, 258636377, 258767471, 258898543, 259029649, 259160729, 259291861, - 259422953, 259554037, 259685147, 259816231, 259947407, 260078521, 260209597, - 260340671, 260471747, 260602871, 260733971, 260865043, 260996167, 261127249, - 261258391, 261389507, 261520607, 261651757, 261782831, 261913919, 262045001, - 262176077, 262307153, 262438229, 262569317, 262700393, 262831477, 262962559, - 263093641, 263224721, 263355793, 263486911, 263618053, 263749141, 263880217, - 264011311, 264142387, 264273461, 264404603, 264535717, 264666793, 264797867, - 264928957, 265060031, 265191103, 265322207, 265453289, 265584373, 265715449, - 265846541, 265977641, 266108723, 266239849, 266370953, 266502043, 266633141, - 266764229, 266895311, 267026387, 267157463, 267288547, 267419629, 267550711, - 267681787, 267812887, 267943967, 268075061, 268206143, 268337219, 268468331, - 268599431, 268730513, 268861591, 268992667, 269123747, 269254837, 269385931, - 269517029, 269648107, 269779187, 269910283, 270041363, 270172447, 270303581, - 270434653, 270565739, 270696823, 270827899, 270958973, 271090049, 271221127, - 271352203, 271483313, 271614397, 271745477, 271876589, 272007661, 272138747, - 272269831, 272400917, 272532011, 272663113, 272794217, 272925299, 273056387, - 273187483, 273318557, 273449711, 273580787, 273711869, 273842941, 273974033, - 274105121, 274236217, 274367311, 274498387, 274629469, 274760593, 274891691, - 275022791, 275153873, 275284949, 275416027, 275547121, 275678197, 275809271, - 275940347, 276071429, 276202513, 276333611, 276464701, 276595793, 276726871, - 276857947, 276989051, 277120127, 277251203, 277382279, 277513351, 277644427, - 277775503, 277906589, 278037673, 278168749, 278299837, 278430931, 278562007, - 278693141, 278824237, 278955317, 279086417, 279217517, 279348599, 279479689, - 279610769, 279741853, 279872933, 280004009, 280135109, 280266209, 280397287, - 280528361, 280659497, 280790593, 280921673, 281052757, 281183839, 281314921, - 281446001, 281577083, 281708213, 281839303, 281970379, 282101471, 282232549, - 282363637, 282494711, 282625789, 282756889, 282888029, 283019137, 283150237, - 283281311, 283412387, 283543487, 283674577, 283805653, 283936753, 284067829, - 284198909, 284329999, 284461081, 284592157, 284723273, 284854351, 284985431, - 285116543, 285247639, 285378713, 285509803, 285640877, 285771961, 285903047, - 286034137, 286165237, 286296349, 286427437, 286558543, 286689617, 286820717, - 286951811, 287082883, 287213959, 287345053, 287476129, 287607211, 287738291, - 287869367, 288000467, 288131539, 288262621, 288393701, 288524773, 288655853, - 288786929, 288918001, 289049081, 289180153, 289311229, 289442303, 289573391, - 289704479, 289835551, 289966639, 290097763, 290228843, 290359921, 290490997, - 290622077, 290753173, 290884301, 291015379, 291146461, 291277549, 291408641, - 291539723, 291670801, 291801877, 291932987, 292064077, 292195153, 292326259, - 292457381, 292588459, 292719563, 292850693, 292981771, 293112887, 293244023, - 293375119, 293506193, 293637287, 293768383, 293899471, 294030547, 294161633, - 294292723, 294423821, 294554893, 294685967, 294817057, 294948151, 295079227, - 295210319, 295341407, 295472519, 295603603, 295734707, 295865821, 295996903, - 296128003, 296259079, 296390197, 296521271, 296652359, 296783441, 296914517, - 297045643, 297176729, 297307807, 297438899, 297569971, 297701111, 297832207, - 297963283, 298094359, 298225451, 298356559, 298487659, 298618739, 298749811, - 298880899, 299012017, 299143133, 299274223, 299405303, 299536381, 299667491, - 299798593, 299929709, 300060793, 300191891, 300323021, 300454103, 300585193, - 300716267, 300847357, 300978479, 301109551, 301240633, 301371731, 301502813, - 301633903, 301765021, 301896103, 302027177, 302158249, 302289329, 302420449, - 302551547, 302682631, 302813711, 302944783, 303075901, 303206983, 303338071, - 303469151, 303600247, 303731357, 303862451, 303993563, 304124657, 304255801, - 304386881, 304517963, 304649039, 304780123, 304911199, 305042281, 305173399, - 305304487, 305435573, 305566673, 305697767, 305828843, 305959943, 306091031, - 306222149, 306353233, 306484327, 306615409, 306746501, 306877573, 307008649, - 307139737, 307270841, 307401937, 307533029, 307664101, 307795219, 307926313, - 308057413, 308188511, 308319607, 308450717, 308581817, 308712889, 308843989, - 308975063, 309106151, 309237263, 309368369, 309499441, 309630521, 309761593, - 309892691, 310023767, 310154891, 310285967, 310417049, 310548127, 310679219, - 310810301, 310941391, 311072479, 311203561, 311334637, 311465723, 311596811, - 311727887, 311859007, 311990093, 312121217, 312252299, 312383399, 312514481, - 312645559, 312776647, 312907747, 313038853, 313169933, 313301011, 313432099, - 313563221, 313694317, 313825397, 313956469, 314087569, 314218643, 314349727, - 314480813, 314611889, 314742983, 314874073, 315005191, 315136267, 315267341, - 315398431, 315529507, 315660581, 315791653, 315922741, 316053821, 316184917, - 316316017, 316447091, 316578193, 316709317, 316840393, 316971469, 317102549, - 317233669, 317364779, 317495863, 317626979, 317758061, 317889139, 318020221, - 318151331, 318282407, 318413483, 318544571, 318675647, 318806737, 318937823, - 319068899, 319200001, 319331099, 319462177, 319593259, 319724351, 319855429, - 319986547, 320117621, 320248717, 320379793, 320510873, 320641957, 320773039, - 320904137, 321035213, 321166289, 321297371, 321428447, 321559529, 321690623, - 321821699, 321952789, 322083871, 322214951, 322346047, 322477121, 322608193, - 322739267, 322870381, 323001461, 323132539, 323263621, 323394707, 323525791, - 323656867, 323787983, 323919059, 324050143, 324181261, 324312371, 324443447, - 324574519, 324705629, 324836719, 324967831, 325098919, 325230023, 325361107, - 325492199, 325623299, 325754383, 325885471, 326016569, 326147641, 326278721, - 326409803, 326540881, 326671999, 326803091, 326934169, 327065243, 327196327, - 327327431, 327458507, 327589589, 327720661, 327851779, 327982859, 328113931, - 328245017, 328376099, 328507181, 328638253, 328769339, 328900417, 329031497, - 329162569, 329293649, 329424721, 329555833, 329686913, 329817989, 329949127, - 330080209, 330211283, 330342359, 330473443, 330604531, 330735611, 330866687, - 330997763, 331128851, 331259923, 331391051, 331522133, 331653209, 331784309, - 331915393, 332046479, 332177561, 332308637, 332439721, 332570857, 332701933, - 332833043, 332964127, 333095207, 333226297, 333357379, 333488501, 333619589, - 333750667, 333881773, 334012867, 334143967, 334275041, 334406147, 334537223, - 334668311, 334799401, 334930489, 335061607, 335192687, 335323783, 335454859, - 335585951, 335717027, 335848099, 335979247, 336110347, 336241421, 336372527, - 336503611, 336634699, 336765791, 336896869, 337027961, 337159051, 337290131, - 337421221, 337552297, 337683377, 337814461, 337945561, 338076643, 338207717, - 338338801, 338469913, 338600993, 338732081, 338863169, 338994281, 339125359, - 339256439, 339387511, 339518587, 339649663, 339780757, 339911833, 340042919, - 340174001, 340305083, 340436171, 340567321, 340698419, 340829497, 340960573, - 341091691, 341222789, 341353919, 341485007, 341616089, 341747173, 341878253, - 342009341, 342140417, 342271507, 342402581, 342533683, 342664759, 342795839, - 342926921, 343057993, 343189087, 343320163, 343451237, 343582319, 343713413, - 343844497, 343975573, 344106661, 344237767, 344368873, 344499949, 344631037, - 344762113, 344893193, 345024269, 345155341, 345286433, 345417517, 345548657, - 345679753, 345810827, 345941951, 346073033, 346204141, 346335217, 346466291, - 346597379, 346728451, 346859537, 346990639, 347121713, 347252833, 347383921, - 347515001, 347646077, 347777179, 347908277, 348039379, 348170453, 348301529, - 348432611, 348563693, 348694807, 348825881, 348956981, 349088059, 349219141, - 349350223, 349481309, 349612387, 349743461, 349874549, 350005633, 350136727, - 350267803, 350398879, 350529961, 350661037, 350792119, 350923201, 351054287, - 351185423, 351316571, 351447653, 351578729, 351709801, 351840877, 351971951, - 352103029, 352234109, 352365191, 352496273, 352627351, 352758431, 352889513, - 353020607, 353151691, 353282779, 353413859, 353544931, 353676017, 353807093, - 353938171, 354069253, 354200377, 354331451, 354462527, 354593621, 354724693, - 354855797, 354986873, 355117949, 355249031, 355380131, 355511231, 355642319, - 355773413, 355904531, 356035619, 356166737, 356297863, 356428939, 356560021, - 356691121, 356822227, 356953321, 357084401, 357215479, 357346559, 357477643, - 357608723, 357739813, 357870899, 358001977, 358133089, 358264183, 358395281, - 358526359, 358657447, 358788527, 358919599, 359050781, 359181857, 359312939, - 359444017, 359575091, 359706199, 359837281, 359968369, 360099449, 360230537, - 360361621, 360492709, 360623801, 360754897, 360885991, 361017089, 361148197, - 361279297, 361410403, 361541483, 361672561, 361803641, 361934723, 362065801, - 362196881, 362327963, 362459051, 362590133, 362721221, 362852311, 362983417, - 363114503, 363245587, 363376681, 363507757, 363638833, 363769937, 363901039, - 364032127, 364163207, 364294283, 364425371, 364556443, 364687529, 364818659, - 364949731, 365080829, 365211911, 365342983, 365474059, 365605181, 365736289, - 365867377, 365998459, 366129557, 366260647, 366391733, 366522811, 366653893, - 366784973, 366916057, 367047137, 367178219, 367309291, 367440379, 367571489, - 367702567, 367833643, 367964759, 368095831, 368226907, 368357993, 368489087, - 368620171, 368751289, 368882383, 369013471, 369144553, 369275633, 369406747, - 369537841, 369668939, 369800047, 369931123, 370062227, 370193339, 370324411, - 370455499, 370586591, 370717693, 370848769, 370979879, 371110981, 371242061, - 371373151, 371504249, 371635321, 371766397, 371897501, 372028583, 372159659, - 372290791, 372421867, 372552941, 372684071, 372815143, 372946229, 373077301, - 373208483, 373339559, 373470677, 373601791, 373732867, 373864009, 373995109, - 374126201, 374257297, 374388373, 374519447, 374650537, 374781611, 374912683, - 375043763, 375174841, 375305939, 375437053, 375568129, 375699209, 375830291, - 375961363, 376092463, 376223543, 376354651, 376485749, 376616831, 376747909, - 376878991, 377010107, 377141179, 377272261, 377403337, 377534411, 377665499, - 377796571, 377927653, 378058757, 378189853, 378320939, 378452023, 378583097, - 378714181, 378845281, 378976363, 379107457, 379238549, 379369643, 379500727, - 379631807, 379762879, 379893959, 380025043, 380156129, 380287213, 380418301, - 380549447, 380680529, 380811643, 380942717, 381073799, 381204871, 381335963, - 381467069, 381598171, 381729251, 381860327, 381991417, 382122511, 382253593, - 382384679, 382515779, 382646879, 382777961, 382909039, 383040113, 383171189, - 383302267, 383433341, 383564413, 383695517, 383826601, 383957677, 384088777, - 384219863, 384350947, 384482027, 384613127, 384744223, 384875297, 385006379, - 385137457, 385268557, 385399633, 385530731, 385661827, 385792907, 385923997, - 386055071, 386186173, 386317247, 386448343, 386579437, 386710589, 386841671, - 386972743, 387103841, 387234917, 387365999, 387497081, 387628231, 387759331, - 387890413, 388021489, 388152587, 388283659, 388414753, 388545827, 388676903, - 388807997, 388939081, 389070203, 389201297, 389332373, 389463491, 389594581, - 389725657, 389856743, 389987831, 390118909, 390249991, 390381067, 390512159, - 390643243, 390774317, 390905393, 391036517, 391167617, 391298689, 391429763, - 391560839, 391691929, 391823017, 391954099, 392085181, 392216303, 392347411, - 392478521, 392609617, 392740693, 392871769, 393002851, 393133927, 393265001, - 393396077, 393527149, 393658241, 393789317, 393920399, 394051477, 394182601, - 394313677, 394444763, 394575847, 394706947, 394838053, 394969129, 395100203, - 395231297, 395362369, 395493463, 395624549, 395755639, 395886713, 396017801, - 396148891, 396279977, 396411107, 396542207, 396673283, 396804383, 396935471, - 397066559, 397197653, 397328837, 397459913, 397590989, 397722107, 397853207, - 397984291, 398115373, 398246447, 398377523, 398508599, 398639671, 398770759, - 398901851, 399032929, 399164009, 399295087, 399426221, 399557299, 399688447, - 399819523, 399950633, 400081741, 400212829, 400343921, 400474993, 400606079, - 400737163, 400868267, 400999367, 401130473, 401261579, 401392669, 401523743, - 401654837, 401785949, 401917031, 402048107, 402179231, 402310331, 402441421, - 402572503, 402703589, 402834683, 402965789, 403096861, 403227949, 403359041, - 403490119, 403621213, 403752287, 403883369, 404014441, 404145551, 404276629, - 404407709, 404538781, 404669897, 404800969, 404932049, 405063121, 405194219, - 405325301, 405456377, 405587449, 405718529, 405849617, 405980699, 406111781, - 406242871, 406373969, 406505041, 406636117, 406767197, 406898291, 407029379, - 407160461, 407291539, 407422619, 407553709, 407684801, 407815909, 407947003, - 408078089, 408209171, 408340243, 408471331, 408602419, 408733513, 408864593, - 408995677, 409126759, 409257857, 409388963, 409520039, 409651117, 409782203, - 409913321, 410044421, 410175499, 410306573, 410437661, 410568757, 410699893, - 410830969, 410962087, 411093181, 411224267, 411355361, 411486437, 411617579, - 411748663, 411879761, 412010849, 412141937, 412273093, 412404193, 412535267, - 412666343, 412797421, 412928519, 413059607, 413190707, 413321789, 413452867, - 413583941, 413715023, 413846117, 413977189, 414108301, 414239377, 414370457, - 414501547, 414632629, 414763729, 414894817, 415025909, 415156997, 415288103, - 415419187, 415550279, 415681361, 415812433, 415943513, 416074619, 416205701, - 416336801, 416467889, 416598967, 416730047, 416861141, 416992241, 417123319, - 417254393, 417385469, 417516551, 417647623, 417778703, 417909847, 418040927, - 418172003, 418303099, 418434173, 418565249, 418696321, 418827397, 418958473, - 419089547, 419220623, 419351707, 419482799, 419613871, 419744947, 419876027, - 420007099, 420138179, 420269279, 420400369, 420531451, 420662551, 420793643, - 420924733, 421055809, 421186907, 421317983, 421449059, 421580141, 421711223, - 421842299, 421973441, 422104517, 422235617, 422366689, 422497763, 422628839, - 422759929, 422891003, 423022091, 423153163, 423284243, 423415327, 423546439, - 423677539, 423808621, 423939697, 424070771, 424201853, 424333033, 424464107, - 424595183, 424726261, 424857343, 424988449, 425119537, 425250649, 425381729, - 425512817, 425643899, 425774989, 425906077, 426037159, 426168241, 426299317, - 426430391, 426561469, 426692549, 426823651, 426954743, 427085821, 427216903, - 427347979, 427479067, 427610167, 427741241, 427872449, 428003533, 428134607, - 428265679, 428396779, 428527871, 428658973, 428790053, 428921159, 429052271, - 429183353, 429314449, 429445553, 429576647, 429707723, 429838807, 429969919, - 430100999, 430232087, 430363229, 430494329, 430625411, 430756511, 430887601, - 431018681, 431149781, 431280853, 431411987, 431543059, 431674141, 431805223, - 431936339, 432067421, 432198499, 432329581, 432460657, 432591743, 432722819, - 432853891, 432984971, 433116067, 433247201, 433378273, 433509347, 433640419, - 433771511, 433902587, 434033669, 434164741, 434295847, 434426987, 434558107, - 434689183, 434820277, 434951353, 435082433, 435213509, 435344593, 435475697, - 435606817, 435737899, 435868997, 436000099, 436131197, 436262273, 436393367, - 436524457, 436655539, 436786613, 436917707, 437048779, 437179861, 437310947, - 437442029, 437573113, 437704187, 437835313, 437966413, 438097507, 438228631, - 438359711, 438490847, 438621979, 438753079, 438884153, 439015229, 439146307, - 439277477, 439408549, 439539671, 439670789, 439801861, 439932959, 440064043, - 440195141, 440326213, 440457293, 440588377, 440719457, 440850539, 440981657, - 441112739, 441243811, 441374897, 441505973, 441637057, 441768139, 441899231, - 442030321, 442161397, 442292471, 442423543, 442554647, 442685753, 442816849, - 442947941, 443079017, 443210113, 443341201, 443472283, 443603371, 443734471, - 443865547, 443996627, 444127699, 444258797, 444389873, 444520949, 444652027, - 444783113, 444914209, 445045309, 445176397, 445307477, 445438559, 445569653, - 445700729, 445831807, 445962917, 446094001, 446225111, 446356223, 446487299, - 446618383, 446749469, 446880541, 447011681, 447142753, 447273829, 447404933, - 447536017, 447667111, 447798209, 447929297, 448060373, 448191467, 448322543, - 448453633, 448584727, 448715801, 448846883, 448977967, 449109047, 449240119, - 449371207, 449502283, 449633363, 449764439, 449895521, 450026623, 450157699, - 450288781, 450419857, 450550967, 450682049, 450813169, 450944243, 451075337, - 451206421, 451337501, 451468597, 451599683, 451730759, 451861843, 451992917, - 452123989, 452255071, 452386147, 452517223, 452648309, 452779387, 452910509, - 453041587, 453172679, 453303779, 453434851, 453565951, 453697039, 453828119, - 453959203, 454090297, 454221371, 454352443, 454483577, 454614649, 454745737, - 454876811, 455007887, 455138989, 455270071, 455401153, 455532247, 455663333, - 455794433, 455925607, 456056683, 456187757, 456318847, 456449933, 456581033, - 456712117, 456843203, 456974311, 457105417, 457236511, 457367593, 457498709, - 457629787, 457760867, 457892011, 458023091, 458154173, 458285251, 458416327, - 458547437, 458678537, 458809619, 458940701, 459071773, 459202859, 459333967, - 459465047, 459596141, 459727223, 459858299, 459989389, 460120469, 460251541, - 460382617, 460513693, 460644781, 460775857, 460906931, 461038007, 461169091, - 461300171, 461431253, 461562331, 461693411, 461824513, 461955601, 462086683, - 462217771, 462348853, 462479957, 462611033, 462742123, 462873239, 463004317, - 463135391, 463266469, 463397551, 463528633, 463659739, 463790843, 463921957, - 464053061, 464184157, 464315261, 464446357, 464577431, 464708533, 464839633, - 464970721, 465101809, 465232913, 465364013, 465495119, 465626201, 465757283, - 465888361, 466019447, 466150519, 466281601, 466412689, 466543807, 466674913, - 466805987, 466937063, 467068139, 467199217, 467330359, 467461457, 467592539, - 467723639, 467854721, 467985799, 468116897, 468248009, 468379081, 468510173, - 468641263, 468772397, 468903493, 469034593, 469165673, 469296769, 469427863, - 469558963, 469690073, 469821167, 469952243, 470083343, 470214443, 470345527, - 470476603, 470607677, 470738761, 470869853, 471000941, 471132019, 471263131, - 471394219, 471525317, 471656441, 471787513, 471918617, 472049689, 472180801, - 472311907, 472442981, 472574087, 472705183, 472836281, 472967371, 473098459, - 473229551, 473360627, 473491703, 473622781, 473753879, 473884951, 474016043, - 474147127, 474278219, 474409303, 474540383, 474671459, 474802553, 474933629, - 475064717, 475195793, 475326881, 475457959, 475589047, 475720121, 475851197, - 475982279, 476113367, 476244449, 476375551, 476506691, 476637779, 476768861, - 476899949, 477031039, 477162131, 477293209, 477424289, 477555409, 477686501, - 477817573, 477948649, 478079731, 478210813, 478341901, 478472977, 478604051, - 478735171, 478866257, 478997329, 479128411, 479259497, 479390623, 479521711, - 479652829, 479783923, 479915011, 480046111, 480177193, 480308267, 480439357, - 480570479, 480701563, 480832637, 480963713, 481094819, 481225891, 481356973, - 481488047, 481619123, 481750207, 481881289, 482012381, 482143471, 482274563, - 482405647, 482536727, 482667817, 482798893, 482929969, 483061043, 483192121, - 483323207, 483454343, 483585437, 483716543, 483847633, 483978713, 484109839, - 484240921, 484372001, 484503083, 484634179, 484765261, 484896371, 485027443, - 485158519, 485289611, 485420687, 485551763, 485682839, 485813917, 485944993, - 486076093, 486207167, 486338263, 486469349, 486600451, 486731537, 486862627, - 486993707, 487124789, 487255903, 487386979, 487518071, 487649143, 487780219, - 487911301, 488042383, 488173481, 488304571, 488435663, 488566763, 488697851, - 488828933, 488960023, 489091121, 489222211, 489353299, 489484399, 489615473, - 489746549, 489877631, 490008703, 490139803, 490270901, 490401973, 490533049, - 490664123, 490795199, 490926281, 491057389, 491188469, 491319541, 491450627, - 491581721, 491712797, 491843873, 491975009, 492106103, 492237181, 492368321, - 492499393, 492630473, 492761573, 492892717, 493023857, 493154993, 493286069, - 493417151, 493548239, 493679317, 493810403, 493941479, 494072587, 494203669, - 494334781, 494465953, 494597029, 494728109, 494859187, 494990263, 495121343, - 495252421, 495383531, 495514631, 495645707, 495776819, 495907913, 496039021, - 496170107, 496301207, 496432289, 496563367, 496694441, 496825513, 496956601, - 497087713, 497218789, 497349883, 497480957, 497612041, 497743121, 497874197, - 498005273, 498136411, 498267487, 498398561, 498529649, 498660727, 498791809, - 498922883, 499053967, 499185047, 499316119, 499447219, 499578293, 499709389, - 499840463, 499971541, 500102621, 500233703, 500364803, 500495881, 500626957, - 500758033, 500889107, 501020189, 501151289, 501282361, 501413491, 501544573, - 501675649, 501806737, 501937811, 502068893, 502199981, 502331107, 502462187, - 502593269, 502724351, 502855439, 502986551, 503117639, 503248741, 503379827, - 503510923, 503641997, 503773091, 503904173, 504035251, 504166343, 504297419, - 504428503, 504559597, 504690677, 504821777, 504952849, 505083941, 505215019, - 505346099, 505477177, 505608263, 505739369, 505870451, 506001533, 506132609, - 506263699, 506394773, 506525867, 506656939, 506788019, 506919109, 507050191, - 507181271, 507312347, 507443423, 507574541, 507705617, 507836779, 507967853, - 508098947, 508230053, 508361177, 508492249, 508623337, 508754437, 508885519, - 509016623, 509147701, 509278801, 509409899, 509540971, 509672063, 509803163, - 509934263, 510065357, 510196447, 510327523, 510458657, 510589741, 510720839, - 510851927, 510983023, 511114111, 511245187, 511376267, 511507361, 511638433, - 511769507, 511900619, 512031697, 512162773, 512293849, 512424953, 512556049, - 512687137, 512818259, 512949413, 513080509, 513211591, 513342679, 513473759, - 513604831, 513735913, 513866999, 513998113, 514129201, 514260283, 514391369, - 514522457, 514653547, 514784629, 514915747, 515046823, 515177903, 515309071, - 515440199, 515571281, 515702353, 515833427, 515964509, 516095641, 516226721, - 516357841, 516488933, 516620057, 516751129, 516882217, 517013291, 517144367, - 517275449, 517406521, 517537597, 517668703, 517799797, 517930879, 518061953, - 518193073, 518324167, 518455303, 518586389, 518717497, 518848573, 518979647, - 519110743, 519241819, 519372937, 519504031, 519635117, 519766189, 519897263, - 520028363, 520159439, 520290527, 520421623, 520552727, 520683851, 520814933, - 520946033, 521077153, 521208349, 521339449, 521470541, 521601643, 521732719, - 521863801, 521994937, 522126019, 522257107, 522388241, 522519331, 522650417, - 522781531, 522912631, 523043711, 523174829, 523305929, 523437011, 523568099, - 523699171, 523830253, 523961341, 524092427, 524223503, 524354591, 524485667, - 524616761, 524747863, 524878943, 525010027, 525141107, 525272191, 525403273, - 525534367, 525665461, 525796543, 525927629, 526058723, 526189799, 526320911, - 526452001, 526583107, 526714183, 526845259, 526976339, 527107453, 527238577, - 527369653, 527500739, 527631847, 527762929, 527894033, 528025153, 528156247, - 528287321, 528418393, 528549487, 528680573, 528811651, 528942749, 529073837, - 529204909, 529336009, 529467097, 529598177, 529729267, 529860367, 529991471, - 530122573, 530253649, 530384783, 530515873, 530646973, 530778049, 530909179, - 531040267, 531171343, 531302423, 531433541, 531564617, 531695699, 531826787, - 531957901, 532089029, 532220107, 532351199, 532482337, 532613441, 532744519, - 532875601, 533006687, 533137771, 533268863, 533399947, 533531029, 533662133, - 533793209, 533924291, 534055369, 534186449, 534317521, 534448619, 534579697, - 534710777, 534841859, 534972967, 535104043, 535235117, 535366189, 535497283, - 535628369, 535759451, 535890527, 536021599, 536152691, 536283767, 536414881, - 536545957, 536677051, 536808127, 536939257, 537070337, 537201437, 537332519, - 537463601, 537594727, 537725869, 537856951, 537988051, 538119133, 538250213, - 538381301, 538512379, 538643461, 538774547, 538905623, 539036713, 539167787, - 539298863, 539429953, 539561027, 539692121, 539823203, 539954299, 540085391, - 540216473, 540347603, 540478681, 540609761, 540740891, 540871963, 541003039, - 541134127, 541265213, 541396313, 541527391, 541658477, 541789559, 541920637, - 542051717, 542182789, 542313869, 542444941, 542576053, 542707181, 542838253, - 542969351, 543100447, 543231523, 543362623, 543493697, 543624769, 543755869, - 543886991, 544018073, 544149167, 544280239, 544411319, 544542469, 544673581, - 544804669, 544935749, 545066827, 545197901, 545328989, 545460067, 545591191, - 545722267, 545853353, 545984443, 546115547, 546246641, 546377717, 546508789, - 546639889, 546770969, 546902047, 547033159, 547164253, 547295407, 547426483, - 547557589, 547688663, 547819763, 547950841, 548081917, 548212997, 548344117, - 548475203, 548606309, 548737411, 548868493, 548999567, 549130639, 549261719, - 549392803, 549523879, 549654953, 549786037, 549917119, 550048201, 550179323, - 550310401, 550441481, 550572571, 550703687, 550834759, 550965859, 551096983, - 551228107, 551359213, 551490311, 551621407, 551752499, 551883583, 552014689, - 552145807, 552276887, 552407969, 552539041, 552670127, 552801199, 552932279, - 553063351, 553194457, 553325561, 553456633, 553587707, 553718827, 553849903, - 553981003, 554112079, 554243153, 554374241, 554505313, 554636399, 554767471, - 554898601, 555029723, 555160811, 555291899, 555422977, 555554081, 555685243, - 555816319, 555947393, 556078469, 556209559, 556340633, 556471711, 556602863, - 556733939, 556865021, 556996093, 557127169, 557258243, 557389333, 557520427, - 557651503, 557782583, 557913659, 558044749, 558175823, 558306901, 558437983, - 558569093, 558700169, 558831241, 558962347, 559093441, 559224521, 559355593, - 559486679, 559617827, 559748921, 559880017, 560011097, 560142169, 560273249, - 560404333, 560535421, 560666521, 560797609, 560928713, 561059791, 561190867, - 561321949, 561453037, 561584141, 561715277, 561846361, 561977443, 562108543, - 562239619, 562370717, 562501813, 562632887, 562763989, 562895063, 563026147, - 563157229, 563288303, 563419391, 563550473, 563681549, 563812643, 563943727, - 564074803, 564205883, 564336959, 564468053, 564599129, 564730207, 564861331, - 564992411, 565123483, 565254563, 565385659, 565516739, 565647833, 565778911, - 565909997, 566041079, 566172161, 566303233, 566434321, 566565451, 566696549, - 566827631, 566958719, 567089797, 567220873, 567351959, 567483067, 567614141, - 567745237, 567876317, 568007431, 568138541, 568269619, 568400719, 568531793, - 568662881, 568793957, 568925039, 569056141, 569187257, 569318339, 569449417, - 569580491, 569711627, 569842717, 569973791, 570104869, 570235949, 570367097, - 570498191, 570629273, 570760357, 570891439, 571022519, 571153591, 571284667, - 571415759, 571546853, 571677929, 571809019, 571940107, 572071189, 572202289, - 572333383, 572464463, 572595577, 572726689, 572857763, 572988851, 573119947, - 573251023, 573382099, 573513181, 573644261, 573775343, 573906449, 574037533, - 574168643, 574299773, 574430863, 574561951, 574693033, 574824113, 574955197, - 575086279, 575217353, 575348441, 575479547, 575610683, 575741767, 575872853, - 576003959, 576135041, 576266123, 576397201, 576528283, 576659357, 576790457, - 576921539, 577052611, 577183687, 577314761, 577445833, 577576927, 577708007, - 577839083, 577970213, 578101291, 578232383, 578363491, 578494591, 578625679, - 578756831, 578887919, 579019019, 579150107, 579281179, 579412261, 579543343, - 579674461, 579805537, 579936613, 580067689, 580198781, 580329881, 580460977, - 580592113, 580723223, 580854331, 580985407, 581116513, 581247599, 581378683, - 581509771, 581640847, 581771933, 581903011, 582034091, 582165193, 582296293, - 582427369, 582558481, 582689561, 582820709, 582951799, 583082879, 583213957, - 583345033, 583476107, 583607201, 583738301, 583869389, 584000471, 584131549, - 584262631, 584393713, 584524847, 584655919, 584786999, 584918111, 585049189, - 585180263, 585311339, 585442439, 585573511, 585704593, 585835673, 585966757, - 586097833, 586228913, 586360037, 586491121, 586622203, 586753367, 586884457, - 587015549, 587146621, 587277697, 587408777, 587539919, 587670997, 587802077, - 587933173, 588064249, 588195337, 588326411, 588457483, 588588557, 588719647, - 588850741, 588981857, 589112939, 589244023, 589375103, 589506193, 589637273, - 589768351, 589899433, 590030521, 590161609, 590292697, 590423807, 590554897, - 590685971, 590817047, 590948143, 591079219, 591210293, 591341371, 591472481, - 591603577, 591734669, 591865741, 591996857, 592127941, 592259069, 592390171, - 592521257, 592652371, 592783447, 592914521, 593045597, 593176673, 593307763, - 593438851, 593569961, 593701051, 593832163, 593963267, 594094339, 594225413, - 594356513, 594487609, 594618683, 594749783, 594880859, 595011953, 595143037, - 595274117, 595405207, 595536289, 595667377, 595798451, 595929527, 596060603, - 596191681, 596322767, 596453861, 596584957, 596716037, 596847113, 596978189, - 597109307, 597240407, 597371491, 597502589, 597633661, 597764737, 597895817, - 598026899, 598157999, 598289071, 598420153, 598551227, 598682321, 598813421, - 598944497, 599075599, 599206739, 599337853, 599468939, 599600033, 599731123, - 599862233, 599993309, 600124391, 600255463, 600386551, 600517663, 600648757, - 600779873, 600910957, 601042031, 601173107, 601304189, 601435267, 601566347, - 601697429, 601828517, 601959601, 602090767, 602221847, 602352923, 602484013, - 602615087, 602746201, 602877283, 603008387, 603139499, 603270583, 603401663, - 603532747, 603663871, 603794951, 603926101, 604057189, 604188269, 604319341, - 604450417, 604581511, 604712599, 604843693, 604974791, 605105869, 605236943, - 605368019, 605499101, 605630177, 605761267, 605892341, 606023477, 606154553, - 606285643, 606416731, 606547807, 606678893, 606809969, 606941047, 607072127, - 607203203, 607334293, 607465379, 607596461, 607727537, 607858609, 607989689, - 608120761, 608251849, 608382923, 608513999, 608645077, 608776177, 608907259, - 609038341, 609169417, 609300533, 609431609, 609562697, 609693779, 609824851, - 609955949, 610087021, 610218101, 610349203, 610480289, 610611413, 610742521, - 610873607, 611004697, 611135773, 611266849, 611397931, 611529013, 611660087, - 611791177, 611922257, 612053339, 612184429, 612315523, 612446617, 612577703, - 612708793, 612839867, 612970973, 613102073, 613233149, 613364231, 613495339, - 613626427, 613757503, 613888591, 614019671, 614150783, 614281867, 614412949, - 614544079, 614675167, 614806277, 614937371, 615068471, 615199577, 615330673, - 615461747, 615592849, 615723929, 615855017, 615986093, 616117171, 616248247, - 616379333, 616510409, 616641481, 616772593, 616903669, 617034749, 617165827, - 617296907, 617428001, 617559073, 617690147, 617821241, 617952341, 618083413, - 618214529, 618345619, 618476699, 618607783, 618738863, 618870001, 619001077, - 619132187, 619263259, 619394387, 619525507, 619656599, 619787677, 619918763, - 620049839, 620181031, 620312123, 620443199, 620574287, 620705369, 620836453, - 620967527, 621098617, 621229699, 621360809, 621491887, 621622973, 621754051, - 621885133, 622016221, 622147313, 622278431, 622409507, 622540591, 622671671, - 622802743, 622933837, 623064991, 623196073, 623327149, 623458237, 623589313, - 623720399, 623851493, 623982581, 624113663, 624244739, 624375821, 624506899, - 624637973, 624769099, 624900173, 625031249, 625162331, 625293413, 625424561, - 625555643, 625686727, 625817807, 625948879, 626079953, 626211037, 626342131, - 626473207, 626604281, 626735357, 626866463, 626997551, 627128693, 627259769, - 627390851, 627521929, 627653017, 627784093, 627915181, 628046269, 628177351, - 628308431, 628439509, 628570589, 628701673, 628832747, 628963837, 629094913, - 629226029, 629357107, 629488213, 629619307, 629750411, 629881487, 630012587, - 630143663, 630274741, 630405829, 630536903, 630667993, 630799111, 630930203, - 631061279, 631192391, 631323479, 631454573, 631585651, 631716739, 631847813, - 631978891, 632109967, 632241079, 632372179, 632503273, 632634367, 632765447, - 632896549, 633027653, 633158737, 633289823, 633420911, 633551993, 633683081, - 633814157, 633945269, 634076347, 634207421, 634338517, 634469609, 634600699, - 634731829, 634862939, 634994011, 635125087, 635256179, 635387251, 635518337, - 635649433, 635780531, 635911607, 636042731, 636173803, 636304891, 636435971, - 636567073, 636698147, 636829229, 636960329, 637091407, 637222511, 637353599, - 637484671, 637615747, 637746833, 637877963, 638009039, 638140123, 638271203, - 638402279, 638533367, 638664443, 638795543, 638926621, 639057697, 639188779, - 639319853, 639450941, 639582017, 639713101, 639844201, 639975283, 640106377, - 640237457, 640368559, 640499669, 640630747, 640761829, 640892909, 641024039, - 641155111, 641286259, 641417341, 641548423, 641679523, 641810623, 641941697, - 642072791, 642203879, 642334951, 642466037, 642597133, 642728213, 642859303, - 642990377, 643121461, 643252541, 643383619, 643514731, 643645811, 643776911, - 643908011, 644039107, 644170199, 644301283, 644432359, 644563441, 644694559, - 644825641, 644956759, 645087841, 645218921, 645350047, 645481139, 645612221, - 645743297, 645874379, 646005463, 646136549, 646267627, 646398703, 646529783, - 646660871, 646791997, 646923091, 647054167, 647185249, 647316359, 647447453, - 647578553, 647709637, 647840761, 647971837, 648102911, 648234019, 648365111, - 648496207, 648627289, 648758393, 648889469, 649020587, 649151719, 649282793, - 649413893, 649545007, 649676099, 649807181, 649938259, 650069353, 650200457, - 650331533, 650462611, 650593703, 650724803, 650855893, 650986993, 651118073, - 651249169, 651380269, 651511369, 651642527, 651773623, 651904723, 652035823, - 652166917, 652297991, 652429079, 652560191, 652691269, 652822369, 652953451, - 653084573, 653215681, 653346779, 653477857, 653608939, 653740027, 653871107, - 654002191, 654133279, 654264379, 654395477, 654526577, 654657683, 654788777, - 654919877, 655050967, 655182061, 655313167, 655444241, 655575329, 655706411, - 655837487, 655968571, 656099657, 656230747, 656361851, 656492953, 656624027, - 656755103, 656886179, 657017267, 657148339, 657279437, 657410527, 657541603, - 657672689, 657803761, 657934859, 658065953, 658197047, 658328119, 658459211, - 658590287, 658721419, 658852499, 658983581, 659114663, 659245739, 659376833, - 659507909, 659638999, 659770081, 659901199, 660032291, 660163367, 660294443, - 660425531, 660556609, 660687683, 660818759, 660949837, 661080911, 661211983, - 661343071, 661474153, 661605253, 661736333, 661867411, 661998497, 662129603, - 662260679, 662391767, 662522869, 662653963, 662785099, 662916181, 663047263, - 663178357, 663309481, 663440567, 663571663, 663702751, 663833831, 663964919, - 664096021, 664227163, 664358239, 664489313, 664620403, 664751501, 664882577, - 665013653, 665144741, 665275829, 665406901, 665537987, 665669087, 665800169, - 665931251, 666062339, 666193457, 666324539, 666455611, 666586693, 666717787, - 666848863, 666979991, 667111097, 667242181, 667373281, 667504373, 667635457, - 667766597, 667897669, 668028761, 668159851, 668290999, 668422103, 668553181, - 668684279, 668815369, 668946461, 669077593, 669208691, 669339773, 669470849, - 669601927, 669733019, 669864137, 669995213, 670126309, 670257389, 670388471, - 670519547, 670650647, 670781731, 670912813, 671043911, 671175007, 671306089, - 671437199, 671568277, 671699387, 671830493, 671961593, 672092711, 672223793, - 672354869, 672485941, 672617021, 672748093, 672879169, 673010251, 673141331, - 673272421, 673403513, 673534601, 673665673, 673796771, 673927843, 674058923, - 674190031, 674321113, 674452211, 674583293, 674714393, 674845489, 674976593, - 675107683, 675238771, 675369853, 675500927, 675632017, 675763093, 675894179, - 676025291, 676156399, 676287487, 676418573, 676549681, 676680757, 676811843, - 676942919, 677074009, 677205091, 677336183, 677467261, 677598347, 677729453, - 677860543, 677991617, 678122701, 678253783, 678384877, 678515969, 678647063, - 678778141, 678909223, 679040303, 679171379, 679302457, 679433537, 679564619, - 679695713, 679826803, 679957909, 680089027, 680220127, 680351209, 680482343, - 680613467, 680744539, 680875627, 681006709, 681137791, 681268871, 681399947, - 681531073, 681662147, 681793249, 681924343, 682055417, 682186559, 682317653, - 682448737, 682579817, 682710893, 682841977, 682973087, 683104187, 683235277, - 683366351, 683497439, 683628527, 683759611, 683890687, 684021781, 684152863, - 684283991, 684415063, 684546151, 684677263, 684808357, 684939439, 685070531, - 685201607, 685332691, 685463791, 685594873, 685725973, 685857077, 685988153, - 686119271, 686250347, 686381491, 686512573, 686643649, 686774749, 686905847, - 687036943, 687168019, 687299111, 687430213, 687561289, 687692371, 687823471, - 687954563, 688085653, 688216747, 688347929, 688479013, 688610093, 688741169, - 688872269, 689003347, 689134483, 689265601, 689396677, 689527757, 689658833, - 689789923, 689920997, 690052147, 690183223, 690314297, 690445391, 690576463, - 690707539, 690838619, 690969691, 691100777, 691231859, 691362943, 691494017, - 691625101, 691756201, 691887283, 692018381, 692149459, 692280539, 692411617, - 692542691, 692673767, 692804843, 692935921, 693067007, 693198091, 693329177, - 693460249, 693591359, 693722437, 693853529, 693984607, 694115687, 694246769, - 694377841, 694508917, 694639991, 694771073, 694902157, 695033233, 695164331, - 695295421, 695426519, 695557591, 695688757, 695819837, 695950919, 696082021, - 696213101, 696344221, 696475301, 696606377, 696737453, 696868537, 696999617, - 697130689, 697261771, 697392847, 697523971, 697655099, 697786171, 697917251, - 698048333, 698179411, 698310491, 698441593, 698572723, 698703839, 698834911, - 698965987, 699097067, 699228143, 699359251, 699490333, 699621407, 699752509, - 699883633, 700014713, 700145821, 700276919, 700407991, 700539097, 700670171, - 700801261, 700932341, 701063417, 701194523, 701325619, 701456719, 701587793, - 701718889, 701849969, 701981041, 702112129, 702243209, 702374297, 702505379, - 702636463, 702767537, 702898627, 703029731, 703160803, 703291877, 703423001, - 703554079, 703685183, 703816273, 703947379, 704078489, 704209591, 704340667, - 704471773, 704602867, 704733949, 704865037, 704996129, 705127217, 705258289, - 705389401, 705520499, 705651581, 705782653, 705913753, 706044827, 706175927, - 706306999, 706438081, 706569167, 706700243, 706831379, 706962457, 707093537, - 707224619, 707355709, 707486797, 707617901, 707749001, 707880083, 708011179, - 708142261, 708273373, 708404453, 708535547, 708666631, 708797707, 708928789, - 709059881, 709190953, 709322063, 709453169, 709584289, 709715411, 709846549, - 709977643, 710108743, 710239819, 710370901, 710501999, 710633083, 710764163, - 710895253, 711026339, 711157411, 711288493, 711419573, 711550681, 711681767, - 711812867, 711943979, 712075057, 712206139, 712337243, 712468331, 712599431, - 712730533, 712861637, 712992719, 713123821, 713254921, 713386007, 713517083, - 713648161, 713779267, 713910341, 714041443, 714172523, 714303607, 714434681, - 714565759, 714696833, 714827909, 714958997, 715090081, 715221203, 715352303, - 715483381, 715614491, 715745567, 715876643, 716007737, 716138827, 716269903, - 716400989, 716532067, 716663161, 716794277, 716925361, 717056467, 717187577, - 717318649, 717449723, 717580807, 717711889, 717843001, 717974123, 718105207, - 718236293, 718367383, 718498463, 718629547, 718760639, 718891741, 719022847, - 719153921, 719285009, 719416097, 719547197, 719678269, 719809373, 719940449, - 720071531, 720202607, 720333709, 720464791, 720595901, 720726991, 720858067, - 720989147, 721120247, 721251407, 721382483, 721513571, 721644659, 721775741, - 721906907, 722037997, 722169143, 722300221, 722431309, 722562389, 722693471, - 722824549, 722955671, 723086759, 723217841, 723348973, 723480047, 723611123, - 723742199, 723873289, 724004377, 724135457, 724266581, 724397669, 724528757, - 724659839, 724790977, 724922059, 725053187, 725184269, 725315341, 725446439, - 725577521, 725708603, 725839733, 725970823, 726101897, 726232973, 726364063, - 726495149, 726626227, 726757307, 726888413, 727019507, 727150607, 727281683, - 727412783, 727543871, 727674949, 727806031, 727937113, 728068199, 728199293, - 728330441, 728461523, 728592653, 728723731, 728854817, 728985911, 729117031, - 729248119, 729379193, 729510269, 729641347, 729772429, 729903509, 730034581, - 730165673, 730296823, 730427897, 730558979, 730690063, 730821137, 730952237, - 731083361, 731214433, 731345509, 731476583, 731607671, 731738779, 731869861, - 732000953, 732132031, 732263113, 732394207, 732525307, 732656383, 732787469, - 732918551, 733049623, 733180703, 733311781, 733442887, 733573961, 733705043, - 733836119, 733967209, 734098327, 734229413, 734360521, 734491601, 734622719, - 734753797, 734884883, 735015973, 735147073, 735278153, 735409237, 735540349, - 735671441, 735802589, 735933677, 736064753, 736195849, 736326953, 736458029, - 736589129, 736720207, 736851287, 736982369, 737113469, 737244667, 737375741, - 737506837, 737637911, 737768987, 737900069, 738031157, 738162239, 738293321, - 738424399, 738555481, 738686563, 738817649, 738948803, 739079893, 739210991, - 739342063, 739473151, 739604233, 739735309, 739866437, 739997519, 740128591, - 740259673, 740390753, 740521867, 740652943, 740784017, 740915101, 741046183, - 741177259, 741308339, 741439427, 741570509, 741701621, 741832709, 741963821, - 742094893, 742225969, 742357079, 742488167, 742619243, 742750357, 742881467, - 743012549, 743143651, 743274769, 743405857, 743536967, 743668049, 743799149, - 743930287, 744061387, 744192467, 744323551, 744454643, 744585719, 744716801, - 744847891, 744978989, 745110073, 745241171, 745372249, 745503359, 745634431, - 745765507, 745896581, 746027669, 746158789, 746289881, 746420957, 746552029, - 746683111, 746814191, 746945267, 747076411, 747207491, 747338567, 747469649, - 747600751, 747731827, 747862909, 747993991, 748125067, 748256141, 748387229, - 748518349, 748649441, 748780517, 748911601, 749042731, 749173811, 749304893, - 749435971, 749567047, 749698121, 749829253, 749960399, 750091483, 750222569, - 750353683, 750484759, 750615863, 750746957, 750878069, 751009141, 751140251, - 751271351, 751402423, 751533511, 751664593, 751795669, 751926751, 752057833, - 752188939, 752320027, 752451101, 752582177, 752713271, 752844347, 752975429, - 753106513, 753237599, 753368689, 753499871, 753630959, 753762059, 753893131, - 754024213, 754155299, 754286381, 754417459, 754548533, 754679609, 754810703, - 754941779, 755072861, 755203951, 755335039, 755466121, 755597237, 755728327, - 755859407, 755990491, 756121579, 756252661, 756383743, 756514853, 756645943, - 756777023, 756908107, 757039187, 757170269, 757301341, 757432427, 757563511, - 757694593, 757825703, 757956779, 758087861, 758218973, 758350057, 758481131, - 758612207, 758743289, 758874367, 759005449, 759136541, 759267653, 759398771, - 759529843, 759660973, 759792049, 759923141, 760054237, 760185319, 760316413, - 760447487, 760578601, 760709681, 760840771, 760971851, 761102989, 761234113, - 761365229, 761496301, 761627453, 761758531, 761889613, 762020713, 762151811, - 762282931, 762414041, 762545141, 762676217, 762807301, 762938377, 763069493, - 763200611, 763331689, 763462781, 763593889, 763724963, 763856057, 763987163, - 764118239, 764249327, 764380399, 764511479, 764642573, 764773651, 764904727, - 765035807, 765166901, 765297989, 765429073, 765560149, 765691301, 765822377, - 765953459, 766084531, 766215613, 766346687, 766477781, 766608853, 766739969, - 766871047, 767002123, 767133217, 767264341, 767395417, 767526509, 767657587, - 767788667, 767919743, 768050861, 768181943, 768313027, 768444101, 768575177, - 768706249, 768837331, 768968443, 769099543, 769230619, 769361713, 769492813, - 769623893, 769754969, 769886041, 770017139, 770148233, 770279387, 770410463, - 770541557, 770672633, 770803727, 770934799, 771065873, 771196961, 771328037, - 771459113, 771590213, 771721289, 771852379, 771983461, 772114561, 772245641, - 772376767, 772507859, 772639003, 772770079, 772901167, 773032243, 773163323, - 773294407, 773425487, 773556653, 773687743, 773818823, 773949901, 774081013, - 774212137, 774343237, 774474313, 774605407, 774736481, 774867601, 774998681, - 775129759, 775260853, 775391927, 775523003, 775654079, 775785173, 775916249, - 776047333, 776178433, 776309509, 776440589, 776571671, 776702743, 776833861, - 776964959, 777096059, 777227137, 777358289, 777489389, 777620483, 777751619, - 777882733, 778013813, 778144931, 778276013, 778407107, 778538197, 778669279, - 778800353, 778931453, 779062549, 779193631, 779324723, 779455799, 779586881, - 779717959, 779849039, 779980147, 780111257, 780242329, 780373403, 780504479, - 780635573, 780766687, 780897763, 781028861, 781159969, 781291067, 781422167, - 781553249, 781684363, 781815449, 781946533, 782077613, 782208731, 782339827, - 782470981, 782602213, 782733293, 782864393, 782995481, 783126559, 783257647, - 783388721, 783519809, 783650911, 783781987, 783913063, 784044179, 784175267, - 784306351, 784437427, 784568537, 784699613, 784830713, 784961797, 785092873, - 785223973, 785355059, 785486147, 785617223, 785748311, 785879401, 786010483, - 786141593, 786272677, 786403777, 786534871, 786665947, 786797021, 786928127, - 787059199, 787190279, 787321351, 787452431, 787583509, 787714607, 787845679, - 787976773, 788107867, 788238943, 788370029, 788501101, 788632189, 788763277, - 788894363, 789025439, 789156521, 789287599, 789418703, 789549793, 789680893, - 789811991, 789943079, 790074151, 790205233, 790336321, 790467451, 790598533, - 790729607, 790860683, 790991777, 791122861, 791253941, 791385053, 791516153, - 791647237, 791778331, 791909441, 792040549, 792171623, 792302699, 792433781, - 792564853, 792695957, 792827051, 792958147, 793089221, 793220339, 793351439, - 793482523, 793613617, 793744691, 793875767, 794006839, 794137913, 794269009, - 794400091, 794531207, 794662279, 794793361, 794924443, 795055523, 795186617, - 795317689, 795448769, 795579853, 795710939, 795842077, 795973163, 796104269, - 796235347, 796366427, 796497503, 796628627, 796759729, 796890817, 797021891, - 797152969, 797284049, 797415121, 797546249, 797677327, 797808437, 797939587, - 798070681, 798201757, 798332833, 798463927, 798595003, 798726107, 798857179, - 798988277, 799119359, 799250449, 799381553, 799512653, 799643731, 799774813, - 799905901, 800036987, 800168059, 800299139, 800430217, 800561309, 800692391, - 800823473, 800954549, 801085673, 801216751, 801347831, 801478903, 801609989, - 801741077, 801872171, 802003247, 802134329, 802265407, 802396523, 802527611, - 802658699, 802789783, 802920889, 803051971, 803183053, 803314147, 803445281, - 803576381, 803707459, 803838533, 803969611, 804100699, 804231793, 804362873, - 804493973, 804625061, 804756143, 804887261, 805018343, 805149419, 805280491, - 805411613, 805542701, 805673773, 805804849, 805935937, 806067013, 806198087, - 806329169, 806460241, 806591321, 806722409, 806853493, 806984567, 807115651, - 807246779, 807377869, 807508943, 807640051, 807771137, 807902231, 808033319, - 808164419, 808295491, 808426571, 808557647, 808688731, 808819813, 808950889, - 809081963, 809213081, 809344153, 809475241, 809606327, 809737447, 809868539, - 809999623, 810130703, 810261797, 810392899, 810524009, 810655099, 810786191, - 810917269, 811048363, 811179437, 811310527, 811441601, 811572677, 811703779, - 811834861, 811965971, 812097073, 812228171, 812359319, 812490409, 812621501, - 812752573, 812883647, 813014737, 813145811, 813276883, 813407971, 813539047, - 813670147, 813801221, 813932347, 814063421, 814194527, 814325599, 814456751, - 814587833, 814718911, 814849991, 814981073, 815112149, 815243251, 815374331, - 815505421, 815636533, 815767637, 815898761, 816029849, 816160921, 816291997, - 816423071, 816554143, 816685267, 816816353, 816947431, 817078513, 817209587, - 817340659, 817471793, 817602869, 817733941, 817865017, 817996097, 818127179, - 818258251, 818389339, 818520421, 818651497, 818782597, 818913671, 819044753, - 819175829, 819306919, 819438077, 819569173, 819700247, 819831319, 819962401, - 820093511, 820224583, 820355663, 820486739, 820617823, 820748987, 820880063, - 821011157, 821142253, 821273353, 821404457, 821535541, 821666617, 821797721, - 821928839, 822059929, 822191039, 822322121, 822453193, 822584267, 822715367, - 822846439, 822977539, 823108639, 823239727, 823370827, 823501907, 823632991, - 823764079, 823895159, 824026237, 824157329, 824288417, 824419493, 824550589, - 824681677, 824812757, 824943839, 825074941, 825206051, 825337127, 825468221, - 825599303, 825730387, 825861511, 825992611, 826123691, 826254799, 826385887, - 826516981, 826648061, 826779157, 826910239, 827041331, 827172443, 827303549, - 827434631, 827565703, 827696777, 827827927, 827959001, 828090083, 828221161, - 828352237, 828483323, 828614417, 828745507, 828876589, 829007671, 829138747, - 829269821, 829400893, 829531981, 829663067, 829794167, 829925279, 830056393, - 830187473, 830318551, 830449691, 830580769, 830711879, 830842973, 830974057, - 831105139, 831236213, 831367343, 831498419, 831629509, 831760603, 831891677, - 832022759, 832153831, 832284913, 832416031, 832547117, 832678213, 832809319, - 832940393, 833071469, 833202541, 833333629, 833464721, 833595793, 833726899, - 833857991, 833989067, 834120163, 834251273, 834382369, 834513451, 834644561, - 834775637, 834906719, 835037813, 835168889, 835299961, 835431061, 835562141, - 835693213, 835824337, 835955413, 836086487, 836217617, 836348693, 836479783, - 836610877, 836741957, 836873041, 837004117, 837135197, 837266317, 837397391, - 837528467, 837659549, 837790621, 837921697, 838052773, 838183847, 838314929, - 838446013, 838577107, 838708223, 838839319, 838970399, 839101489, 839232577, - 839363671, 839494751, 839625823, 839756941, 839888017, 840019091, 840150163, - 840281243, 840412319, 840543421, 840674501, 840805577, 840936689, 841067783, - 841198859, 841329961, 841461041, 841592131, 841723213, 841854347, 841985453, - 842116637, 842247709, 842378821, 842509897, 842640973, 842772053, 842903143, - 843034217, 843165307, 843296411, 843427493, 843558571, 843689681, 843820753, - 843951853, 844082927, 844214009, 844345081, 844476167, 844607273, 844738373, - 844869463, 845000539, 845131621, 845262703, 845393827, 845524943, 845656051, - 845787133, 845918239, 846049333, 846180443, 846311533, 846442621, 846573731, - 846704813, 846835889, 846967049, 847098121, 847229333, 847360439, 847491527, - 847622621, 847753721, 847884839, 848015929, 848147009, 848278097, 848409169, - 848540263, 848671361, 848802439, 848933521, 849064607, 849195707, 849326791, - 849457883, 849588977, 849720049, 849851153, 849982283, 850113361, 850244453, - 850375529, 850506611, 850637699, 850768771, 850899853, 851030951, 851162041, - 851293133, 851424227, 851555311, 851686397, 851817523, 851948621, 852079717, - 852210803, 852341887, 852472969, 852604063, 852735137, 852866213, 852997307, - 853128383, 853259471, 853390547, 853521637, 853652711, 853783783, 853914857, - 854045971, 854177063, 854308151, 854439241, 854570351, 854701429, 854832541, - 854963657, 855094763, 855225857, 855356941, 855488089, 855619169, 855750263, - 855881347, 856012433, 856143517, 856274599, 856405717, 856536797, 856667879, - 856798981, 856930079, 857061173, 857192257, 857323399, 857454473, 857585551, - 857716631, 857847707, 857978813, 858109891, 858241019, 858372107, 858503183, - 858634261, 858765359, 858896431, 859027511, 859158589, 859289663, 859420753, - 859551853, 859682927, 859814009, 859945109, 860076181, 860207267, 860338403, - 860469481, 860600557, 860731631, 860862719, 860993807, 861124879, 861255973, - 861387101, 861518209, 861649319, 861780407, 861911483, 862042561, 862173647, - 862304731, 862435817, 862566919, 862697993, 862829069, 862960141, 863091233, - 863222329, 863353417, 863484499, 863615591, 863746679, 863877761, 864008839, - 864139933, 864271099, 864402181, 864533279, 864664391, 864795511, 864926597, - 865057673, 865188749, 865319821, 865450897, 865581989, 865713061, 865844143, - 865975247, 866106343, 866237419, 866368511, 866499593, 866630707, 866761799, - 866892937, 867024013, 867155087, 867286177, 867417259, 867548333, 867679411, - 867810511, 867941623, 868072721, 868203797, 868334869, 868465951, 868597057, - 868728139, 868859219, 868990303, 869121377, 869252459, 869383531, 869514631, - 869645719, 869776801, 869907877, 870038959, 870170047, 870301141, 870432257, - 870563333, 870694453, 870825533, 870956609, 871087691, 871218763, 871349849, - 871480931, 871612003, 871743091, 871874173, 872005297, 872136389, 872267471, - 872398573, 872529703, 872660777, 872791873, 872922949, 873054089, 873185197, - 873316271, 873447343, 873578417, 873709511, 873840601, 873971677, 874102807, - 874233901, 874364983, 874496057, 874627157, 874758229, 874889303, 875020397, - 875151469, 875282543, 875413639, 875544781, 875675861, 875806933, 875938051, - 876069127, 876200231, 876331321, 876462409, 876593483, 876724579, 876855659, - 876986791, 877117867, 877248941, 877380017, 877511101, 877642189, 877773263, - 877904371, 878035451, 878166533, 878297663, 878428751, 878559833, 878690941, - 878822023, 878953099, 879084179, 879215257, 879346337, 879477433, 879608531, - 879739603, 879870707, 880001791, 880132871, 880263947, 880395049, 880526137, - 880657231, 880788313, 880919461, 881050553, 881181629, 881312713, 881443813, - 881574893, 881705983, 881837057, 881968147, 882099233, 882230347, 882361427, - 882492503, 882623593, 882754679, 882885779, 883016857, 883147963, 883279073, - 883410181, 883541299, 883672379, 883803469, 883934543, 884065661, 884196737, - 884327831, 884458909, 884590033, 884721127, 884852209, 884983289, 885114361, - 885245467, 885376543, 885507617, 885638693, 885769769, 885900863, 886031953, - 886163071, 886294223, 886425299, 886556423, 886687507, 886818589, 886949671, - 887080771, 887211869, 887342941, 887474017, 887605109, 887736203, 887867291, - 887998367, 888129449, 888260521, 888391601, 888522743, 888653851, 888784933, - 888916013, 889047097, 889178201, 889309277, 889440379, 889571477, 889702549, - 889833629, 889964723, 890095799, 890226877, 890357953, 890489057, 890620141, - 890751299, 890882381, 891013481, 891144563, 891275639, 891406721, 891537797, - 891668929, 891800027, 891931111, 892062203, 892193347, 892324421, 892455523, - 892586623, 892717697, 892848773, 892979869, 893110957, 893242039, 893373113, - 893504189, 893635273, 893766353, 893897441, 894028529, 894159613, 894290711, - 894421807, 894552887, 894683983, 894815087, 894946159, 895077233, 895208341, - 895339433, 895470517, 895601621, 895732697, 895863779, 895994851, 896125933, - 896257009, 896388083, 896519167, 896650253, 896781349, 896912431, 897043507, - 897174583, 897305657, 897436759, 897567833, 897698933, 897830041, 897961121, - 898092193, 898223269, 898354393, 898485481, 898616603, 898747679, 898878797, - 899009869, 899140951, 899272027, 899403157, 899534231, 899665321, 899796439, - 899927513, 900058597, 900189673, 900320761, 900451837, 900582959, 900714037, - 900845123, 900976207, 901107283, 901238441, 901369537, 901500623, 901631711, - 901762811, 901893899, 902024999, 902156093, 902287201, 902418287, 902549369, - 902680459, 902811551, 902942627, 903073747, 903204833, 903335933, 903467017, - 903598117, 903729191, 903860263, 903991351, 904122437, 904253509, 904384619, - 904515743, 904646843, 904777919, 904909009, 905040083, 905171159, 905302303, - 905433383, 905564497, 905695577, 905826659, 905957743, 906088823, 906219907, - 906350981, 906482053, 906613133, 906744217, 906875323, 907006411, 907137499, - 907268611, 907399687, 907530761, 907661849, 907792937, 907924009, 908055091, - 908186173, 908317283, 908448371, 908579453, 908710619, 908841707, 908972797, - 909103873, 909234967, 909366041, 909497117, 909628189, 909759269, 909890353, - 910021439, 910152521, 910283603, 910414721, 910545803, 910676909, 910807999, - 910939079, 911070161, 911201233, 911332339, 911463451, 911594527, 911725627, - 911856713, 911987807, 912118951, 912250037, 912381131, 912512219, 912643331, - 912774413, 912905507, 913036633, 913167751, 913298831, 913429927, 913561027, - 913692103, 913823213, 913954337, 914085433, 914216539, 914347613, 914478707, - 914609797, 914740919, 914872001, 915003079, 915134153, 915265271, 915396353, - 915527441, 915658517, 915789613, 915920701, 916051777, 916182859, 916313933, - 916445011, 916576121, 916707203, 916838287, 916969369, 917100451, 917231527, - 917362601, 917493683, 917624761, 917755843, 917886953, 918018043, 918149123, - 918280289, 918411407, 918542483, 918673573, 918804697, 918935777, 919066859, - 919197931, 919329011, 919460131, 919591207, 919722301, 919853387, 919984459, - 920115571, 920246689, 920377771, 920508851, 920639939, 920771023, 920902109, - 921033181, 921164303, 921295391, 921426487, 921557569, 921688661, 921819733, - 921950839, 922081931, 922213027, 922344131, 922475209, 922606297, 922737379, - 922868459, 922999531, 923130631, 923261711, 923392817, 923523889, 923654969, - 923786057, 923917151, 924048233, 924179317, 924310391, 924441481, 924572567, - 924703651, 924834739, 924965813, 925096889, 925227983, 925359091, 925490177, - 925621273, 925752367, 925883501, 926014591, 926145667, 926276761, 926407849, - 926538937, 926670013, 926801093, 926932169, 927063251, 927194329, 927325409, - 927456493, 927587569, 927718663, 927849757, 927980857, 928111963, 928243037, - 928374113, 928505189, 928636277, 928767349, 928898471, 929029597, 929160671, - 929291801, 929422883, 929553991, 929685091, 929816171, 929947253, 930078379, - 930209459, 930340531, 930471611, 930602711, 930733807, 930864899, 930995983, - 931127063, 931258151, 931389287, 931520417, 931651489, 931782571, 931913651, - 932044727, 932175821, 932306897, 932437973, 932569049, 932700127, 932831213, - 932962297, 933093383, 933224473, 933355603, 933486683, 933617761, 933748843, - 933879923, 934011053, 934142137, 934273217, 934404347, 934535431, 934666543, - 934797691, 934928831, 935059933, 935191009, 935322097, 935453219, 935584313, - 935715413, 935846489, 935977573, 936108697, 936239803, 936370913, 936502003, - 936633109, 936764221, 936895303, 937026469, 937157567, 937288657, 937419731, - 937550821, 937681897, 937812979, 937944053, 938075129, 938206201, 938337277, - 938468359, 938599439, 938730517, 938861639, 938992727, 939123803, 939254917, - 939386027, 939517109, 939648239, 939779371, 939910451, 940041527, 940172603, - 940303691, 940434799, 940565891, 940696997, 940828079, 940959157, 941090239, - 941221319, 941352403, 941483509, 941614603, 941745689, 941876791, 942007867, - 942138991, 942270071, 942401143, 942532223, 942663301, 942794387, 942925463, - 943056547, 943187639, 943318721, 943449809, 943580887, 943711991, 943843063, - 943974151, 944105233, 944236379, 944367467, 944498549, 944629649, 944760727, - 944891839, 945022921, 945154013, 945285101, 945416201, 945547279, 945678367, - 945809441, 945940519, 946071613, 946202689, 946333763, 946464877, 946595963, - 946727057, 946858139, 946989223, 947120299, 947251379, 947382461, 947513533, - 947644613, 947775707, 947906779, 948037919, 948169021, 948300131, 948431213, - 948562291, 948693413, 948824507, 948955607, 949086701, 949217849, 949348921, - 949480019, 949611101, 949742173, 949873247, 950004337, 950135443, 950266517, - 950397593, 950528671, 950659751, 950790847, 950921921, 951053029, 951184109, - 951315193, 951446273, 951577379, 951708469, 951839543, 951970631, 952101719, - 952232839, 952363931, 952495009, 952626089, 952757161, 952888241, 953019343, - 953150423, 953281507, 953412587, 953543677, 953674763, 953805847, 953936927, - 954068081, 954199159, 954330259, 954461341, 954592421, 954723557, 954854651, - 954985723, 955116803, 955247879, 955378967, 955510081, 955641173, 955772261, - 955903337, 956034427, 956165513, 956296589, 956427673, 956558747, 956689819, - 956820913, 956951993, 957083089, 957214177, 957345251, 957476369, 957607477, - 957738581, 957869657, 958000739, 958131817, 958262909, 958393999, 958525079, - 958656157, 958787273, 958918351, 959049431, 959180513, 959311597, 959442683, - 959573807, 959704901, 959835973, 959967059, 960098201, 960229313, 960360389, - 960491491, 960622583, 960753667, 960884791, 961015883, 961146961, 961278037, - 961409117, 961540273, 961671353, 961802453, 961933529, 962064613, 962195711, - 962326811, 962457883, 962588969, 962720123, 962851199, 962982277, 963113381, - 963244459, 963375557, 963506641, 963637721, 963768809, 963899897, 964030979, - 964162097, 964293173, 964424269, 964555357, 964686431, 964817519, 964948603, - 965079691, 965210833, 965341919, 965472997, 965604071, 965735143, 965866219, - 965997299, 966128389, 966259471, 966390587, 966521669, 966652741, 966783827, - 966914929, 967046033, 967177157, 967308229, 967439381, 967570469, 967701577, - 967832687, 967963811, 968094887, 968225971, 968357051, 968488139, 968619241, - 968750339, 968881427, 969012503, 969143603, 969274699, 969405797, 969536899, - 969668023, 969799099, 969930193, 970061291, 970192387, 970323481, 970454587, - 970585663, 970716737, 970847809, 970978927, 971110001, 971241091, 971372189, - 971503261, 971634343, 971765453, 971896547, 972027643, 972158797, 972289889, - 972420983, 972552121, 972683213, 972814303, 972945401, 973076473, 973207553, - 973338637, 973469713, 973600799, 973731877, 973862959, 973994089, 974125169, - 974256253, 974387329, 974518451, 974649527, 974780627, 974911703, 975042799, - 975173891, 975304963, 975436039, 975567133, 975698209, 975829297, 975960373, - 976091461, 976222537, 976353661, 976484749, 976615823, 976746919, 976878053, - 977009129, 977140217, 977271341, 977402443, 977533517, 977664599, 977795671, - 977926753, 978057877, 978188969, 978320053, 978451127, 978582211, 978713293, - 978844367, 978975457, 979106539, 979237613, 979368701, 979499789, 979630871, - 979761943, 979893017, 980024093, 980155219, 980286311, 980417393, 980548469, - 980679551, 980810627, 980941699, 981072791, 981203879, 981334967, 981466043, - 981597121, 981728239, 981859313, 981990407, 982121521, 982252597, 982383749, - 982514839, 982645921, 982777009, 982908097, 983039173, 983170271, 983301367, - 983432447, 983563523, 983694641, 983825741, 983956823, 984087899, 984218993, - 984350111, 984481207, 984612301, 984743423, 984874507, 985005587, 985136671, - 985267753, 985398839, 985529911, 985660987, 985792111, 985923199, 986054287, - 986185373, 986316449, 986447533, 986578609, 986709701, 986840839, 986971919, - 987103001, 987234103, 987365207, 987496297, 987627379, 987758477, 987889561, - 988020661, 988151777, 988282849, 988413997, 988545097, 988676179, 988807289, - 988938397, 989069573, 989200649, 989331757, 989462839, 989593933, 989725031, - 989856103, 989987213, 990118313, 990249401, 990380473, 990511589, 990642689, - 990773761, 990904841, 991035971, 991167059, 991298173, 991429249, 991560331, - 991691417, 991822541, 991953619, 992084701, 992215793, 992346869, 992477951, - 992609041, 992740127, 992871203, 993002287, 993133367, 993264443, 993395521, - 993526609, 993657683, 993788767, 993919873, 994050997, 994182073, 994313167, - 994444271, 994575343, 994706437, 994837531, 994968631, 995099713, 995230837, - 995361923, 995493001, 995624089, 995755181, 995886263, 996017357, 996148441, - 996279517, 996410593, 996541673, 996672751, 996803837, 996934933, 997066027, - 997197127, 997328201, 997459273, 997590367, 997721471, 997852577, 997983661, - 998114791, 998245867, 998376943, 998508023, 998639101, 998770177, 998901257, - 999032389, 999163463, 999294553, 999425627, 999556699, 999687781, 999818863, - 999949939, 1000081013, 1000212107, 1000343191, 1000474297, 1000605377, 1000736449, - 1000867531, 1000998613, 1001129687, 1001260759, 1001391847, 1001522987, 1001654063, - 1001785153, 1001916241, 1002047341, 1002178423, 1002309499, 1002440573, 1002571657, - 1002702731, 1002833803, 1002964877, 1003095953, 1003227067, 1003358149, 1003489231, - 1003620311, 1003751407, 1003882489, 1004013581, 1004144681, 1004275781, 1004406853, - 1004537929, 1004669047, 1004800127, 1004931227, 1005062327, 1005193411, 1005324491, - 1005455573, 1005586651, 1005717731, 1005848803, 1005979937, 1006111019, 1006242091, - 1006373183, 1006504259, 1006635337, 1006766413, 1006897517, 1007028599, 1007159687, - 1007290763, 1007421907, 1007552993, 1007684081, 1007815153, 1007946239, 1008077347, - 1008208441, 1008339523, 1008470599, 1008601673, 1008732793, 1008863873, 1008994951, - 1009126031, 1009257169, 1009388251, 1009519327, 1009650409, 1009781483, 1009912571, - 1010043653, 1010174741, 1010305837, 1010436913, 1010567993, 1010699099, 1010830181, - 1010961271, 1011092347, 1011223469, 1011354569, 1011485663, 1011616747, 1011747823, - 1011878909, 1012009991, 1012141069, 1012272143, 1012403219, 1012534343, 1012665419, - 1012796507, 1012927583, 1013058689, 1013189797, 1013320877, 1013451949, 1013583047, - 1013714137, 1013845219, 1013976307, 1014107417, 1014238531, 1014369611, 1014500689, - 1014631763, 1014762839, 1014893923, 1015025003, 1015156081, 1015287181, 1015418291, - 1015549391, 1015680467, 1015811561, 1015942657, 1016073791, 1016204909, 1016335987, - 1016467061, 1016598133, 1016729243, 1016860319, 1016991403, 1017122543, 1017253621, - 1017384727, 1017515833, 1017646921, 1017778001, 1017909073, 1018040147, 1018171229, - 1018302319, 1018433411, 1018564487, 1018695569, 1018826657, 1018957729, 1019088809, - 1019219893, 1019350967, 1019482043, 1019613121, 1019744233, 1019875327, 1020006439, - 1020137549, 1020268649, 1020399773, 1020530857, 1020661933, 1020793027, 1020924197, - 1021055303, 1021186391, 1021317491, 1021448563, 1021579693, 1021710779, 1021841867, - 1021972957, 1022104033, 1022235113, 1022366221, 1022497321, 1022628401, 1022759477, - 1022890597, 1023021673, 1023152747, 1023283829, 1023414913, 1023545987, 1023677059, - 1023808151, 1023939239, 1024070323, 1024201429, 1024332511, 1024463591, 1024594693, - 1024725769, 1024856851, 1024987933, 1025119013, 1025250101, 1025381191, 1025512273, - 1025643361, 1025774437, 1025905571, 1026036707, 1026167783, 1026298877, 1026429953, - 1026561049, 1026692263, 1026823351, 1026954431, 1027085509, 1027216601, 1027347697, - 1027478831, 1027609907, 1027740991, 1027872103, 1028003191, 1028134267, 1028265341, - 1028396431, 1028527531, 1028658643, 1028789759, 1028920843, 1029051931, 1029183011, - 1029314087, 1029445169, 1029576257, 1029707339, 1029838421, 1029969517, 1030100641, - 1030231717, 1030362833, 1030493911, 1030625033, 1030756141, 1030887217, 1031018291, - 1031149387, 1031280479, 1031411551, 1031542627, 1031673733, 1031804831, 1031935909, - 1032066989, 1032198107, 1032329209, 1032460307, 1032591403, 1032722491, 1032853579, - 1032984661, 1033115761, 1033246843, 1033377937, 1033509019, 1033640107, 1033771243, - 1033902329, 1034033411, 1034164511, 1034295617, 1034426801, 1034557873, 1034688983, - 1034820067, 1034951189, 1035082267, 1035213353, 1035344437, 1035475513, 1035606619, - 1035737693, 1035868787, 1035999883, 1036130957, 1036262057, 1036393129, 1036524259, - 1036655341, 1036786423, 1036917569, 1037048641, 1037179721, 1037310797, 1037441891, - 1037572967, 1037704043, 1037835121, 1037966201, 1038097331, 1038228407, 1038359521, - 1038490597, 1038621671, 1038752773, 1038883847, 1039014919, 1039146001, 1039277087, - 1039408187, 1039539283, 1039670381, 1039801463, 1039932539, 1040063641, 1040194733, - 1040325827, 1040456941, 1040588027, 1040719123, 1040850221, 1040981297, 1041112379, - 1041243461, 1041374533, 1041505631, 1041636707, 1041767801, 1041898883, 1042029983, - 1042161089, 1042292197, 1042423309, 1042554431, 1042685503, 1042816583, 1042947679, - 1043078767, 1043209841, 1043340919, 1043471993, 1043603131, 1043734231, 1043865307, - 1043996389, 1044127477, 1044258559, 1044389651, 1044520733, 1044651869, 1044782953, - 1044914041, 1045045129, 1045176203, 1045307279, 1045438379, 1045569493, 1045700573, - 1045831651, 1045962727, 1046093801, 1046224889, 1046355977, 1046487053, 1046618129, - 1046749217, 1046880311, 1047011387, 1047142471, 1047273611, 1047404711, 1047535799, - 1047666901, 1047797983, 1047929081, 1048060157, 1048191233, 1048322309, 1048453381, - 1048584473, 1048715573, 1048846691, 1048977779, 1049108857, 1049239931, 1049371051, - 1049502127, 1049633213, 1049764291, 1049895403, 1050026477, 1050157571, 1050288671, - 1050419743, 1050550817, 1050681913, 1050813007, 1050944161, 1051075237, 1051206341, - 1051337447, 1051468519, 1051599613, 1051730699, 1051861777, 1051992923, 1052124037, - 1052255161, 1052386253, 1052517337, 1052648453, 1052779543, 1052910619, 1053041767, - 1053172843, 1053303941, 1053435043, 1053566117, 1053697217, 1053828337, 1053959419, - 1054090501, 1054221577, 1054352653, 1054483739, 1054614851, 1054745933, 1054877009, - 1055008109, 1055139269, 1055270351, 1055401441, 1055532571, 1055663647, 1055794723, - 1055925797, 1056056887, 1056187961, 1056319049, 1056450137, 1056581231, 1056712309, - 1056843427, 1056974531, 1057105607, 1057236707, 1057367783, 1057498859, 1057629931, - 1057761017, 1057892117, 1058023201, 1058154283, 1058285357, 1058416433, 1058547509, - 1058678617, 1058809699, 1058940793, 1059071873, 1059202967, 1059334061, 1059465151, - 1059596273, 1059727373, 1059858467, 1059989551, 1060120627, 1060251713, 1060382797, - 1060513871, 1060644967, 1060776043, 1060907129, 1061038211, 1061169353, 1061300441, - 1061431517, 1061562617, 1061693701, 1061824781, 1061955877, 1062086969, 1062218063, - 1062349153, 1062480257, 1062611351, 1062742423, 1062873569, 1063004641, 1063135721, - 1063266803, 1063397879, 1063528981, 1063660067, 1063791149, 1063922227, 1064053321, - 1064184409, 1064315491, 1064446577, 1064577649, 1064708747, 1064839843, 1064970937, - 1065102041, 1065233123, 1065364243, 1065495317, 1065626389, 1065757471, 1065888583, - 1066019677, 1066150777, 1066281877, 1066412951, 1066544023, 1066675111, 1066806197, - 1066937273, 1067068363, 1067199443, 1067330531, 1067461613, 1067592731, 1067723803, - 1067854883, 1067986001, 1068117077, 1068248149, 1068379223, 1068510319, 1068641401, - 1068772489, 1068903581, 1069034657, 1069165763, 1069296847, 1069427929, 1069559059, - 1069690147, 1069821251, 1069952333, 1070083429, 1070214527, 1070345599, 1070476697, - 1070607779, 1070738857, 1070869937, 1071001027, 1071132137, 1071263209, 1071394283, - 1071525359, 1071656431, 1071787531, 1071918623, 1072049701, 1072180777, 1072311869, - 1072442957, 1072574051, 1072705129, 1072836239, 1072967341, 1073098423, 1073229523, - 1073360623, 1073491711, 1073622791, 1073753887, 1073885023, 1074016121, 1074147203, - 1074278299, 1074409393, 1074540487, 1074671567, 1074802639, 1074933719, 1075064807, - 1075195879, 1075326961, 1075458053, 1075589129, 1075720211, 1075851323, 1075982417, - 1076113501, 1076244581, 1076375653, 1076506729, 1076637817, 1076768923, 1076900029, - 1077031103, 1077162179, 1077293257, 1077424331, 1077555431, 1077686539, 1077817613, - 1077948727, 1078079809, 1078210897, 1078341973, 1078473073, 1078604147, 1078735219, - 1078866311, 1078997389, 1079128469, 1079259553, 1079390647, 1079521733, 1079652811, - 1079783911, 1079914991, 1080046069, 1080177169, 1080308249, 1080439343, 1080570419, - 1080701497, 1080832589, 1080963691, 1081094767, 1081225861, 1081356953, 1081488029, - 1081619129, 1081750207, 1081881293, 1082012369, 1082143481, 1082274619, 1082405711, - 1082536789, 1082667869, 1082798947, 1082930027, 1083061117, 1083192191, 1083323281, - 1083454369, 1083585449, 1083716533, 1083847621, 1083978697, 1084109779, 1084240867, - 1084371941, 1084503031, 1084634113, 1084765229, 1084896301, 1085027393, 1085158471, - 1085289553, 1085420627, 1085551703, 1085682803, 1085813887, 1085944963, 1086076037, - 1086207119, 1086338249, 1086469327, 1086600413, 1086731489, 1086862577, 1086993673, - 1087124791, 1087255877, 1087386961, 1087518049, 1087649179, 1087780259, 1087911371, - 1088042479, 1088173561, 1088304641, 1088435713, 1088566799, 1088697881, 1088829059, - 1088960141, 1089091243, 1089222331, 1089353407, 1089484541, 1089615613, 1089746711, - 1089877787, 1090008889, 1090139983, 1090271069, 1090402163, 1090533239, 1090664317, - 1090795397, 1090926491, 1091057563, 1091188643, 1091319721, 1091450797, 1091581913, - 1091712991, 1091844073, 1091975149, 1092106237, 1092237313, 1092368413, 1092499549, - 1092630641, 1092761729, 1092892819, 1093023977, 1093155053, 1093286147, 1093417219, - 1093548299, 1093679393, 1093810469, 1093941559, 1094072653, 1094203729, 1094334817, - 1094465891, 1094596981, 1094728069, 1094859149, 1094990269, 1095121387, 1095252481, - 1095383567, 1095514649, 1095645721, 1095776813, 1095907889, 1096038961, 1096170067, - 1096301189, 1096432279, 1096563361, 1096694437, 1096825519, 1096956593, 1097087699, - 1097218781, 1097349853, 1097480933, 1097612011, 1097743117, 1097874191, 1098005267, - 1098136367, 1098267463, 1098398537, 1098529639, 1098660733, 1098791819, 1098922901, - 1099053973, 1099185053, 1099316129, 1099447213, 1099578287, 1099709371, 1099840451, - 1099971533, 1100102651, 1100233747, 1100364829, 1100495933, 1100627051, 1100758123, - 1100889199, 1101020287, 1101151361, 1101282433, 1101413507, 1101544579, 1101675661, - 1101806747, 1101937819, 1102068893, 1102199983, 1102331059, 1102462139, 1102593221, - 1102724303, 1102855387, 1102986473, 1103117549, 1103248621, 1103379703, 1103510797, - 1103641873, 1103773019, 1103904091, 1104035173, 1104166289, 1104297377, 1104428471, - 1104559553, 1104690637, 1104821723, 1104952801, 1105083883, 1105214987, 1105346083, - 1105477169, 1105608289, 1105739417, 1105870499, 1106001583, 1106132711, 1106263793, - 1106394869, 1106525957, 1106657077, 1106788169, 1106919259, 1107050369, 1107181441, - 1107312541, 1107443627, 1107574703, 1107705791, 1107836879, 1107967951, 1108099067, - 1108230143, 1108361251, 1108492339, 1108623421, 1108754509, 1108885643, 1109016739, - 1109147839, 1109278927, 1109410067, 1109541161, 1109672261, 1109803381, 1109934479, - 1110065591, 1110196667, 1110327767, 1110458863, 1110589967, 1110721043, 1110852121, - 1110983197, 1111114283, 1111245413, 1111376509, 1111507589, 1111638683, 1111769767, - 1111900849, 1112031967, 1112163049, 1112294129, 1112425207, 1112556287, 1112687419, - 1112818493, 1112949581, 1113080663, 1113211739, 1113342847, 1113473923, 1113605011, - 1113736103, 1113867197, 1113998269, 1114129349, 1114260463, 1114391543, 1114522657, - 1114653731, 1114784837, 1114916021, 1115047093, 1115178167, 1115309287, 1115440379, - 1115571451, 1115702557, 1115833637, 1115964709, 1116095837, 1116226913, 1116357997, - 1116489103, 1116620179, 1116751291, 1116882373, 1117013459, 1117144543, 1117275641, - 1117406789, 1117537901, 1117668997, 1117800083, 1117931161, 1118062237, 1118193313, - 1118324387, 1118455489, 1118586569, 1118717683, 1118848769, 1118979857, 1119110929, - 1119242009, 1119373081, 1119504161, 1119635261, 1119766337, 1119897497, 1120028579, - 1120159661, 1120290763, 1120421837, 1120552913, 1120683997, 1120815071, 1120946201, - 1121077313, 1121208419, 1121339521, 1121470607, 1121601737, 1121732837, 1121863909, - 1121995009, 1122126091, 1122257179, 1122388271, 1122519397, 1122650491, 1122781579, - 1122912689, 1123043767, 1123174859, 1123305943, 1123437019, 1123568107, 1123699189, - 1123830269, 1123961351, 1124092429, 1124223511, 1124354587, 1124485673, 1124616749, - 1124747891, 1124878987, 1125010087, 1125141161, 1125272233, 1125403313, 1125534439, - 1125665539, 1125796613, 1125927701, 1126058803, 1126189879, 1126320997, 1126452097, - 1126583209, 1126714289, 1126845403, 1126976503, 1127107577, 1127238653, 1127369753, - 1127500859, 1127631959, 1127763037, 1127894153, 1128025289, 1128156373, 1128287453, - 1128418567, 1128549649, 1128680723, 1128811807, 1128942901, 1129073987, 1129205089, - 1129336189, 1129467271, 1129598357, 1129729429, 1129860521, 1129991623, 1130122699, - 1130253827, 1130384929, 1130516021, 1130647093, 1130778211, 1130909293, 1131040373, - 1131171467, 1131302603, 1131433703, 1131564869, 1131695947, 1131827101, 1131958181, - 1132089263, 1132220339, 1132351421, 1132482499, 1132613609, 1132744699, 1132875773, - 1133006867, 1133137961, 1133269037, 1133400119, 1133531227, 1133662337, 1133793413, - 1133924551, 1134055631, 1134186707, 1134317783, 1134448859, 1134579959, 1134711041, - 1134842129, 1134973211, 1135104293, 1135235371, 1135366447, 1135497529, 1135628609, - 1135759693, 1135890779, 1136021851, 1136152943, 1136284049, 1136415131, 1136546209, - 1136677291, 1136808371, 1136939459, 1137070531, 1137201629, 1137332711, 1137463783, - 1137594877, 1137725957, 1137857057, 1137988141, 1138119221, 1138250293, 1138381373, - 1138512449, 1138643549, 1138774627, 1138905709, 1139036809, 1139167907, 1139298991, - 1139430091, 1139561183, 1139692273, 1139823359, 1139954441, 1140085517, 1140216589, - 1140347683, 1140478783, 1140609871, 1140740971, 1140872099, 1141003177, 1141134271, - 1141265371, 1141396447, 1141527529, 1141658633, 1141789709, 1141920803, 1142051881, - 1142182991, 1142314081, 1142445173, 1142576261, 1142707333, 1142838419, 1142969501, - 1143100573, 1143231667, 1143362741, 1143493817, 1143624917, 1143756013, 1143887089, - 1144018171, 1144149269, 1144280341, 1144411481, 1144542589, 1144673669, 1144804819, - 1144935893, 1145066971, 1145198051, 1145329127, 1145460203, 1145591281, 1145722367, - 1145853439, 1145984513, 1146115591, 1146246671, 1146377747, 1146508819, 1146639913, - 1146770993, 1146902083, 1147033169, 1147164247, 1147295323, 1147426403, 1147557529, - 1147688611, 1147819693, 1147950767, 1148081839, 1148212931, 1148344003, 1148475091, - 1148606167, 1148737313, 1148868407, 1148999497, 1149130573, 1149261647, 1149392773, - 1149523849, 1149654953, 1149786037, 1149917143, 1150048223, 1150179301, 1150310377, - 1150441451, 1150572523, 1150703611, 1150834709, 1150965797, 1151096873, 1151227951, - 1151359039, 1151490113, 1151621197, 1151752271, 1151883361, 1152014443, 1152145517, - 1152276611, 1152407687, 1152538781, 1152669857, 1152800947, 1152932029, 1153063111, - 1153194187, 1153325263, 1153456357, 1153587493, 1153718567, 1153849657, 1153980749, - 1154111863, 1154242939, 1154374033, 1154505127, 1154636201, 1154767277, 1154898359, - 1155029441, 1155160519, 1155291619, 1155422711, 1155553783, 1155684863, 1155815939, - 1155947017, 1156078093, 1156209169, 1156340257, 1156471333, 1156602407, 1156733483, - 1156864559, 1156995647, 1157126759, 1157257859, 1157388941, 1157520019, 1157651119, - 1157782201, 1157913283, 1158044383, 1158175477, 1158306551, 1158437627, 1158568703, - 1158699791, 1158830887, 1158961963, 1159093087, 1159224161, 1159355261, 1159486337, - 1159617409, 1159748501, 1159879579, 1160010689, 1160141777, 1160272849, 1160403931, - 1160535023, 1160666123, 1160797223, 1160928299, 1161059401, 1161190519, 1161321593, - 1161452687, 1161583771, 1161714877, 1161845963, 1161977041, 1162108139, 1162239223, - 1162370299, 1162501381, 1162632481, 1162763573, 1162894669, 1163025761, 1163156843, - 1163287919, 1163419003, 1163550121, 1163681203, 1163812277, 1163943349, 1164074423, - 1164205499, 1164336577, 1164467677, 1164598783, 1164729859, 1164860947, 1164992071, - 1165123153, 1165254227, 1165385339, 1165516423, 1165647503, 1165778629, 1165909727, - 1166040809, 1166171887, 1166302967, 1166434043, 1166565121, 1166696203, 1166827303, - 1166958427, 1167089501, 1167220589, 1167351667, 1167482741, 1167613817, 1167744889, - 1167875971, 1168007053, 1168138133, 1168269229, 1168400357, 1168531459, 1168662533, - 1168793609, 1168924693, 1169055773, 1169186861, 1169317937, 1169449009, 1169580103, - 1169711273, 1169842393, 1169973529, 1170104633, 1170235711, 1170366793, 1170497921, - 1170629003, 1170760079, 1170891151, 1171022263, 1171153351, 1171284427, 1171415519, - 1171546613, 1171677701, 1171808777, 1171939849, 1172070973, 1172202077, 1172333167, - 1172464247, 1172595329, 1172726431, 1172857507, 1172988623, 1173119711, 1173250783, - 1173381857, 1173512933, 1173644009, 1173775093, 1173906197, 1174037279, 1174168351, - 1174299449, 1174430549, 1174561643, 1174692719, 1174823801, 1174954883, 1175085959, - 1175217041, 1175348137, 1175479247, 1175610329, 1175741401, 1175872487, 1176003571, - 1176134671, 1176265759, 1176396877, 1176527951, 1176659023, 1176790123, 1176921209, - 1177052281, 1177183373, 1177314487, 1177445569, 1177576643, 1177707721, 1177838821, - 1177969921, 1178101007, 1178232089, 1178363203, 1178494277, 1178625367, 1178756443, - 1178887531, 1179018613, 1179149687, 1179280783, 1179411859, 1179542957, 1179674051, - 1179805127, 1179936203, 1180067281, 1180198363, 1180329461, 1180460539, 1180591613, - 1180722713, 1180853797, 1180984873, 1181115967, 1181247059, 1181378137, 1181509223, - 1181640307, 1181771389, 1181902517, 1182033637, 1182164713, 1182295789, 1182426863, - 1182557947, 1182689023, 1182820099, 1182951193, 1183082267, 1183213373, 1183344473, - 1183475549, 1183606637, 1183737719, 1183868843, 1183999931, 1184131009, 1184262083, - 1184393191, 1184524279, 1184655371, 1184786453, 1184917541, 1185048637, 1185179761, - 1185310853, 1185441989, 1185573101, 1185704197, 1185835297, 1185966403, 1186097501, - 1186228583, 1186359701, 1186490783, 1186621861, 1186752971, 1186884079, 1187015197, - 1187146273, 1187277359, 1187408447, 1187539559, 1187670637, 1187801711, 1187932787, - 1188063859, 1188194981, 1188326071, 1188457159, 1188588257, 1188719353, 1188850433, - 1188981517, 1189112593, 1189243673, 1189374751, 1189505831, 1189636991, 1189768067, - 1189899199, 1190030279, 1190161361, 1190292469, 1190423573, 1190554663, 1190685739, - 1190816827, 1190947907, 1191079009, 1191210101, 1191341183, 1191472267, 1191603349, - 1191734461, 1191865553, 1191996671, 1192127747, 1192258831, 1192389923, 1192520999, - 1192652081, 1192783181, 1192914269, 1193045341, 1193176469, 1193307569, 1193438669, - 1193569753, 1193700829, 1193831923, 1193962997, 1194094091, 1194225167, 1194356239, - 1194487321, 1194618401, 1194749473, 1194880559, 1195011641, 1195142719, 1195273829, - 1195404901, 1195535989, 1195667063, 1195798171, 1195929247, 1196060353, 1196191439, - 1196322511, 1196453593, 1196584687, 1196715761, 1196846873, 1196977993, 1197109091, - 1197240169, 1197371243, 1197502343, 1197633431, 1197764507, 1197895607, 1198026689, - 1198157761, 1198288859, 1198419931, 1198551019, 1198682113, 1198813243, 1198944317, - 1199075393, 1199206487, 1199337571, 1199468687, 1199599759, 1199730871, 1199861959, - 1199993033, 1200124127, 1200255211, 1200386321, 1200517459, 1200648541, 1200779639, - 1200910717, 1201041841, 1201172957, 1201304063, 1201435139, 1201566229, 1201697317, - 1201828393, 1201959481, 1202090567, 1202221667, 1202352779, 1202483851, 1202614951, - 1202746031, 1202877103, 1203008201, 1203139279, 1203270371, 1203401443, 1203532529, - 1203663619, 1203794707, 1203925783, 1204056871, 1204188017, 1204319101, 1204450183, - 1204581289, 1204712371, 1204843487, 1204974559, 1205105633, 1205236717, 1205367791, - 1205498869, 1205629979, 1205761061, 1205892151, 1206023227, 1206154309, 1206285383, - 1206416467, 1206547543, 1206678617, 1206809693, 1206940783, 1207071871, 1207202947, - 1207334027, 1207465139, 1207596223, 1207727329, 1207858411, 1207989487, 1208120569, - 1208251643, 1208382719, 1208513807, 1208644889, 1208775961, 1208907061, 1209038177, - 1209169249, 1209300331, 1209431437, 1209562517, 1209693593, 1209824699, 1209955781, - 1210086853, 1210217927, 1210349009, 1210480171, 1210611263, 1210742359, 1210873483, - 1211004583, 1211135699, 1211266781, 1211397857, 1211528993, 1211660069, 1211791153, - 1211922251, 1212053327, 1212184399, 1212315491, 1212446581, 1212577661, 1212708733, - 1212839869, 1212970949, 1213102027, 1213233121, 1213364197, 1213495273, 1213626431, - 1213757527, 1213888649, 1214019739, 1214150813, 1214281919, 1214413033, 1214544109, - 1214675207, 1214806289, 1214937389, 1215068473, 1215199561, 1215330661, 1215461761, - 1215592841, 1215723913, 1215854993, 1215986071, 1216117159, 1216248233, 1216379369, - 1216510441, 1216641529, 1216772617, 1216903759, 1217034853, 1217165947, 1217297021, - 1217428103, 1217559181, 1217690291, 1217821399, 1217952473, 1218083551, 1218214661, - 1218345769, 1218476851, 1218607937, 1218739009, 1218870089, 1219001177, 1219132289, - 1219263377, 1219394497, 1219525579, 1219656671, 1219787747, 1219918837, 1220049977, - 1220181097, 1220312201, 1220443307, 1220574379, 1220705459, 1220836549, 1220967667, - 1221098771, 1221229843, 1221360961, 1221492037, 1221623131, 1221754213, 1221885289, - 1222016399, 1222147499, 1222278583, 1222409687, 1222540763, 1222671839, 1222802929, - 1222934017, 1223065117, 1223196211, 1223327297, 1223458373, 1223589449, 1223720521, - 1223851667, 1223982757, 1224113851, 1224244979, 1224376067, 1224507139, 1224638213, - 1224769289, 1224900367, 1225031443, 1225162567, 1225293659, 1225424731, 1225555813, - 1225686899, 1225817981, 1225949069, 1226080181, 1226211269, 1226342357, 1226473433, - 1226604517, 1226735603, 1226866717, 1226997803, 1227128879, 1227259973, 1227391063, - 1227522143, 1227653309, 1227784391, 1227915463, 1228046549, 1228177627, 1228308707, - 1228439791, 1228570867, 1228701959, 1228833043, 1228964161, 1229095247, 1229226331, - 1229357411, 1229488493, 1229619569, 1229750651, 1229881789, 1230012863, 1230143947, - 1230275027, 1230406117, 1230537233, 1230668317, 1230799397, 1230930469, 1231061549, - 1231192631, 1231323721, 1231454813, 1231585931, 1231717021, 1231848097, 1231979173, - 1232110267, 1232241341, 1232372461, 1232503541, 1232634659, 1232765783, 1232896859, - 1233027931, 1233159017, 1233290089, 1233421181, 1233552253, 1233683329, 1233814409, - 1233945491, 1234076567, 1234207649, 1234338727, 1234469801, 1234600903, 1234731997, - 1234863089, 1234994191, 1235125271, 1235256371, 1235387453, 1235518561, 1235649647, - 1235780743, 1235911819, 1236043019, 1236174109, 1236305209, 1236436283, 1236567359, - 1236698461, 1236829549, 1236960649, 1237091743, 1237222849, 1237353937, 1237485037, - 1237616147, 1237747241, 1237878319, 1238009407, 1238140489, 1238271571, 1238402647, - 1238533763, 1238664857, 1238796011, 1238927089, 1239058187, 1239189269, 1239320351, - 1239451489, 1239582569, 1239713659, 1239844733, 1239975817, 1240106921, 1240238029, - 1240369127, 1240500211, 1240631297, 1240762373, 1240893481, 1241024557, 1241155631, - 1241286731, 1241417813, 1241549011, 1241680123, 1241811203, 1241942281, 1242073367, - 1242204443, 1242335527, 1242466609, 1242597683, 1242728761, 1242859861, 1242990943, - 1243122017, 1243253101, 1243384183, 1243515257, 1243646351, 1243777439, 1243908521, - 1244039609, 1244170727, 1244301809, 1244432909, 1244563987, 1244695063, 1244826137, - 1244957213, 1245088319, 1245219401, 1245350531, 1245481631, 1245612703, 1245743813, - 1245874901, 1246005977, 1246137071, 1246268143, 1246399229, 1246530301, 1246661413, - 1246792501, 1246923577, 1247054671, 1247185757, 1247316871, 1247447953, 1247579027, - 1247710099, 1247841197, 1247972281, 1248103393, 1248234467, 1248365563, 1248496637, - 1248627719, 1248758809, 1248889883, 1249020967, 1249152049, 1249283137, 1249414237, - 1249545343, 1249676437, 1249807529, 1249938601, 1250069707, 1250200793, 1250331869, - 1250462947, 1250594039, 1250725123, 1250856199, 1250987281, 1251118369, 1251249443, - 1251380519, 1251511669, 1251642751, 1251773833, 1251904921, 1252036001, 1252167073, - 1252298161, 1252429301, 1252560403, 1252691483, 1252822567, 1252953643, 1253084783, - 1253215861, 1253346959, 1253478067, 1253609141, 1253740217, 1253871293, 1254002377, - 1254133457, 1254264533, 1254395627, 1254526709, 1254657839, 1254788917, 1254920003, - 1255051079, 1255182163, 1255313243, 1255444321, 1255575403, 1255706489, 1255837573, - 1255968673, 1256099749, 1256230837, 1256361929, 1256493037, 1256624137, 1256755211, - 1256886311, 1257017387, 1257148469, 1257279559, 1257410659, 1257541739, 1257672893, - 1257803969, 1257935053, 1258066129, 1258197203, 1258328297, 1258459369, 1258590449, - 1258721543, 1258852717, 1258983823, 1259114947, 1259246029, 1259377109, 1259508191, - 1259639263, 1259770349, 1259901427, 1260032507, 1260163601, 1260294691, 1260425767, - 1260556853, 1260687931, 1260819017, 1260950101, 1261081177, 1261212259, 1261343351, - 1261474439, 1261605523, 1261736633, 1261867757, 1261998841, 1262129917, 1262260997, - 1262392093, 1262523167, 1262654251, 1262785327, 1262916419, 1263047519, 1263178597, - 1263309683, 1263440771, 1263571843, 1263702917, 1263833993, 1263965089, 1264096187, - 1264227311, 1264358419, 1264489511, 1264620593, 1264751681, 1264882783, 1265013859, - 1265144939, 1265276011, 1265407093, 1265538227, 1265669299, 1265800373, 1265931463, - 1266062543, 1266193619, 1266324691, 1266455767, 1266586843, 1266717917, 1266849019, - 1266980149, 1267111249, 1267242329, 1267373423, 1267504531, 1267635643, 1267766719, - 1267897823, 1268028913, 1268159989, 1268291071, 1268422151, 1268553229, 1268684311, - 1268815393, 1268946473, 1269077581, 1269208679, 1269339751, 1269470833, 1269601913, - 1269733027, 1269864133, 1269995219, 1270126301, 1270257377, 1270388467, 1270519541, - 1270650649, 1270781753, 1270912837, 1271043937, 1271175013, 1271306107, 1271437199, - 1271568283, 1271699369, 1271830477, 1271961553, 1272092651, 1272223723, 1272354827, - 1272485933, 1272617033, 1272748111, 1272879229, 1273010341, 1273141421, 1273272503, - 1273403611, 1273534729, 1273665803, 1273796903, 1273928003, 1274059081, 1274190161, - 1274321267, 1274452351, 1274583439, 1274714527, 1274845601, 1274976691, 1275107819, - 1275238897, 1275369989, 1275501083, 1275632161, 1275763261, 1275894359, 1276025431, - 1276156517, 1276287599, 1276418677, 1276549787, 1276680859, 1276811941, 1276943027, - 1277074159, 1277205233, 1277336383, 1277467481, 1277598571, 1277729737, 1277860813, - 1277991893, 1278122981, 1278254099, 1278385183, 1278516269, 1278647347, 1278778421, - 1278909493, 1279040569, 1279171667, 1279302793, 1279433867, 1279564991, 1279696091, - 1279827173, 1279958261, 1280089339, 1280220433, 1280351519, 1280482591, 1280613667, - 1280744747, 1280875847, 1281006989, 1281138107, 1281269179, 1281400271, 1281531367, - 1281662467, 1281793543, 1281924653, 1282055737, 1282186811, 1282317893, 1282448969, - 1282580053, 1282711187, 1282842269, 1282973389, 1283104469, 1283235563, 1283366639, - 1283497711, 1283628791, 1283759923, 1283891023, 1284022111, 1284153217, 1284284291, - 1284415367, 1284546451, 1284677543, 1284808619, 1284939749, 1285070879, 1285201969, - 1285333043, 1285464127, 1285595249, 1285726331, 1285857403, 1285988503, 1286119591, - 1286250683, 1286381791, 1286512891, 1286643977, 1286775107, 1286906191, 1287037303, - 1287168397, 1287299477, 1287430567, 1287561647, 1287692741, 1287823841, 1287954949, - 1288086091, 1288217167, 1288348253, 1288479431, 1288610509, 1288741613, 1288872691, - 1289003783, 1289134921, 1289266003, 1289397103, 1289528203, 1289659291, 1289790377, - 1289921519, 1290052591, 1290183667, 1290314741, 1290445823, 1290576899, 1290708007, - 1290839129, 1290970217, 1291101293, 1291232417, 1291363499, 1291494587, 1291625663, - 1291756793, 1291887887, 1292018983, 1292150099, 1292281183, 1292412283, 1292543363, - 1292674463, 1292805557, 1292936633, 1293067723, 1293198901, 1293330001, 1293461083, - 1293592171, 1293723253, 1293854327, 1293985411, 1294116493, 1294247573, 1294378669, - 1294509757, 1294640849, 1294771921, 1294902997, 1295034079, 1295165159, 1295296237, - 1295427323, 1295558437, 1295689513, 1295820593, 1295951689, 1296082783, 1296213857, - 1296344941, 1296476021, 1296607097, 1296738169, 1296869257, 1297000333, 1297131413, - 1297262497, 1297393577, 1297524653, 1297655743, 1297786879, 1297917967, 1298049113, - 1298180201, 1298311283, 1298442359, 1298573447, 1298704531, 1298835667, 1298966789, - 1299097867, 1299228947, 1299360077, 1299491161, 1299622237, 1299753319, 1299884393, - 1300015481, 1300146557, 1300277651, 1300408723, 1300539809, 1300670893, 1300801981, - 1300933063, 1301064139, 1301195279, 1301326409, 1301457529, 1301588623, 1301719703, - 1301850779, 1301981867, 1302112939, 1302244033, 1302375143, 1302506273, 1302637387, - 1302768541, 1302899641, 1303030721, 1303161823, 1303292927, 1303424009, 1303555111, - 1303686211, 1303817287, 1303948367, 1304079443, 1304210527, 1304341601, 1304472691, - 1304603777, 1304734859, 1304865941, 1304997017, 1305128137, 1305259211, 1305390287, - 1305521363, 1305652463, 1305783553, 1305914639, 1306045759, 1306176863, 1306307971, - 1306439059, 1306570193, 1306701271, 1306832357, 1306963429, 1307094511, 1307225597, - 1307356679, 1307487751, 1307618861, 1307749967, 1307881051, 1308012131, 1308143203, - 1308274277, 1308405361, 1308536503, 1308667589, 1308798661, 1308929789, 1309060903, - 1309191977, 1309323053, 1309454149, 1309585307, 1309716391, 1309847491, 1309978583, - 1310109667, 1310240773, 1310371877, 1310502961, 1310634037, 1310765111, 1310896183, - 1311027271, 1311158351, 1311289423, 1311420521, 1311551623, 1311682699, 1311813773, - 1311944849, 1312075927, 1312207003, 1312338077, 1312469149, 1312600249, 1312731323, - 1312862413, 1312993489, 1313124569, 1313255681, 1313386757, 1313517841, 1313648953, - 1313780029, 1313911111, 1314042209, 1314173281, 1314304363, 1314435491, 1314566593, - 1314697667, 1314828743, 1314959827, 1315090901, 1315221979, 1315353073, 1315484153, - 1315615241, 1315746319, 1315877393, 1316008469, 1316139547, 1316270621, 1316401721, - 1316532793, 1316663879, 1316795003, 1316926099, 1317057187, 1317188267, 1317319351, - 1317450427, 1317581557, 1317712639, 1317843721, 1317974809, 1318105889, 1318236971, - 1318368047, 1318499159, 1318630237, 1318761361, 1318892447, 1319023549, 1319154649, - 1319285743, 1319416817, 1319547899, 1319678993, 1319810069, 1319941141, 1320072239, - 1320203359, 1320334471, 1320465563, 1320596657, 1320727741, 1320858817, 1320989897, - 1321120973, 1321252057, 1321383131, 1321514209, 1321645307, 1321776389, 1321907467, - 1322038567, 1322169647, 1322300719, 1322431801, 1322562877, 1322693971, 1322825047, - 1322956121, 1323087197, 1323218279, 1323349351, 1323480493, 1323611581, 1323742661, - 1323873743, 1324004833, 1324135919, 1324267027, 1324398137, 1324529233, 1324660313, - 1324791407, 1324922491, 1325053571, 1325184643, 1325315723, 1325446813, 1325577901, - 1325708999, 1325840077, 1325971159, 1326102269, 1326233347, 1326364423, 1326495503, - 1326626593, 1326757711, 1326888803, 1327019879, 1327150967, 1327282049, 1327413121, - 1327544213, 1327675301, 1327806373, 1327937459, 1328068531, 1328199629, 1328330777, - 1328461859, 1328593001, 1328724079, 1328855161, 1328986247, 1329117319, 1329248429, - 1329379523, 1329510599, 1329641683, 1329772789, 1329903899, 1330035011, 1330166083, - 1330297169, 1330428247, 1330559333, 1330690409, 1330821493, 1330952573, 1331083651, - 1331214751, 1331345831, 1331476919, 1331608001, 1331739121, 1331870201, 1332001283, - 1332132383, 1332263459, 1332394549, 1332525643, 1332656783, 1332787891, 1332919033, - 1333050107, 1333181231, 1333312313, 1333443421, 1333574507, 1333705619, 1333836697, - 1333967779, 1334098859, 1334229947, 1334361023, 1334492099, 1334623187, 1334754277, - 1334885353, 1335016429, 1335147509, 1335278621, 1335409697, 1335540779, 1335671863, - 1335803009, 1335934081, 1336065163, 1336196263, 1336327351, 1336458439, 1336589531, - 1336720643, 1336851731, 1336982839, 1337113919, 1337245031, 1337376113, 1337507189, - 1337638331, 1337769409, 1337900491, 1338031573, 1338162671, 1338293753, 1338424861, - 1338555941, 1338687017, 1338818093, 1338949187, 1339080277, 1339211351, 1339342439, - 1339473511, 1339604587, 1339735669, 1339866751, 1339997831, 1340128913, 1340259997, - 1340391077, 1340522149, 1340653231, 1340784311, 1340915383, 1341046493, 1341177589, - 1341308663, 1341439793, 1341570877, 1341701957, 1341833081, 1341964181, 1342095257, - 1342226339, 1342357411, 1342488517, 1342619609, 1342750699, 1342881781, 1343012873, - 1343143951, 1343275061, 1343406157, 1343537231, 1343668331, 1343799437, 1343930509, - 1344061673, 1344192757, 1344323861, 1344454933, 1344586007, 1344717091, 1344848179, - 1344979271, 1345110413, 1345241537, 1345372667, 1345503773, 1345634869, 1345765973, - 1345897051, 1346028133, 1346159231, 1346290321, 1346421397, 1346552479, 1346683567, - 1346814643, 1346945737, 1347076813, 1347207899, 1347338977, 1347470051, 1347601139, - 1347732241, 1347863317, 1347994391, 1348125463, 1348256537, 1348387619, 1348518733, - 1348649821, 1348780897, 1348911979, 1349043077, 1349174159, 1349305247, 1349436329, - 1349567407, 1349698499, 1349829583, 1349960663, 1350091739, 1350222829, 1350353957, - 1350485051, 1350616147, 1350747311, 1350878383, 1351009463, 1351140563, 1351271651, - 1351402751, 1351533851, 1351664929, 1351796003, 1351927123, 1352058203, 1352189327, - 1352320399, 1352451487, 1352582563, 1352713643, 1352844739, 1352975857, 1353106939, - 1353238021, 1353369131, 1353500221, 1353631309, 1353762383, 1353893501, 1354024589, - 1354155679, 1354286761, 1354417843, 1354548917, 1354680007, 1354811119, 1354942201, - 1355073283, 1355204359, 1355335441, 1355466533, 1355597623, 1355728739, 1355859811, - 1355990887, 1356121961, 1356253033, 1356384149, 1356515243, 1356646327, 1356777437, - 1356908519, 1357039609, 1357170691, 1357301791, 1357432871, 1357563953, 1357695043, - 1357826117, 1357957217, 1358088301, 1358219411, 1358350531, 1358481623, 1358612699, - 1358743787, 1358874871, 1359005983, 1359137057, 1359268147, 1359399269, 1359530383, - 1359661469, 1359792547, 1359923647, 1360054741, 1360185829, 1360316929, 1360448017, - 1360579111, 1360710193, 1360841311, 1360972391, 1361103517, 1361234621, 1361365703, - 1361496847, 1361627983, 1361759071, 1361890147, 1362021223, 1362152303, 1362283397, - 1362414491, 1362545603, 1362676717, 1362807811, 1362938891, 1363069963, 1363201061, - 1363332143, 1363463219, 1363594321, 1363725401, 1363856479, 1363987609, 1364118689, - 1364249771, 1364380859, 1364511931, 1364643013, 1364774087, 1364905177, 1365036251, - 1365167327, 1365298411, 1365429487, 1365560563, 1365691667, 1365822739, 1365953819, - 1366084897, 1366215989, 1366347083, 1366478159, 1366609241, 1366740317, 1366871411, - 1367002499, 1367133577, 1367264659, 1367395759, 1367526851, 1367657933, 1367789053, - 1367920139, 1368051227, 1368182311, 1368313421, 1368444523, 1368575597, 1368706681, - 1368837781, 1368968863, 1369099939, 1369231063, 1369362149, 1369493269, 1369624351, - 1369755461, 1369886549, 1370017643, 1370148719, 1370279797, 1370410871, 1370541947, - 1370673019, 1370804107, 1370935219, 1371066331, 1371197431, 1371328513, 1371459599, - 1371590761, 1371721843, 1371852943, 1371984043, 1372115119, 1372246193, 1372377269, - 1372508419, 1372639493, 1372770601, 1372901689, 1373032783, 1373163887, 1373295023, - 1373426113, 1373557193, 1373688287, 1373819383, 1373950469, 1374081557, 1374212641, - 1374343717, 1374474817, 1374605899, 1374736973, 1374868109, 1374999251, 1375130353, - 1375261457, 1375392547, 1375523641, 1375654717, 1375785799, 1375916903, 1376047993, - 1376179081, 1376310197, 1376441273, 1376572349, 1376703431, 1376834507, 1376965591, - 1377096671, 1377227767, 1377358847, 1377489943, 1377621029, 1377752107, 1377883183, - 1378014293, 1378145383, 1378276469, 1378407551, 1378538647, 1378669739, 1378800821, - 1378931927, 1379063017, 1379194109, 1379325271, 1379456359, 1379587441, 1379718547, - 1379849633, 1379980727, 1380111823, 1380242921, 1380373993, 1380505073, 1380636149, - 1380767279, 1380898369, 1381029451, 1381160527, 1381291603, 1381422689, 1381553791, - 1381684873, 1381815959, 1381947031, 1382078123, 1382209217, 1382340293, 1382471413, - 1382602523, 1382733629, 1382864723, 1382995811, 1383126887, 1383257963, 1383389047, - 1383520121, 1383651211, 1383782287, 1383913403, 1384044499, 1384175591, 1384306673, - 1384437779, 1384568851, 1384699937, 1384831031, 1384962127, 1385093209, 1385224297, - 1385355397, 1385486521, 1385617619, 1385748737, 1385879839, 1386010937, 1386142027, - 1386273113, 1386404203, 1386535331, 1386666403, 1386797483, 1386928577, 1387059659, - 1387190731, 1387321847, 1387452923, 1387584001, 1387715101, 1387846183, 1387977259, - 1388108333, 1388239409, 1388370491, 1388501567, 1388632639, 1388763721, 1388894827, - 1389025997, 1389157117, 1389288193, 1389419281, 1389550361, 1389681463, 1389812539, - 1389943627, 1390074727, 1390205801, 1390336873, 1390467971, 1390599043, 1390730147, - 1390861223, 1390992313, 1391123387, 1391254471, 1391385547, 1391516627, 1391647709, - 1391778793, 1391909891, 1392040987, 1392172219, 1392303307, 1392434411, 1392565487, - 1392696563, 1392827659, 1392958741, 1393089821, 1393220897, 1393351969, 1393483043, - 1393614121, 1393745203, 1393876307, 1394007401, 1394138513, 1394269621, 1394400697, - 1394531773, 1394662859, 1394793931, 1394925013, 1395056087, 1395187193, 1395318289, - 1395449371, 1395580463, 1395711547, 1395842639, 1395973721, 1396104793, 1396235873, - 1396366957, 1396498049, 1396629127, 1396760221, 1396891367, 1397022439, 1397153521, - 1397284597, 1397415673, 1397546749, 1397677871, 1397808953, 1397940079, 1398071161, - 1398202249, 1398333353, 1398464453, 1398595543, 1398726619, 1398857737, 1398988813, - 1399119889, 1399250971, 1399382071, 1399513169, 1399644241, 1399775327, 1399906399, - 1400037503, 1400168579, 1400299661, 1400430761, 1400561861, 1400692987, 1400824109, - 1400955197, 1401086273, 1401217361, 1401348449, 1401479533, 1401610621, 1401741697, - 1401872821, 1402003903, 1402134977, 1402266053, 1402397131, 1402528217, 1402659289, - 1402790371, 1402921453, 1403052557, 1403183629, 1403314729, 1403445833, 1403576917, - 1403708029, 1403839147, 1403970223, 1404101329, 1404232421, 1404363517, 1404494591, - 1404625681, 1404756757, 1404887831, 1405018913, 1405150007, 1405281113, 1405412207, - 1405543291, 1405674367, 1405805441, 1405936513, 1406067587, 1406198663, 1406329747, - 1406460823, 1406591941, 1406723041, 1406854117, 1406985197, 1407116273, 1407247349, - 1407378421, 1407509501, 1407640583, 1407771691, 1407902773, 1408033859, 1408164941, - 1408296047, 1408427129, 1408558231, 1408689361, 1408820443, 1408951553, 1409082637, - 1409213713, 1409344801, 1409475911, 1409606987, 1409738119, 1409869261, 1410000407, - 1410131479, 1410262561, 1410393637, 1410524747, 1410655819, 1410786899, 1410918001, - 1411049111, 1411180229, 1411311323, 1411442401, 1411573477, 1411704551, 1411835653, - 1411966729, 1412097853, 1412228933, 1412360029, 1412491147, 1412622251, 1412753323, - 1412884397, 1413015479, 1413146551, 1413277633, 1413408707, 1413539797, 1413670871, - 1413801959, 1413933047, 1414064123, 1414195199, 1414326293, 1414457389, 1414588463, - 1414719571, 1414850669, 1414981747, 1415112823, 1415243917, 1415374991, 1415506063, - 1415637193, 1415768273, 1415899357, 1416030437, 1416161531, 1416292607, 1416423709, - 1416554791, 1416685877, 1416816977, 1416948053, 1417079141, 1417210213, 1417341293, - 1417472401, 1417603477, 1417734557, 1417865629, 1417996709, 1418127797, 1418258879, - 1418389981, 1418521103, 1418652197, 1418783279, 1418914379, 1419045473, 1419176573, - 1419307691, 1419438773, 1419569863, 1419700937, 1419832013, 1419963101, 1420094189, - 1420225267, 1420356347, 1420487441, 1420618517, 1420749613, 1420880693, 1421011807, - 1421142907, 1421274017, 1421405099, 1421536187, 1421667287, 1421798453, 1421929541, - 1422060637, 1422191737, 1422322831, 1422453913, 1422584987, 1422716059, 1422847133, - 1422978209, 1423109333, 1423240433, 1423371581, 1423502681, 1423633763, 1423764851, - 1423895923, 1424026999, 1424158081, 1424289187, 1424420267, 1424551351, 1424682443, - 1424813519, 1424944601, 1425075697, 1425206807, 1425337897, 1425468983, 1425600061, - 1425731149, 1425862259, 1425993403, 1426124501, 1426255573, 1426386659, 1426517749, - 1426648897, 1426779973, 1426911049, 1427042147, 1427173229, 1427304311, 1427435389, - 1427566477, 1427697571, 1427828653, 1427959733, 1428090889, 1428222011, 1428353089, - 1428484171, 1428615257, 1428746339, 1428877423, 1429008517, 1429139603, 1429270681, - 1429401773, 1429532857, 1429663931, 1429795019, 1429926133, 1430057231, 1430188321, - 1430319403, 1430450479, 1430581561, 1430712649, 1430843741, 1430974817, 1431105889, - 1431236981, 1431368063, 1431499141, 1431630217, 1431761327, 1431892403, 1432023491, - 1432154587, 1432285663, 1432416737, 1432547861, 1432678943, 1432810037, 1432941109, - 1433072189, 1433203267, 1433334349, 1433465437, 1433596513, 1433727599, 1433858689, - 1433989789, 1434120871, 1434251969, 1434383087, 1434514171, 1434645253, 1434776327, - 1434907427, 1435038503, 1435169599, 1435300673, 1435431749, 1435562827, 1435693927, - 1435825009, 1435956097, 1436087207, 1436218321, 1436349401, 1436480491, 1436611573, - 1436742653, 1436873731, 1437004817, 1437135899, 1437266977, 1437398069, 1437529183, - 1437660269, 1437791357, 1437922433, 1438053509, 1438184599, 1438315687, 1438446781, - 1438577873, 1438708979, 1438840061, 1438971133, 1439102209, 1439233343, 1439364439, - 1439495539, 1439626619, 1439757713, 1439888819, 1440019927, 1440151019, 1440282131, - 1440413257, 1440544397, 1440675469, 1440806557, 1440937639, 1441068719, 1441199833, - 1441330927, 1441462007, 1441593091, 1441724191, 1441855273, 1441986347, 1442117437, - 1442248529, 1442379607, 1442510681, 1442641763, 1442772839, 1442903921, 1443034993, - 1443166099, 1443297199, 1443428303, 1443559379, 1443690461, 1443821539, 1443952621, - 1444083701, 1444214773, 1444345849, 1444476931, 1444608007, 1444739113, 1444870187, - 1445001263, 1445132369, 1445263453, 1445394527, 1445525611, 1445656703, 1445787781, - 1445918891, 1446049981, 1446181057, 1446312137, 1446443213, 1446574301, 1446705383, - 1446836467, 1446967583, 1447098661, 1447229741, 1447360823, 1447491901, 1447623011, - 1447754089, 1447885169, 1448016263, 1448147353, 1448278441, 1448409517, 1448540609, - 1448671699, 1448802779, 1448933869, 1449064949, 1449196027, 1449327101, 1449458173, - 1449589261, 1449720379, 1449851461, 1449982579, 1450113653, 1450244753, 1450375847, - 1450506943, 1450638023, 1450769101, 1450900177, 1451031317, 1451162441, 1451293531, - 1451424629, 1451555713, 1451686813, 1451817889, 1451948969, 1452080053, 1452211141, - 1452342233, 1452473327, 1452604411, 1452735563, 1452866647, 1452997727, 1453128851, - 1453259953, 1453391029, 1453522127, 1453653203, 1453784281, 1453915373, 1454046469, - 1454177561, 1454308679, 1454439829, 1454570903, 1454701979, 1454833073, 1454964151, - 1455095227, 1455226313, 1455357391, 1455488501, 1455619579, 1455750697, 1455881773, - 1456012853, 1456143929, 1456275001, 1456406089, 1456537171, 1456668247, 1456799321, - 1456930421, 1457061497, 1457192573, 1457323649, 1457454767, 1457585887, 1457716973, - 1457848061, 1457979163, 1458110243, 1458241319, 1458372403, 1458503477, 1458634589, - 1458765673, 1458896749, 1459027849, 1459158929, 1459290017, 1459421099, 1459552189, - 1459683299, 1459814431, 1459945511, 1460076587, 1460207677, 1460338751, 1460469851, - 1460600923, 1460732069, 1460863141, 1460994233, 1461125363, 1461256499, 1461387607, - 1461518689, 1461649769, 1461780857, 1461911977, 1462043057, 1462174141, 1462305239, - 1462436399, 1462567481, 1462698563, 1462829639, 1462960717, 1463091793, 1463222881, - 1463353961, 1463485043, 1463616179, 1463747281, 1463878379, 1464009467, 1464140549, - 1464271681, 1464402767, 1464533869, 1464664979, 1464796057, 1464927169, 1465058267, - 1465189339, 1465320449, 1465451549, 1465582621, 1465713719, 1465844803, 1465975921, - 1466106997, 1466238071, 1466369143, 1466500219, 1466631301, 1466762389, 1466893489, - 1467024607, 1467155731, 1467286811, 1467417901, 1467548989, 1467680083, 1467811183, - 1467942263, 1468073357, 1468204469, 1468335563, 1468466651, 1468597759, 1468728841, - 1468859939, 1468991011, 1469122093, 1469253199, 1469384309, 1469515381, 1469646463, - 1469777563, 1469908637, 1470039731, 1470170827, 1470301961, 1470433057, 1470564131, - 1470695221, 1470826393, 1470957493, 1471088581, 1471219657, 1471350743, 1471481821, - 1471612897, 1471743983, 1471875061, 1472006161, 1472137273, 1472268383, 1472399477, - 1472530573, 1472661661, 1472792743, 1472923817, 1473054899, 1473185981, 1473317059, - 1473448159, 1473579251, 1473710341, 1473841427, 1473972551, 1474103641, 1474234739, - 1474365833, 1474496911, 1474627993, 1474759073, 1474890191, 1475021291, 1475152379, - 1475283463, 1475414537, 1475545613, 1475676691, 1475807777, 1475938873, 1476069953, - 1476201053, 1476332147, 1476463253, 1476594331, 1476725423, 1476856499, 1476987587, - 1477118663, 1477249751, 1477380911, 1477511989, 1477643071, 1477774157, 1477905259, - 1478036369, 1478167469, 1478298559, 1478429669, 1478560747, 1478691821, 1478822921, - 1478953999, 1479085073, 1479216157, 1479347251, 1479478373, 1479609487, 1479740567, - 1479871643, 1480002737, 1480133821, 1480264909, 1480396003, 1480527121, 1480658203, - 1480789279, 1480920361, 1481051437, 1481182517, 1481313601, 1481444681, 1481575763, - 1481706911, 1481837983, 1481969089, 1482100181, 1482231277, 1482362359, 1482493447, - 1482624527, 1482755641, 1482886721, 1483017799, 1483148881, 1483279961, 1483411057, - 1483542139, 1483673221, 1483804349, 1483935433, 1484066531, 1484197619, 1484328707, - 1484459789, 1484590873, 1484721983, 1484853061, 1484984141, 1485115217, 1485246299, - 1485377401, 1485508477, 1485639557, 1485770647, 1485901763, 1486032851, 1486163947, - 1486295071, 1486426163, 1486557239, 1486688323, 1486819447, 1486950523, 1487081597, - 1487212697, 1487343773, 1487474861, 1487605943, 1487737021, 1487868103, 1487999189, - 1488130271, 1488261349, 1488392431, 1488523507, 1488654613, 1488785707, 1488916801, - 1489047883, 1489178987, 1489310083, 1489441207, 1489572347, 1489703429, 1489834501, - 1489965583, 1490096681, 1490227763, 1490358847, 1490489927, 1490621009, 1490752091, - 1490883223, 1491014309, 1491145387, 1491276469, 1491407543, 1491538649, 1491669731, - 1491800833, 1491931933, 1492063019, 1492194103, 1492325221, 1492456297, 1492587373, - 1492718497, 1492849637, 1492980719, 1493111791, 1493242873, 1493373949, 1493505031, - 1493636107, 1493767199, 1493898271, 1494029353, 1494160463, 1494291569, 1494422647, - 1494553727, 1494684817, 1494815897, 1494946993, 1495078111, 1495209217, 1495340293, - 1495471379, 1495602467, 1495733567, 1495864651, 1495995727, 1496126833, 1496257909, - 1496388983, 1496520059, 1496651137, 1496782237, 1496913311, 1497044389, 1497175513, - 1497306607, 1497437713, 1497568799, 1497699883, 1497830959, 1497962041, 1498093117, - 1498224197, 1498355303, 1498486387, 1498617481, 1498748561, 1498879639, 1499010731, - 1499141849, 1499272921, 1499404007, 1499535097, 1499666213, 1499797291, 1499928403, - 1500059503, 1500190583, 1500321701, 1500452783, 1500583873, 1500714959, 1500846031, - 1500977111, 1501108183, 1501239277, 1501370357, 1501501439, 1501632511, 1501763609, - 1501894697, 1502025773, 1502156867, 1502287979, 1502419067, 1502550143, 1502681237, - 1502812331, 1502943413, 1503074509, 1503205597, 1503336721, 1503467803, 1503598909, - 1503730037, 1503861127, 1503992233, 1504123319, 1504254403, 1504385521, 1504516613, - 1504647689, 1504778773, 1504909871, 1505040961, 1505172041, 1505303119, 1505434193, - 1505565283, 1505696369, 1505827451, 1505958533, 1506089617, 1506220693, 1506351773, - 1506482867, 1506613939, 1506745013, 1506876103, 1507007189, 1507138289, 1507269377, - 1507400449, 1507531547, 1507662659, 1507793803, 1507924879, 1508055979, 1508187053, - 1508318131, 1508449211, 1508580301, 1508711377, 1508842451, 1508973527, 1509104609, - 1509235687, 1509366763, 1509497851, 1509628987, 1509760093, 1509891167, 1510022279, - 1510153361, 1510284439, 1510415513, 1510546601, 1510677683, 1510808869, 1510939949, - 1511071069, 1511202157, 1511333233, 1511464321, 1511595427, 1511726509, 1511857603, - 1511988691, 1512119801, 1512250879, 1512381961, 1512513043, 1512644141, 1512775213, - 1512906287, 1513037363, 1513168439, 1513299527, 1513430629, 1513561703, 1513692781, - 1513823881, 1513954961, 1514086037, 1514217109, 1514348191, 1514479273, 1514610401, - 1514741489, 1514872631, 1515003719, 1515134807, 1515265889, 1515396989, 1515528067, - 1515659143, 1515790219, 1515921299, 1516052371, 1516183499, 1516314601, 1516445677, - 1516576759, 1516707833, 1516838909, 1516970011, 1517101087, 1517232161, 1517363273, - 1517494351, 1517625427, 1517756501, 1517887577, 1518018701, 1518149783, 1518280859, - 1518411941, 1518543031, 1518674111, 1518805231, 1518936313, 1519067387, 1519198459, - 1519329533, 1519460623, 1519591721, 1519722797, 1519853971, 1519985101, 1520116187, - 1520247269, 1520378369, 1520509489, 1520640617, 1520771689, 1520902771, 1521033859, - 1521164941, 1521296041, 1521427151, 1521558263, 1521689353, 1521820427, 1521951517, - 1522082599, 1522213697, 1522344787, 1522475861, 1522606957, 1522738031, 1522869113, - 1523000191, 1523131273, 1523262409, 1523393497, 1523524579, 1523655667, 1523786749, - 1523917841, 1524048937, 1524180013, 1524311093, 1524442189, 1524573329, 1524704407, - 1524835511, 1524966617, 1525097701, 1525228801, 1525359883, 1525490957, 1525622029, - 1525753121, 1525884209, 1526015303, 1526146381, 1526277469, 1526408549, 1526539621, - 1526670697, 1526801779, 1526932867, 1527063943, 1527195029, 1527326107, 1527457193, - 1527588281, 1527719353, 1527850483, 1527981569, 1528112653, 1528243729, 1528374823, - 1528505947, 1528637021, 1528768099, 1528899179, 1529030257, 1529161349, 1529292421, - 1529423501, 1529554573, 1529685659, 1529816731, 1529947813, 1530078917, 1530210023, - 1530341117, 1530472193, 1530603289, 1530734371, 1530865477, 1530996563, 1531127669, - 1531258747, 1531389823, 1531520899, 1531651993, 1531783081, 1531914157, 1532045243, - 1532176319, 1532307397, 1532438489, 1532569573, 1532700649, 1532831731, 1532962819, - 1533093899, 1533224993, 1533356113, 1533487187, 1533618271, 1533749359, 1533880451, - 1534011547, 1534142641, 1534273723, 1534404821, 1534535909, 1534667003, 1534798081, - 1534929199, 1535060281, 1535191363, 1535322457, 1535453533, 1535584607, 1535715691, - 1535846783, 1535977867, 1536108949, 1536240067, 1536371231, 1536502309, 1536633419, - 1536764507, 1536895583, 1537026691, 1537157767, 1537288849, 1537419937, 1537551019, - 1537682117, 1537813243, 1537944319, 1538075401, 1538206477, 1538337557, 1538468641, - 1538599721, 1538730829, 1538861939, 1538993021, 1539124099, 1539255181, 1539386257, - 1539517339, 1539648421, 1539779503, 1539910577, 1540041719, 1540172797, 1540303901, - 1540435009, 1540566091, 1540697183, 1540828271, 1540959367, 1541090449, 1541221543, - 1541352649, 1541483761, 1541614847, 1541745923, 1541877041, 1542008123, 1542139219, - 1542270341, 1542401489, 1542532561, 1542663697, 1542794783, 1542925897, 1543057001, - 1543188137, 1543319233, 1543450309, 1543581401, 1543712473, 1543843583, 1543974671, - 1544105747, 1544236831, 1544367953, 1544499041, 1544630117, 1544761261, 1544892343, - 1545023419, 1545154547, 1545285629, 1545416819, 1545547901, 1545679001, 1545810073, - 1545941161, 1546072243, 1546203317, 1546334411, 1546465483, 1546596631, 1546727719, - 1546858793, 1546989883, 1547120969, 1547252041, 1547383127, 1547514217, 1547645339, - 1547776459, 1547907533, 1548038627, 1548169739, 1548300839, 1548431917, 1548562991, - 1548694093, 1548825167, 1548956243, 1549087327, 1549218413, 1549349513, 1549480601, - 1549611677, 1549742791, 1549873873, 1550004947, 1550136073, 1550267161, 1550398243, - 1550529329, 1550660401, 1550791499, 1550922577, 1551053663, 1551184793, 1551315869, - 1551446983, 1551578069, 1551709163, 1551840259, 1551971363, 1552102459, 1552233533, - 1552364617, 1552495729, 1552626877, 1552757963, 1552889047, 1553020127, 1553151203, - 1553282309, 1553413397, 1553544469, 1553675561, 1553806649, 1553937757, 1554068833, - 1554199909, 1554330997, 1554462071, 1554593153, 1554724243, 1554855331, 1554986417, - 1555117493, 1555248577, 1555379663, 1555510757, 1555641839, 1555772941, 1555904017, - 1556035133, 1556166211, 1556297297, 1556428381, 1556559461, 1556690533, 1556821661, - 1556952757, 1557083833, 1557214913, 1557346019, 1557477113, 1557608189, 1557739279, - 1557870371, 1558001453, 1558132547, 1558263661, 1558394753, 1558525909, 1558656989, - 1558788073, 1558919147, 1559050249, 1559181329, 1559312411, 1559443531, 1559574613, - 1559705689, 1559836769, 1559967859, 1560098933, 1560230027, 1560361129, 1560492221, - 1560623299, 1560754397, 1560885497, 1561016599, 1561147681, 1561278757, 1561409831, - 1561540919, 1561672031, 1561803127, 1561934233, 1562065321, 1562196403, 1562327483, - 1562458561, 1562589641, 1562720713, 1562851793, 1562982923, 1563113999, 1563245077, - 1563376169, 1563507241, 1563638317, 1563769409, 1563900491, 1564031587, 1564162661, - 1564293761, 1564424837, 1564555943, 1564687039, 1564818137, 1564949227, 1565080357, - 1565211451, 1565342549, 1565473649, 1565604739, 1565735813, 1565866891, 1565997977, - 1566129073, 1566260161, 1566391273, 1566522359, 1566653437, 1566784519, 1566915643, - 1567046731, 1567177831, 1567308913, 1567440019, 1567571099, 1567702181, 1567833263, - 1567964339, 1568095427, 1568226529, 1568357629, 1568488771, 1568619851, 1568750923, - 1568881999, 1569013081, 1569144179, 1569275261, 1569406339, 1569537413, 1569668491, - 1569799591, 1569930673, 1570061747, 1570192847, 1570323959, 1570455049, 1570586161, - 1570717237, 1570848317, 1570979437, 1571110531, 1571241653, 1571372729, 1571503807, - 1571634893, 1571765989, 1571897069, 1572028141, 1572159217, 1572290297, 1572421397, - 1572552473, 1572683551, 1572814637, 1572945769, 1573076851, 1573207939, 1573339039, - 1573470149, 1573601269, 1573732343, 1573863419, 1573994509, 1574125583, 1574256713, - 1574387797, 1574518921, 1574650001, 1574781073, 1574912161, 1575043237, 1575174317, - 1575305399, 1575436483, 1575567589, 1575698693, 1575829769, 1575960853, 1576091927, - 1576223029, 1576354207, 1576485299, 1576616389, 1576747477, 1576878553, 1577009639, - 1577140739, 1577271823, 1577402903, 1577533987, 1577665069, 1577796191, 1577927279, - 1578058367, 1578189443, 1578320537, 1578451639, 1578582737, 1578713821, 1578844903, - 1578975977, 1579107071, 1579238153, 1579369277, 1579500401, 1579631527, 1579762609, - 1579893683, 1580024773, 1580155847, 1580286941, 1580418013, 1580549107, 1580680183, - 1580811269, 1580942359, 1581073433, 1581204517, 1581335647, 1581466759, 1581597863, - 1581728969, 1581860041, 1581991127, 1582122203, 1582253279, 1582384357, 1582515449, - 1582646531, 1582777643, 1582908721, 1583039819, 1583170903, 1583302001, 1583433101, - 1583564201, 1583695301, 1583826389, 1583957497, 1584088621, 1584219701, 1584350797, - 1584481901, 1584612979, 1584744053, 1584875141, 1585006229, 1585137317, 1585268389, - 1585399477, 1585530577, 1585661659, 1585792823, 1585923971, 1586055047, 1586186153, - 1586317231, 1586448307, 1586579381, 1586710457, 1586841539, 1586972641, 1587103723, - 1587234829, 1587365903, 1587496979, 1587628057, 1587759137, 1587890209, 1588021297, - 1588152403, 1588283503, 1588414589, 1588545661, 1588676743, 1588807849, 1588938931, - 1589070037, 1589201113, 1589332189, 1589463283, 1589594381, 1589725457, 1589856547, - 1589987657, 1590118811, 1590249883, 1590380963, 1590512039, 1590643129, 1590774203, - 1590905291, 1591036397, 1591167509, 1591298587, 1591429709, 1591560793, 1591691867, - 1591822949, 1591954037, 1592085109, 1592216183, 1592347303, 1592478443, 1592609609, - 1592740687, 1592871767, 1593002843, 1593133963, 1593265067, 1593396143, 1593527231, - 1593658327, 1593789409, 1593920501, 1594051633, 1594182721, 1594313879, 1594444961, - 1594576037, 1594707113, 1594838237, 1594969319, 1595100457, 1595231549, 1595362649, - 1595493727, 1595624803, 1595755877, 1595886959, 1596018037, 1596149123, 1596280207, - 1596411281, 1596542383, 1596673483, 1596804557, 1596935629, 1597066703, 1597197793, - 1597328867, 1597459939, 1597591027, 1597722127, 1597853207, 1597984313, 1598115397, - 1598246497, 1598377591, 1598508677, 1598639759, 1598770837, 1598901919, 1599033011, - 1599164093, 1599295183, 1599426259, 1599557347, 1599688427, 1599819509, 1599950593, - 1600081723, 1600212799, 1600343873, 1600474991, 1600606069, 1600737161, 1600868261, - 1600999343, 1601130449, 1601261551, 1601392631, 1601523733, 1601654867, 1601785949, - 1601917039, 1602048127, 1602179209, 1602310301, 1602441377, 1602572483, 1602703559, - 1602834637, 1602965711, 1603096801, 1603227877, 1603358951, 1603490027, 1603621099, - 1603752193, 1603883293, 1604014393, 1604145493, 1604276579, 1604407669, 1604538779, - 1604669851, 1604800931, 1604932037, 1605063127, 1605194231, 1605325303, 1605456379, - 1605587453, 1605718613, 1605849689, 1605980797, 1606111879, 1606242971, 1606374043, - 1606505123, 1606636211, 1606767289, 1606898399, 1607029471, 1607160547, 1607291633, - 1607422711, 1607553791, 1607684933, 1607816027, 1607947109, 1608078193, 1608209311, - 1608340399, 1608471481, 1608602563, 1608733649, 1608864727, 1608995803, 1609126901, - 1609257977, 1609389049, 1609520161, 1609651237, 1609782323, 1609913407, 1610044487, - 1610175599, 1610306683, 1610437769, 1610568917, 1610700001, 1610831099, 1610962217, - 1611093299, 1611224387, 1611355481, 1611486581, 1611617669, 1611748751, 1611879847, - 1612010927, 1612142003, 1612273087, 1612404169, 1612535251, 1612666327, 1612797427, - 1612928501, 1613059601, 1613190737, 1613321837, 1613452909, 1613583989, 1613715071, - 1613846147, 1613977237, 1614108337, 1614239423, 1614370517, 1614501617, 1614632693, - 1614763769, 1614894857, 1615025933, 1615157039, 1615288121, 1615419199, 1615550303, - 1615681393, 1615812479, 1615943561, 1616074661, 1616205761, 1616336849, 1616468027, - 1616599109, 1616730187, 1616861263, 1616992357, 1617123461, 1617254539, 1617385633, - 1617516713, 1617647789, 1617778907, 1617910027, 1618041137, 1618172263, 1618303363, - 1618434437, 1618565513, 1618696631, 1618827709, 1618958813, 1619089903, 1619220979, - 1619352071, 1619483143, 1619614237, 1619745331, 1619876437, 1620007513, 1620138587, - 1620269671, 1620400751, 1620531823, 1620662899, 1620793997, 1620925079, 1621056163, - 1621187257, 1621318333, 1621449407, 1621580483, 1621711621, 1621842701, 1621973809, - 1622104927, 1622236037, 1622367119, 1622498209, 1622629297, 1622760371, 1622891443, - 1623022517, 1623153589, 1623284681, 1623415763, 1623546853, 1623677953, 1623809041, - 1623940117, 1624071233, 1624202309, 1624333387, 1624464497, 1624595611, 1624726717, - 1624857833, 1624988909, 1625120033, 1625251123, 1625382203, 1625513287, 1625644367, - 1625775457, 1625906561, 1626037639, 1626168721, 1626299803, 1626430877, 1626561949, - 1626693023, 1626824131, 1626955219, 1627086301, 1627217419, 1627348493, 1627479613, - 1627610687, 1627741781, 1627872931, 1628004071, 1628135147, 1628266231, 1628397307, - 1628528381, 1628659469, 1628790551, 1628921639, 1629052783, 1629183883, 1629314993, - 1629446069, 1629577207, 1629708287, 1629839369, 1629970453, 1630101527, 1630232609, - 1630363703, 1630494779, 1630625861, 1630756949, 1630888031, 1631019107, 1631150189, - 1631281277, 1631412353, 1631543437, 1631674523, 1631805607, 1631936699, 1632067793, - 1632198913, 1632330001, 1632461093, 1632592193, 1632723307, 1632854389, 1632985493, - 1633116581, 1633247663, 1633378739, 1633509817, 1633640947, 1633772033, 1633903127, - 1634034229, 1634165321, 1634296423, 1634427517, 1634558617, 1634689691, 1634820767, - 1634951839, 1635082957, 1635214109, 1635345199, 1635476317, 1635607397, 1635738473, - 1635869561, 1636000679, 1636131751, 1636262839, 1636393951, 1636525031, 1636656107, - 1636787179, 1636918271, 1637049347, 1637180423, 1637311517, 1637442589, 1637573669, - 1637704763, 1637835847, 1637966923, 1638097997, 1638229091, 1638360181, 1638491291, - 1638622393, 1638753491, 1638884563, 1639015643, 1639146737, 1639277833, 1639408909, - 1639540003, 1639671079, 1639802161, 1639933249, 1640064343, 1640195429, 1640326517, - 1640457593, 1640588669, 1640719763, 1640850839, 1640981929, 1641113021, 1641244093, - 1641375187, 1641506261, 1641637357, 1641768431, 1641899509, 1642030591, 1642161671, - 1642292779, 1642423921, 1642555007, 1642686079, 1642817161, 1642948247, 1643079323, - 1643210407, 1643341481, 1643472557, 1643603629, 1643734717, 1643865803, 1643996903, - 1644128023, 1644259117, 1644390199, 1644521273, 1644652349, 1644783449, 1644914533, - 1645045607, 1645176679, 1645307777, 1645438849, 1645569941, 1645701023, 1645832131, - 1645963211, 1646094283, 1646225359, 1646356433, 1646487511, 1646618591, 1646749681, - 1646880787, 1647011881, 1647142961, 1647274043, 1647405157, 1647536239, 1647667379, - 1647798497, 1647929573, 1648060693, 1648191767, 1648322849, 1648453957, 1648585051, - 1648716131, 1648847237, 1648978333, 1649109409, 1649240501, 1649371639, 1649502719, - 1649633831, 1649764931, 1649896013, 1650027179, 1650158267, 1650289343, 1650420433, - 1650551549, 1650682633, 1650813739, 1650944831, 1651075919, 1651207021, 1651338103, - 1651469191, 1651600277, 1651731377, 1651862479, 1651993579, 1652124653, 1652255729, - 1652386807, 1652517883, 1652648989, 1652780081, 1652911153, 1653042227, 1653173303, - 1653304403, 1653435491, 1653566569, 1653697681, 1653828779, 1653959887, 1654090969, - 1654222049, 1654353137, 1654484219, 1654615351, 1654746463, 1654877573, 1655008657, - 1655139757, 1655270843, 1655401919, 1655533003, 1655664079, 1655795153, 1655926229, - 1656057301, 1656188377, 1656319487, 1656450569, 1656581681, 1656712753, 1656843827, - 1656974927, 1657106027, 1657237123, 1657368203, 1657499279, 1657630391, 1657761473, - 1657892567, 1658023667, 1658154739, 1658285831, 1658416933, 1658548007, 1658679091, - 1658810177, 1658941283, 1659072367, 1659203453, 1659334531, 1659465629, 1659596711, - 1659727787, 1659858901, 1659990023, 1660121107, 1660252183, 1660383287, 1660514369, - 1660645477, 1660776581, 1660907659, 1661038733, 1661169821, 1661300899, 1661431973, - 1661563063, 1661694149, 1661825237, 1661956319, 1662087391, 1662218501, 1662349583, - 1662480713, 1662611831, 1662742903, 1662873991, 1663005079, 1663136171, 1663267283, - 1663398361, 1663529443, 1663660571, 1663791659, 1663922731, 1664053829, 1664184911, - 1664315987, 1664447077, 1664578177, 1664709253, 1664840327, 1664971421, 1665102493, - 1665233579, 1665364651, 1665495731, 1665626821, 1665757901, 1665888989, 1666020061, - 1666151189, 1666282279, 1666413377, 1666544483, 1666675589, 1666806683, 1666937759, - 1667068831, 1667199923, 1667331011, 1667462171, 1667593243, 1667724343, 1667855437, - 1667986511, 1668117611, 1668248707, 1668379781, 1668510881, 1668641963, 1668773083, - 1668904163, 1669035307, 1669166383, 1669297463, 1669428539, 1669559629, 1669690703, - 1669821779, 1669952861, 1670083949, 1670215033, 1670346127, 1670477209, 1670608301, - 1670739373, 1670870491, 1671001613, 1671132709, 1671263791, 1671394873, 1671526033, - 1671657109, 1671788227, 1671919343, 1672050421, 1672181543, 1672312667, 1672443739, - 1672574833, 1672705933, 1672837021, 1672968131, 1673099213, 1673230327, 1673361401, - 1673492503, 1673623591, 1673754673, 1673885779, 1674016871, 1674147953, 1674279037, - 1674410141, 1674541213, 1674672299, 1674803411, 1674934487, 1675065617, 1675196707, - 1675327789, 1675458871, 1675589957, 1675721029, 1675852133, 1675983209, 1676114281, - 1676245367, 1676376451, 1676507557, 1676638637, 1676769767, 1676900851, 1677031973, - 1677163049, 1677294149, 1677425237, 1677556319, 1677687397, 1677818491, 1677949571, - 1678080653, 1678211737, 1678342817, 1678473893, 1678604969, 1678736099, 1678867171, - 1678998263, 1679129359, 1679260439, 1679391521, 1679522627, 1679653709, 1679784787, - 1679915863, 1680046939, 1680178081, 1680309167, 1680440249, 1680571331, 1680702403, - 1680833501, 1680964577, 1681095667, 1681226741, 1681357841, 1681488917, 1681620007, - 1681751087, 1681882187, 1682013313, 1682144389, 1682275513, 1682406629, 1682537711, - 1682668811, 1682799887, 1682930969, 1683062077, 1683193189, 1683324271, 1683455351, - 1683586427, 1683717517, 1683848591, 1683979663, 1684110739, 1684241821, 1684372897, - 1684503971, 1684635079, 1684766189, 1684897271, 1685028353, 1685159429, 1685290511, - 1685421583, 1685552689, 1685683787, 1685814883, 1685945969, 1686077047, 1686208123, - 1686339199, 1686470287, 1686601361, 1686732451, 1686863527, 1686994601, 1687125719, - 1687256803, 1687387883, 1687519021, 1687650131, 1687781203, 1687912279, 1688043361, - 1688174437, 1688305613, 1688436697, 1688567809, 1688698889, 1688829973, 1688961049, - 1689092131, 1689223219, 1689354307, 1689485411, 1689616541, 1689747613, 1689878699, - 1690009799, 1690140889, 1690271981, 1690403059, 1690534133, 1690665227, 1690796311, - 1690927391, 1691058487, 1691189567, 1691320669, 1691451743, 1691582831, 1691713909, - 1691844983, 1691976061, 1692107159, 1692238231, 1692369337, 1692500413, 1692631541, - 1692762623, 1692893707, 1693024789, 1693155869, 1693286941, 1693418021, 1693549111, - 1693680229, 1693811369, 1693942447, 1694073559, 1694204639, 1694335717, 1694466847, - 1694597923, 1694729017, 1694860127, 1694991271, 1695122357, 1695253477, 1695384571, - 1695515669, 1695646741, 1695777817, 1695908923, 1696039999, 1696171123, 1696302199, - 1696433273, 1696564357, 1696695433, 1696826539, 1696957627, 1697088713, 1697219789, - 1697350861, 1697481991, 1697613079, 1697744173, 1697875247, 1698006319, 1698137417, - 1698268489, 1698399581, 1698530653, 1698661751, 1698792829, 1698923903, 1699055003, - 1699186087, 1699317203, 1699448281, 1699579363, 1699710443, 1699841537, 1699972609, - 1700103707, 1700234803, 1700365889, 1700496977, 1700628049, 1700759149, 1700890231, - 1701021323, 1701152417, 1701283489, 1701414599, 1701545693, 1701676807, 1701807889, - 1701938963, 1702070063, 1702201199, 1702332287, 1702463359, 1702594441, 1702725539, - 1702856621, 1702987703, 1703118797, 1703249893, 1703380967, 1703512103, 1703643181, - 1703774257, 1703905367, 1704036449, 1704167581, 1704298663, 1704429781, 1704560863, - 1704691939, 1704823033, 1704954133, 1705085209, 1705216283, 1705347359, 1705478441, - 1705609513, 1705740593, 1705871711, 1706002783, 1706133883, 1706264957, 1706396039, - 1706527139, 1706658227, 1706789299, 1706920379, 1707051497, 1707182569, 1707313651, - 1707444727, 1707575801, 1707706873, 1707837959, 1707969037, 1708100189, 1708231279, - 1708362361, 1708493441, 1708624531, 1708755617, 1708886701, 1709017813, 1709148893, - 1709279969, 1709411051, 1709542123, 1709673211, 1709804297, 1709935369, 1710066467, - 1710197539, 1710328649, 1710459763, 1710590857, 1710721939, 1710853019, 1710984151, - 1711115249, 1711246321, 1711377457, 1711508569, 1711639649, 1711770721, 1711901831, - 1712032909, 1712163991, 1712295073, 1712426147, 1712557219, 1712688311, 1712819417, - 1712950501, 1713081593, 1713212681, 1713343757, 1713474859, 1713605987, 1713737087, - 1713868181, 1713999257, 1714130357, 1714261441, 1714392529, 1714523623, 1714654709, - 1714785781, 1714916873, 1715047949, 1715179027, 1715310131, 1715441251, 1715572349, - 1715703433, 1715834537, 1715965621, 1716096727, 1716227827, 1716358961, 1716490033, - 1716621119, 1716752227, 1716883321, 1717014407, 1717145491, 1717276567, 1717407641, - 1717538743, 1717669841, 1717800919, 1717932011, 1718063161, 1718194241, 1718325317, - 1718456417, 1718587501, 1718718583, 1718849669, 1718980741, 1719111833, 1719242909, - 1719374003, 1719505079, 1719636209, 1719767321, 1719898403, 1720029481, 1720160579, - 1720291663, 1720422761, 1720553839, 1720684949, 1720816021, 1720947103, 1721078179, - 1721209271, 1721340343, 1721471419, 1721602537, 1721733613, 1721864717, 1721995817, - 1722126899, 1722257993, 1722389087, 1722520169, 1722651247, 1722782389, 1722913471, - 1723044551, 1723175651, 1723306757, 1723437847, 1723568923, 1723700003, 1723831099, - 1723962179, 1724093251, 1724224339, 1724355421, 1724486501, 1724617589, 1724748671, - 1724879749, 1725010871, 1725141947, 1725273023, 1725404113, 1725535193, 1725666323, - 1725797399, 1725928471, 1726059557, 1726190647, 1726321721, 1726452797, 1726583879, - 1726714963, 1726846039, 1726977151, 1727108233, 1727239361, 1727370479, 1727501569, - 1727632651, 1727763761, 1727894851, 1728025933, 1728157019, 1728288113, 1728419233, - 1728550331, 1728681413, 1728812497, 1728943597, 1729074691, 1729205771, 1729336867, - 1729467941, 1729599017, 1729730117, 1729861219, 1729992307, 1730123393, 1730254501, - 1730385583, 1730516687, 1730647769, 1730778871, 1730909993, 1731041069, 1731172171, - 1731303251, 1731434339, 1731565411, 1731696497, 1731827579, 1731958693, 1732089809, - 1732220887, 1732352021, 1732483111, 1732614209, 1732745291, 1732876367, 1733007449, - 1733138549, 1733269691, 1733400787, 1733531893, 1733662967, 1733794057, 1733925143, - 1734056237, 1734187313, 1734318403, 1734449501, 1734580607, 1734711691, 1734842771, - 1734973853, 1735104941, 1735236037, 1735367111, 1735498187, 1735629277, 1735760387, - 1735891463, 1736022539, 1736153623, 1736284721, 1736415823, 1736546939, 1736678011, - 1736809091, 1736940187, 1737071309, 1737202381, 1737333463, 1737464539, 1737595637, - 1737726713, 1737857789, 1737988871, 1738119983, 1738251061, 1738382147, 1738513223, - 1738644301, 1738775483, 1738906567, 1739037653, 1739168729, 1739299829, 1739430907, - 1739562007, 1739693089, 1739824199, 1739955271, 1740086347, 1740217433, 1740348541, - 1740479707, 1740610787, 1740741859, 1740872933, 1741004047, 1741135127, 1741266203, - 1741397293, 1741528381, 1741659457, 1741790543, 1741921619, 1742052691, 1742183797, - 1742314891, 1742445973, 1742577059, 1742708141, 1742839247, 1742970323, 1743101417, - 1743232489, 1743363599, 1743494671, 1743625781, 1743756857, 1743887939, 1744019021, - 1744150181, 1744281281, 1744412353, 1744543429, 1744674541, 1744805641, 1744936733, - 1745067811, 1745198911, 1745330029, 1745461127, 1745592203, 1745723339, 1745854421, - 1745985497, 1746116579, 1746247693, 1746378773, 1746509851, 1746640927, 1746772003, - 1746903077, 1747034183, 1747165309, 1747296389, 1747427477, 1747558601, 1747689679, - 1747820771, 1747951859, 1748082943, 1748214019, 1748345113, 1748476189, 1748607283, - 1748738357, 1748869429, 1749000529, 1749131609, 1749262703, 1749393791, 1749524867, - 1749655969, 1749787069, 1749918151, 1750049227, 1750180301, 1750311373, 1750442467, - 1750573613, 1750704713, 1750835809, 1750966891, 1751097967, 1751229079, 1751360197, - 1751491327, 1751622401, 1751753473, 1751884549, 1752015691, 1752146783, 1752277871, - 1752408947, 1752540059, 1752671143, 1752802229, 1752933317, 1753064399, 1753195481, - 1753326559, 1753457633, 1753588721, 1753719811, 1753850897, 1753981991, 1754113103, - 1754244181, 1754375257, 1754506331, 1754637457, 1754768531, 1754899607, 1755030679, - 1755161761, 1755292841, 1755423931, 1755555013, 1755686143, 1755817247, 1755948319, - 1756079393, 1756210493, 1756341569, 1756472647, 1756603721, 1756734823, 1756865909, - 1756996981, 1757128057, 1757259131, 1757390251, 1757521361, 1757652469, 1757783543, - 1757914643, 1758045719, 1758176803, 1758307907, 1758439003, 1758570091, 1758701171, - 1758832253, 1758963359, 1759094443, 1759225529, 1759356607, 1759487687, 1759618793, - 1759749877, 1759880971, 1760012119, 1760143199, 1760274281, 1760405371, 1760536493, - 1760667673, 1760798789, 1760929901, 1761060997, 1761192071, 1761323153, 1761454237, - 1761585317, 1761716419, 1761847543, 1761978637, 1762109711, 1762240783, 1762371857, - 1762502953, 1762634051, 1762765133, 1762896217, 1763027291, 1763158379, 1763289461, - 1763420563, 1763551649, 1763682743, 1763813881, 1763944961, 1764076037, 1764207127, - 1764338207, 1764469303, 1764600403, 1764731497, 1764862573, 1764993653, 1765124737, - 1765255813, 1765386941, 1765518031, 1765649129, 1765780201, 1765911299, 1766042371, - 1766173459, 1766304583, 1766435659, 1766566733, 1766697841, 1766828941, 1766960023, - 1767091121, 1767222209, 1767353297, 1767484379, 1767615457, 1767746537, 1767877621, - 1768008707, 1768139803, 1768270877, 1768401967, 1768533047, 1768664137, 1768795213, - 1768926287, 1769057363, 1769188469, 1769319569, 1769450647, 1769581733, 1769712817, - 1769843897, 1769974981, 1770106073, 1770237179, 1770368261, 1770499337, 1770630419, - 1770761527, 1770892621, 1771023703, 1771154783, 1771285877, 1771417001, 1771548073, - 1771679159, 1771810241, 1771941341, 1772072453, 1772203571, 1772334671, 1772465753, - 1772596843, 1772727917, 1772859007, 1772990123, 1773121213, 1773252293, 1773383369, - 1773514441, 1773645557, 1773776647, 1773907741, 1774038817, 1774169899, 1774300973, - 1774432057, 1774563169, 1774694303, 1774825379, 1774956499, 1775087603, 1775218759, - 1775349841, 1775480921, 1775612009, 1775743117, 1775874193, 1776005267, 1776136343, - 1776267431, 1776398531, 1776529603, 1776660679, 1776791759, 1776922831, 1777053937, - 1777185031, 1777316111, 1777447193, 1777578277, 1777709357, 1777840439, 1777971521, - 1778102617, 1778233697, 1778364827, 1778495903, 1778627009, 1778758087, 1778889169, - 1779020249, 1779151331, 1779282403, 1779413497, 1779544609, 1779675697, 1779806773, - 1779937853, 1780068937, 1780200047, 1780331131, 1780462213, 1780593307, 1780724417, - 1780855493, 1780986569, 1781117641, 1781248717, 1781379793, 1781510867, 1781641987, - 1781773093, 1781904167, 1782035263, 1782166343, 1782297421, 1782428497, 1782559577, - 1782690659, 1782821731, 1782952841, 1783083919, 1783215011, 1783346111, 1783477217, - 1783608289, 1783739381, 1783870457, 1784001577, 1784132653, 1784263739, 1784394841, - 1784526011, 1784657111, 1784788193, 1784919281, 1785050353, 1785181427, 1785312517, - 1785443633, 1785574711, 1785705793, 1785836873, 1785967957, 1786099061, 1786230181, - 1786361321, 1786492453, 1786623539, 1786754611, 1786885693, 1787016769, 1787147849, - 1787278921, 1787410021, 1787541097, 1787672203, 1787803291, 1787934391, 1788065479, - 1788196583, 1788327689, 1788458761, 1788589837, 1788720917, 1788852011, 1788983089, - 1789114177, 1789245281, 1789376399, 1789507471, 1789638551, 1789769623, 1789900703, - 1790031809, 1790162893, 1790293991, 1790425163, 1790556239, 1790687323, 1790818417, - 1790949497, 1791080593, 1791211729, 1791342809, 1791473951, 1791605059, 1791736139, - 1791867227, 1791998311, 1792129397, 1792260473, 1792391569, 1792522663, 1792653749, - 1792784849, 1792915939, 1793047019, 1793178109, 1793309191, 1793440273, 1793571379, - 1793702489, 1793833597, 1793964673, 1794095761, 1794226877, 1794357991, 1794489079, - 1794620153, 1794751241, 1794882371, 1795013471, 1795144543, 1795275623, 1795406713, - 1795537817, 1795668983, 1795800101, 1795931173, 1796062253, 1796193353, 1796324437, - 1796455559, 1796586647, 1796717731, 1796848817, 1796979889, 1797110963, 1797242063, - 1797373159, 1797504251, 1797635381, 1797766499, 1797897587, 1798028669, 1798159747, - 1798290847, 1798421923, 1798553021, 1798684093, 1798815191, 1798946263, 1799077337, - 1799208409, 1799339527, 1799470633, 1799601721, 1799732797, 1799863883, 1799994961, - 1800126061, 1800257153, 1800388243, 1800519323, 1800650419, 1800781517, 1800912593, - 1801043677, 1801174759, 1801305899, 1801436971, 1801568071, 1801699171, 1801830257, - 1801961333, 1802092417, 1802223509, 1802354591, 1802485681, 1802616763, 1802747861, - 1802878933, 1803010007, 1803141089, 1803272183, 1803403279, 1803534377, 1803665483, - 1803796591, 1803927667, 1804058741, 1804189931, 1804321007, 1804452079, 1804583233, - 1804714313, 1804845391, 1804976483, 1805107561, 1805238641, 1805369771, 1805500843, - 1805631943, 1805763017, 1805894089, 1806025163, 1806156241, 1806287317, 1806418421, - 1806549499, 1806680573, 1806811651, 1806942757, 1807073843, 1807204939, 1807336033, - 1807467127, 1807598203, 1807729307, 1807860389, 1807991467, 1808122541, 1808253613, - 1808384693, 1808515823, 1808646923, 1808778077, 1808909153, 1809040243, 1809171323, - 1809302497, 1809433583, 1809564697, 1809695803, 1809826901, 1809957973, 1810089091, - 1810220183, 1810351259, 1810482341, 1810613491, 1810744567, 1810875667, 1811006741, - 1811137819, 1811268967, 1811400047, 1811531119, 1811662249, 1811793323, 1811924423, - 1812055513, 1812186589, 1812317693, 1812448769, 1812579851, 1812710923, 1812841999, - 1812973079, 1813104151, 1813235267, 1813366363, 1813497443, 1813628567, 1813759643, - 1813890737, 1814021819, 1814152931, 1814284007, 1814415137, 1814546243, 1814677331, - 1814808403, 1814939479, 1815070571, 1815201649, 1815332767, 1815463861, 1815594941, - 1815726083, 1815857171, 1815988259, 1816119341, 1816250419, 1816381499, 1816512601, - 1816643677, 1816774829, 1816905943, 1817037023, 1817168141, 1817299249, 1817430337, - 1817561419, 1817692511, 1817823641, 1817954737, 1818085831, 1818216931, 1818348011, - 1818479101, 1818610177, 1818741271, 1818872359, 1819003441, 1819134539, 1819265611, - 1819396723, 1819527811, 1819658891, 1819789963, 1819921057, 1820052139, 1820183213, - 1820314289, 1820445371, 1820576449, 1820707529, 1820838619, 1820969713, 1821100793, - 1821231877, 1821362957, 1821494047, 1821625147, 1821756241, 1821887341, 1822018423, - 1822149503, 1822280587, 1822411687, 1822542763, 1822673927, 1822805041, 1822936153, - 1823067229, 1823198383, 1823329483, 1823460559, 1823591641, 1823722727, 1823853821, - 1823984923, 1824116003, 1824247127, 1824378217, 1824509299, 1824640373, 1824771463, - 1824902537, 1825033627, 1825164709, 1825295837, 1825426921, 1825557997, 1825689091, - 1825820173, 1825951307, 1826082383, 1826213497, 1826344577, 1826475649, 1826606759, - 1826737831, 1826868947, 1827000037, 1827131123, 1827262201, 1827393289, 1827524371, - 1827655477, 1827786551, 1827917627, 1828048721, 1828179809, 1828310881, 1828441961, - 1828573073, 1828704149, 1828835221, 1828966297, 1829097397, 1829228483, 1829359573, - 1829490661, 1829621771, 1829752843, 1829883931, 1830015023, 1830146119, 1830277193, - 1830408311, 1830539393, 1830670489, 1830801589, 1830932683, 1831063771, 1831194851, - 1831325929, 1831457009, 1831588081, 1831719209, 1831850291, 1831981367, 1832112479, - 1832243591, 1832374673, 1832505751, 1832636837, 1832767913, 1832898989, 1833030071, - 1833161149, 1833292271, 1833423353, 1833554441, 1833685523, 1833816629, 1833947707, - 1834078781, 1834209869, 1834340969, 1834472041, 1834603117, 1834734229, 1834865323, - 1834996399, 1835127499, 1835258599, 1835389687, 1835520761, 1835651849, 1835782931, - 1835914009, 1836045097, 1836176183, 1836307267, 1836438341, 1836569417, 1836700499, - 1836831571, 1836962657, 1837093777, 1837224853, 1837355939, 1837487033, 1837618129, - 1837749211, 1837880287, 1838011361, 1838142433, 1838273509, 1838404609, 1838535689, - 1838666779, 1838797879, 1838928983, 1839060079, 1839191191, 1839322273, 1839453347, - 1839584431, 1839715561, 1839846637, 1839977743, 1840108817, 1840239937, 1840371019, - 1840502101, 1840633247, 1840764323, 1840895411, 1841026511, 1841157607, 1841288711, - 1841419793, 1841550869, 1841681957, 1841813063, 1841944157, 1842075247, 1842206347, - 1842337439, 1842468527, 1842599623, 1842730741, 1842861847, 1842992923, 1843123999, - 1843255079, 1843386151, 1843517239, 1843648327, 1843779409, 1843910489, 1844041601, - 1844172697, 1844303771, 1844434849, 1844565949, 1844697053, 1844828131, 1844959217, - 1845090301, 1845221381, 1845352501, 1845483587, 1845614671, 1845745763, 1845876863, - 1846007941, 1846139023, 1846270133, 1846401233, 1846532321, 1846663453, 1846794533, - 1846925669, 1847056763, 1847187869, 1847318953, 1847450029, 1847581103, 1847712187, - 1847843279, 1847974379, 1848105461, 1848236569, 1848367643, 1848498719, 1848629791, - 1848760871, 1848891971, 1849023047, 1849154147, 1849285231, 1849416311, 1849547437, - 1849678513, 1849809589, 1849940671, 1850071753, 1850202829, 1850333909, 1850464991, - 1850596073, 1850727169, 1850858263, 1850989339, 1851120413, 1851251489, 1851382567, - 1851513659, 1851644749, 1851775901, 1851907007, 1852038109, 1852169197, 1852300273, - 1852431377, 1852562473, 1852693567, 1852824641, 1852955719, 1853086811, 1853217929, - 1853349007, 1853480081, 1853611159, 1853742301, 1853873381, 1854004457, 1854135529, - 1854266621, 1854397693, 1854528799, 1854659923, 1854790997, 1854922081, 1855053191, - 1855184273, 1855315361, 1855446433, 1855577519, 1855708601, 1855839691, 1855970777, - 1856101861, 1856232947, 1856364019, 1856495107, 1856626181, 1856757257, 1856888329, - 1857019433, 1857150541, 1857281617, 1857412717, 1857543817, 1857674909, 1857805987, - 1857937061, 1858068143, 1858199249, 1858330363, 1858461443, 1858592531, 1858723627, - 1858854703, 1858985801, 1859116879, 1859247977, 1859379059, 1859510207, 1859641279, - 1859772359, 1859903447, 1860034543, 1860165631, 1860296717, 1860427817, 1860558893, - 1860689989, 1860821099, 1860952183, 1861083271, 1861214347, 1861345433, 1861476511, - 1861607609, 1861738733, 1861869809, 1862000887, 1862131969, 1862263061, 1862394137, - 1862525279, 1862656351, 1862787431, 1862918509, 1863049597, 1863180673, 1863311759, - 1863442837, 1863573911, 1863705007, 1863836081, 1863967169, 1864098241, 1864229329, - 1864360409, 1864491491, 1864622567, 1864753661, 1864884737, 1865015837, 1865146957, - 1865278031, 1865409107, 1865540197, 1865671319, 1865802403, 1865933501, 1866064579, - 1866195671, 1866326771, 1866457847, 1866589003, 1866720083, 1866851159, 1866982231, - 1867113317, 1867244413, 1867375501, 1867506583, 1867637659, 1867768739, 1867899841, - 1868030939, 1868162039, 1868293159, 1868424247, 1868555341, 1868686433, 1868817521, - 1868948597, 1869079673, 1869210859, 1869341933, 1869473029, 1869604109, 1869735181, - 1869866269, 1869997391, 1870128473, 1870259551, 1870390631, 1870521703, 1870652803, - 1870783879, 1870914979, 1871046091, 1871177249, 1871308321, 1871439419, 1871570497, - 1871701597, 1871832691, 1871963783, 1872094877, 1872225961, 1872357043, 1872488129, - 1872619211, 1872750287, 1872881359, 1873012433, 1873143523, 1873274617, 1873405691, - 1873536767, 1873667839, 1873798931, 1873930027, 1874061107, 1874192209, 1874323289, - 1874454371, 1874585443, 1874716517, 1874847613, 1874978701, 1875109781, 1875240883, - 1875371959, 1875503039, 1875634121, 1875765217, 1875896303, 1876027381, 1876158463, - 1876289537, 1876420619, 1876551707, 1876682779, 1876813859, 1876944947, 1877076031, - 1877207131, 1877338231, 1877469353, 1877600441, 1877731543, 1877862629, 1877993729, - 1878124811, 1878255943, 1878387031, 1878518111, 1878649193, 1878780271, 1878911347, - 1879042439, 1879173521, 1879304597, 1879435669, 1879566751, 1879697861, 1879828943, - 1879960057, 1880091209, 1880222291, 1880353381, 1880484527, 1880615603, 1880746723, - 1880877797, 1881008879, 1881139961, 1881271037, 1881402179, 1881533263, 1881664349, - 1881795427, 1881926509, 1882057609, 1882188703, 1882319809, 1882450883, 1882581977, - 1882713103, 1882844191, 1882975277, 1883106383, 1883237479, 1883368607, 1883499679, - 1883630779, 1883761879, 1883892953, 1884024041, 1884155131, 1884286231, 1884417313, - 1884548387, 1884679481, 1884810559, 1884941633, 1885072711, 1885203791, 1885334873, - 1885465951, 1885597033, 1885728137, 1885859219, 1885990313, 1886121397, 1886252503, - 1886383589, 1886514683, 1886645777, 1886776867, 1886907941, 1887039013, 1887170101, - 1887301183, 1887432289, 1887563369, 1887694451, 1887825523, 1887956611, 1888087697, - 1888218779, 1888349917, 1888481039, 1888612111, 1888743229, 1888874327, 1889005409, - 1889136481, 1889267563, 1889398639, 1889529769, 1889660869, 1889791951, 1889923033, - 1890054109, 1890185201, 1890316277, 1890447359, 1890578441, 1890709537, 1890840631, - 1890971723, 1891102817, 1891233889, 1891364989, 1891496069, 1891627151, 1891758227, - 1891889323, 1892020409, 1892151529, 1892282617, 1892413697, 1892544781, 1892675893, - 1892806969, 1892938043, 1893069127, 1893200207, 1893331283, 1893462359, 1893593431, - 1893724507, 1893855583, 1893986657, 1894117783, 1894248859, 1894379951, 1894511051, - 1894642151, 1894773241, 1894904369, 1895035451, 1895166551, 1895297629, 1895428741, - 1895559817, 1895690941, 1895822113, 1895953193, 1896084283, 1896215401, 1896346489, - 1896477563, 1896608647, 1896739721, 1896870797, 1897001881, 1897132973, 1897264051, - 1897395127, 1897526209, 1897657309, 1897788383, 1897919461, 1898050537, 1898181611, - 1898312693, 1898443777, 1898574877, 1898705971, 1898837051, 1898968163, 1899099269, - 1899230341, 1899361417, 1899492499, 1899623587, 1899754669, 1899885749, 1900016831, - 1900147927, 1900279037, 1900410133, 1900541207, 1900672303, 1900803379, 1900934507, - 1901065583, 1901196667, 1901327741, 1901458817, 1901589889, 1901720969, 1901852041, - 1901983129, 1902114229, 1902245339, 1902376447, 1902507559, 1902638653, 1902769741, - 1902900829, 1903031947, 1903163027, 1903294111, 1903425211, 1903556299, 1903687393, - 1903818503, 1903949609, 1904080709, 1904211811, 1904342959, 1904474053, 1904605139, - 1904736227, 1904867353, 1904998489, 1905129571, 1905260671, 1905391777, 1905522893, - 1905654011, 1905785087, 1905916169, 1906047257, 1906178369, 1906309441, 1906440517, - 1906571599, 1906702673, 1906833751, 1906964827, 1907095943, 1907227033, 1907358107, - 1907489183, 1907620259, 1907751337, 1907882429, 1908013511, 1908144593, 1908275671, - 1908406783, 1908537887, 1908668987, 1908800063, 1908931147, 1909062223, 1909193323, - 1909324409, 1909455503, 1909586579, 1909717651, 1909848749, 1909979831, 1910110921, - 1910242013, 1910373119, 1910504257, 1910635339, 1910766427, 1910897533, 1911028619, - 1911159697, 1911290783, 1911421867, 1911552943, 1911684029, 1911815107, 1911946181, - 1912077257, 1912208357, 1912339433, 1912470529, 1912601627, 1912732709, 1912863791, - 1912994869, 1913125967, 1913257063, 1913388151, 1913519327, 1913650421, 1913781503, - 1913912597, 1914043669, 1914174767, 1914305839, 1914436949, 1914568027, 1914699107, - 1914830213, 1914961297, 1915092371, 1915223473, 1915354549, 1915485631, 1915616749, - 1915747829, 1915878901, 1916009981, 1916141057, 1916272129, 1916403221, 1916534303, - 1916665381, 1916796493, 1916927567, 1917058667, 1917189751, 1917320861, 1917451933, - 1917583039, 1917714131, 1917845203, 1917976283, 1918107413, 1918238519, 1918369619, - 1918500697, 1918631807, 1918762883, 1918893971, 1919025067, 1919156191, 1919287277, - 1919418353, 1919549431, 1919680507, 1919811611, 1919942701, 1920073781, 1920204857, - 1920335969, 1920467069, 1920598181, 1920729257, 1920860329, 1920991421, 1921122499, - 1921253573, 1921384667, 1921515773, 1921646861, 1921777943, 1921909097, 1922040181, - 1922171257, 1922302337, 1922433419, 1922564507, 1922695589, 1922826671, 1922957749, - 1923088823, 1923219901, 1923350993, 1923482083, 1923613171, 1923744269, 1923875377, - 1924006451, 1924137539, 1924268677, 1924399753, 1924530841, 1924661927, 1924792999, - 1924924103, 1925055179, 1925186251, 1925317343, 1925448431, 1925579533, 1925710613, - 1925841707, 1925972779, 1926103919, 1926235007, 1926366083, 1926497197, 1926628271, - 1926759347, 1926890431, 1927021507, 1927152587, 1927283663, 1927414759, 1927545853, - 1927676983, 1927808063, 1927939151, 1928070241, 1928201371, 1928332481, 1928463553, - 1928594641, 1928725811, 1928856887, 1928988023, 1929119111, 1929250207, 1929381283, - 1929512381, 1929643517, 1929774599, 1929905683, 1930036769, 1930167853, 1930298941, - 1930430041, 1930561181, 1930692259, 1930823369, 1930954457, 1931085547, 1931216647, - 1931347723, 1931478827, 1931609899, 1931741003, 1931872087, 1932003167, 1932134273, - 1932265367, 1932396509, 1932527587, 1932658661, 1932789739, 1932920831, 1933051933, - 1933183013, 1933314107, 1933445179, 1933576273, 1933707389, 1933838471, 1933969547, - 1934100661, 1934231753, 1934362861, 1934493973, 1934625103, 1934756183, 1934887267, - 1935018343, 1935149417, 1935280547, 1935411619, 1935542723, 1935673819, 1935804901, - 1935935993, 1936067167, 1936198301, 1936329377, 1936460479, 1936591561, 1936722647, - 1936853729, 1936984919, 1937115991, 1937247083, 1937378203, 1937509307, 1937640403, - 1937771477, 1937902601, 1938033689, 1938164777, 1938295867, 1938426943, 1938558029, - 1938689101, 1938820183, 1938951277, 1939082357, 1939213429, 1939344509, 1939475581, - 1939606703, 1939737781, 1939868857, 1939999939, 1940131099, 1940262209, 1940393303, - 1940524379, 1940655481, 1940786563, 1940917637, 1941048709, 1941179813, 1941310913, - 1941441989, 1941573107, 1941704179, 1941835261, 1941966371, 1942097449, 1942228543, - 1942359631, 1942490717, 1942621819, 1942752901, 1942883989, 1943015083, 1943146159, - 1943277233, 1943408351, 1943539427, 1943670527, 1943801603, 1943932687, 1944063761, - 1944194839, 1944325919, 1944457013, 1944588103, 1944719177, 1944850309, 1944981419, - 1945112503, 1945243591, 1945374721, 1945505839, 1945636933, 1945768067, 1945899173, - 1946030263, 1946161351, 1946292433, 1946423543, 1946554627, 1946685701, 1946816783, - 1946947859, 1947078949, 1947210029, 1947341101, 1947472211, 1947603289, 1947734363, - 1947865499, 1947996571, 1948127689, 1948258771, 1948389887, 1948520993, 1948652119, - 1948783211, 1948914299, 1949045377, 1949176483, 1949307557, 1949438651, 1949569777, - 1949700853, 1949831951, 1949963063, 1950094141, 1950225239, 1950356311, 1950487387, - 1950618479, 1950749569, 1950880643, 1951011757, 1951142857, 1951273937, 1951405021, - 1951536127, 1951667209, 1951798291, 1951929379, 1952060491, 1952191597, 1952322689, - 1952453773, 1952584849, 1952715929, 1952847007, 1952978089, 1953109187, 1953240259, - 1953371333, 1953502409, 1953633481, 1953764569, 1953895661, 1954026791, 1954157873, - 1954288969, 1954420049, 1954551121, 1954682203, 1954813277, 1954944361, 1955075467, - 1955206541, 1955337613, 1955468693, 1955599783, 1955730863, 1955861981, 1955993059, - 1956124139, 1956255211, 1956386287, 1956517411, 1956648497, 1956779593, 1956910667, - 1957041769, 1957172857, 1957303951, 1957435027, 1957566113, 1957697197, 1957828283, - 1957959371, 1958090473, 1958221561, 1958352653, 1958483731, 1958614807, 1958745949, - 1958877023, 1959008143, 1959139261, 1959270343, 1959401417, 1959532493, 1959663569, - 1959794657, 1959925757, 1960056829, 1960187963, 1960319047, 1960450127, 1960581209, - 1960712287, 1960843363, 1960974523, 1961105639, 1961236721, 1961367797, 1961498899, - 1961629973, 1961761069, 1961892151, 1962023237, 1962154333, 1962285407, 1962416479, - 1962547567, 1962678659, 1962809731, 1962940813, 1963071907, 1963203001, 1963334081, - 1963465157, 1963596241, 1963727357, 1963858433, 1963989509, 1964120623, 1964251697, - 1964382809, 1964513891, 1964644987, 1964776061, 1964907157, 1965038233, 1965169307, - 1965300433, 1965431509, 1965562733, 1965693841, 1965824921, 1965955993, 1966087069, - 1966218151, 1966349233, 1966480331, 1966611487, 1966742587, 1966873669, 1967004749, - 1967135839, 1967266919, 1967398061, 1967529133, 1967660209, 1967791283, 1967922361, - 1968053441, 1968184523, 1968315599, 1968446719, 1968577801, 1968708901, 1968840007, - 1968971089, 1969102171, 1969233257, 1969364329, 1969495421, 1969626497, 1969757623, - 1969888727, 1970019811, 1970150887, 1970281967, 1970413061, 1970544133, 1970675249, - 1970806339, 1970937427, 1971068543, 1971199627, 1971330719, 1971461803, 1971592877, - 1971723959, 1971855031, 1971986113, 1972117187, 1972248293, 1972379411, 1972510483, - 1972641557, 1972772639, 1972903717, 1973034793, 1973165869, 1973296943, 1973428033, - 1973559167, 1973690249, 1973821331, 1973952403, 1974083483, 1974214577, 1974345661, - 1974476759, 1974607849, 1974739001, 1974870077, 1975001153, 1975132249, 1975263331, - 1975394411, 1975525493, 1975656589, 1975787677, 1975918793, 1976049877, 1976180957, - 1976312029, 1976443109, 1976574221, 1976705303, 1976836387, 1976967463, 1977098551, - 1977229637, 1977360713, 1977491797, 1977622873, 1977753949, 1977885083, 1978016167, - 1978147253, 1978278349, 1978409431, 1978540507, 1978671587, 1978802663, 1978933793, - 1979064881, 1979195957, 1979327041, 1979458127, 1979589223, 1979720321, 1979851397, - 1979982491, 1980113567, 1980244661, 1980375743, 1980506893, 1980637973, 1980769051, - 1980900127, 1981031201, 1981162273, 1981293361, 1981424441, 1981555553, 1981686653, - 1981817741, 1981948831, 1982079977, 1982211053, 1982342191, 1982473331, 1982604409, - 1982735497, 1982866573, 1982997649, 1983128737, 1983259819, 1983390911, 1983521987, - 1983653059, 1983784157, 1983915253, 1984046333, 1984177417, 1984308503, 1984439581, - 1984570681, 1984701773, 1984832849, 1984963927, 1985095027, 1985226169, 1985357243, - 1985488331, 1985619407, 1985750479, 1985881559, 1986012631, 1986143707, 1986274813, - 1986405913, 1986536999, 1986668083, 1986799169, 1986930271, 1987061359, 1987192453, - 1987323551, 1987454647, 1987585751, 1987716827, 1987847921, 1987979041, 1988110141, - 1988241223, 1988372297, 1988503381, 1988634463, 1988765539, 1988896619, 1989027697, - 1989158771, 1989289877, 1989420989, 1989552077, 1989683153, 1989814237, 1989945323, - 1990076437, 1990207553, 1990338629, 1990469713, 1990600793, 1990731871, 1990862947, - 1990994029, 1991125139, 1991256227, 1991387303, 1991518381, 1991649479, 1991780561, - 1991911639, 1992042739, 1992173831, 1992304903, 1992436021, 1992567097, 1992698171, - 1992829243, 1992960329, 1993091413, 1993222537, 1993353617, 1993484749, 1993615849, - 1993746947, 1993878043, 1994009123, 1994140217, 1994271289, 1994402369, 1994533447, - 1994664541, 1994795629, 1994926729, 1995057821, 1995188911, 1995320071, 1995451189, - 1995582263, 1995713339, 1995844457, 1995975529, 1996106641, 1996237723, 1996368797, - 1996499893, 1996630991, 1996762063, 1996893139, 1997024213, 1997155337, 1997286419, - 1997417507, 1997548601, 1997679683, 1997810761, 1997941867, 1998072949, 1998204067, - 1998335147, 1998466219, 1998597313, 1998728387, 1998859463, 1998990563, 1999121639, - 1999252711, 1999383803, 1999514879, 1999645981, 1999777061, 1999908133, 2000039213, - 2000170301, 2000301427, 2000432501, 2000563573, 2000694677, 2000825753, 2000956871, - 2001087953, 2001219083, 2001350189, 2001481301, 2001612377, 2001743467, 2001874541, - 2002005617, 2002136701, 2002267789, 2002398887, 2002529981, 2002661053, 2002792133, - 2002923217, 2003054293, 2003185369, 2003316449, 2003447527, 2003578627, 2003709703, - 2003840809, 2003971889, 2004103019, 2004234137, 2004365219, 2004496313, 2004627389, - 2004758467, 2004889589, 2005020671, 2005151747, 2005282823, 2005413911, 2005544993, - 2005676083, 2005807187, 2005938269, 2006069389, 2006200487, 2006331559, 2006462641, - 2006593747, 2006724821, 2006855911, 2006986991, 2007118063, 2007249157, 2007380237, - 2007511343, 2007642433, 2007773533, 2007904607, 2008035737, 2008166827, 2008297901, - 2008428973, 2008560061, 2008691161, 2008822247, 2008953371, 2009084449, 2009215561, - 2009346641, 2009477759, 2009608871, 2009739943, 2009871047, 2010002143, 2010133273, - 2010264349, 2010395447, 2010526519, 2010657617, 2010788729, 2010919819, 2011050901, - 2011181981, 2011313053, 2011444151, 2011575257, 2011706341, 2011837417, 2011968509, - 2012099581, 2012230657, 2012361731, 2012492819, 2012623909, 2012755009, 2012886107, - 2013017207, 2013148297, 2013279379, 2013410491, 2013541567, 2013672707, 2013803809, - 2013934939, 2014066013, 2014197091, 2014328191, 2014459331, 2014590421, 2014721503, - 2014852579, 2014983683, 2015114767, 2015245847, 2015376941, 2015508013, 2015639099, - 2015770171, 2015901247, 2016032323, 2016163453, 2016294541, 2016425623, 2016556699, - 2016687809, 2016818899, 2016949981, 2017081057, 2017212133, 2017343219, 2017474313, - 2017605397, 2017736471, 2017867543, 2017998623, 2018129699, 2018260799, 2018391883, - 2018522963, 2018654051, 2018785127, 2018916253, 2019047353, 2019178439, 2019309511, - 2019440597, 2019571681, 2019702791, 2019833867, 2019964951, 2020096037, 2020227137, - 2020358213, 2020489297, 2020620383, 2020751459, 2020882537, 2021013613, 2021144693, - 2021275771, 2021406851, 2021537933, 2021669029, 2021800117, 2021931203, 2022062279, - 2022193361, 2022324439, 2022455641, 2022586763, 2022717859, 2022848953, 2022980033, - 2023111117, 2023242197, 2023373347, 2023504421, 2023635503, 2023766579, 2023897661, - 2024028757, 2024159843, 2024290967, 2024422039, 2024553119, 2024684239, 2024815321, - 2024946403, 2025077491, 2025208567, 2025339649, 2025470723, 2025601847, 2025732953, - 2025864053, 2025995189, 2026126307, 2026257403, 2026388537, 2026519661, 2026650737, - 2026781849, 2026912957, 2027044057, 2027175131, 2027306231, 2027437309, 2027568383, - 2027699461, 2027830561, 2027961697, 2028092791, 2028223867, 2028354947, 2028486049, - 2028617141, 2028748243, 2028879329, 2029010429, 2029141501, 2029272607, 2029403681, - 2029534781, 2029665857, 2029796929, 2029928029, 2030059127, 2030190203, 2030321281, - 2030452379, 2030583481, 2030714563, 2030845637, 2030976719, 2031107797, 2031238921, - 2031370037, 2031501119, 2031632203, 2031763297, 2031894373, 2032025449, 2032156583, - 2032287707, 2032418783, 2032549889, 2032680961, 2032812037, 2032943131, 2033074229, - 2033205301, 2033336377, 2033467511, 2033598617, 2033729689, 2033860771, 2033991863, - 2034122953, 2034254063, 2034385139, 2034516229, 2034647333, 2034778411, 2034909491, - 2035040653, 2035171729, 2035302803, 2035433887, 2035564963, 2035696037, 2035827109, - 2035958191, 2036089313, 2036220419, 2036351491, 2036482571, 2036613659, 2036744747, - 2036875823, 2037006899, 2037137989, 2037269063, 2037400159, 2037531241, 2037662317, - 2037793403, 2037924479, 2038055561, 2038186637, 2038317709, 2038448809, 2038579889, - 2038710967, 2038842053, 2038973141, 2039104217, 2039235347, 2039366419, 2039497511, - 2039628607, 2039759681, 2039890789, 2040021917, 2040152993, 2040284093, 2040415171, - 2040546281, 2040677389, 2040808477, 2040939557, 2041070653, 2041201753, 2041332827, - 2041463929, 2041595021, 2041726133, 2041857241, 2041988317, 2042119481, 2042250563, - 2042381641, 2042512727, 2042643809, 2042774897, 2042905979, 2043037063, 2043168139, - 2043299221, 2043430307, 2043561379, 2043692461, 2043823547, 2043954623, 2044085699, - 2044216771, 2044347857, 2044478929, 2044610021, 2044741133, 2044872211, 2045003291, - 2045134381, 2045265457, 2045396567, 2045527651, 2045658733, 2045789813, 2045920889, - 2046051979, 2046183059, 2046314147, 2046445223, 2046576299, 2046707387, 2046838463, - 2046969539, 2047100617, 2047231729, 2047362829, 2047493909, 2047624987, 2047756093, - 2047887197, 2048018281, 2048149387, 2048280463, 2048411623, 2048542711, 2048673787, - 2048804909, 2048935981, 2049067061, 2049198209, 2049329287, 2049460373, 2049591457, - 2049722537, 2049853621, 2049984719, 2050115849, 2050246931, 2050378003, 2050509101, - 2050640183, 2050771259, 2050902367, 2051033447, 2051164601, 2051295679, 2051426753, - 2051557829, 2051688943, 2051820037, 2051951117, 2052082199, 2052213277, 2052344351, - 2052475471, 2052606551, 2052737663, 2052868739, 2052999821, 2053130941, 2053262111, - 2053393217, 2053524311, 2053655411, 2053786489, 2053917571, 2054048663, 2054179741, - 2054310823, 2054441923, 2054573009, 2054704097, 2054835173, 2054966281, 2055097367, - 2055228509, 2055359587, 2055490669, 2055621781, 2055752869, 2055883943, 2056015043, - 2056146121, 2056277207, 2056408301, 2056539383, 2056670477, 2056801567, 2056932641, - 2057063717, 2057194829, 2057325901, 2057456981, 2057588053, 2057719141, 2057850241, - 2057981357, 2058112523, 2058243623, 2058374711, 2058505783, 2058636857, 2058767951, - 2058899041, 2059030147, 2059161229, 2059292309, 2059423397, 2059554487, 2059685561, - 2059816643, 2059947733, 2060078807, 2060209903, 2060341043, 2060472203, 2060603299, - 2060734387, 2060865463, 2060996549, 2061127631, 2061258709, 2061389783, 2061520859, - 2061651967, 2061783041, 2061914119, 2062045201, 2062176289, 2062307371, 2062438447, - 2062569539, 2062700617, 2062831721, 2062962799, 2063093881, 2063224993, 2063356073, - 2063487157, 2063618231, 2063749349, 2063880443, 2064011569, 2064142651, 2064273727, - 2064404807, 2064535883, 2064666959, 2064798091, 2064929203, 2065060279, 2065191353, - 2065322429, 2065453517, 2065584637, 2065715737, 2065846819, 2065977899, 2066108977, - 2066240081, 2066371159, 2066502233, 2066633323, 2066764411, 2066895499, 2067026573, - 2067157661, 2067288767, 2067419839, 2067550939, 2067682013, 2067813089, 2067944161, - 2068075241, 2068206331, 2068337437, 2068468579, 2068599679, 2068730771, 2068861853, - 2068992931, 2069124011, 2069255087, 2069386177, 2069517349, 2069648479, 2069779601, - 2069910709, 2070041783, 2070172879, 2070304007, 2070435113, 2070566189, 2070697261, - 2070828359, 2070959479, 2071090559, 2071221643, 2071352719, 2071483793, 2071614871, - 2071745957, 2071877039, 2072008117, 2072139191, 2072270323, 2072401399, 2072532491, - 2072663573, 2072794651, 2072925731, 2073056809, 2073187891, 2073318983, 2073450061, - 2073581179, 2073712271, 2073843353, 2073974447, 2074105547, 2074236653, 2074367753, - 2074498849, 2074629937, 2074761011, 2074892111, 2075023183, 2075154269, 2075285347, - 2075416487, 2075547563, 2075678639, 2075809721, 2075940803, 2076071897, 2076202969, - 2076334067, 2076465229, 2076596303, 2076727397, 2076858491, 2076989591, 2077120663, - 2077251773, 2077382849, 2077513931, 2077645019, 2077776097, 2077907171, 2078038243, - 2078169341, 2078300449, 2078431529, 2078562631, 2078693713, 2078824799, 2078955877, - 2079087011, 2079218093, 2079349171, 2079480259, 2079611341, 2079742417, 2079873553, - 2080004627, 2080135723, 2080266883, 2080397981, 2080529081, 2080660171, 2080791247, - 2080922339, 2081053411, 2081184493, 2081315567, 2081446657, 2081577811, 2081708887, - 2081839967, 2081971049, 2082102167, 2082233243, 2082364367, 2082495439, 2082626527, - 2082757627, 2082888701, 2083019773, 2083150877, 2083281953, 2083413047, 2083544119, - 2083675207, 2083806289, 2083937399, 2084068489, 2084199563, 2084330641, 2084461727, - 2084592803, 2084723881, 2084854963, 2084986037, 2085117109, 2085248189, 2085379279, - 2085510353, 2085641443, 2085772537, 2085903613, 2086034707, 2086165799, 2086296887, - 2086428013, 2086559089, 2086690163, 2086821251, 2086952323, 2087083429, 2087214553, - 2087345633, 2087476759, 2087607887, 2087738959, 2087870041, 2088001117, 2088132191, - 2088263263, 2088394339, 2088525433, 2088656513, 2088787633, 2088918751, 2089049839, - 2089180921, 2089312073, 2089443149, 2089574231, 2089705333, 2089836439, 2089967527, - 2090098603, 2090229677, 2090360809, 2090491901, 2090622979, 2090754067, 2090885141, - 2091016241, 2091147343, 2091278419, 2091409499, 2091540599, 2091671671, 2091802747, - 2091933853, 2092064927, 2092196009, 2092327091, 2092458167, 2092589267, 2092720361, - 2092851479, 2092982597, 2093113691, 2093244787, 2093375861, 2093506957, 2093638037, - 2093769121, 2093900209, 2094031301, 2094162373, 2094293447, 2094424523, 2094555647, - 2094686743, 2094817819, 2094948899, 2095079981, 2095211057, 2095342147, 2095473251, - 2095604327, 2095735399, 2095866473, 2095997587, 2096128693, 2096259829, 2096390909, - 2096521981, 2096653079, 2096784211, 2096915329, 2097046417, 2097177503, 2097308593, - 2097439699, 2097570803, 2097701891, 2097832987, 2097964061, 2098095133, 2098226219, - 2098357319, 2098488391, 2098619473, 2098750559, 2098881637, 2099012719, 2099143819, - 2099274893, 2099406031, 2099537117, 2099668189, 2099799301, 2099930381, 2100061463, - 2100192559, 2100323653, 2100454753, 2100585833, 2100716927, 2100848003, 2100979079, - 2101110173, 2101241279, 2101372409, 2101503499, 2101634573, 2101765663, 2101896743, - 2102027833, 2102158921, 2102290019, 2102421121, 2102552233, 2102683337, 2102814449, - 2102945531, 2103076621, 2103207703, 2103338807, 2103469897, 2103601009, 2103732097, - 2103863183, 2103994261, 2104125367, 2104256449, 2104387529, 2104518601, 2104649681, - 2104780753, 2104911829, 2105042911, 2105173991, 2105305067, 2105436149, 2105567221, - 2105698349, 2105829421, 2105960497, 2106091583, 2106222661, 2106353741, 2106484819, - 2106615961, 2106747061, 2106878143, 2107009241, 2107140313, 2107271401, 2107402477, - 2107533551, 2107664659, 2107795783, 2107926859, 2108057951, 2108189033, 2108320147, - 2108451227, 2108582299, 2108713379, 2108844461, 2108975569, 2109106661, 2109237751, - 2109368869, 2109499963, 2109631087, 2109762167, 2109893243, 2110024361, 2110155499, - 2110286579, 2110417681, 2110548757, 2110679861, 2110810957, 2110942063, 2111073143, - 2111204231, 2111335379, 2111466463, 2111597549, 2111728621, 2111859703, 2111990789, - 2112121867, 2112252949, 2112384023, 2112515107, 2112646181, 2112777253, 2112908333, - 2113039433, 2113170509, 2113301591, 2113432723, 2113563799, 2113694887, 2113825963, - 2113957051, 2114088133, 2114219213, 2114350297, 2114481371, 2114612443, 2114743541, - 2114874637, 2115005731, 2115136819, 2115267901, 2115399007, 2115530101, 2115661181, - 2115792257, 2115923351, 2116054439, 2116185523, 2116316623, 2116447699, 2116578781, - 2116709891, 2116840981, 2116972063, 2117103137, 2117234209, 2117365297, 2117496377, - 2117627507, 2117758613, 2117889737, 2118020813, 2118151927, 2118283007, 2118414091, - 2118545173, 2118676249, 2118807337, 2118938417, 2119069517, 2119200593, 2119331717, - 2119462799, 2119593899, 2119725031, 2119856107, 2119987253, 2120118367, 2120249447, - 2120380519, 2120511593, 2120642677, 2120773757, 2120904833, 2121035947, 2121167029, - 2121298103, 2121429197, 2121560323, 2121691399, 2121822509, 2121953599, 2122084697, - 2122215787, 2122346867, 2122477949, 2122609033, 2122740119, 2122871221, 2123002309, - 2123133391, 2123264467, 2123395577, 2123526649, 2123657743, 2123788829, 2123919907, - 2124051011, 2124182129, 2124313201, 2124444277, 2124575371, 2124706447, 2124837521, - 2124968617, 2125099727, 2125230869, 2125361951, 2125493023, 2125624133, 2125755211, - 2125886291, 2126017363, 2126148457, 2126279567, 2126410717, 2126541799, 2126672923, - 2126803999, 2126935123, 2127066199, 2127197279, 2127328373, 2127459457, 2127590533, - 2127721693, 2127852767, 2127983881, 2128114979, 2128246067, 2128377161, 2128508281, - 2128639361, 2128770467, 2128901539, 2129032613, 2129163689, 2129294803, 2129425973, - 2129557049, 2129688139, 2129819227, 2129950313, 2130081389, 2130212471, 2130343543, - 2130474623, 2130605707, 2130736781, 2130867857, 2130998929, 2131130077, 2131261177, - 2131392253, 2131523347, 2131654477, 2131785569, 2131916693, 2132047769, 2132178847, - 2132309947, 2132441099, 2132572199, 2132703299, 2132834387, 2132965459, 2133096533, - 2133227633, 2133358709, 2133489797, 2133620933, 2133752039, 2133883183, 2134014341, - 2134145443, 2134276541, 2134407623, 2134538701, 2134669793, 2134800869, 2134931977, - 2135063053, 2135194177, 2135325251, 2135456329, 2135587409, 2135718511, 2135849593, - 2135980669, 2136111781, 2136242869, 2136373957, 2136505031, 2136636119, 2136767201, - 2136898273, 2137029379, 2137160461, 2137291549, 2137422643, 2137553723, 2137684807, - 2137815923, 2137947011, 2138078087, 2138209189, 2138340263, 2138471353, 2138602439, - 2138733511, 2138864593, 2138995669, 2139126757, 2139257831, 2139388913, 2139520013, - 2139651091, 2139782173, 2139913249, 2140044331, 2140175431, 2140306513, 2140437589, - 2140568687, 2140699783, 2140830899, 2140961987, 2141093077, 2141224159, 2141355239, - 2141486329, 2141617421, 2141748493, 2141879567, 2142010639, 2142141713, 2142272791, - 2142403889, 2142534971, 2142666047, 2142797123, 2142928219, 2143059319, 2143190437, - 2143321513, 2143452589, 2143583681, 2143714753, 2143845853, 2143976927, 2144108027, - 2144239099, 2144370181, 2144501263, 2144632339, 2144763451, 2144894527, 2145025601, - 2145156703, 2145287779, 2145418867, 2145549941, 2145681019, 2145812093, 2145943181, - 2146074257, 2146205339, 2146336453, 2146467577, 2146598681, 2146729777, 2146860851, - 2146991939, 2147123021, 2147254097, 2147385197, 2147516291, 2147647367, 2147778443, - 2147909521, 2148040637, 2148171719, 2148302809, 2148433909, 2148564983, 2148696083, - 2148827203, 2148958303, 2149089379, 2149220459, 2149351537, 2149482679, 2149613759, - 2149744837, 2149875929, 2150007011, 2150138101, 2150269189, 2150400313, 2150531387, - 2150662477, 2150793577, 2150924669, 2151055757, 2151186907, 2151318061, 2151449137, - 2151580213, 2151711293, 2151842377, 2151973451, 2152104523, 2152235627, 2152366757, - 2152497833, 2152628909, 2152759991, 2152891093, 2153022167, 2153153251, 2153284333, - 2153415409, 2153546489, 2153677619, 2153808691, 2153939771, 2154070843, 2154201947, - 2154333023, 2154464107, 2154595187, 2154726307, 2154857449, 2154988547, 2155119667, - 2155250743, 2155381829, 2155512929, 2155644067, 2155775213, 2155906301, 2156037391, - 2156168489, 2156299573, 2156430659, 2156561773, 2156692849, 2156823947, 2156955029, - 2157086117, 2157217189, 2157348283, 2157479407, 2157610513, 2157741673, 2157872771, - 2158003867, 2158134941, 2158266037, 2158397113, 2158528217, 2158659289, 2158790423, - 2158921517, 2159052607, 2159183683, 2159314757, 2159445839, 2159576921, 2159707997, - 2159839133, 2159970223, 2160101303, 2160232387, 2160363521, 2160494599, 2160625697, - 2160756769, 2160887843, 2161018933, 2161150031, 2161281113, 2161412191, 2161543277, - 2161674349, 2161805441, 2161936523, 2162067601, 2162198681, 2162329781, 2162460869, - 2162591969, 2162723047, 2162854163, 2162985241, 2163116353, 2163247447, 2163378563, - 2163509693, 2163640769, 2163771913, 2163902999, 2164034101, 2164165193, 2164296283, - 2164427357, 2164558433, 2164689517, 2164820629, 2164951753, 2165082827, 2165213917, - 2165345027, 2165476121, 2165607209, 2165738287, 2165869361, 2166000469, 2166131543, - 2166262627, 2166393703, 2166524783, 2166655873, 2166787027, 2166918133, 2167049221, - 2167180297, 2167311379, 2167442471, 2167573547, 2167704631, 2167835743, 2167966817, - 2168097947, 2168229029, 2168360119, 2168491243, 2168622319, 2168753413, 2168884511, - 2169015587, 2169146677, 2169277753, 2169408833, 2169539941, 2169671057, 2169802133, - 2169933217, 2170064291, 2170195421, 2170326497, 2170457581, 2170588661, 2170719757, - 2170850849, 2170981931, 2171113003, 2171244121, 2171375197, 2171506273, 2171637353, - 2171768437, 2171899511, 2172030611, 2172161707, 2172292831, 2172423961, 2172555037, - 2172686137, 2172817217, 2172948293, 2173079369, 2173210489, 2173341593, 2173472669, - 2173603741, 2173734863, 2173865951, 2173997027, 2174128127, 2174259203, 2174390279, - 2174521369, 2174652463, 2174783549, 2174914631, 2175045709, 2175176789, 2175307867, - 2175438959, 2175570031, 2175701113, 2175832187, 2175963299, 2176094381, 2176225481, - 2176356571, 2176487647, 2176618723, 2176749797, 2176880879, 2177011979, 2177143057, - 2177274173, 2177405257, 2177536343, 2177667419, 2177798531, 2177929603, 2178060679, - 2178191753, 2178322837, 2178453923, 2178585043, 2178716119, 2178847241, 2178978331, - 2179109423, 2179240499, 2179371577, 2179502651, 2179633741, 2179764817, 2179895891, - 2180026969, 2180158051, 2180289187, 2180420269, 2180551343, 2180682419, 2180813491, - 2180944589, 2181075697, 2181206801, 2181337877, 2181468959, 2181600041, 2181731129, - 2181862219, 2181993301, 2182124389, 2182255499, 2182386587, 2182517663, 2182648753, - 2182779829, 2182910927, 2183042003, 2183173117, 2183304217, 2183435291, 2183566423, - 2183697553, 2183828629, 2183959709, 2184090791, 2184221869, 2184352943, 2184484031, - 2184615119, 2184746197, 2184877273, 2185008377, 2185139461, 2185270543, 2185401623, - 2185532707, 2185663789, 2185794893, 2185926013, 2186057117, 2186188189, 2186319283, - 2186450363, 2186581447, 2186712551, 2186843639, 2186974721, 2187105793, 2187236903, - 2187367979, 2187499057, 2187630139, 2187761273, 2187892349, 2188023443, 2188154537, - 2188285637, 2188416721, 2188547821, 2188678903, 2188810007, 2188941089, 2189072177, - 2189203253, 2189334361, 2189465449, 2189596547, 2189727641, 2189858777, 2189989849, - 2190120923, 2190252007, 2190383101, 2190514177, 2190645251, 2190776339, 2190907417, - 2191038511, 2191169597, 2191300703, 2191431791, 2191562903, 2191693979, 2191825063, - 2191956161, 2192087251, 2192218367, 2192349449, 2192480527, 2192611639, 2192742733, - 2192873833, 2193004927, 2193136003, 2193267091, 2193398201, 2193529301, 2193660379, - 2193791461, 2193922537, 2194053611, 2194184711, 2194315789, 2194446871, 2194577977, - 2194709053, 2194840127, 2194971199, 2195102279, 2195233379, 2195364487, 2195495579, - 2195626651, 2195757727, 2195888803, 2196019877, 2196150953, 2196282041, 2196413137, - 2196544213, 2196675287, 2196806411, 2196937517, 2197068619, 2197199737, 2197330819, - 2197461901, 2197592977, 2197724051, 2197855133, 2197986209, 2198117281, 2198248357, - 2198379437, 2198510521, 2198641597, 2198772677, 2198903851, 2199034927, 2199166007, - 2199297083, 2199428213, 2199559319, 2199690461, 2199821557, 2199952649, 2200083737, - 2200214831, 2200345943, 2200477043, 2200608167, 2200739251, 2200870351, 2201001427, - 2201132533, 2201263613, 2201394691, 2201525773, 2201656907, 2201787979, 2201919059, - 2202050131, 2202181213, 2202312313, 2202443393, 2202574481, 2202705563, 2202836651, - 2202967769, 2203098853, 2203229927, 2203361021, 2203492097, 2203623197, 2203754279, - 2203885361, 2204016433, 2204147513, 2204278621, 2204409733, 2204540861, 2204671949, - 2204803067, 2204934157, 2205065243, 2205196381, 2205327463, 2205458543, 2205589651, - 2205720787, 2205851861, 2205983041, 2206114177, 2206245253, 2206376339, 2206507451, - 2206638529, 2206769603, 2206900681, 2207031767, 2207162897, 2207293981, 2207425093, - 2207556179, 2207687267, 2207818363, 2207949439, 2208080527, 2208211627, 2208342707, - 2208473783, 2208604873, 2208735989, 2208867079, 2208998153, 2209129249, 2209260337, - 2209391411, 2209522507, 2209653623, 2209784699, 2209915777, 2210046857, 2210177951, - 2210309051, 2210440123, 2210571227, 2210702309, 2210833381, 2210964491, 2211095563, - 2211226639, 2211357737, 2211488833, 2211619933, 2211751013, 2211882107, 2212013189, - 2212144327, 2212275407, 2212406489, 2212537589, 2212668739, 2212799851, 2212930949, - 2213062039, 2213193113, 2213324189, 2213455289, 2213586391, 2213717479, 2213848561, - 2213979637, 2214110749, 2214241831, 2214372907, 2214504037, 2214635113, 2214766189, - 2214897283, 2215028359, 2215159477, 2215290577, 2215421653, 2215552747, 2215683851, - 2215814929, 2215946009, 2216077081, 2216208191, 2216339263, 2216470343, 2216601421, - 2216732503, 2216863577, 2216994649, 2217125723, 2217256801, 2217387889, 2217518971, - 2217650053, 2217781133, 2217912223, 2218043327, 2218174411, 2218305487, 2218436611, - 2218567691, 2218698767, 2218829917, 2218961047, 2219092163, 2219223247, 2219354321, - 2219485417, 2219616493, 2219747567, 2219878643, 2220009763, 2220140837, 2220271909, - 2220403013, 2220534131, 2220665221, 2220796313, 2220927391, 2221058473, 2221189571, - 2221320659, 2221451753, 2221582837, 2221713917, 2221844993, 2221976083, 2222107159, - 2222238247, 2222369329, 2222500417, 2222631497, 2222762569, 2222893663, 2223024751, - 2223155839, 2223286931, 2223418003, 2223549079, 2223680159, 2223811237, 2223942341, - 2224073447, 2224204529, 2224335601, 2224466693, 2224597769, 2224728841, 2224859927, - 2224991003, 2225122087, 2225253167, 2225384257, 2225515333, 2225646421, 2225777507, - 2225908591, 2226039667, 2226170741, 2226301837, 2226432983, 2226564061, 2226695153, - 2226826253, 2226957329, 2227088429, 2227219541, 2227350617, 2227481689, 2227612769, - 2227743877, 2227874959, 2228006041, 2228137117, 2228268209, 2228399291, 2228530393, - 2228661467, 2228792543, 2228923633, 2229054713, 2229185797, 2229316871, 2229447943, - 2229579061, 2229710149, 2229841241, 2229972317, 2230103411, 2230234499, 2230365593, - 2230496669, 2230627753, 2230758833, 2230889911, 2231020991, 2231152069, 2231283157, - 2231414267, 2231545339, 2231676413, 2231807527, 2231938603, 2232069683, 2232200767, - 2232331873, 2232462959, 2232594127, 2232725203, 2232856291, 2232987371, 2233118443, - 2233249547, 2233380637, 2233511713, 2233642819, 2233773907, 2233904983, 2234036059, - 2234167207, 2234298281, 2234429389, 2234560463, 2234691577, 2234822713, 2234953813, - 2235084919, 2235216017, 2235347117, 2235478211, 2235609283, 2235740399, 2235871471, - 2236002551, 2236133639, 2236264729, 2236395841, 2236526927, 2236657999, 2236789081, - 2236920167, 2237051249, 2237182357, 2237313443, 2237444519, 2237575597, 2237706721, - 2237837801, 2237968877, 2238099961, 2238231071, 2238362167, 2238493259, 2238624337, - 2238755419, 2238886499, 2239017601, 2239148683, 2239279781, 2239410863, 2239541981, - 2239673057, 2239804181, 2239935253, 2240066327, 2240197409, 2240328481, 2240459561, - 2240590691, 2240721773, 2240852891, 2240983963, 2241115057, 2241246167, 2241377239, - 2241508319, 2241639401, 2241770473, 2241901549, 2242032647, 2242163773, 2242294853, - 2242425931, 2242557029, 2242688101, 2242819181, 2242950263, 2243081383, 2243212463, - 2243343569, 2243474663, 2243605739, 2243736827, 2243867959, 2243999057, 2244130151, - 2244261241, 2244392323, 2244523403, 2244654499, 2244785581, 2244916699, 2245047839, - 2245178953, 2245310027, 2245441139, 2245572227, 2245703303, 2245834387, 2245965461, - 2246096549, 2246227649, 2246358721, 2246489797, 2246620877, 2246751961, 2246883043, - 2247014171, 2247145253, 2247276391, 2247407467, 2247538561, 2247669647, 2247800729, - 2247931813, 2248062907, 2248194001, 2248325083, 2248456183, 2248587283, 2248718369, - 2248849441, 2248980527, 2249111609, 2249242687, 2249373773, 2249504849, 2249635939, - 2249767043, 2249898121, 2250029207, 2250160279, 2250291361, 2250422437, 2250553511, - 2250684607, 2250815683, 2250946799, 2251077889, 2251208989, 2251340089, 2251471223, - 2251602317, 2251733389, 2251864469, 2251995607, 2252126711, 2252257807, 2252388881, - 2252519993, 2252651081, 2252782171, 2252913259, 2253044359, 2253175451, 2253306551, - 2253437723, 2253568799, 2253699871, 2253830993, 2253962069, 2254093141, 2254224221, - 2254355333, 2254486411, 2254617493, 2254748597, 2254879691, 2255010767, 2255141839, - 2255272913, 2255404001, 2255535109, 2255666249, 2255797333, 2255928421, 2256059513, - 2256190619, 2256321703, 2256452791, 2256583907, 2256714983, 2256846061, 2256977153, - 2257108279, 2257239359, 2257370447, 2257501523, 2257632607, 2257763689, 2257894799, - 2258025881, 2258157017, 2258288089, 2258419181, 2258550271, 2258681357, 2258812429, - 2258943509, 2259074677, 2259205783, 2259336881, 2259467971, 2259599057, 2259730163, - 2259861239, 2259992341, 2260123421, 2260254509, 2260385609, 2260516693, 2260647773, - 2260778869, 2260909967, 2261041043, 2261172119, 2261303203, 2261434289, 2261565407, - 2261696497, 2261827597, 2261958757, 2262089833, 2262220943, 2262352019, 2262483103, - 2262614209, 2262745301, 2262876379, 2263007473, 2263138571, 2263269703, 2263400807, - 2263531939, 2263663043, 2263794139, 2263925231, 2264056343, 2264187433, 2264318531, - 2264449633, 2264580707, 2264711843, 2264842933, 2264974031, 2265105107, 2265236201, - 2265367303, 2265498397, 2265629557, 2265760681, 2265891769, 2266022849, 2266153961, - 2266285061, 2266416133, 2266547233, 2266678327, 2266809407, 2266940479, 2267071559, - 2267202653, 2267333737, 2267464831, 2267595919, 2267727061, 2267858137, 2267989247, - 2268120329, 2268251437, 2268382517, 2268513589, 2268644663, 2268775739, 2268906817, - 2269037959, 2269169047, 2269300123, 2269431209, 2269562287, 2269693373, 2269824451, - 2269955533, 2270086627, 2270217721, 2270348807, 2270479889, 2270610983, 2270742101, - 2270873183, 2271004303, 2271135397, 2271266507, 2271397649, 2271528739, 2271659827, - 2271790907, 2271921983, 2272053061, 2272184177, 2272315267, 2272446343, 2272577423, - 2272708507, 2272839601, 2272970681, 2273101757, 2273232833, 2273363909, 2273495023, - 2273626123, 2273757197, 2273888293, 2274019379, 2274150481, 2274281557, 2274412697, - 2274543773, 2274674867, 2274805957, 2274937031, 2275068109, 2275199203, 2275330289, - 2275461361, 2275592441, 2275723579, 2275854701, 2275985791, 2276116867, 2276247959, - 2276379103, 2276510267, 2276641363, 2276772437, 2276903543, 2277034631, 2277165721, - 2277296821, 2277427949, 2277559021, 2277690101, 2277821179, 2277952297, 2278083383, - 2278214473, 2278345567, 2278476653, 2278607753, 2278738831, 2278869917, 2279000993, - 2279132071, 2279263157, 2279394233, 2279525371, 2279656451, 2279787529, 2279918659, - 2280049781, 2280180853, 2280311939, 2280443027, 2280574159, 2280705253, 2280836381, - 2280967457, 2281098557, 2281229641, 2281360721, 2281491829, 2281622911, 2281753993, - 2281885069, 2282016151, 2282147237, 2282278319, 2282409391, 2282540483, 2282671603, - 2282802677, 2282933759, 2283064831, 2283195913, 2283326993, 2283458081, 2283589153, - 2283720227, 2283851327, 2283982411, 2284113487, 2284244569, 2284375649, 2284506737, - 2284637809, 2284768903, 2284899979, 2285031121, 2285162197, 2285293291, 2285424389, - 2285555473, 2285686549, 2285817631, 2285948719, 2286079799, 2286210893, 2286341971, - 2286473051, 2286604123, 2286735211, 2286866317, 2286997397, 2287128491, 2287259563, - 2287390643, 2287521721, 2287652819, 2287783921, 2287915013, 2288046113, 2288177197, - 2288308271, 2288439347, 2288570419, 2288701529, 2288832631, 2288963711, 2289094817, - 2289225919, 2289357011, 2289488101, 2289619181, 2289750269, 2289881359, 2290012447, - 2290143523, 2290274599, 2290405681, 2290536767, 2290667857, 2290798933, 2290930007, - 2291061121, 2291192203, 2291323277, 2291454383, 2291585537, 2291716621, 2291847703, - 2291978783, 2292109867, 2292240941, 2292372023, 2292503111, 2292634193, 2292765313, - 2292896393, 2293027469, 2293158541, 2293289623, 2293420711, 2293551791, 2293682863, - 2293813967, 2293945051, 2294076139, 2294207213, 2294338289, 2294469361, 2294600453, - 2294731561, 2294862659, 2294993749, 2295124829, 2295255913, 2295386993, 2295518083, - 2295649241, 2295780341, 2295911447, 2296042523, 2296173599, 2296304707, 2296435793, - 2296566887, 2296697987, 2296829063, 2296960181, 2297091257, 2297222339, 2297353439, - 2297484551, 2297615699, 2297746771, 2297877853, 2298008939, 2298140011, 2298271109, - 2298402199, 2298533273, 2298664349, 2298795439, 2298926533, 2299057613, 2299188733, - 2299319807, 2299450931, 2299582003, 2299713077, 2299844153, 2299975231, 2300106311, - 2300237419, 2300368501, 2300499667, 2300630741, 2300761819, 2300892917, 2301023993, - 2301155107, 2301286181, 2301417367, 2301548477, 2301679553, 2301810631, 2301941723, - 2302072807, 2302203881, 2302334989, 2302466071, 2302597151, 2302728247, 2302859323, - 2302990409, 2303121481, 2303252557, 2303383639, 2303514721, 2303645819, 2303776897, - 2303908001, 2304039091, 2304170203, 2304301301, 2304432379, 2304563473, 2304694549, - 2304825623, 2304956701, 2305087781, 2305218857, 2305349939, 2305481039, 2305612121, - 2305743211, 2305874293, 2306005381, 2306136473, 2306267629, 2306398709, 2306529787, - 2306660891, 2306791987, 2306923079, 2307054151, 2307185227, 2307316301, 2307447409, - 2307578489, 2307709561, 2307840649, 2307971747, 2308102847, 2308233919, 2308365011, - 2308496083, 2308627187, 2308758269, 2308889369, 2309020457, 2309151569, 2309282641, - 2309413721, 2309544799, 2309675881, 2309806969, 2309938067, 2310069199, 2310200273, - 2310331349, 2310462431, 2310593503, 2310724579, 2310855671, 2310986747, 2311117849, - 2311248983, 2311380109, 2311511227, 2311642321, 2311773403, 2311904509, 2312035639, - 2312166737, 2312297809, 2312428889, 2312559961, 2312691049, 2312822167, 2312953249, - 2313084359, 2313215431, 2313346513, 2313477587, 2313608729, 2313739807, 2313870917, - 2314002023, 2314133123, 2314264217, 2314395289, 2314526413, 2314657511, 2314788607, - 2314919681, 2315050781, 2315181937, 2315313019, 2315444099, 2315575231, 2315706329, - 2315837411, 2315968549, 2316099659, 2316230737, 2316361813, 2316492911, 2316623993, - 2316755071, 2316886151, 2317017247, 2317148329, 2317279403, 2317410497, 2317541573, - 2317672699, 2317803773, 2317934851, 2318065993, 2318197069, 2318328143, 2318459219, - 2318590327, 2318721401, 2318852509, 2318983603, 2319114713, 2319245801, 2319376889, - 2319507961, 2319639041, 2319770147, 2319901223, 2320032329, 2320163407, 2320294489, - 2320425563, 2320556653, 2320687757, 2320818881, 2320949989, 2321081123, 2321212211, - 2321343307, 2321474383, 2321605457, 2321736583, 2321867663, 2321998739, 2322129829, - 2322260903, 2322391999, 2322523109, 2322654197, 2322785273, 2322916367, 2323047469, - 2323178551, 2323309627, 2323440727, 2323571819, 2323702891, 2323833983, 2323965089, - 2324096161, 2324227247, 2324358319, 2324489413, 2324620489, 2324751617, 2324882689, - 2325013799, 2325144881, 2325275977, 2325407057, 2325538177, 2325669263, 2325800339, - 2325931451, 2326062547, 2326193621, 2326324703, 2326455787, 2326586863, 2326717949, - 2326849039, 2326980113, 2327111197, 2327242279, 2327373353, 2327504449, 2327635523, - 2327766643, 2327897723, 2328028811, 2328159907, 2328291023, 2328422101, 2328553181, - 2328684263, 2328815353, 2328946439, 2329077547, 2329208659, 2329339757, 2329470859, - 2329601941, 2329733017, 2329864133, 2329995211, 2330126287, 2330257367, 2330388443, - 2330519539, 2330650613, 2330781697, 2330912777, 2331043873, 2331174991, 2331306073, - 2331437149, 2331568247, 2331699347, 2331830429, 2331961501, 2332092629, 2332223717, - 2332354793, 2332485899, 2332616983, 2332748057, 2332879139, 2333010217, 2333141297, - 2333272399, 2333403473, 2333534549, 2333665639, 2333796713, 2333927803, 2334058879, - 2334189967, 2334321043, 2334452161, 2334583241, 2334714323, 2334845417, 2334976529, - 2335107617, 2335238699, 2335369783, 2335500857, 2335631939, 2335763011, 2335894087, - 2336025163, 2336156281, 2336287363, 2336418473, 2336549561, 2336680637, 2336811709, - 2336942813, 2337073889, 2337204973, 2337336073, 2337467147, 2337598267, 2337729367, - 2337860471, 2337991567, 2338122679, 2338253759, 2338384831, 2338515929, 2338647019, - 2338778137, 2338909219, 2339040311, 2339171399, 2339302523, 2339433611, 2339564687, - 2339695789, 2339826871, 2339957993, 2340089123, 2340220199, 2340351313, 2340482399, - 2340613543, 2340744617, 2340875699, 2341006793, 2341137893, 2341268983, 2341400059, - 2341531141, 2341662227, 2341793309, 2341924391, 2342055467, 2342186569, 2342317643, - 2342448727, 2342579803, 2342710901, 2342841973, 2342973097, 2343104171, 2343235261, - 2343366341, 2343497461, 2343628537, 2343759617, 2343890713, 2344021819, 2344152913, - 2344284023, 2344415113, 2344546199, 2344677299, 2344808383, 2344939481, 2345070589, - 2345201671, 2345332753, 2345463829, 2345594929, 2345726027, 2345857099, 2345988173, - 2346119263, 2346250337, 2346381437, 2346512551, 2346643631, 2346774739, 2346905837, - 2347036919, 2347168013, 2347299091, 2347430191, 2347561289, 2347692443, 2347823579, - 2347954669, 2348085763, 2348216873, 2348347951, 2348479031, 2348610137, 2348741243, - 2348872343, 2349003467, 2349134563, 2349265643, 2349396743, 2349527819, 2349658891, - 2349789971, 2349921071, 2350052153, 2350183247, 2350314359, 2350445443, 2350576531, - 2350707631, 2350838713, 2350969787, 2351100859, 2351231941, 2351363017, 2351494097, - 2351625247, 2351756383, 2351887481, 2352018619, 2352149729, 2352280811, 2352411913, - 2352542993, 2352674089, 2352805193, 2352936293, 2353067383, 2353198489, 2353329599, - 2353460689, 2353591763, 2353722851, 2353853923, 2353985017, 2354116153, 2354247241, - 2354378317, 2354509403, 2354640481, 2354771567, 2354902651, 2355033731, 2355164807, - 2355295907, 2355426991, 2355558077, 2355689173, 2355820319, 2355951391, 2356082471, - 2356213567, 2356344647, 2356475747, 2356606829, 2356737919, 2356869007, 2357000099, - 2357131181, 2357262253, 2357393329, 2357524409, 2357655491, 2357786569, 2357917643, - 2358048743, 2358179849, 2358310967, 2358442043, 2358573121, 2358704233, 2358835361, - 2358966433, 2359097567, 2359228661, 2359359787, 2359490863, 2359621937, 2359753009, - 2359884103, 2360015233, 2360146307, 2360277421, 2360408497, 2360539589, 2360670679, - 2360801767, 2360932879, 2361063961, 2361195047, 2361326171, 2361457249, 2361588323, - 2361719411, 2361850523, 2361981607, 2362112689, 2362243771, 2362374851, 2362505947, - 2362637029, 2362768117, 2362899247, 2363030333, 2363161441, 2363292517, 2363423599, - 2363554703, 2363685809, 2363816893, 2363947967, 2364079049, 2364210143, 2364341227, - 2364472303, 2364603403, 2364734483, 2364865561, 2364996659, 2365127759, 2365258859, - 2365389937, 2365521017, 2365652117, 2365783201, 2365914277, 2366045371, 2366176481, - 2366307569, 2366438671, 2366569759, 2366700887, 2366831959, 2366963047, 2367094189, - 2367225277, 2367356363, 2367487481, 2367618581, 2367749693, 2367880771, 2368011847, - 2368142923, 2368274053, 2368405163, 2368536311, 2368667401, 2368798501, 2368929593, - 2369060693, 2369191777, 2369322853, 2369453941, 2369585021, 2369716109, 2369847197, - 2369978287, 2370109363, 2370240451, 2370371527, 2370502691, 2370633763, 2370764927, - 2370896069, 2371027201, 2371158299, 2371289383, 2371420501, 2371551587, 2371682671, - 2371813783, 2371944877, 2372075963, 2372207039, 2372338181, 2372469259, 2372600333, - 2372731411, 2372862487, 2372993617, 2373124709, 2373255791, 2373386891, 2373518011, - 2373649097, 2373780187, 2373911269, 2374042357, 2374173449, 2374304533, 2374435631, - 2374566707, 2374697779, 2374828861, 2374959943, 2375091031, 2375222107, 2375353193, - 2375484271, 2375615351, 2375746427, 2375877503, 2376008623, 2376139699, 2376270781, - 2376401873, 2376532973, 2376664063, 2376795181, 2376926257, 2377057363, 2377188449, - 2377319521, 2377450709, 2377581821, 2377712899, 2377843973, 2377975087, 2378106179, - 2378237297, 2378368423, 2378499523, 2378630609, 2378761699, 2378892781, 2379023897, - 2379154991, 2379286067, 2379417197, 2379548287, 2379679373, 2379810463, 2379941569, - 2380072679, 2380203767, 2380334843, 2380465931, 2380597019, 2380728113, 2380859267, - 2380990351, 2381121443, 2381252557, 2381383643, 2381514721, 2381645803, 2381776877, - 2381907949, 2382039041, 2382170117, 2382301189, 2382432277, 2382563357, 2382694451, - 2382825539, 2382956629, 2383087723, 2383218823, 2383349923, 2383481027, 2383612117, - 2383743199, 2383874287, 2384005367, 2384136449, 2384267521, 2384398651, 2384529737, - 2384660827, 2384791931, 2384923003, 2385054079, 2385185161, 2385316237, 2385447319, - 2385578407, 2385709481, 2385840563, 2385971663, 2386102739, 2386233847, 2386364923, - 2386496003, 2386627121, 2386758193, 2386889287, 2387020381, 2387151511, 2387282659, - 2387413807, 2387544893, 2387675981, 2387807087, 2387938159, 2388069247, 2388200323, - 2388331417, 2388462491, 2388593579, 2388724651, 2388855743, 2388986833, 2389117943, - 2389249043, 2389380137, 2389511219, 2389642313, 2389773389, 2389904477, 2390035553, - 2390166671, 2390297743, 2390428853, 2390559937, 2390691013, 2390822099, 2390953189, - 2391084271, 2391215377, 2391346453, 2391477553, 2391608629, 2391739729, 2391870827, - 2392001923, 2392132997, 2392264081, 2392395169, 2392526261, 2392657339, 2392788469, - 2392919549, 2393050661, 2393181733, 2393312807, 2393443937, 2393575013, 2393706143, - 2393837221, 2393968303, 2394099397, 2394230473, 2394361553, 2394492641, 2394623719, - 2394754829, 2394885907, 2395016983, 2395148081, 2395279169, 2395410257, 2395541339, - 2395672417, 2395803493, 2395934579, 2396065657, 2396196763, 2396327863, 2396458963, - 2396590051, 2396721127, 2396852221, 2396983301, 2397114383, 2397245471, 2397376543, - 2397507641, 2397638723, 2397769837, 2397900913, 2398032023, 2398163113, 2398294201, - 2398425287, 2398556399, 2398687513, 2398818619, 2398949711, 2399080799, 2399211889, - 2399342969, 2399474041, 2399605123, 2399736221, 2399867297, 2399998373, 2400129449, - 2400260521, 2400391601, 2400522701, 2400653791, 2400784891, 2400915991, 2401047107, - 2401178189, 2401309277, 2401440409, 2401571509, 2401702601, 2401833689, 2401964767, - 2402095841, 2402226929, 2402358011, 2402489171, 2402620261, 2402751353, 2402882467, - 2403013541, 2403144613, 2403275687, 2403406763, 2403537839, 2403668933, 2403800011, - 2403931097, 2404062169, 2404193249, 2404324361, 2404455457, 2404586549, 2404717639, - 2404848749, 2404979821, 2405110907, 2405241983, 2405373067, 2405504147, 2405635229, - 2405766317, 2405897413, 2406028487, 2406159571, 2406290647, 2406421729, 2406552809, - 2406683893, 2406814979, 2406946097, 2407077229, 2407208303, 2407339397, 2407470473, - 2407601563, 2407732699, 2407863817, 2407994929, 2408126003, 2408257099, 2408388209, - 2408519381, 2408650487, 2408781569, 2408912641, 2409043729, 2409174829, 2409305929, - 2409437057, 2409568141, 2409699247, 2409830329, 2409961403, 2410092523, 2410223597, - 2410354679, 2410485797, 2410616893, 2410747991, 2410879099, 2411010179, 2411141251, - 2411272397, 2411403481, 2411534569, 2411665673, 2411796757, 2411927863, 2412058937, - 2412190013, 2412321103, 2412452179, 2412583297, 2412714433, 2412845563, 2412976637, - 2413107713, 2413238797, 2413369909, 2413500989, 2413632071, 2413763147, 2413894237, - 2414025319, 2414156401, 2414287489, 2414418569, 2414549647, 2414680727, 2414811803, - 2414942903, 2415073979, 2415205087, 2415336163, 2415467261, 2415598363, 2415729439, - 2415860519, 2415991631, 2416122703, 2416253783, 2416384891, 2416515971, 2416647049, - 2416778167, 2416909277, 2417040349, 2417171443, 2417302519, 2417433611, 2417564683, - 2417695757, 2417826839, 2417957939, 2418089033, 2418220109, 2418351197, 2418482327, - 2418613403, 2418744499, 2418875573, 2419006657, 2419137761, 2419268851, 2419399933, - 2419531031, 2419662137, 2419793213, 2419924301, 2420055401, 2420186479, 2420317567, - 2420448643, 2420579717, 2420710837, 2420841949, 2420973047, 2421104159, 2421235237, - 2421366317, 2421497413, 2421628493, 2421759577, 2421890663, 2422021757, 2422152829, - 2422283959, 2422415057, 2422546163, 2422677269, 2422808341, 2422939457, 2423070557, - 2423201653, 2423332729, 2423463827, 2423594917, 2423725991, 2423857081, 2423988157, - 2424119239, 2424250319, 2424381391, 2424512471, 2424643549, 2424774629, 2424905701, - 2425036777, 2425167869, 2425298951, 2425430081, 2425561153, 2425692257, 2425823329, - 2425954439, 2426085511, 2426216593, 2426347667, 2426478739, 2426609827, 2426740907, - 2426871991, 2427003067, 2427134141, 2427265223, 2427396313, 2427527411, 2427658489, - 2427789563, 2427920639, 2428051711, 2428182791, 2428313863, 2428444943, 2428576061, - 2428707137, 2428838227, 2428969307, 2429100379, 2429231461, 2429362549, 2429493629, - 2429624731, 2429755829, 2429886929, 2430018001, 2430149083, 2430280187, 2430411271, - 2430542393, 2430673471, 2430804553, 2430935629, 2431066709, 2431197799, 2431328881, - 2431459957, 2431591033, 2431722113, 2431853251, 2431984337, 2432115419, 2432246497, - 2432377579, 2432508691, 2432639767, 2432770841, 2432901929, 2433033019, 2433164101, - 2433295231, 2433426329, 2433557407, 2433688493, 2433819581, 2433950653, 2434081733, - 2434212821, 2434343903, 2434474979, 2434606061, 2434737143, 2434868273, 2434999349, - 2435130437, 2435261561, 2435392637, 2435523749, 2435654827, 2435785943, 2435917027, - 2436048113, 2436179201, 2436310291, 2436441401, 2436572473, 2436703553, 2436834637, - 2436965723, 2437096801, 2437227941, 2437359047, 2437490173, 2437621271, 2437752367, - 2437883449, 2438014541, 2438145617, 2438276693, 2438407787, 2438538877, 2438669993, - 2438801087, 2438932163, 2439063251, 2439194371, 2439325501, 2439456587, 2439587681, - 2439718753, 2439849883, 2439980957, 2440112047, 2440243159, 2440374239, 2440505371, - 2440636447, 2440767523, 2440898627, 2441029727, 2441160817, 2441291927, 2441422999, - 2441554091, 2441685187, 2441816261, 2441947357, 2442078433, 2442209521, 2442340597, - 2442471671, 2442602753, 2442733847, 2442864943, 2442996043, 2443127123, 2443258267, - 2443389353, 2443520461, 2443651571, 2443782659, 2443913777, 2444044853, 2444175953, - 2444307031, 2444438107, 2444569189, 2444700277, 2444831357, 2444962439, 2445093571, - 2445224693, 2445355823, 2445486931, 2445618017, 2445749107, 2445880181, 2446011257, - 2446142417, 2446273499, 2446404577, 2446535653, 2446666753, 2446797839, 2446928917, - 2447060023, 2447191163, 2447322239, 2447453339, 2447584417, 2447715497, 2447846579, - 2447977669, 2448108757, 2448239863, 2448370943, 2448502037, 2448633149, 2448764231, - 2448895331, 2449026403, 2449157611, 2449288687, 2449419767, 2449550861, 2449681943, - 2449813049, 2449944127, 2450075227, 2450206309, 2450337389, 2450468467, 2450599549, - 2450730641, 2450861713, 2450992787, 2451123863, 2451254963, 2451386057, 2451517151, - 2451648229, 2451779303, 2451910397, 2452041491, 2452172563, 2452303663, 2452434749, - 2452565879, 2452696969, 2452828043, 2452959143, 2453090249, 2453221321, 2453352427, - 2453483533, 2453614679, 2453745751, 2453876837, 2454007937, 2454139019, 2454270101, - 2454401189, 2454532261, 2454663347, 2454794431, 2454925507, 2455056587, 2455187687, - 2455318769, 2455449851, 2455580923, 2455712011, 2455843087, 2455974161, 2456105237, - 2456236319, 2456367449, 2456498549, 2456629631, 2456760703, 2456891777, 2457022871, - 2457153949, 2457285023, 2457416099, 2457547177, 2457678281, 2457809407, 2457940487, - 2458071563, 2458202693, 2458333769, 2458464851, 2458596011, 2458727101, 2458858187, - 2458989283, 2459120357, 2459251429, 2459382509, 2459513593, 2459644667, 2459775797, - 2459906887, 2460037961, 2460169057, 2460300187, 2460431263, 2460562367, 2460693467, - 2460824567, 2460955681, 2461086781, 2461217867, 2461348949, 2461480027, 2461611121, - 2461742197, 2461873291, 2462004371, 2462135443, 2462266517, 2462397593, 2462528689, - 2462659783, 2462790907, 2462921999, 2463053083, 2463184193, 2463315277, 2463446389, - 2463577477, 2463708553, 2463839629, 2463970709, 2464101781, 2464232861, 2464363961, - 2464495039, 2464626137, 2464757227, 2464888301, 2465019377, 2465150453, 2465281583, - 2465412673, 2465543753, 2465674837, 2465805941, 2465937041, 2466068113, 2466199189, - 2466330281, 2466461359, 2466592439, 2466723517, 2466854597, 2466985691, 2467116793, - 2467247873, 2467378973, 2467510079, 2467641157, 2467772243, 2467903351, 2468034433, - 2468165509, 2468296609, 2468427697, 2468558773, 2468689903, 2468821009, 2468952121, - 2469083233, 2469214313, 2469345397, 2469476473, 2469607573, 2469738703, 2469869797, - 2470000909, 2470132019, 2470263091, 2470394177, 2470525259, 2470656341, 2470787441, - 2470918531, 2471049613, 2471180687, 2471311789, 2471442863, 2471573939, 2471705011, - 2471836111, 2471967193, 2472098267, 2472229349, 2472360421, 2472491501, 2472622591, - 2472753709, 2472884801, 2473015877, 2473146959, 2473278047, 2473409119, 2473540219, - 2473671293, 2473802369, 2473933471, 2474064547, 2474195683, 2474326781, 2474457893, - 2474588999, 2474720081, 2474851187, 2474982269, 2475113357, 2475244433, 2475375521, - 2475506597, 2475637679, 2475768811, 2475899927, 2476031023, 2476162103, 2476293181, - 2476424317, 2476555423, 2476686533, 2476817611, 2476948711, 2477079791, 2477210863, - 2477341957, 2477473043, 2477604133, 2477735257, 2477866351, 2477997433, 2478128507, - 2478259603, 2478390701, 2478521779, 2478652859, 2478783943, 2478915037, 2479046113, - 2479177187, 2479308259, 2479439357, 2479570459, 2479701541, 2479832627, 2479963709, - 2480094781, 2480225879, 2480356969, 2480488063, 2480619151, 2480750269, 2480881363, - 2481012463, 2481143563, 2481274637, 2481405733, 2481536843, 2481667921, 2481799037, - 2481930137, 2482061213, 2482192333, 2482323407, 2482454501, 2482585583, 2482716679, - 2482847791, 2482978903, 2483109977, 2483241053, 2483372131, 2483503213, 2483634331, - 2483765411, 2483896559, 2484027659, 2484158737, 2484289879, 2484421001, 2484552097, - 2484683183, 2484814259, 2484945347, 2485076441, 2485207559, 2485338641, 2485469719, - 2485600813, 2485731929, 2485863001, 2485994081, 2486125153, 2486256233, 2486387347, - 2486518421, 2486649493, 2486780633, 2486911723, 2487042823, 2487173903, 2487304979, - 2487436069, 2487567149, 2487698231, 2487829313, 2487960389, 2488091461, 2488222553, - 2488353641, 2488484723, 2488615891, 2488746971, 2488878043, 2489009123, 2489140219, - 2489271341, 2489402413, 2489533517, 2489664599, 2489795683, 2489926757, 2490057839, - 2490188923, 2490319999, 2490451097, 2490582169, 2490713243, 2490844319, 2490975391, - 2491106479, 2491237559, 2491368641, 2491499713, 2491630811, 2491761911, 2491892999, - 2492024071, 2492155147, 2492286239, 2492417351, 2492548423, 2492679499, 2492810597, - 2492941669, 2493072817, 2493203917, 2493334999, 2493466099, 2493597191, 2493728267, - 2493859349, 2493990431, 2494121543, 2494252627, 2494383733, 2494514821, 2494645913, - 2494777031, 2494908131, 2495039203, 2495170297, 2495301373, 2495432447, 2495563537, - 2495694637, 2495825791, 2495956871, 2496087943, 2496219041, 2496350177, 2496481259, - 2496612343, 2496743453, 2496874561, 2497005673, 2497136753, 2497267879, 2497398973, - 2497530067, 2497661147, 2497792223, 2497923313, 2498054387, 2498185463, 2498316539, - 2498447639, 2498578739, 2498709841, 2498840969, 2498972087, 2499103169, 2499234263, - 2499365353, 2499496429, 2499627509, 2499758641, 2499889727, 2500020821, 2500151893, - 2500282987, 2500414061, 2500545143, 2500676221, 2500807297, 2500938397, 2501069489, - 2501200561, 2501331643, 2501462723, 2501593811, 2501724923, 2501855999, 2501987113, - 2502118211, 2502249293, 2502380371, 2502511457, 2502642529, 2502773621, 2502904693, - 2503035797, 2503166879, 2503297967, 2503429039, 2503560113, 2503691189, 2503822289, - 2503953371, 2504084459, 2504215541, 2504346629, 2504477747, 2504608849, 2504739929, - 2504871013, 2505002111, 2505133207, 2505264283, 2505395357, 2505526469, 2505657551, - 2505788633, 2505919723, 2506050797, 2506181869, 2506312951, 2506444027, 2506575107, - 2506706201, 2506837309, 2506968389, 2507099471, 2507230549, 2507361641, 2507492737, - 2507623843, 2507754923, 2507885999, 2508017077, 2508148157, 2508279239, 2508410321, - 2508541393, 2508672487, 2508803581, 2508934679, 2509065821, 2509196897, 2509327969, - 2509459061, 2509590169, 2509721317, 2509852417, 2509983503, 2510114597, 2510245679, - 2510376763, 2510507837, 2510638951, 2510770027, 2510901103, 2511032203, 2511163307, - 2511294413, 2511425489, 2511556561, 2511687637, 2511818713, 2511949789, 2512080881, - 2512211953, 2512343027, 2512474103, 2512605203, 2512736297, 2512867373, 2512998461, - 2513129581, 2513260661, 2513391733, 2513522831, 2513653907, 2513784979, 2513916071, - 2514047153, 2514178241, 2514309319, 2514440393, 2514571481, 2514702557, 2514833669, - 2514964799, 2515095881, 2515226957, 2515358047, 2515489129, 2515620227, 2515751299, - 2515882381, 2516013469, 2516144557, 2516275633, 2516406713, 2516537791, 2516668879, - 2516799979, 2516931059, 2517062131, 2517193271, 2517324343, 2517455417, 2517586501, - 2517717583, 2517848681, 2517979787, 2518110923, 2518242029, 2518373111, 2518504199, - 2518635299, 2518766423, 2518897499, 2519028571, 2519159653, 2519290727, 2519421799, - 2519552891, 2519683963, 2519815057, 2519946131, 2520077213, 2520208289, 2520339373, - 2520470483, 2520601583, 2520732673, 2520863759, 2520994849, 2521125931, 2521257007, - 2521388113, 2521519193, 2521650277, 2521781369, 2521912451, 2522043523, 2522174623, - 2522305717, 2522436811, 2522567891, 2522698973, 2522830067, 2522961139, 2523092219, - 2523223321, 2523354401, 2523485483, 2523616591, 2523747697, 2523878771, 2524009843, - 2524140961, 2524272073, 2524403159, 2524534241, 2524665317, 2524796401, 2524927481, - 2525058581, 2525189657, 2525320753, 2525451829, 2525582911, 2525713991, 2525845081, - 2525976163, 2526107267, 2526238339, 2526369457, 2526500549, 2526631621, 2526762703, - 2526893779, 2527024901, 2527155997, 2527287079, 2527418161, 2527549247, 2527680319, - 2527811411, 2527942519, 2528073601, 2528204677, 2528335751, 2528466847, 2528597921, - 2528729009, 2528860129, 2528991203, 2529122279, 2529253367, 2529384439, 2529515519, - 2529646591, 2529777671, 2529908743, 2530039823, 2530170941, 2530302031, 2530433173, - 2530564279, 2530695379, 2530826461, 2530957537, 2531088619, 2531219699, 2531350777, - 2531481881, 2531612957, 2531744029, 2531875163, 2532006247, 2532137323, 2532268423, - 2532399497, 2532530587, 2532661783, 2532792937, 2532924011, 2533055089, 2533186171, - 2533317247, 2533448327, 2533579423, 2533710503, 2533841579, 2533972673, 2534103763, - 2534234869, 2534365961, 2534497033, 2534628113, 2534759197, 2534890273, 2535021361, - 2535152443, 2535283523, 2535414601, 2535545689, 2535676823, 2535807919, 2535939047, - 2536070123, 2536201201, 2536332311, 2536463443, 2536594549, 2536725641, 2536856717, - 2536987793, 2537118877, 2537249969, 2537381059, 2537512141, 2537643221, 2537774321, - 2537905397, 2538036517, 2538167591, 2538298681, 2538429757, 2538560831, 2538691927, - 2538823019, 2538954091, 2539085177, 2539216289, 2539347373, 2539478449, 2539609529, - 2539740607, 2539871687, 2540002789, 2540133877, 2540264989, 2540396129, 2540527211, - 2540658293, 2540789387, 2540920477, 2541051551, 2541182639, 2541313711, 2541444791, - 2541575879, 2541706987, 2541838063, 2541969167, 2542100261, 2542231343, 2542362439, - 2542493519, 2542624603, 2542755689, 2542886771, 2543017847, 2543148931, 2543280023, - 2543411111, 2543542187, 2543673269, 2543804381, 2543935453, 2544066527, 2544197627, - 2544328789, 2544459899, 2544590977, 2544722051, 2544853127, 2544984251, 2545115329, - 2545246423, 2545377529, 2545508663, 2545639753, 2545770833, 2545901921, 2546033029, - 2546164109, 2546295211, 2546426353, 2546557487, 2546688569, 2546819659, 2546950733, - 2547081809, 2547212909, 2547343993, 2547475069, 2547606143, 2547737273, 2547868361, - 2547999439, 2548130513, 2548261591, 2548392677, 2548523759, 2548654861, 2548785973, - 2548917071, 2549048143, 2549179219, 2549310299, 2549441393, 2549572511, 2549703601, - 2549834681, 2549965819, 2550096893, 2550227969, 2550359089, 2550490169, 2550621289, - 2550752381, 2550883463, 2551014541, 2551145617, 2551276691, 2551407769, 2551538849, - 2551669931, 2551801027, 2551932157, 2552063237, 2552194339, 2552325421, 2552456497, - 2552587571, 2552718643, 2552849723, 2552980819, 2553111929, 2553243013, 2553374101, - 2553505189, 2553636269, 2553767389, 2553898469, 2554029587, 2554160659, 2554291777, - 2554422851, 2554553941, 2554685041, 2554816127, 2554947223, 2555078297, 2555209387, - 2555340461, 2555471579, 2555602661, 2555733749, 2555864821, 2555995901, 2556126997, - 2556258079, 2556389167, 2556520279, 2556651371, 2556782453, 2556913553, 2557044629, - 2557175737, 2557306847, 2557437947, 2557569023, 2557700107, 2557831183, 2557962283, - 2558093387, 2558224469, 2558355593, 2558486669, 2558617741, 2558748833, 2558879941, - 2559011041, 2559142121, 2559273193, 2559404269, 2559535343, 2559666437, 2559797521, - 2559928699, 2560059823, 2560190977, 2560322057, 2560453141, 2560584233, 2560715347, - 2560846423, 2560977509, 2561108603, 2561239679, 2561370751, 2561501827, 2561632903, - 2561763979, 2561895073, 2562026147, 2562157229, 2562288307, 2562419399, 2562550499, - 2562681581, 2562812657, 2562943739, 2563074821, 2563205933, 2563337009, 2563468081, - 2563599163, 2563730261, 2563861357, 2563992439, 2564123531, 2564254607, 2564385721, - 2564516797, 2564647903, 2564778991, 2564910079, 2565041197, 2565172301, 2565303379, - 2565434471, 2565565579, 2565696659, 2565827753, 2565958849, 2566089937, 2566221059, - 2566352141, 2566483219, 2566614311, 2566745383, 2566876457, 2567007533, 2567138611, - 2567269699, 2567400817, 2567531899, 2567662991, 2567794069, 2567925169, 2568056251, - 2568187327, 2568318421, 2568449497, 2568580571, 2568711671, 2568842753, 2568973843, - 2569104947, 2569236023, 2569367123, 2569498229, 2569629323, 2569760437, 2569891529, - 2570022607, 2570153683, 2570284777, 2570415877, 2570546971, 2570678051, 2570809127, - 2570940223, 2571071303, 2571202393, 2571333467, 2571464551, 2571595673, 2571726749, - 2571857909, 2571988981, 2572120069, 2572251163, 2572382237, 2572513309, 2572644407, - 2572775519, 2572906619, 2573037707, 2573168779, 2573299919, 2573431057, 2573562143, - 2573693219, 2573824333, 2573955443, 2574086527, 2574217601, 2574348677, 2574479759, - 2574610877, 2574741959, 2574873053, 2575004137, 2575135219, 2575266299, 2575397417, - 2575528499, 2575659617, 2575790699, 2575921793, 2576052883, 2576183957, 2576315059, - 2576446133, 2576577229, 2576708347, 2576839537, 2576970647, 2577101719, 2577232799, - 2577363911, 2577495013, 2577626137, 2577757211, 2577888283, 2578019399, 2578150481, - 2578281553, 2578412653, 2578543771, 2578674853, 2578806017, 2578937129, 2579068201, - 2579199299, 2579330399, 2579461481, 2579592559, 2579723659, 2579854733, 2579985857, - 2580116933, 2580248009, 2580379091, 2580510169, 2580641281, 2580772373, 2580903461, - 2581034543, 2581165633, 2581296709, 2581427809, 2581558901, 2581689977, 2581821049, - 2581952137, 2582083243, 2582214319, 2582345399, 2582476537, 2582607617, 2582738693, - 2582869769, 2583000851, 2583131951, 2583263027, 2583394139, 2583525211, 2583656297, - 2583787369, 2583918443, 2584049557, 2584180673, 2584311749, 2584442827, 2584573907, - 2584704979, 2584836073, 2584967159, 2585098237, 2585229323, 2585360447, 2585491523, - 2585622607, 2585753689, 2585884783, 2586015871, 2586146963, 2586278041, 2586409117, - 2586540193, 2586671291, 2586802411, 2586933491, 2587064563, 2587195649, 2587326751, - 2587457857, 2587588933, 2587720007, 2587851083, 2587982167, 2588113261, 2588244359, - 2588375431, 2588506517, 2588637589, 2588768669, 2588899751, 2589030863, 2589161947, - 2589293023, 2589424109, 2589555187, 2589686287, 2589817361, 2589948451, 2590079533, - 2590210607, 2590341713, 2590472789, 2590603879, 2590734977, 2590866053, 2590997131, - 2591128231, 2591259313, 2591390407, 2591521483, 2591652577, 2591783657, 2591914729, - 2592045803, 2592176891, 2592307967, 2592439093, 2592570181, 2592701281, 2592832357, - 2592963481, 2593094579, 2593225693, 2593356781, 2593487881, 2593618961, 2593750039, - 2593881137, 2594012209, 2594143289, 2594274367, 2594405449, 2594536523, 2594667599, - 2594798671, 2594929747, 2595060821, 2595191917, 2595323011, 2595454091, 2595585169, - 2595716243, 2595847337, 2595978431, 2596109543, 2596240649, 2596371727, 2596502819, - 2596633927, 2596765037, 2596896139, 2597027239, 2597158327, 2597289473, 2597420563, - 2597551643, 2597682719, 2597813851, 2597944939, 2598076049, 2598207127, 2598338213, - 2598469303, 2598600397, 2598731489, 2598862583, 2598993667, 2599124743, 2599255861, - 2599386947, 2599518023, 2599649113, 2599780207, 2599911313, 2600042437, 2600173571, - 2600304647, 2600435743, 2600566831, 2600697917, 2600829017, 2600960099, 2601091201, - 2601222289, 2601353407, 2601484547, 2601615631, 2601746743, 2601877819, 2602008919, - 2602140001, 2602271093, 2602402189, 2602533289, 2602664371, 2602795457, 2602926539, - 2603057617, 2603188747, 2603319833, 2603450911, 2603582077, 2603713153, 2603844233, - 2603975317, 2604106397, 2604237479, 2604368561, 2604499633, 2604630727, 2604761833, - 2604892909, 2605023983, 2605155061, 2605286171, 2605417249, 2605548343, 2605679423, - 2605810523, 2605941601, 2606072687, 2606203781, 2606334859, 2606465947, 2606597027, - 2606728171, 2606859257, 2606990357, 2607121453, 2607252577, 2607383651, 2607514733, - 2607645839, 2607776921, 2607907999, 2608039117, 2608170221, 2608301309, 2608432391, - 2608563467, 2608694551, 2608825631, 2608956733, 2609087807, 2609218879, 2609349979, - 2609481053, 2609612153, 2609743243, 2609874317, 2610005441, 2610136523, 2610267613, - 2610398689, 2610529763, 2610660847, 2610791923, 2610923027, 2611054129, 2611185263, - 2611316353, 2611447453, 2611578553, 2611709629, 2611840723, 2611971809, 2612102903, - 2612234011, 2612365099, 2612496203, 2612627291, 2612758387, 2612889463, 2613020573, - 2613151649, 2613282769, 2613413857, 2613544937, 2613676049, 2613807127, 2613938209, - 2614069361, 2614200487, 2614331569, 2614462649, 2614593749, 2614724837, 2614855909, - 2614987007, 2615118083, 2615249159, 2615380231, 2615511341, 2615642417, 2615773507, - 2615904587, 2616035671, 2616166757, 2616297889, 2616428987, 2616560059, 2616691151, - 2616822227, 2616953299, 2617084391, 2617215479, 2617346579, 2617477657, 2617608751, - 2617739843, 2617870921, 2618002021, 2618133097, 2618264171, 2618395249, 2618526329, - 2618657491, 2618788577, 2618919673, 2619050747, 2619181837, 2619312923, 2619444007, - 2619575083, 2619706169, 2619837247, 2619968333, 2620099423, 2620230563, 2620361647, - 2620492747, 2620623829, 2620754933, 2620886029, 2621017151, 2621148227, 2621279359, - 2621410531, 2621541641, 2621672741, 2621803823, 2621934901, 2622065977, 2622197059, - 2622328147, 2622459233, 2622590309, 2622721397, 2622852569, 2622983681, 2623114763, - 2623245857, 2623376939, 2623508033, 2623639127, 2623770203, 2623901297, 2624032379, - 2624163481, 2624294557, 2624425679, 2624556761, 2624687837, 2624818967, 2624950063, - 2625081161, 2625212243, 2625343319, 2625474437, 2625605539, 2625736627, 2625867701, - 2625998779, 2626129867, 2626260943, 2626392019, 2626523113, 2626654193, 2626785383, - 2626916477, 2627047583, 2627178709, 2627309791, 2627440873, 2627571971, 2627703049, - 2627834141, 2627965229, 2628096301, 2628227417, 2628358501, 2628489601, 2628620677, - 2628751771, 2628882853, 2629013939, 2629145021, 2629276093, 2629407167, 2629538293, - 2629669391, 2629800491, 2629931581, 2630062663, 2630193737, 2630324821, 2630455957, - 2630587033, 2630718109, 2630849189, 2630980267, 2631111377, 2631242461, 2631373559, - 2631504653, 2631635731, 2631766829, 2631897907, 2632028983, 2632160071, 2632291147, - 2632422223, 2632553311, 2632684391, 2632815487, 2632946579, 2633077679, 2633208757, - 2633339833, 2633470907, 2633601979, 2633733077, 2633864153, 2633995303, 2634126403, - 2634257477, 2634388571, 2634519649, 2634650737, 2634781823, 2634912899, 2635043987, - 2635175071, 2635306147, 2635437239, 2635568339, 2635699439, 2635830523, 2635961609, - 2636092681, 2636223791, 2636354887, 2636485991, 2636617063, 2636748139, 2636879221, - 2637010331, 2637141407, 2637272497, 2637403619, 2637534703, 2637665827, 2637796921, - 2637928003, 2638059107, 2638190197, 2638321289, 2638452367, 2638583459, 2638714541, - 2638845617, 2638976701, 2639107777, 2639238857, 2639369987, 2639501063, 2639632139, - 2639763211, 2639894291, 2640025403, 2640156481, 2640287597, 2640418691, 2640549763, - 2640680837, 2640811937, 2640943009, 2641074089, 2641205197, 2641336273, 2641467383, - 2641598483, 2641729591, 2641860679, 2641991783, 2642122867, 2642253947, 2642385023, - 2642516101, 2642647201, 2642778301, 2642909413, 2643040529, 2643171637, 2643302713, - 2643433789, 2643564871, 2643695947, 2643827027, 2643958151, 2644089241, 2644220357, - 2644351441, 2644482517, 2644613597, 2644744681, 2644875757, 2645006839, 2645137921, - 2645269019, 2645400103, 2645531201, 2645662273, 2645793349, 2645924441, 2646055513, - 2646186619, 2646317711, 2646448799, 2646579937, 2646711029, 2646842113, 2646973237, - 2647104331, 2647235407, 2647366481, 2647497569, 2647628657, 2647759729, 2647890803, - 2648021903, 2648152993, 2648284091, 2648415163, 2648546237, 2648677331, 2648808413, - 2648939543, 2649070637, 2649201713, 2649332821, 2649463907, 2649594979, 2649726059, - 2649857213, 2649988307, 2650119379, 2650250483, 2650381577, 2650512659, 2650643741, - 2650774829, 2650905911, 2651036987, 2651168077, 2651299163, 2651430251, 2651561357, - 2651692429, 2651823509, 2651954581, 2652085669, 2652216761, 2652347897, 2652478991, - 2652610069, 2652741151, 2652872227, 2653003361, 2653134437, 2653265509, 2653396583, - 2653527661, 2653658767, 2653789861, 2653920953, 2654052029, 2654183101, 2654314183, - 2654445289, 2654576383, 2654707459, 2654838551, 2654969677, 2655100751, 2655231827, - 2655362921, 2655493999, 2655625073, 2655756149, 2655887231, 2656018373, 2656149449, - 2656280537, 2656411613, 2656542701, 2656673777, 2656804859, 2656935961, 2657067041, - 2657198123, 2657329223, 2657460307, 2657591401, 2657722477, 2657853553, 2657984653, - 2658115771, 2658246847, 2658377923, 2658508997, 2658640109, 2658771187, 2658902263, - 2659033343, 2659164427, 2659295519, 2659426597, 2659557671, 2659688747, 2659819829, - 2659950901, 2660081981, 2660213053, 2660344129, 2660475227, 2660606321, 2660737397, - 2660868479, 2660999563, 2661130643, 2661261727, 2661392809, 2661523883, 2661654991, - 2661786089, 2661917173, 2662048283, 2662179361, 2662310491, 2662441577, 2662572659, - 2662703753, 2662834847, 2662965959, 2663097077, 2663228159, 2663359261, 2663490353, - 2663621431, 2663752523, 2663883601, 2664014687, 2664145763, 2664276841, 2664407953, - 2664539041, 2664670157, 2664801233, 2664932327, 2665063403, 2665194487, 2665325617, - 2665456697, 2665587823, 2665718921, 2665850101, 2665981211, 2666112283, 2666243369, - 2666374471, 2666505547, 2666636627, 2666767771, 2666898847, 2667029947, 2667161033, - 2667292109, 2667423193, 2667554287, 2667685381, 2667816469, 2667947543, 2668078627, - 2668209743, 2668340833, 2668471943, 2668603019, 2668734121, 2668865197, 2668996271, - 2669127359, 2669258443, 2669389519, 2669520593, 2669651693, 2669782769, 2669913859, - 2670044933, 2670176011, 2670307093, 2670438193, 2670569329, 2670700433, 2670831511, - 2670962597, 2671093673, 2671224757, 2671355837, 2671486927, 2671618007, 2671749109, - 2671880231, 2672011327, 2672142413, 2672273521, 2672404619, 2672535707, 2672666813, - 2672797889, 2672928967, 2673060097, 2673191173, 2673322277, 2673453359, 2673584453, - 2673715543, 2673846671, 2673977759, 2674108831, 2674239907, 2674370983, 2674502069, - 2674633147, 2674764263, 2674895339, 2675026423, 2675157521, 2675288617, 2675419729, - 2675550827, 2675681903, 2675812991, 2675944069, 2676075163, 2676206251, 2676337351, - 2676468427, 2676599501, 2676730579, 2676861673, 2676992761, 2677123837, 2677254929, - 2677386043, 2677517159, 2677648241, 2677779329, 2677910413, 2678041489, 2678172587, - 2678303681, 2678434823, 2678565913, 2678697019, 2678828123, 2678959223, 2679090311, - 2679221411, 2679352499, 2679483589, 2679614719, 2679745793, 2679876877, 2680007971, - 2680139051, 2680270127, 2680401319, 2680532429, 2680663537, 2680794619, 2680925713, - 2681056813, 2681187893, 2681318993, 2681450077, 2681581151, 2681712227, 2681843299, - 2681974403, 2682105499, 2682236587, 2682367711, 2682498827, 2682629923, 2682761071, - 2682892187, 2683023319, 2683154393, 2683285471, 2683416551, 2683547623, 2683678721, - 2683809797, 2683940869, 2684071967, 2684203087, 2684334167, 2684465297, 2684596399, - 2684727517, 2684858591, 2684989687, 2685120761, 2685251843, 2685382939, 2685514099, - 2685645191, 2685776287, 2685907361, 2686038449, 2686169527, 2686300619, 2686431703, - 2686562777, 2686693873, 2686824949, 2686956037, 2687087173, 2687218283, 2687349391, - 2687480507, 2687611603, 2687742683, 2687873761, 2688004843, 2688135937, 2688267013, - 2688398087, 2688529183, 2688660263, 2688791353, 2688922451, 2689053541, 2689184639, - 2689315763, 2689446839, 2689577911, 2689709041, 2689840117, 2689971191, 2690102267, - 2690233367, 2690364449, 2690495527, 2690626633, 2690757733, 2690888819, 2691019901, - 2691151003, 2691282089, 2691413167, 2691544241, 2691675313, 2691806387, 2691937459, - 2692068553, 2692199633, 2692330727, 2692461901, 2692592977, 2692724053, 2692855141, - 2692986221, 2693117293, 2693248387, 2693379463, 2693510537, 2693641633, 2693772727, - 2693903801, 2694034933, 2694166031, 2694297161, 2694428237, 2694559321, 2694690431, - 2694821527, 2694952627, 2695083701, 2695214783, 2695345859, 2695476961, 2695608053, - 2695739129, 2695870237, 2696001349, 2696132423, 2696263499, 2696394607, 2696525687, - 2696656759, 2696787839, 2696918921, 2697050011, 2697181103, 2697312209, 2697443303, - 2697574421, 2697705499, 2697836579, 2697967661, 2698098751, 2698229857, 2698360933, - 2698492031, 2698623107, 2698754183, 2698885291, 2699016377, 2699147471, 2699278579, - 2699409659, 2699540741, 2699671817, 2699802899, 2699933983, 2700065083, 2700196199, - 2700327317, 2700458393, 2700589469, 2700720551, 2700851651, 2700982727, 2701113817, - 2701244911, 2701376009, 2701507091, 2701638169, 2701769243, 2701900319, 2702031407, - 2702162479, 2702293571, 2702424667, 2702555741, 2702686849, 2702817961, 2702949043, - 2703080131, 2703211237, 2703342311, 2703473393, 2703604523, 2703735613, 2703866761, - 2703997837, 2704128941, 2704260019, 2704391099, 2704522189, 2704653293, 2704784389, - 2704915481, 2705046557, 2705177639, 2705308721, 2705439797, 2705570929, 2705702023, - 2705833103, 2705964181, 2706095257, 2706226339, 2706357419, 2706488503, 2706619577, - 2706750667, 2706881741, 2707012831, 2707143917, 2707274989, 2707406087, 2707537159, - 2707668269, 2707799357, 2707930429, 2708061539, 2708192611, 2708323721, 2708454809, - 2708585927, 2708717023, 2708848097, 2708979173, 2709110273, 2709241349, 2709372427, - 2709503519, 2709634643, 2709765743, 2709896821, 2710027921, 2710159003, 2710290083, - 2710421167, 2710552291, 2710683397, 2710814497, 2710945609, 2711076703, 2711207783, - 2711338871, 2711469973, 2711601059, 2711732147, 2711863223, 2711994301, 2712125389, - 2712256507, 2712387647, 2712518723, 2712649799, 2712780877, 2712911951, 2713043033, - 2713174129, 2713305223, 2713436309, 2713567391, 2713698473, 2713829579, 2713960721, - 2714091797, 2714222957, 2714354033, 2714485121, 2714616211, 2714747359, 2714878433, - 2715009509, 2715140587, 2715271661, 2715402751, 2715533831, 2715664907, 2715795991, - 2715927091, 2716058167, 2716189241, 2716320319, 2716451407, 2716582481, 2716713557, - 2716844629, 2716975711, 2717106827, 2717237909, 2717368987, 2717500063, 2717631143, - 2717762269, 2717893379, 2718024497, 2718155569, 2718286643, 2718417719, 2718548821, - 2718679913, 2718810989, 2718942071, 2719073153, 2719204231, 2719335319, 2719466401, - 2719597483, 2719728589, 2719859663, 2719990753, 2720121853, 2720252959, 2720384077, - 2720515177, 2720646263, 2720777357, 2720908451, 2721039523, 2721170611, 2721301691, - 2721432781, 2721563863, 2721694961, 2721826067, 2721957187, 2722088293, 2722219373, - 2722350469, 2722481543, 2722612631, 2722743739, 2722874831, 2723005913, 2723137037, - 2723268109, 2723399209, 2723530289, 2723661383, 2723792501, 2723923589, 2724054667, - 2724185767, 2724316871, 2724447961, 2724579037, 2724710161, 2724841267, 2724972377, - 2725103449, 2725234537, 2725365613, 2725496717, 2725627813, 2725758887, 2725889963, - 2726021047, 2726152123, 2726283223, 2726414303, 2726545411, 2726676493, 2726807569, - 2726938649, 2727069733, 2727200887, 2727331993, 2727463133, 2727594227, 2727725317, - 2727856393, 2727987481, 2728118563, 2728249637, 2728380749, 2728511839, 2728642949, - 2728774043, 2728905119, 2729036207, 2729167297, 2729298389, 2729429467, 2729560541, - 2729691617, 2729822713, 2729953841, 2730084919, 2730215993, 2730347143, 2730478229, - 2730609319, 2730740417, 2730871513, 2731002607, 2731133711, 2731264807, 2731395881, - 2731526957, 2731658057, 2731789129, 2731920223, 2732051327, 2732182441, 2732313517, - 2732444609, 2732575691, 2732706773, 2732837879, 2732969033, 2733100109, 2733231199, - 2733362273, 2733493361, 2733624461, 2733755539, 2733886633, 2734017709, 2734148783, - 2734279883, 2734410961, 2734542053, 2734673129, 2734804207, 2734935293, 2735066371, - 2735197457, 2735328529, 2735459633, 2735590723, 2735721797, 2735852909, 2735984023, - 2736115103, 2736246179, 2736377251, 2736508331, 2736639419, 2736770503, 2736901597, - 2737032677, 2737163809, 2737294909, 2737426001, 2737557077, 2737688153, 2737819261, - 2737950353, 2738081443, 2738212517, 2738343607, 2738474681, 2738605763, 2738736841, - 2738867921, 2738999057, 2739130139, 2739261229, 2739392323, 2739523433, 2739654527, - 2739785621, 2739916703, 2740047781, 2740178873, 2740309967, 2740441057, 2740572157, - 2740703233, 2740834339, 2740965413, 2741096489, 2741227591, 2741358701, 2741489789, - 2741620883, 2741751989, 2741883073, 2742014213, 2742145297, 2742276389, 2742407471, - 2742538571, 2742669649, 2742800729, 2742931811, 2743062943, 2743194017, 2743325099, - 2743456181, 2743587263, 2743718347, 2743849429, 2743980521, 2744111597, 2744242679, - 2744373833, 2744504941, 2744636021, 2744767097, 2744898197, 2745029279, 2745160373, - 2745291469, 2745422549, 2745553639, 2745684713, 2745815789, 2745946871, 2746077967, - 2746209043, 2746340141, 2746471229, 2746602301, 2746733387, 2746864481, 2746995557, - 2747126633, 2747257717, 2747388811, 2747519897, 2747650981, 2747782057, 2747913149, - 2748044231, 2748175303, 2748306389, 2748437467, 2748568541, 2748699649, 2748830741, - 2748961843, 2749092937, 2749224011, 2749355093, 2749486183, 2749617257, 2749748333, - 2749879409, 2750010481, 2750141651, 2750272747, 2750403823, 2750534903, 2750665993, - 2750797087, 2750928181, 2751059263, 2751190363, 2751321439, 2751452513, 2751583609, - 2751714683, 2751845773, 2751976859, 2752107937, 2752239013, 2752370087, 2752501159, - 2752632241, 2752763341, 2752894421, 2753025493, 2753156573, 2753287679, 2753418761, - 2753549861, 2753680939, 2753812021, 2753943113, 2754074189, 2754205273, 2754336373, - 2754467447, 2754598529, 2754729631, 2754860729, 2754991807, 2755122899, 2755253983, - 2755385057, 2755516139, 2755647211, 2755778293, 2755909379, 2756040457, 2756171549, - 2756302643, 2756433751, 2756564831, 2756695937, 2756827037, 2756958131, 2757089249, - 2757220339, 2757351427, 2757482503, 2757613577, 2757744667, 2757875749, 2758006831, - 2758137929, 2758269001, 2758400083, 2758531157, 2758662239, 2758793327, 2758924411, - 2759055587, 2759186687, 2759317789, 2759448889, 2759579983, 2759711063, 2759842139, - 2759973217, 2760104353, 2760235433, 2760366509, 2760497609, 2760628699, 2760759791, - 2760890863, 2761021957, 2761153051, 2761284139, 2761415219, 2761546321, 2761677403, - 2761808521, 2761939627, 2762070833, 2762201909, 2762332987, 2762464091, 2762595169, - 2762726251, 2762857327, 2762988433, 2763119521, 2763250603, 2763381683, 2763512783, - 2763643873, 2763774971, 2763906083, 2764037197, 2764168283, 2764299361, 2764430447, - 2764561519, 2764692629, 2764823723, 2764954799, 2765085901, 2765216981, 2765348077, - 2765479193, 2765610283, 2765741383, 2765872471, 2766003553, 2766134633, 2766265709, - 2766396781, 2766527857, 2766658933, 2766790007, 2766921119, 2767052261, 2767183423, - 2767314533, 2767445633, 2767576723, 2767707809, 2767838911, 2767969991, 2768101067, - 2768232161, 2768363233, 2768494307, 2768625383, 2768756461, 2768887567, 2769018647, - 2769149743, 2769280819, 2769411907, 2769542983, 2769674057, 2769805133, 2769936209, - 2770067299, 2770198381, 2770329511, 2770460587, 2770591727, 2770722821, 2770853927, - 2770984999, 2771116081, 2771247173, 2771378249, 2771509343, 2771640433, 2771771551, - 2771902643, 2772033731, 2772164827, 2772295913, 2772426991, 2772558127, 2772689203, - 2772820279, 2772951353, 2773082447, 2773213543, 2773344631, 2773475759, 2773606837, - 2773737937, 2773869019, 2774000107, 2774131183, 2774262287, 2774393393, 2774524483, - 2774655563, 2774786681, 2774917771, 2775048863, 2775179951, 2775311023, 2775442123, - 2775573211, 2775704297, 2775835399, 2775966491, 2776097567, 2776228687, 2776359779, - 2776490863, 2776621997, 2776753093, 2776884167, 2777015249, 2777146349, 2777277427, - 2777408519, 2777539601, 2777670677, 2777801749, 2777932897, 2778063979, 2778195071, - 2778326143, 2778457273, 2778588359, 2778719431, 2778850511, 2778981589, 2779112681, - 2779243769, 2779374847, 2779505923, 2779636999, 2779768081, 2779899167, 2780030249, - 2780161327, 2780292461, 2780423537, 2780554633, 2780685707, 2780816789, 2780947879, - 2781078961, 2781210037, 2781341141, 2781472247, 2781603323, 2781734401, 2781865477, - 2781996563, 2782127669, 2782258741, 2782389821, 2782520899, 2782651979, 2782783063, - 2782914137, 2783045257, 2783176349, 2783307421, 2783438513, 2783569601, 2783700743, - 2783831833, 2783962921, 2784094009, 2784225113, 2784356231, 2784487309, 2784618413, - 2784749507, 2784880589, 2785011679, 2785142783, 2785273871, 2785404943, 2785536041, - 2785667113, 2785798201, 2785929287, 2786060393, 2786191517, 2786322607, 2786453689, - 2786584777, 2786715851, 2786846947, 2786978021, 2787109103, 2787240191, 2787371263, - 2787502343, 2787633427, 2787764501, 2787895597, 2788026697, 2788157783, 2788288859, - 2788419947, 2788551049, 2788682131, 2788813211, 2788944283, 2789075357, 2789206429, - 2789337511, 2789468587, 2789599661, 2789730739, 2789861863, 2789992973, 2790124097, - 2790255173, 2790386251, 2790517333, 2790648433, 2790779521, 2790910601, 2791041707, - 2791172819, 2791303901, 2791434973, 2791566059, 2791697131, 2791828217, 2791959301, - 2792090401, 2792221489, 2792352569, 2792483641, 2792614717, 2792745797, 2792876921, - 2793008039, 2793139127, 2793270211, 2793401287, 2793532369, 2793663451, 2793794527, - 2793925633, 2794056719, 2794187807, 2794318903, 2794449991, 2794581073, 2794712159, - 2794843253, 2794974337, 2795105413, 2795236511, 2795367637, 2795498711, 2795629861, - 2795760937, 2795892017, 2796023093, 2796154177, 2796285253, 2796416341, 2796547451, - 2796678527, 2796809599, 2796940703, 2797071793, 2797202869, 2797333993, 2797465067, - 2797596161, 2797727243, 2797858333, 2797989407, 2798120503, 2798251591, 2798382689, - 2798513771, 2798644861, 2798775949, 2798907031, 2799038113, 2799169259, 2799300347, - 2799431423, 2799562511, 2799693587, 2799824663, 2799955747, 2800086871, 2800217969, - 2800349047, 2800480219, 2800611293, 2800742377, 2800873451, 2801004539, 2801135669, - 2801266747, 2801397881, 2801528999, 2801660089, 2801791177, 2801922271, 2802053347, - 2802184439, 2802315521, 2802446597, 2802577697, 2802708793, 2802839867, 2802970949, - 2803102033, 2803233113, 2803364189, 2803495267, 2803626347, 2803757503, 2803888579, - 2804019653, 2804150747, 2804281819, 2804412893, 2804543969, 2804675051, 2804806177, - 2804937277, 2805068351, 2805199429, 2805330509, 2805461609, 2805592681, 2805723761, - 2805854861, 2805985951, 2806117043, 2806248119, 2806379221, 2806510307, 2806641391, - 2806772477, 2806903549, 2807034641, 2807165719, 2807296801, 2807427901, 2807558987, - 2807690069, 2807821141, 2807952239, 2808083329, 2808214427, 2808345557, 2808476677, - 2808607777, 2808738851, 2808869929, 2809001003, 2809132087, 2809263169, 2809394249, - 2809525321, 2809656431, 2809787531, 2809918609, 2810049689, 2810180773, 2810311873, - 2810442959, 2810574059, 2810705137, 2810836211, 2810967311, 2811098399, 2811229501, - 2811360577, 2811491653, 2811622733, 2811753809, 2811884891, 2812015993, 2812147069, - 2812278251, 2812409333, 2812540411, 2812671493, 2812802569, 2812933681, 2813064763, - 2813195899, 2813327009, 2813458091, 2813589173, 2813720251, 2813851331, 2813982419, - 2814113521, 2814244619, 2814375701, 2814506777, 2814637853, 2814768937, 2814900029, - 2815031101, 2815162183, 2815293277, 2815424369, 2815555447, 2815686527, 2815817617, - 2815948693, 2816079779, 2816210857, 2816341961, 2816473067, 2816604139, 2816735263, - 2816866361, 2816997451, 2817128543, 2817259639, 2817390731, 2817521803, 2817652967, - 2817784103, 2817915179, 2818046263, 2818177339, 2818308419, 2818439521, 2818570619, - 2818701713, 2818832843, 2818963981, 2819095061, 2819226143, 2819357239, 2819488333, - 2819619419, 2819750497, 2819881619, 2820012707, 2820143779, 2820274949, 2820406081, - 2820537169, 2820668251, 2820799363, 2820930443, 2821061521, 2821192631, 2821323709, - 2821454803, 2821585901, 2821716973, 2821848053, 2821979131, 2822110229, 2822241307, - 2822372383, 2822503457, 2822634539, 2822765611, 2822896693, 2823027773, 2823158879, - 2823289957, 2823421031, 2823552161, 2823683257, 2823814349, 2823945431, 2824076543, - 2824207627, 2824338709, 2824469783, 2824600861, 2824731971, 2824863049, 2824994129, - 2825125243, 2825256341, 2825387429, 2825518543, 2825649623, 2825780723, 2825911807, - 2826042887, 2826173971, 2826305059, 2826436141, 2826567223, 2826698311, 2826829391, - 2826960473, 2827091557, 2827222637, 2827353713, 2827484843, 2827615943, 2827747079, - 2827878173, 2828009257, 2828140331, 2828271403, 2828402501, 2828533577, 2828664649, - 2828795741, 2828926819, 2829057929, 2829189007, 2829320089, 2829451171, 2829582271, - 2829713353, 2829844441, 2829975521, 2830106597, 2830237691, 2830368769, 2830499869, - 2830630967, 2830762079, 2830893161, 2831024279, 2831155351, 2831286427, 2831417509, - 2831548613, 2831679701, 2831810791, 2831941867, 2832072953, 2832204043, 2832335117, - 2832466199, 2832597283, 2832728387, 2832859483, 2832990593, 2833121701, 2833252783, - 2833383857, 2833514939, 2833646017, 2833777117, 2833908227, 2834039317, 2834170411, - 2834301487, 2834432561, 2834563651, 2834694739, 2834825839, 2834956937, 2835088019, - 2835219103, 2835350191, 2835481303, 2835612407, 2835743501, 2835874577, 2836005649, - 2836136729, 2836267801, 2836398883, 2836529963, 2836661039, 2836792111, 2836923203, - 2837054287, 2837185397, 2837316479, 2837447581, 2837578673, 2837709757, 2837840861, - 2837971951, 2838103033, 2838234121, 2838365207, 2838496319, 2838627397, 2838758473, - 2838889589, 2839020671, 2839151743, 2839282843, 2839413919, 2839544993, 2839676137, - 2839807219, 2839938323, 2840069443, 2840200537, 2840331623, 2840462701, 2840593787, - 2840724877, 2840855951, 2840987069, 2841118141, 2841249221, 2841380329, 2841511403, - 2841642493, 2841773573, 2841904697, 2842035773, 2842166891, 2842297963, 2842429049, - 2842560121, 2842691197, 2842822271, 2842953361, 2843084467, 2843215553, 2843346683, - 2843477761, 2843608849, 2843739929, 2843871011, 2844002129, 2844133247, 2844264323, - 2844395447, 2844526549, 2844657653, 2844788747, 2844919829, 2845050917, 2845182013, - 2845313129, 2845444201, 2845575283, 2845706359, 2845837433, 2845968511, 2846099647, - 2846230727, 2846361821, 2846492899, 2846623979, 2846755129, 2846886221, 2847017311, - 2847148411, 2847279497, 2847410581, 2847541663, 2847672761, 2847803839, 2847934931, - 2848066031, 2848197139, 2848328269, 2848459351, 2848590443, 2848721521, 2848852597, - 2848983691, 2849114789, 2849245897, 2849377019, 2849508097, 2849639179, 2849770267, - 2849901377, 2850032453, 2850163531, 2850294611, 2850425693, 2850556789, 2850687883, - 2850818959, 2850950059, 2851081141, 2851212233, 2851343323, 2851474397, 2851605469, - 2851736551, 2851867649, 2851998731, 2852129803, 2852260877, 2852391973, 2852523127, - 2852654221, 2852785307, 2852916401, 2853047503, 2853178579, 2853309653, 2853440747, - 2853571823, 2853702913, 2853834007, 2853965089, 2854096171, 2854227263, 2854358347, - 2854489427, 2854620499, 2854751573, 2854882651, 2855013737, 2855144827, 2855275909, - 2855406991, 2855538071, 2855669143, 2855800231, 2855931343, 2856062437, 2856193513, - 2856324629, 2856455737, 2856586819, 2856717907, 2856848999, 2856980083, 2857111183, - 2857242299, 2857373371, 2857504451, 2857635551, 2857766677, 2857897753, 2858028839, - 2858159923, 2858291057, 2858422247, 2858553359, 2858684449, 2858815537, 2858946613, - 2859077693, 2859208789, 2859339869, 2859470951, 2859602033, 2859733139, 2859864239, - 2859995351, 2860126447, 2860257571, 2860388659, 2860519741, 2860650833, 2860781923, - 2860913039, 2861044139, 2861175227, 2861306333, 2861437421, 2861568497, 2861699569, - 2861830679, 2861961769, 2862092867, 2862223939, 2862355019, 2862486101, 2862617179, - 2862748261, 2862879337, 2863010419, 2863141507, 2863272661, 2863403749, 2863534823, - 2863665911, 2863796989, 2863928071, 2864059201, 2864190281, 2864321357, 2864452429, - 2864583509, 2864714597, 2864845693, 2864976767, 2865107851, 2865238927, 2865370007, - 2865501083, 2865632167, 2865763249, 2865894329, 2866025413, 2866156541, 2866287637, - 2866418713, 2866549789, 2866680893, 2866811971, 2866943059, 2867074151, 2867205239, - 2867336323, 2867467417, 2867598493, 2867729567, 2867860673, 2867991761, 2868122837, - 2868253943, 2868385049, 2868516143, 2868647231, 2868778331, 2868909497, 2869040609, - 2869171693, 2869302767, 2869433867, 2869564969, 2869696079, 2869827179, 2869958251, - 2870089363, 2870220473, 2870351551, 2870482633, 2870613721, 2870744803, 2870875919, - 2871007003, 2871138103, 2871269183, 2871400261, 2871531349, 2871662429, 2871793537, - 2871924611, 2872055689, 2872186787, 2872317869, 2872448963, 2872580071, 2872711147, - 2872842221, 2872973357, 2873104433, 2873235517, 2873366621, 2873497723, 2873628817, - 2873759897, 2873890997, 2874022079, 2874153151, 2874284269, 2874415381, 2874546481, - 2874677569, 2874808723, 2874939817, 2875070897, 2875201991, 2875333067, 2875464143, - 2875595221, 2875726297, 2875857379, 2875988477, 2876119559, 2876250631, 2876381713, - 2876512861, 2876643997, 2876775079, 2876906167, 2877037253, 2877168331, 2877299407, - 2877430483, 2877561613, 2877692687, 2877823769, 2877954841, 2878085921, 2878217039, - 2878348111, 2878479193, 2878610299, 2878741379, 2878872461, 2879003537, 2879134639, - 2879265721, 2879396813, 2879527927, 2879659091, 2879790163, 2879921249, 2880052327, - 2880183421, 2880314509, 2880445583, 2880576689, 2880707761, 2880838847, 2880969979, - 2881101059, 2881232177, 2881363253, 2881494337, 2881625441, 2881756517, 2881887629, - 2882018717, 2882149799, 2882280881, 2882411953, 2882543047, 2882674121, 2882805197, - 2882936281, 2883067357, 2883198467, 2883329651, 2883460739, 2883591827, 2883722899, - 2883853981, 2883985067, 2884116161, 2884247237, 2884378361, 2884509437, 2884640531, - 2884771613, 2884902697, 2885033797, 2885164871, 2885295949, 2885427049, 2885558149, - 2885689223, 2885820299, 2885951377, 2886082453, 2886213593, 2886344687, 2886475789, - 2886606871, 2886737977, 2886869087, 2887000169, 2887131251, 2887262333, 2887393409, - 2887524499, 2887655609, 2887786691, 2887917803, 2888048929, 2888180021, 2888311099, - 2888442203, 2888573327, 2888704411, 2888835491, 2888966581, 2889097693, 2889228851, - 2889359927, 2889491039, 2889622111, 2889753197, 2889884279, 2890015357, 2890146473, - 2890277569, 2890408657, 2890539731, 2890670807, 2890801909, 2890932983, 2891064067, - 2891195141, 2891326219, 2891457301, 2891588383, 2891719469, 2891850541, 2891981647, - 2892112739, 2892243829, 2892374911, 2892506009, 2892637117, 2892768191, 2892899281, - 2893030373, 2893161511, 2893292629, 2893423711, 2893554791, 2893685881, 2893816969, - 2893948073, 2894079163, 2894210261, 2894341339, 2894472439, 2894603527, 2894734613, - 2894865691, 2894996771, 2895127871, 2895259013, 2895390089, 2895521183, 2895652261, - 2895783337, 2895914423, 2896045501, 2896176587, 2896307723, 2896438807, 2896569911, - 2896700999, 2896832089, 2896963163, 2897094259, 2897225339, 2897356453, 2897487611, - 2897618699, 2897749801, 2897880889, 2898011989, 2898143069, 2898274147, 2898405221, - 2898536293, 2898667427, 2898798533, 2898929611, 2899060687, 2899191803, 2899322897, - 2899453981, 2899585061, 2899716139, 2899847231, 2899978331, 2900109419, 2900240509, - 2900371583, 2900502667, 2900633773, 2900764849, 2900895947, 2901027029, 2901158119, - 2901289199, 2901420317, 2901551399, 2901682477, 2901813569, 2901944671, 2902075811, - 2902206883, 2902338167, 2902469249, 2902600357, 2902731439, 2902862519, 2902993591, - 2903124689, 2903255779, 2903386877, 2903517959, 2903649059, 2903780161, 2903911237, - 2904042313, 2904173399, 2904304477, 2904435557, 2904566629, 2904697703, 2904828779, - 2904959851, 2905090939, 2905222049, 2905353127, 2905484201, 2905615283, 2905746367, - 2905877453, 2906008529, 2906139629, 2906270711, 2906401783, 2906532899, 2906663971, - 2906795069, 2906926153, 2907057229, 2907188321, 2907319403, 2907450479, 2907581591, - 2907712679, 2907843773, 2907974851, 2908105951, 2908237061, 2908368139, 2908499239, - 2908630349, 2908761467, 2908892561, 2909023639, 2909154727, 2909285843, 2909416921, - 2909548051, 2909679131, 2909810209, 2909941343, 2910072419, 2910203507, 2910334627, - 2910465703, 2910596783, 2910727861, 2910858941, 2910990029, 2911121107, 2911252229, - 2911383323, 2911514447, 2911645523, 2911776601, 2911907711, 2912038823, 2912169901, - 2912300999, 2912432093, 2912563229, 2912694329, 2912825401, 2912956499, 2913087587, - 2913218677, 2913349753, 2913480847, 2913611923, 2913743011, 2913874091, 2914005181, - 2914136261, 2914267351, 2914398433, 2914529543, 2914660691, 2914791779, 2914922851, - 2915053931, 2915185027, 2915316109, 2915447189, 2915578271, 2915709347, 2915840423, - 2915971501, 2916102583, 2916233657, 2916364747, 2916495871, 2916626953, 2916758057, - 2916889201, 2917020329, 2917151407, 2917282481, 2917413557, 2917544629, 2917675721, - 2917806803, 2917937879, 2918068969, 2918200079, 2918331173, 2918462251, 2918593343, - 2918724421, 2918855531, 2918986633, 2919117739, 2919248869, 2919379993, 2919511109, - 2919642181, 2919773291, 2919904381, 2920035479, 2920166573, 2920297669, 2920428751, - 2920559857, 2920690937, 2920822027, 2920953127, 2921084207, 2921215279, 2921346377, - 2921477467, 2921608553, 2921739637, 2921870729, 2922001829, 2922132901, 2922263983, - 2922395071, 2922526153, 2922657233, 2922788329, 2922919403, 2923050491, 2923181627, - 2923312703, 2923443799, 2923574933, 2923706029, 2923837153, 2923968241, 2924099327, - 2924230409, 2924361481, 2924492591, 2924623717, 2924754841, 2924885917, 2925017003, - 2925148087, 2925279179, 2925410251, 2925541349, 2925672439, 2925803519, 2925934591, - 2926065671, 2926196747, 2926327819, 2926458893, 2926589993, 2926721087, 2926852171, - 2926983263, 2927114381, 2927245457, 2927376541, 2927507617, 2927638699, 2927769773, - 2927900879, 2928031987, 2928163081, 2928294167, 2928425263, 2928556349, 2928687439, - 2928818513, 2928949607, 2929080701, 2929211773, 2929342847, 2929473923, 2929605043, - 2929736137, 2929867217, 2929998289, 2930129381, 2930260507, 2930391589, 2930522689, - 2930653769, 2930784847, 2930915941, 2931047051, 2931178141, 2931309217, 2931440297, - 2931571393, 2931702467, 2931833557, 2931964643, 2932095763, 2932226837, 2932357927, - 2932489003, 2932620077, 2932751153, 2932882229, 2933013301, 2933144393, 2933275493, - 2933406569, 2933537647, 2933668721, 2933799833, 2933930917, 2934061993, 2934193069, - 2934324181, 2934455291, 2934586363, 2934717439, 2934848561, 2934979643, 2935110743, - 2935241819, 2935372903, 2935503979, 2935635119, 2935766213, 2935897301, 2936028377, - 2936159459, 2936290537, 2936421613, 2936552747, 2936683829, 2936814911, 2936946007, - 2937077083, 2937208187, 2937339259, 2937470339, 2937601417, 2937732493, 2937863597, - 2937994673, 2938125791, 2938256899, 2938387987, 2938519061, 2938650161, 2938781273, - 2938912411, 2939043493, 2939174569, 2939305651, 2939436733, 2939567809, 2939698891, - 2939829979, 2939961103, 2940092237, 2940223333, 2940354409, 2940485489, 2940616561, - 2940747643, 2940878749, 2941009837, 2941140941, 2941272041, 2941403117, 2941534207, - 2941665283, 2941796359, 2941927433, 2942058523, 2942189651, 2942320739, 2942451943, - 2942583031, 2942714111, 2942845183, 2942976317, 2943107411, 2943238489, 2943369571, - 2943500657, 2943631763, 2943762841, 2943893929, 2944025009, 2944156091, 2944287191, - 2944418291, 2944549409, 2944680481, 2944811591, 2944942709, 2945073787, 2945204861, - 2945335957, 2945467037, 2945598181, 2945729333, 2945860417, 2945991539, 2946122617, - 2946253699, 2946384781, 2946515893, 2946646973, 2946778061, 2946909137, 2947040227, - 2947171303, 2947302403, 2947433483, 2947564573, 2947695661, 2947826737, 2947957813, - 2948088919, 2948220013, 2948351093, 2948482169, 2948613253, 2948744329, 2948875417, - 2949006497, 2949137627, 2949268723, 2949399797, 2949530959, 2949662033, 2949793109, - 2949924199, 2950055287, 2950186367, 2950317439, 2950448513, 2950579591, 2950710667, - 2950841771, 2950972867, 2951103943, 2951235019, 2951366101, 2951497187, 2951628263, - 2951759357, 2951890433, 2952021529, 2952152653, 2952283757, 2952414853, 2952545951, - 2952677047, 2952808123, 2952939217, 2953070299, 2953201387, 2953332523, 2953463599, - 2953594681, 2953725773, 2953856861, 2953987943, 2954119027, 2954250107, 2954381191, - 2954512277, 2954643407, 2954774479, 2954905553, 2955036631, 2955167707, 2955298783, - 2955429859, 2955560939, 2955692023, 2955823097, 2955954187, 2956085261, 2956216337, - 2956347419, 2956478491, 2956609577, 2956740659, 2956871741, 2957002847, 2957133937, - 2957265023, 2957396119, 2957527201, 2957658299, 2957789381, 2957920463, 2958051563, - 2958182707, 2958313783, 2958444869, 2958576037, 2958707111, 2958838189, 2958969341, - 2959100447, 2959231519, 2959362629, 2959493809, 2959624903, 2959755977, 2959887053, - 2960018129, 2960149211, 2960280283, 2960411359, 2960542489, 2960673571, 2960804653, - 2960935727, 2961066811, 2961197893, 2961328967, 2961460063, 2961591137, 2961722219, - 2961853291, 2961984433, 2962115551, 2962246631, 2962377703, 2962508789, 2962639873, - 2962770949, 2962902029, 2963033111, 2963164199, 2963295287, 2963426359, 2963557459, - 2963688547, 2963819653, 2963950739, 2964081893, 2964212983, 2964344057, 2964475159, - 2964606257, 2964737339, 2964868411, 2964999487, 2965130569, 2965261643, 2965392733, - 2965523831, 2965654943, 2965786073, 2965917167, 2966048269, 2966179343, 2966310439, - 2966441539, 2966572663, 2966703743, 2966834831, 2966965909, 2967096983, 2967228113, - 2967359233, 2967490313, 2967621389, 2967752503, 2967883601, 2968014689, 2968145771, - 2968276849, 2968407989, 2968539071, 2968670209, 2968801351, 2968932433, 2969063507, - 2969194589, 2969325683, 2969456783, 2969587883, 2969718959, 2969850049, 2969981227, - 2970112309, 2970243421, 2970374507, 2970505579, 2970636677, 2970767749, 2970898829, - 2971029931, 2971161019, 2971292117, 2971423229, 2971554301, 2971685393, 2971816469, - 2971947547, 2972078647, 2972209769, 2972340841, 2972471917, 2972602993, 2972734081, - 2972865163, 2972996237, 2973127327, 2973258413, 2973389533, 2973520633, 2973651721, - 2973782809, 2973913889, 2974044989, 2974176083, 2974307173, 2974438249, 2974569331, - 2974700431, 2974831537, 2974962631, 2975093717, 2975224807, 2975355931, 2975487007, - 2975618147, 2975749237, 2975880331, 2976011411, 2976142489, 2976273581, 2976404719, - 2976535813, 2976666887, 2976798017, 2976929089, 2977060171, 2977191253, 2977322351, - 2977453459, 2977584539, 2977715669, 2977846741, 2977977853, 2978108951, 2978240099, - 2978371181, 2978502311, 2978633429, 2978764517, 2978895589, 2979026737, 2979157829, - 2979288911, 2979419999, 2979551131, 2979682231, 2979813311, 2979944389, 2980075471, - 2980206553, 2980337641, 2980468717, 2980599829, 2980730933, 2980862021, 2980993117, - 2981124191, 2981255323, 2981386409, 2981517509, 2981648611, 2981779721, 2981910797, - 2982041911, 2982172993, 2982304099, 2982435179, 2982566261, 2982697343, 2982828427, - 2982959521, 2983090601, 2983221679, 2983352767, 2983483871, 2983614961, 2983746067, - 2983877161, 2984008241, 2984139313, 2984270407, 2984401487, 2984532583, 2984663657, - 2984794741, 2984925847, 2985056923, 2985187999, 2985319081, 2985450161, 2985581239, - 2985712319, 2985843391, 2985974479, 2986105561, 2986236647, 2986367723, 2986498813, - 2986629907, 2986760983, 2986892059, 2987023153, 2987154257, 2987285369, 2987416447, - 2987547539, 2987678641, 2987809751, 2987940829, 2988071909, 2988203027, 2988334109, - 2988465199, 2988596309, 2988727397, 2988858493, 2988989567, 2989120639, 2989251761, - 2989382849, 2989513949, 2989645027, 2989776109, 2989907243, 2990038349, 2990169421, - 2990300501, 2990431573, 2990562719, 2990693843, 2990824919, 2990955997, 2991087079, - 2991218161, 2991349243, 2991480319, 2991611419, 2991742493, 2991873569, 2992004647, - 2992135733, 2992266853, 2992397929, 2992529003, 2992660087, 2992791199, 2992922279, - 2993053369, 2993184443, 2993315539, 2993446627, 2993577781, 2993708867, 2993839943, - 2993971051, 2994102131, 2994233243, 2994364349, 2994495421, 2994626497, 2994757583, - 2994888709, 2995019803, 2995150889, 2995281997, 2995413089, 2995544171, 2995675253, - 2995806329, 2995937407, 2996068483, 2996199593, 2996330683, 2996461757, 2996592883, - 2996723969, 2996855051, 2996986123, 2997117199, 2997248333, 2997379417, 2997510511, - 2997641593, 2997772699, 2997903793, 2998034867, 2998165949, 2998297031, 2998428109, - 2998559203, 2998690291, 2998821421, 2998952513, 2999083589, 2999214661, 2999345743, - 2999476849, 2999607973, 2999739049, 2999870141, 3000001229, 3000132313, 3000263389, - 3000394471, 3000525569, 3000656693, 3000787799, 3000918871, 3001049963, 3001181041, - 3001312117, 3001443199, 3001574299, 3001705381, 3001836463, 3001967537, 3002098613, - 3002229719, 3002360813, 3002491903, 3002623007, 3002754089, 3002885161, 3003016249, - 3003147341, 3003278441, 3003409523, 3003540613, 3003671701, 3003802801, 3003933937, - 3004065023, 3004196141, 3004327217, 3004458313, 3004589387, 3004720463, 3004851569, - 3004982663, 3005113753, 3005244829, 3005375953, 3005507041, 3005638133, 3005769223, - 3005900297, 3006031393, 3006162487, 3006293569, 3006424643, 3006555749, 3006686887, - 3006817993, 3006949093, 3007080221, 3007211303, 3007342399, 3007473473, 3007604549, - 3007735639, 3007866713, 3007997807, 3008128883, 3008259977, 3008391073, 3008522173, - 3008653259, 3008784367, 3008915447, 3009046519, 3009177631, 3009308719, 3009439847, - 3009570919, 3009702013, 3009833131, 3009964289, 3010095371, 3010226459, 3010357541, - 3010488617, 3010619693, 3010750777, 3010881857, 3011012941, 3011144029, 3011275103, - 3011406191, 3011537273, 3011668349, 3011799457, 3011930531, 3012061631, 3012192727, - 3012323801, 3012454889, 3012585967, 3012717047, 3012848143, 3012979219, 3013110293, - 3013241411, 3013372493, 3013503601, 3013634677, 3013765751, 3013896841, 3014027927, - 3014159017, 3014290129, 3014421203, 3014552363, 3014683459, 3014814553, 3014945627, - 3015076721, 3015207821, 3015338897, 3015469973, 3015601067, 3015732149, 3015863239, - 3015994369, 3016125443, 3016256521, 3016387609, 3016518697, 3016649777, 3016780853, - 3016911929, 3017043017, 3017174099, 3017305171, 3017436271, 3017567359, 3017698433, - 3017829541, 3017960653, 3018091729, 3018222833, 3018353909, 3018484999, 3018616079, - 3018747163, 3018878237, 3019009309, 3019140391, 3019271471, 3019402543, 3019533617, - 3019664717, 3019795829, 3019926911, 3020058023, 3020189119, 3020320201, 3020451283, - 3020582363, 3020713463, 3020844571, 3020975669, 3021106747, 3021237851, 3021368939, - 3021500021, 3021631097, 3021762199, 3021893291, 3022024403, 3022155481, 3022286569, - 3022417663, 3022548743, 3022679819, 3022810913, 3022942033, 3023073107, 3023204207, - 3023335283, 3023466373, 3023597461, 3023728619, 3023859701, 3023990789, 3024121861, - 3024252967, 3024384043, 3024515147, 3024646249, 3024777323, 3024908407, 3025039487, - 3025170559, 3025301647, 3025432777, 3025563901, 3025694981, 3025826053, 3025957127, - 3026088203, 3026219279, 3026350357, 3026481433, 3026612509, 3026743613, 3026874691, - 3027005783, 3027136859, 3027267941, 3027399013, 3027530117, 3027661211, 3027792307, - 3027923383, 3028054483, 3028185569, 3028316647, 3028447729, 3028578869, 3028709969, - 3028841041, 3028972117, 3029103193, 3029234269, 3029365393, 3029496467, 3029627543, - 3029758643, 3029889763, 3030020837, 3030151919, 3030282991, 3030414103, 3030545197, - 3030676273, 3030807391, 3030938467, 3031069543, 3031200631, 3031331753, 3031462843, - 3031593947, 3031725029, 3031856123, 3031987201, 3032118281, 3032249357, 3032380441, - 3032511523, 3032642603, 3032773697, 3032904803, 3033035893, 3033166987, 3033298061, - 3033429169, 3033560261, 3033691351, 3033822427, 3033953513, 3034084621, 3034215713, - 3034346803, 3034477891, 3034608971, 3034740043, 3034871117, 3035002189, 3035133271, - 3035264347, 3035395421, 3035526539, 3035657659, 3035788741, 3035919827, 3036050909, - 3036181987, 3036313103, 3036444193, 3036575281, 3036706363, 3036837443, 3036968521, - 3037099603, 3037230689, 3037361771, 3037492853, 3037623929, 3037755013, 3037886107, - 3038017183, 3038148259, 3038279347, 3038410421, 3038541511, 3038672587, 3038803661, - 3038934749, 3039065849, 3039196921, 3039328001, 3039459079, 3039590237, 3039721309, - 3039852383, 3039983461, 3040114543, 3040245623, 3040376743, 3040507849, 3040638949, - 3040770049, 3040901137, 3041032217, 3041163361, 3041294437, 3041425649, 3041556733, - 3041687813, 3041818907, 3041950003, 3042081079, 3042212153, 3042343237, 3042474317, - 3042605389, 3042736537, 3042867643, 3042998723, 3043129801, 3043260881, 3043391963, - 3043523051, 3043654123, 3043785299, 3043916371, 3044047453, 3044178541, 3044309651, - 3044440757, 3044571833, 3044702929, 3044834021, 3044965103, 3045096191, 3045227303, - 3045358397, 3045489481, 3045620563, 3045751663, 3045882751, 3046013837, 3046144931, - 3046276033, 3046407113, 3046538221, 3046669303, 3046800413, 3046931491, 3047062573, - 3047193649, 3047324779, 3047455867, 3047586943, 3047718019, 3047849099, 3047980183, - 3048111259, 3048242357, 3048373439, 3048504559, 3048635641, 3048766739, 3048897821, - 3049028893, 3049159987, 3049291123, 3049422221, 3049553317, 3049684409, 3049815481, - 3049946569, 3050077651, 3050208737, 3050339837, 3050470921, 3050602001, 3050733089, - 3050864171, 3050995301, 3051126373, 3051257483, 3051388573, 3051519661, 3051650747, - 3051781897, 3051912979, 3052044053, 3052175129, 3052306207, 3052437287, 3052568359, - 3052699511, 3052830587, 3052961669, 3053092799, 3053223893, 3053355001, 3053486119, - 3053617201, 3053748281, 3053879357, 3054010459, 3054141551, 3054272677, 3054403771, - 3054534851, 3054665959, 3054797063, 3054928159, 3055059251, 3055190387, 3055321501, - 3055452577, 3055583651, 3055714741, 3055845827, 3055976939, 3056108021, 3056239099, - 3056370181, 3056501293, 3056632373, 3056763461, 3056894539, 3057025613, 3057156719, - 3057287791, 3057418883, 3057549961, 3057681071, 3057812159, 3057943247, 3058074323, - 3058205407, 3058336481, 3058467553, 3058598633, 3058729717, 3058860797, 3058991879, - 3059122961, 3059254043, 3059385143, 3059516261, 3059647337, 3059778427, 3059909521, - 3060040601, 3060171679, 3060302779, 3060433861, 3060564937, 3060696019, 3060827117, - 3060958211, 3061089293, 3061220377, 3061351457, 3061482533, 3061613627, 3061744717, - 3061875799, 3062006897, 3062137987, 3062269069, 3062400163, 3062531237, 3062662333, - 3062793421, 3062924503, 3063055591, 3063186689, 3063317833, 3063448931, 3063580027, - 3063711181, 3063842267, 3063973351, 3064104451, 3064235617, 3064366703, 3064497827, - 3064628923, 3064760003, 3064891079, 3065022187, 3065153279, 3065284357, 3065415443, - 3065546551, 3065677639, 3065808791, 3065939869, 3066070949, 3066202063, 3066333143, - 3066464221, 3066595309, 3066726391, 3066857473, 3066988591, 3067119703, 3067250783, - 3067381861, 3067512941, 3067644017, 3067775089, 3067906189, 3068037263, 3068168339, - 3068299439, 3068430527, 3068561633, 3068692709, 3068823787, 3068954891, 3069085993, - 3069217087, 3069348187, 3069479267, 3069610339, 3069741419, 3069872513, 3070003589, - 3070134671, 3070265743, 3070396859, 3070528031, 3070659107, 3070790201, 3070921289, - 3071052367, 3071183441, 3071314579, 3071445673, 3071576749, 3071707829, 3071838961, - 3071970053, 3072101129, 3072232201, 3072363313, 3072494423, 3072625511, 3072756593, - 3072887677, 3073018759, 3073149841, 3073280921, 3073412021, 3073543097, 3073674173, - 3073805281, 3073936363, 3074067439, 3074198549, 3074329627, 3074460713, 3074591789, - 3074722891, 3074853967, 3074985071, 3075116171, 3075247243, 3075378349, 3075509429, - 3075640591, 3075771667, 3075902741, 3076033817, 3076164907, 3076295987, 3076427063, - 3076558139, 3076689281, 3076820363, 3076951457, 3077082553, 3077213641, 3077344733, - 3077475829, 3077606929, 3077738051, 3077869129, 3078000239, 3078131323, 3078262399, - 3078393481, 3078524587, 3078655661, 3078786749, 3078917867, 3079048949, 3079180057, - 3079311143, 3079442221, 3079573303, 3079704391, 3079835491, 3079966567, 3080097641, - 3080228717, 3080359823, 3080490923, 3080622023, 3080753131, 3080884259, 3081015373, - 3081146461, 3081277541, 3081408613, 3081539689, 3081670777, 3081801857, 3081932969, - 3082064047, 3082195141, 3082326217, 3082457291, 3082588381, 3082719469, 3082850543, - 3082981639, 3083112737, 3083243819, 3083374897, 3083505973, 3083637061, 3083768143, - 3083899223, 3084030311, 3084161407, 3084292481, 3084423553, 3084554657, 3084685757, - 3084816883, 3084947963, 3085079051, 3085210159, 3085341241, 3085472317, 3085603397, - 3085734469, 3085865557, 3085996631, 3086127719, 3086258831, 3086389913, 3086521001, - 3086652089, 3086783209, 3086914297, 3087045407, 3087176513, 3087307589, 3087438661, - 3087569741, 3087700813, 3087831917, 3087962993, 3088094071, 3088225229, 3088356319, - 3088487429, 3088618501, 3088749581, 3088880653, 3089011727, 3089142809, 3089273899, - 3089404973, 3089536063, 3089667137, 3089798209, 3089929351, 3090060451, 3090191537, - 3090322633, 3090453727, 3090584851, 3090715933, 3090847007, 3090978089, 3091109171, - 3091240247, 3091371343, 3091502417, 3091633511, 3091764589, 3091895711, 3092026789, - 3092157941, 3092289017, 3092420099, 3092551183, 3092682287, 3092813377, 3092944457, - 3093075541, 3093206639, 3093337717, 3093468799, 3093599879, 3093730951, 3093862027, - 3093993101, 3094124221, 3094255301, 3094386377, 3094517467, 3094648573, 3094779659, - 3094910743, 3095041819, 3095172893, 3095303969, 3095435047, 3095566129, 3095697211, - 3095828303, 3095959381, 3096090463, 3096221539, 3096352691, 3096483833, 3096614933, - 3096746033, 3096877117, 3097008191, 3097139281, 3097270391, 3097401481, 3097532623, - 3097663711, 3097794797, 3097925879, 3098056961, 3098188033, 3098319109, 3098450191, - 3098581301, 3098712401, 3098843479, 3098974573, 3099105731, 3099236837, 3099367933, - 3099499019, 3099630097, 3099761179, 3099892253, 3100023373, 3100154489, 3100285577, - 3100416673, 3100547767, 3100678883, 3100809973, 3100941059, 3101072201, 3101203279, - 3101334359, 3101465453, 3101596543, 3101727619, 3101858759, 3101989853, 3102120941, - 3102252047, 3102383147, 3102514231, 3102645311, 3102776389, 3102907463, 3103038571, - 3103169669, 3103300813, 3103431997, 3103563077, 3103694149, 3103825247, 3103956403, - 3104087489, 3104218561, 3104349683, 3104480759, 3104611871, 3104742947, 3104874053, - 3105005149, 3105136247, 3105267323, 3105398407, 3105529481, 3105660553, 3105791629, - 3105922711, 3106053793, 3106184899, 3106315997, 3106447121, 3106578203, 3106709311, - 3106840393, 3106971467, 3107102539, 3107233627, 3107364713, 3107495789, 3107626901, - 3107757973, 3107889047, 3108020131, 3108151217, 3108282337, 3108413411, 3108544489, - 3108675587, 3108806669, 3108937763, 3109068841, 3109199917, 3109330993, 3109462067, - 3109593139, 3109724251, 3109855349, 3109986463, 3110117537, 3110248613, 3110379707, - 3110510779, 3110641939, 3110773013, 3110904113, 3111035189, 3111166271, 3111297349, - 3111428447, 3111559541, 3111690643, 3111821723, 3111952813, 3112083889, 3112215017, - 3112346113, 3112477201, 3112608287, 3112739363, 3112870477, 3113001589, 3113132663, - 3113263793, 3113394881, 3113525957, 3113657033, 3113788109, 3113919187, 3114050299, - 3114181381, 3114312457, 3114443569, 3114574643, 3114705721, 3114836797, 3114967897, - 3115099021, 3115230103, 3115361189, 3115492273, 3115623389, 3115754471, 3115885543, - 3116016623, 3116147743, 3116278817, 3116409899, 3116540981, 3116672057, 3116803133, - 3116934229, 3117065351, 3117196447, 3117327533, 3117458651, 3117589723, 3117720803, - 3117851887, 3117982997, 3118114183, 3118245259, 3118376333, 3118507409, 3118638487, - 3118769567, 3118900703, 3119031787, 3119162881, 3119293963, 3119425063, 3119556157, - 3119687239, 3119818327, 3119949431, 3120080503, 3120211621, 3120342713, 3120473789, - 3120604871, 3120735953, 3120867037, 3120998117, 3121129189, 3121260281, 3121391353, - 3121522433, 3121653511, 3121784651, 3121915739, 3122046817, 3122177893, 3122308979, - 3122440091, 3122571163, 3122702251, 3122833327, 3122964419, 3123095491, 3123226571, - 3123357689, 3123488777, 3123619853, 3123750943, 3123882019, 3124013093, 3124144169, - 3124275251, 3124406347, 3124537421, 3124668499, 3124799593, 3124930729, 3125061809, - 3125192887, 3125324051, 3125455169, 3125586271, 3125717351, 3125848423, 3125979539, - 3126110623, 3126241733, 3126372817, 3126503951, 3126635069, 3126766187, 3126897287, - 3127028419, 3127159499, 3127290583, 3127421659, 3127552783, 3127683863, 3127814939, - 3127946027, 3128077153, 3128208271, 3128339353, 3128470451, 3128601523, 3128732627, - 3128863721, 3128994797, 3129125891, 3129256969, 3129388043, 3129519121, 3129650197, - 3129781279, 3129912371, 3130043467, 3130174543, 3130305667, 3130436753, 3130567837, - 3130698911, 3130830011, 3130961149, 3131092229, 3131223307, 3131354381, 3131485471, - 3131616571, 3131747657, 3131878759, 3132009833, 3132140933, 3132272041, 3132403121, - 3132534203, 3132665281, 3132796367, 3132927439, 3133058527, 3133189603, 3133320683, - 3133451767, 3133582853, 3133713931, 3133845007, 3133976099, 3134107177, 3134238293, - 3134369377, 3134500469, 3134631541, 3134762639, 3134893717, 3135024793, 3135155869, - 3135286949, 3135418063, 3135549143, 3135680237, 3135811339, 3135942421, 3136073497, - 3136204607, 3136335701, 3136466791, 3136597873, 3136728961, 3136860053, 3136991129, - 3137122223, 3137253299, 3137384399, 3137515477, 3137646559, 3137777633, 3137908727, - 3138039803, 3138170911, 3138302003, 3138433139, 3138564251, 3138695377, 3138826459, - 3138957533, 3139088647, 3139219739, 3139350817, 3139481897, 3139612969, 3139744061, - 3139875181, 3140006257, 3140137331, 3140268413, 3140399489, 3140530621, 3140661697, - 3140792783, 3140923867, 3141054941, 3141186149, 3141317237, 3141448337, 3141579443, - 3141710519, 3141841657, 3141972737, 3142103813, 3142234891, 3142365979, 3142497091, - 3142628183, 3142759259, 3142890353, 3143021429, 3143152541, 3143283631, 3143414713, - 3143545807, 3143676929, 3143808007, 3143939089, 3144070183, 3144201271, 3144332357, - 3144463433, 3144594511, 3144725611, 3144856697, 3144987821, 3145118939, 3145250027, - 3145381139, 3145512259, 3145643339, 3145774421, 3145905509, 3146036611, 3146167693, - 3146298781, 3146429857, 3146560933, 3146692007, 3146823109, 3146954189, 3147085297, - 3147216389, 3147347503, 3147478591, 3147609667, 3147740741, 3147871813, 3148002887, - 3148133971, 3148265147, 3148396247, 3148527331, 3148658423, 3148789499, 3148920571, - 3149051671, 3149182781, 3149313863, 3149444951, 3149576069, 3149707151, 3149838229, - 3149969311, 3150100403, 3150231503, 3150362591, 3150493667, 3150624761, 3150755849, - 3150886931, 3151018049, 3151149139, 3151280233, 3151411339, 3151542419, 3151673533, - 3151804679, 3151935769, 3152066843, 3152197967, 3152329049, 3152460121, 3152591227, - 3152722303, 3152853397, 3152984551, 3153115639, 3153246743, 3153377819, 3153508921, - 3153640019, 3153771097, 3153902173, 3154033249, 3154164329, 3154295407, 3154426489, - 3154557643, 3154688729, 3154819807, 3154950881, 3155081977, 3155213053, 3155344141, - 3155475221, 3155606297, 3155737391, 3155868467, 3155999551, 3156130669, 3156261743, - 3156392821, 3156523897, 3156654989, 3156786071, 3156917161, 3157048247, 3157179323, - 3157310423, 3157441499, 3157572629, 3157703701, 3157834783, 3157965857, 3158096983, - 3158228063, 3158359207, 3158490323, 3158621413, 3158752517, 3158883599, 3159014671, - 3159145753, 3159276839, 3159407921, 3159539011, 3159670109, 3159801181, 3159932261, - 3160063349, 3160194431, 3160325507, 3160456597, 3160587673, 3160718777, 3160849877, - 3160980997, 3161112077, 3161243191, 3161374267, 3161505343, 3161636459, 3161767537, - 3161898631, 3162029711, 3162160787, 3162291893, 3162422969, 3162554069, 3162685153, - 3162816233, 3162947311, 3163078403, 3163209521, 3163340597, 3163471691, 3163602769, - 3163733843, 3163864967, 3163996039, 3164127139, 3164258231, 3164389309, 3164520383, - 3164651467, 3164782567, 3164913667, 3165044747, 3165175823, 3165306913, 3165437987, - 3165569059, 3165700163, 3165831247, 3165962321, 3166093421, 3166224497, 3166355573, - 3166486649, 3166617721, 3166748801, 3166879879, 3167010961, 3167142061, 3167273143, - 3167404223, 3167535317, 3167666393, 3167797469, 3167928541, 3168059623, 3168190717, - 3168321809, 3168452891, 3168583969, 3168715087, 3168846221, 3168977353, 3169108441, - 3169239559, 3169370671, 3169501759, 3169632841, 3169763957, 3169895051, 3170026133, - 3170157209, 3170288327, 3170419409, 3170550553, 3170681809, 3170812907, 3170943983, - 3171075071, 3171206147, 3171337219, 3171468317, 3171599399, 3171730481, 3171861569, - 3171992641, 3172123753, 3172254851, 3172385933, 3172517027, 3172648099, 3172779187, - 3172910261, 3173041379, 3173172469, 3173303543, 3173434619, 3173565709, 3173696797, - 3173827873, 3173958961, 3174090047, 3174221119, 3174352193, 3174483271, 3174614371, - 3174745451, 3174876547, 3175007621, 3175138763, 3175269841, 3175400951, 3175532057, - 3175663129, 3175794247, 3175925321, 3176056393, 3176187481, 3176318569, 3176449709, - 3176580793, 3176711869, 3176842943, 3176974027, 3177105103, 3177236239, 3177367327, - 3177498413, 3177629489, 3177760571, 3177891671, 3178022767, 3178153871, 3178284943, - 3178416047, 3178547269, 3178678351, 3178809437, 3178940509, 3179071591, 3179202667, - 3179333777, 3179464853, 3179595959, 3179727037, 3179858117, 3179989249, 3180120343, - 3180251419, 3180382493, 3180513631, 3180644711, 3180775813, 3180906893, 3181037983, - 3181169063, 3181300159, 3181431233, 3181562309, 3181693397, 3181824479, 3181955551, - 3182086651, 3182217737, 3182348837, 3182479969, 3182611049, 3182742169, 3182873273, - 3183004361, 3183135443, 3183266521, 3183397597, 3183528701, 3183659803, 3183790877, - 3183921973, 3184053073, 3184184149, 3184315223, 3184446299, 3184577371, 3184708459, - 3184839557, 3184970639, 3185101721, 3185232797, 3185363873, 3185494957, 3185626079, - 3185757173, 3185888267, 3186019367, 3186150439, 3186281531, 3186412609, 3186543683, - 3186674801, 3186805903, 3186936997, 3187068089, 3187199161, 3187330241, 3187461313, - 3187592407, 3187723501, 3187854577, 3187985653, 3188116747, 3188247851, 3188378953, - 3188510027, 3188641109, 3188772239, 3188903317, 3189034391, 3189165479, 3189296581, - 3189427729, 3189558811, 3189689891, 3189820979, 3189952067, 3190083139, 3190214227, - 3190345343, 3190476437, 3190607557, 3190738637, 3190869733, 3191000807, 3191131891, - 3191262983, 3191394077, 3191525153, 3191656229, 3191787301, 3191918383, 3192049477, - 3192180599, 3192311671, 3192442763, 3192573877, 3192704953, 3192836063, 3192967159, - 3193098269, 3193229341, 3193360421, 3193491493, 3193622587, 3193753687, 3193884763, - 3194015849, 3194146927, 3194278013, 3194409103, 3194540177, 3194671261, 3194802337, - 3194933419, 3195064517, 3195195623, 3195326707, 3195457813, 3195588887, 3195719963, - 3195851041, 3195982123, 3196113197, 3196244287, 3196375361, 3196506433, 3196637557, - 3196768633, 3196899733, 3197030821, 3197161907, 3197292991, 3197424067, 3197555227, - 3197686337, 3197817409, 3197948491, 3198079579, 3198210661, 3198341743, 3198472861, - 3198603937, 3198735053, 3198866131, 3198997223, 3199128313, 3199259389, 3199390483, - 3199521593, 3199652713, 3199783793, 3199914869, 3200045951, 3200177041, 3200308117, - 3200439241, 3200570357, 3200701433, 3200832527, 3200963627, 3201094717, 3201225823, - 3201356897, 3201487969, 3201619079, 3201750151, 3201881227, 3202012313, 3202143401, - 3202274473, 3202405553, 3202536641, 3202667747, 3202798867, 3202929979, 3203061053, - 3203192131, 3203323231, 3203454311, 3203585387, 3203716459, 3203847533, 3203978611, - 3204109771, 3204240859, 3204371941, 3204503017, 3204634109, 3204765199, 3204896309, - 3205027381, 3205158497, 3205289573, 3205420649, 3205551737, 3205682827, 3205813967, - 3205945063, 3206076143, 3206207219, 3206338327, 3206469403, 3206600513, 3206731589, - 3206862661, 3206993761, 3207124847, 3207255937, 3207387031, 3207518131, 3207649213, - 3207780311, 3207911389, 3208042483, 3208173587, 3208304677, 3208435757, 3208566833, - 3208697909, 3208828991, 3208960081, 3209091187, 3209222299, 3209353387, 3209484479, - 3209615551, 3209746679, 3209877773, 3210008873, 3210139951, 3210271037, 3210402121, - 3210533201, 3210664279, 3210795359, 3210926441, 3211057517, 3211188623, 3211319759, - 3211450903, 3211582001, 3211713091, 3211844201, 3211975303, 3212106409, 3212237563, - 3212368639, 3212499721, 3212630797, 3212761931, 3212893007, 3213024091, 3213155173, - 3213286247, 3213417323, 3213548407, 3213679493, 3213810581, 3213941657, 3214072781, - 3214203857, 3214334951, 3214466023, 3214597109, 3214728191, 3214859281, 3214990357, - 3215121431, 3215252527, 3215383637, 3215514713, 3215645803, 3215776891, 3215907967, - 3216039049, 3216170131, 3216301217, 3216432299, 3216563381, 3216694487, 3216825583, - 3216956657, 3217087777, 3217218853, 3217349939, 3217481011, 3217612121, 3217743197, - 3217874287, 3218005363, 3218136463, 3218267543, 3218398661, 3218529739, 3218660827, - 3218791943, 3218923027, 3219054127, 3219185237, 3219316327, 3219447449, 3219578539, - 3219709687, 3219840791, 3219971869, 3220102987, 3220234067, 3220365149, 3220496263, - 3220627349, 3220758421, 3220889509, 3221020597, 3221151683, 3221282807, 3221413883, - 3221544961, 3221676047, 3221807123, 3221938249, 3222069353, 3222200441, 3222331513, - 3222462599, 3222593707, 3222724807, 3222855893, 3222986983, 3223118071, 3223249163, - 3223380253, 3223511371, 3223642453, 3223773547, 3223904623, 3224035721, 3224166797, - 3224297899, 3224429011, 3224560159, 3224691233, 3224822311, 3224953399, 3225084497, - 3225215597, 3225346673, 3225477757, 3225608833, 3225739921, 3225870997, 3226002113, - 3226133219, 3226264309, 3226395391, 3226526473, 3226657559, 3226788637, 3226919737, - 3227050817, 3227181899, 3227312971, 3227444047, 3227575181, 3227706283, 3227837357, - 3227968433, 3228099517, 3228230591, 3228361679, 3228492811, 3228623891, 3228755051, - 3228886123, 3229017203, 3229148291, 3229279379, 3229410517, 3229541599, 3229672679, - 3229803757, 3229934831, 3230065933, 3230197021, 3230328103, 3230459201, 3230590277, - 3230721383, 3230852479, 3230983589, 3231114661, 3231245749, 3231376877, 3231507959, - 3231639067, 3231770203, 3231901289, 3232032403, 3232163483, 3232294631, 3232425767, - 3232556857, 3232687951, 3232819033, 3232950121, 3233081197, 3233212309, 3233343403, - 3233474501, 3233605579, 3233736661, 3233867737, 3233998819, 3234129911, 3234261007, - 3234392123, 3234523211, 3234654299, 3234785383, 3234916469, 3235047583, 3235178711, - 3235309799, 3235440877, 3235571951, 3235703039, 3235834117, 3235965217, 3236096323, - 3236227417, 3236358509, 3236489591, 3236620679, 3236751781, 3236882861, 3237013957, - 3237145031, 3237276109, 3237407213, 3237538321, 3237669473, 3237800557, 3237931643, - 3238062749, 3238193831, 3238324913, 3238455991, 3238587127, 3238718227, 3238849301, - 3238980373, 3239111453, 3239242529, 3239373617, 3239504689, 3239635769, 3239766847, - 3239897929, 3240029027, 3240160153, 3240291247, 3240422323, 3240553429, 3240684511, - 3240815623, 3240946703, 3241077823, 3241208911, 3241339991, 3241471067, 3241602151, - 3241733233, 3241864321, 3241995413, 3242126497, 3242257589, 3242388697, 3242519771, - 3242650849, 3242781931, 3242913019, 3243044093, 3243175181, 3243306281, 3243437357, - 3243568429, 3243699517, 3243830591, 3243961673, 3244092749, 3244223821, 3244354921, - 3244486027, 3244617113, 3244748203, 3244879283, 3245010409, 3245141491, 3245272633, - 3245403727, 3245534827, 3245665909, 3245797001, 3245928073, 3246059213, 3246190303, - 3246321383, 3246452467, 3246583573, 3246714649, 3246845731, 3246976819, 3247107917, - 3247238993, 3247370101, 3247501207, 3247632301, 3247763401, 3247894487, 3248025611, - 3248156683, 3248287781, 3248418853, 3248549981, 3248681083, 3248812159, 3248943233, - 3249074321, 3249205403, 3249336479, 3249467581, 3249598727, 3249729811, 3249860897, - 3249991991, 3250123067, 3250254167, 3250385239, 3250516337, 3250647419, 3250778497, - 3250909591, 3251040703, 3251171801, 3251302889, 3251433967, 3251565047, 3251696141, - 3251827247, 3251958361, 3252089437, 3252220511, 3252351623, 3252482713, 3252613789, - 3252744863, 3252875957, 3253007029, 3253138103, 3253269191, 3253400263, 3253531357, - 3253662431, 3253793513, 3253924607, 3254055703, 3254186783, 3254317861, 3254448943, - 3254580023, 3254711123, 3254842211, 3254973283, 3255104401, 3255235483, 3255366563, - 3255497701, 3255628781, 3255759853, 3255890947, 3256022047, 3256153151, 3256284233, - 3256415311, 3256546399, 3256677481, 3256808573, 3256939649, 3257070721, 3257201807, - 3257332901, 3257463977, 3257595071, 3257726203, 3257857283, 3257988359, 3258119443, - 3258250519, 3258381593, 3258512693, 3258643769, 3258774851, 3258905927, 3259036999, - 3259168111, 3259299187, 3259430267, 3259561369, 3259692451, 3259823527, 3259954631, - 3260085709, 3260216789, 3260347877, 3260478967, 3260610049, 3260741123, 3260872217, - 3261003299, 3261134381, 3261265453, 3261396529, 3261527609, 3261658717, 3261789799, - 3261920891, 3262052009, 3262183129, 3262314203, 3262445279, 3262576351, 3262707443, - 3262838519, 3262969603, 3263100721, 3263231809, 3263362913, 3263493997, 3263625077, - 3263756173, 3263887259, 3264018349, 3264149429, 3264280507, 3264411583, 3264542707, - 3264673781, 3264804863, 3264935941, 3265067023, 3265198099, 3265329181, 3265460257, - 3265591331, 3265722407, 3265853497, 3265984577, 3266115673, 3266246779, 3266377853, - 3266508943, 3266640017, 3266771111, 3266902211, 3267033307, 3267164401, 3267295477, - 3267426559, 3267557663, 3267688741, 3267819817, 3267950891, 3268081963, 3268213057, - 3268344161, 3268475257, 3268606349, 3268737469, 3268868569, 3268999663, 3269130743, - 3269261881, 3269392957, 3269524067, 3269655139, 3269786231, 3269917333, 3270048421, - 3270179531, 3270310651, 3270441731, 3270572827, 3270703901, 3270835013, 3270966119, - 3271097197, 3271228297, 3271359389, 3271490461, 3271621547, 3271752637, 3271883729, - 3272014829, 3272145901, 3272276993, 3272408093, 3272539169, 3272670241, 3272801317, - 3272932393, 3273063473, 3273194579, 3273325663, 3273456787, 3273587869, 3273718949, - 3273850031, 3273981107, 3274112189, 3274243327, 3274374407, 3274505483, 3274636583, - 3274767673, 3274898773, 3275029847, 3275160953, 3275292107, 3275423209, 3275554291, - 3275685373, 3275816447, 3275947531, 3276078607, 3276209687, 3276340799, 3276471883, - 3276602957, 3276734029, 3276865117, 3276996199, 3277127317, 3277258433, 3277389539, - 3277520629, 3277651709, 3277782787, 3277913861, 3278044951, 3278176073, 3278307169, - 3278438281, 3278569363, 3278700443, 3278831551, 3278962657, 3279093733, 3279224807, - 3279355889, 3279486961, 3279618037, 3279749149, 3279880223, 3280011307, 3280142381, - 3280273457, 3280404529, 3280535659, 3280666747, 3280797827, 3280928921, 3281059997, - 3281191163, 3281322251, 3281453333, 3281584421, 3281715517, 3281846591, 3281977681, - 3282108769, 3282239879, 3282370961, 3282502039, 3282633119, 3282764203, 3282895307, - 3283026389, 3283157491, 3283288579, 3283419673, 3283550749, 3283681867, 3283812943, - 3283944023, 3284075111, 3284206187, 3284337271, 3284468347, 3284599457, 3284730551, - 3284861663, 3284992741, 3285123817, 3285254893, 3285385979, 3285517057, 3285648151, - 3285779291, 3285910421, 3286041497, 3286172581, 3286303661, 3286434743, 3286565819, - 3286696891, 3286827967, 3286959041, 3287090129, 3287221243, 3287352323, 3287483399, - 3287614487, 3287745563, 3287876639, 3288007727, 3288138809, 3288269891, 3288401009, - 3288532109, 3288663199, 3288794281, 3288925361, 3289056437, 3289187509, 3289318621, - 3289449703, 3289580821, 3289711907, 3289843001, 3289974131, 3290105261, 3290236373, - 3290367449, 3290498551, 3290629631, 3290760713, 3290891797, 3291022871, 3291153949, - 3291285047, 3291416129, 3291547249, 3291678347, 3291809449, 3291940543, 3292071631, - 3292202729, 3292333861, 3292464941, 3292596037, 3292727111, 3292858187, 3292989277, - 3293120387, 3293251459, 3293382551, 3293513627, 3293644723, 3293775829, 3293906951, - 3294038023, 3294169111, 3294300197, 3294431333, 3294562463, 3294693541, 3294824653, - 3294955777, 3295086859, 3295217951, 3295349027, 3295480103, 3295611191, 3295742291, - 3295873379, 3296004487, 3296135573, 3296266669, 3296397749, 3296528839, 3296659997, - 3296791087, 3296922169, 3297053273, 3297184381, 3297315467, 3297446557, 3297577687, - 3297708767, 3297839873, 3297970993, 3298102091, 3298233179, 3298364273, 3298495349, - 3298626439, 3298757549, 3298888631, 3299019707, 3299150783, 3299281861, 3299412953, - 3299544037, 3299675111, 3299806243, 3299937317, 3300068419, 3300199499, 3300330599, - 3300461707, 3300592817, 3300723929, 3300855011, 3300986119, 3301117213, 3301248317, - 3301379399, 3301510501, 3301641583, 3301772713, 3301903811, 3302034889, 3302166011, - 3302297093, 3302428169, 3302559251, 3302690327, 3302821439, 3302952511, 3303083587, - 3303214669, 3303345743, 3303476831, 3303607981, 3303739069, 3303870187, 3304001329, - 3304132421, 3304263499, 3304394573, 3304525709, 3304656781, 3304787861, 3304918963, - 3305050037, 3305181109, 3305312233, 3305443363, 3305574451, 3305705531, 3305836613, - 3305967703, 3306098791, 3306229943, 3306361061, 3306492151, 3306623231, 3306754349, - 3306885427, 3307016527, 3307147633, 3307278739, 3307409837, 3307540933, 3307672033, - 3307803151, 3307934237, 3308065337, 3308196427, 3308327513, 3308458589, 3308589673, - 3308720749, 3308851907, 3308983009, 3309114089, 3309245161, 3309376241, 3309507323, - 3309638411, 3309769487, 3309900631, 3310031759, 3310162847, 3310293919, 3310425007, - 3310556099, 3310687199, 3310818311, 3310949387, 3311080459, 3311211557, 3311342663, - 3311473751, 3311604833, 3311735909, 3311866981, 3311998087, 3312129167, 3312260257, - 3312391331, 3312522443, 3312653527, 3312784609, 3312915691, 3313046783, 3313177859, - 3313308937, 3313440023, 3313571137, 3313702261, 3313833343, 3313964417, 3314095493, - 3314226569, 3314357647, 3314488729, 3314619809, 3314750909, 3314881981, 3315013063, - 3315144137, 3315275233, 3315406309, 3315537397, 3315668471, 3315799549, 3315930643, - 3316061737, 3316192849, 3316323937, 3316455017, 3316586089, 3316717169, 3316848251, - 3316979333, 3317110427, 3317241503, 3317372609, 3317503723, 3317634811, 3317765897, - 3317896973, 3318028061, 3318159139, 3318290219, 3318421297, 3318552379, 3318683483, - 3318814561, 3318945659, 3319076743, 3319207817, 3319338889, 3319469969, 3319601041, - 3319732183, 3319863277, 3319994389, 3320125469, 3320256559, 3320387641, 3320518739, - 3320649853, 3320780929, 3320912011, 3321043087, 3321174161, 3321305291, 3321436403, - 3321567493, 3321698573, 3321829657, 3321960739, 3322091813, 3322222913, 3322353989, - 3322485073, 3322616161, 3322747243, 3322878337, 3323009411, 3323140517, 3323271593, - 3323402669, 3323533747, 3323664829, 3323795911, 3323926993, 3324058099, 3324189181, - 3324320261, 3324451343, 3324582419, 3324713519, 3324844613, 3324975707, 3325106783, - 3325237871, 3325368971, 3325500071, 3325631149, 3325762229, 3325893331, 3326024437, - 3326155513, 3326286599, 3326417671, 3326548759, 3326679857, 3326810939, 3326942029, - 3327073157, 3327204229, 3327335317, 3327466391, 3327597517, 3327728603, 3327859699, - 3327990779, 3328121851, 3328252943, 3328384019, 3328515097, 3328646219, 3328777301, - 3328908391, 3329039471, 3329170543, 3329301631, 3329432713, 3329563817, 3329694899, - 3329826013, 3329957153, 3330088243, 3330219317, 3330350407, 3330481499, 3330612583, - 3330743659, 3330874777, 3331005863, 3331136951, 3331268033, 3331399121, 3331530193, - 3331661279, 3331792357, 3331923443, 3332054527, 3332185601, 3332316677, 3332447749, - 3332578913, 3332710001, 3332841101, 3332972249, 3333103349, 3333234473, 3333365561, - 3333496643, 3333627721, 3333758797, 3333889883, 3334020961, 3334152043, 3334283131, - 3334414207, 3334545281, 3334676369, 3334807453, 3334938559, 3335069641, 3335200723, - 3335331803, 3335462899, 3335593973, 3335725051, 3335856131, 3335987203, 3336118343, - 3336249479, 3336380627, 3336511709, 3336642787, 3336773873, 3336904969, 3337036081, - 3337167173, 3337298281, 3337429367, 3337560451, 3337691543, 3337822637, 3337953709, - 3338084803, 3338215879, 3338346953, 3338478043, 3338609167, 3338740241, 3338871317, - 3339002389, 3339133513, 3339264641, 3339395723, 3339526831, 3339657967, 3339789071, - 3339920153, 3340051229, 3340182359, 3340313443, 3340444561, 3340575661, 3340706779, - 3340837933, 3340969019, 3341100131, 3341231203, 3341362301, 3341493401, 3341624497, - 3341755591, 3341886679, 3342017753, 3342148829, 3342279907, 3342410993, 3342542101, - 3342673199, 3342804271, 3342935363, 3343066481, 3343197553, 3343328689, 3343459781, - 3343590869, 3343721947, 3343853047, 3343984141, 3344115227, 3344246317, 3344377409, - 3344508509, 3344639593, 3344770669, 3344901757, 3345032833, 3345163909, 3345295027, - 3345426103, 3345557179, 3345688301, 3345819403, 3345950477, 3346081579, 3346212679, - 3346343771, 3346474847, 3346605919, 3346737013, 3346868099, 3346999181, 3347130271, - 3347261377, 3347392453, 3347523559, 3347654647, 3347785747, 3347916829, 3348047917, - 3348178991, 3348310067, 3348441143, 3348572251, 3348703327, 3348834407, 3348965483, - 3349096559, 3349227653, 3349358767, 3349489853, 3349620949, 3349752023, 3349883129, - 3350014223, 3350145347, 3350276431, 3350407507, 3350538601, 3350669681, 3350800753, - 3350931839, 3351062921, 3351193997, 3351325069, 3351456161, 3351587257, 3351718339, - 3351849427, 3351980519, 3352111591, 3352242679, 3352373779, 3352504853, 3352635931, - 3352767007, 3352898167, 3353029243, 3353160331, 3353291407, 3353422481, 3353553563, - 3353684683, 3353815763, 3353946851, 3354077963, 3354209069, 3354340153, 3354471233, - 3354602357, 3354733433, 3354864509, 3354995591, 3355126669, 3355257749, 3355388843, - 3355519931, 3355651003, 3355782077, 3355913177, 3356044277, 3356175353, 3356306467, - 3356437543, 3356568619, 3356699693, 3356830811, 3356961913, 3357093001, 3357224093, - 3357355171, 3357486277, 3357617369, 3357748447, 3357879523, 3358010609, 3358141687, - 3358272839, 3358403911, 3358535021, 3358666097, 3358797173, 3358928269, 3359059349, - 3359190427, 3359321521, 3359452601, 3359583691, 3359714779, 3359845861, 3359976941, - 3360108013, 3360239093, 3360370187, 3360501307, 3360632383, 3360763457, 3360894533, - 3361025617, 3361156693, 3361287779, 3361418867, 3361549987, 3361681067, 3361812173, - 3361943293, 3362074367, 3362205449, 3362336543, 3362467627, 3362598703, 3362729791, - 3362860867, 3362991949, 3363123037, 3363254129, 3363385237, 3363516323, 3363647401, - 3363778489, 3363909581, 3364040653, 3364171753, 3364302833, 3364433923, 3364565003, - 3364696129, 3364827227, 3364958299, 3365089393, 3365220493, 3365351581, 3365482717, - 3365613799, 3365744917, 3365875991, 3366007087, 3366138179, 3366269251, 3366400343, - 3366531419, 3366662491, 3366793589, 3366924703, 3367055807, 3367186883, 3367318007, - 3367449149, 3367580231, 3367711307, 3367842389, 3367973489, 3368104577, 3368235679, - 3368366761, 3368497841, 3368628917, 3368760013, 3368891129, 3369022201, 3369153301, - 3369284377, 3369415519, 3369546611, 3369677687, 3369808789, 3369939871, 3370070953, - 3370202039, 3370333133, 3370464241, 3370595317, 3370726409, 3370857481, 3370988581, - 3371119663, 3371250749, 3371381833, 3371512939, 3371644013, 3371775101, 3371906179, - 3372037271, 3372168347, 3372299431, 3372430541, 3372561637, 3372692723, 3372823807, - 3372954883, 3373085959, 3373217033, 3373348133, 3373479209, 3373610293, 3373741379, - 3373872521, 3374003609, 3374134691, 3374265779, 3374396863, 3374527943, 3374659021, - 3374790119, 3374921213, 3375052297, 3375183403, 3375314479, 3375445639, 3375576733, - 3375707809, 3375838897, 3375969977, 3376101061, 3376232137, 3376363253, 3376494347, - 3376625443, 3376756519, 3376887617, 3377018731, 3377149817, 3377280917, 3377412011, - 3377543089, 3377674187, 3377805269, 3377936351, 3378067453, 3378198529, 3378329609, - 3378460697, 3378591779, 3378722881, 3378853963, 3378985097, 3379116227, 3379247327, - 3379378403, 3379509493, 3379640611, 3379771693, 3379902769, 3380033843, 3380164967, - 3380296067, 3380427173, 3380558297, 3380689387, 3380820479, 3380951593, 3381082669, - 3381213743, 3381344833, 3381475919, 3381606997, 3381738071, 3381869159, 3382000241, - 3382131353, 3382262437, 3382393513, 3382524619, 3382655693, 3382786787, 3382917859, - 3383048947, 3383180077, 3383311157, 3383442259, 3383573353, 3383704481, 3383835577, - 3383966681, 3384097757, 3384228889, 3384359963, 3384491057, 3384622159, 3384753263, - 3384884359, 3385015441, 3385146529, 3385277647, 3385408727, 3385539811, 3385670891, - 3385801967, 3385933043, 3386064161, 3386195233, 3386326313, 3386457421, 3386588497, - 3386719591, 3386850683, 3386981779, 3387112853, 3387243941, 3387375029, 3387506123, - 3387637213, 3387768317, 3387899429, 3388030519, 3388161641, 3388292717, 3388423793, - 3388554877, 3388685987, 3388817059, 3388948139, 3389079227, 3389210317, 3389341393, - 3389472467, 3389603563, 3389734637, 3389865749, 3389996821, 3390127943, 3390259043, - 3390390137, 3390521209, 3390652303, 3390783391, 3390914467, 3391045543, 3391176617, - 3391307723, 3391438819, 3391569899, 3391700993, 3391832071, 3391963147, 3392094221, - 3392225293, 3392356367, 3392487467, 3392618539, 3392749673, 3392880767, 3393011857, - 3393142967, 3393274051, 3393405131, 3393536203, 3393667307, 3393798403, 3393929489, - 3394060561, 3394191637, 3394322713, 3394453813, 3394584889, 3394715983, 3394847063, - 3394978157, 3395109271, 3395240347, 3395371433, 3395502529, 3395633609, 3395764681, - 3395895757, 3396026869, 3396157967, 3396289063, 3396420149, 3396551231, 3396682319, - 3396813421, 3396944503, 3397075667, 3397206751, 3397337831, 3397468903, 3397599983, - 3397731067, 3397862177, 3397993253, 3398124347, 3398255461, 3398386567, 3398517643, - 3398648717, 3398779789, 3398910863, 3399041953, 3399173047, 3399304121, 3399435203, - 3399566281, 3399697369, 3399828457, 3399959531, 3400090637, 3400221709, 3400352783, - 3400483909, 3400615013, 3400746119, 3400877191, 3401008271, 3401139353, 3401270437, - 3401401519, 3401532593, 3401663701, 3401794777, 3401925853, 3402056939, 3402188021, - 3402319111, 3402450197, 3402581323, 3402712433, 3402843523, 3402974599, 3403105711, - 3403236827, 3403367911, 3403499003, 3403630093, 3403761167, 3403892257, 3404023331, - 3404154407, 3404285483, 3404416601, 3404547673, 3404678747, 3404809831, 3404940919, - 3405071993, 3405203111, 3405334199, 3405465277, 3405596351, 3405727439, 3405858517, - 3405989591, 3406120727, 3406251799, 3406382957, 3406514053, 3406645127, 3406776199, - 3406907281, 3407038361, 3407169443, 3407300587, 3407431697, 3407562779, 3407693873, - 3407824991, 3407956063, 3408087149, 3408218239, 3408349327, 3408480401, 3408611489, - 3408742567, 3408873641, 3409004843, 3409135931, 3409267013, 3409398089, 3409529161, - 3409660343, 3409791449, 3409922567, 3410053643, 3410184731, 3410315819, 3410446903, - 3410577979, 3410709061, 3410840137, 3410971243, 3411102337, 3411233443, 3411364529, - 3411495629, 3411626707, 3411757787, 3411888863, 3412020011, 3412151111, 3412282201, - 3412413293, 3412544393, 3412675537, 3412806637, 3412937711, 3413068787, 3413199859, - 3413330951, 3413462033, 3413593109, 3413724187, 3413855261, 3413986351, 3414117433, - 3414248531, 3414379643, 3414510731, 3414641803, 3414772897, 3414904027, 3415035131, - 3415166213, 3415297307, 3415428407, 3415559479, 3415690559, 3415821709, 3415952797, - 3416083897, 3416215007, 3416346083, 3416477159, 3416608241, 3416739341, 3416870417, - 3417001517, 3417132613, 3417263693, 3417394787, 3417525887, 3417656971, 3417788053, - 3417919133, 3418050211, 3418181293, 3418312367, 3418443443, 3418574531, 3418705607, - 3418836691, 3418967771, 3419098913, 3419230013, 3419361097, 3419492203, 3419623301, - 3419754389, 3419885477, 3420016553, 3420147667, 3420278809, 3420409897, 3420541031, - 3420672109, 3420803203, 3420934303, 3421065383, 3421196459, 3421327561, 3421458647, - 3421589729, 3421720807, 3421851883, 3421982969, 3422114089, 3422245199, 3422376283, - 3422507369, 3422638451, 3422769523, 3422900603, 3423031681, 3423162779, 3423293857, - 3423424937, 3423556061, 3423687139, 3423818257, 3423949339, 3424080433, 3424211513, - 3424342613, 3424473707, 3424604779, 3424735879, 3424866989, 3424998061, 3425129137, - 3425260247, 3425391329, 3425522431, 3425653531, 3425784617, 3425915723, 3426046831, - 3426177913, 3426308999, 3426440071, 3426571157, 3426702239, 3426833317, 3426964391, - 3427095491, 3427226581, 3427357679, 3427488761, 3427619837, 3427750913, 3427881991, - 3428013073, 3428144183, 3428275261, 3428406349, 3428537461, 3428668543, 3428799617, - 3428930693, 3429061771, 3429192857, 3429323957, 3429455069, 3429586183, 3429717287, - 3429848371, 3429979451, 3430110571, 3430241669, 3430372769, 3430503841, 3430634929, - 3430766011, 3430897087, 3431028203, 3431159287, 3431290399, 3431421473, 3431552599, - 3431683679, 3431814779, 3431945863, 3432076979, 3432208061, 3432339133, 3432470219, - 3432601349, 3432732431, 3432863521, 3432994619, 3433125701, 3433256797, 3433387873, - 3433518947, 3433650023, 3433781101, 3433912219, 3434043293, 3434174371, 3434305471, - 3434436553, 3434567627, 3434698703, 3434829793, 3434960869, 3435091949, 3435223049, - 3435354137, 3435485227, 3435616307, 3435747389, 3435878461, 3436009547, 3436140689, - 3436271767, 3436402841, 3436533931, 3436665007, 3436796101, 3436927201, 3437058301, - 3437189377, 3437320451, 3437451529, 3437582611, 3437713703, 3437844853, 3437975941, - 3438107039, 3438238127, 3438369229, 3438500311, 3438631397, 3438762497, 3438893587, - 3439024697, 3439155773, 3439286849, 3439417957, 3439549067, 3439680149, 3439811267, - 3439942339, 3440073419, 3440204513, 3440335621, 3440466697, 3440597777, 3440728873, - 3440859971, 3440991049, 3441122147, 3441253241, 3441384343, 3441515417, 3441646517, - 3441777589, 3441908693, 3442039789, 3442170883, 3442301963, 3442433087, 3442564199, - 3442695317, 3442826389, 3442957543, 3443088619, 3443219719, 3443350811, 3443481887, - 3443612987, 3443744093, 3443875187, 3444006271, 3444137371, 3444268483, 3444399599, - 3444530723, 3444661799, 3444792893, 3444923981, 3445055059, 3445186139, 3445317221, - 3445448297, 3445579369, 3445710451, 3445841527, 3445972619, 3446103697, 3446234791, - 3446365903, 3446496983, 3446628079, 3446759153, 3446890229, 3447021301, 3447152381, - 3447283459, 3447414557, 3447545653, 3447676801, 3447807877, 3447938951, 3448070023, - 3448201117, 3448332191, 3448463297, 3448594393, 3448725491, 3448856597, 3448987709, - 3449118793, 3449249893, 3449380967, 3449512063, 3449643139, 3449774227, 3449905331, - 3450036419, 3450167531, 3450298637, 3450429713, 3450560863, 3450691949, 3450823067, - 3450954139, 3451085237, 3451216313, 3451347401, 3451478489, 3451609561, 3451740637, - 3451871729, 3452002811, 3452133931, 3452265023, 3452396107, 3452527187, 3452658259, - 3452789377, 3452920477, 3453051551, 3453182651, 3453313729, 3453444809, 3453575887, - 3453707017, 3453838139, 3453969217, 3454100317, 3454231397, 3454362487, 3454493573, - 3454624673, 3454755781, 3454886861, 3455017939, 3455149013, 3455280109, 3455411191, - 3455542271, 3455673359, 3455804431, 3455935507, 3456066599, 3456197683, 3456328783, - 3456459931, 3456591031, 3456722107, 3456853181, 3456984257, 3457115329, 3457246411, - 3457377487, 3457508597, 3457639687, 3457770761, 3457901849, 3458032937, 3458164009, - 3458295121, 3458426249, 3458557339, 3458688419, 3458819519, 3458950591, 3459081667, - 3459212749, 3459343843, 3459474979, 3459606053, 3459737173, 3459868273, 3459999359, - 3460130437, 3460261517, 3460392643, 3460523747, 3460654859, 3460785949, 3460917023, - 3461048099, 3461179193, 3461310277, 3461441377, 3461572463, 3461703547, 3461834639, - 3461965747, 3462096823, 3462227897, 3462358973, 3462490051, 3462621133, 3462752239, - 3462883321, 3463014419, 3463145533, 3463276613, 3463407691, 3463538779, 3463669883, - 3463800961, 3463932041, 3464063117, 3464194199, 3464325287, 3464456389, 3464587481, - 3464718553, 3464849627, 3464980703, 3465111791, 3465242863, 3465373963, 3465505061, - 3465636137, 3465767231, 3465898327, 3466029401, 3466160473, 3466291547, 3466422623, - 3466553719, 3466684799, 3466815871, 3466946957, 3467078047, 3467209133, 3467340211, - 3467471297, 3467602373, 3467733473, 3467864549, 3467995649, 3468126743, 3468257827, - 3468388907, 3468519983, 3468651059, 3468782173, 3468913267, 3469044349, 3469175429, - 3469306537, 3469437613, 3469568731, 3469699819, 3469830979, 3469962059, 3470093149, - 3470224249, 3470355337, 3470486417, 3470617517, 3470748643, 3470879717, 3471010831, - 3471141911, 3471272989, 3471404071, 3471535159, 3471666251, 3471797327, 3471928423, - 3472059533, 3472190621, 3472321703, 3472452799, 3472583941, 3472715023, 3472846099, - 3472977181, 3473108257, 3473239337, 3473370413, 3473501491, 3473632567, 3473763641, - 3473894731, 3474025829, 3474156901, 3474288007, 3474419083, 3474550229, 3474681311, - 3474812389, 3474943499, 3475074583, 3475205663, 3475336757, 3475467839, 3475598933, - 3475730017, 3475861139, 3475992239, 3476123317, 3476254399, 3476385481, 3476516557, - 3476647651, 3476778757, 3476909833, 3477040921, 3477172057, 3477303133, 3477434227, - 3477565319, 3477696401, 3477827489, 3477958567, 3478089673, 3478220749, 3478351837, - 3478482949, 3478614037, 3478745203, 3478876283, 3479007373, 3479138501, 3479269579, - 3479400689, 3479531761, 3479662873, 3479793959, 3479925049, 3480056183, 3480187289, - 3480318431, 3480449549, 3480580679, 3480711757, 3480842861, 3480973957, 3481105049, - 3481236173, 3481367261, 3481498367, 3481629443, 3481760521, 3481891597, 3482022701, - 3482153777, 3482284877, 3482415971, 3482547049, 3482678153, 3482809229, 3482940313, - 3483071387, 3483202517, 3483333589, 3483464669, 3483595757, 3483726839, 3483857933, - 3483989011, 3484120151, 3484251227, 3484382353, 3484513481, 3484644563, 3484775641, - 3484906741, 3485037823, 3485168899, 3485300003, 3485431093, 3485562167, 3485693261, - 3485824337, 3485955409, 3486086489, 3486217601, 3486348689, 3486479767, 3486610843, - 3486741931, 3486873079, 3487004189, 3487135291, 3487266383, 3487397477, 3487528553, - 3487659641, 3487790743, 3487921831, 3488052941, 3488184023, 3488315107, 3488446193, - 3488577277, 3488708359, 3488839441, 3488970521, 3489101611, 3489232697, 3489363769, - 3489494843, 3489625933, 3489757013, 3489888113, 3490019219, 3490150309, 3490281391, - 3490412473, 3490543571, 3490674667, 3490805743, 3490936819, 3491067893, 3491198981, - 3491330083, 3491461199, 3491592287, 3491723363, 3491854441, 3491985517, 3492116623, - 3492247699, 3492378787, 3492509953, 3492641039, 3492772117, 3492903221, 3493034299, - 3493165433, 3493296523, 3493427621, 3493558699, 3493689791, 3493820881, 3493951973, - 3494083091, 3494214167, 3494345287, 3494476393, 3494607469, 3494738549, 3494869657, - 3495000731, 3495131803, 3495262889, 3495393991, 3495525079, 3495656183, 3495787283, - 3495918367, 3496049449, 3496180591, 3496311683, 3496442843, 3496573921, 3496705039, - 3496836121, 3496967209, 3497098291, 3497229397, 3497360521, 3497491597, 3497622683, - 3497753761, 3497884843, 3498015929, 3498147007, 3498278093, 3498409193, 3498540271, - 3498671387, 3498802477, 3498933553, 3499064651, 3499195787, 3499326863, 3499457987, - 3499589069, 3499720141, 3499851221, 3499982347, 3500113427, 3500244499, 3500375621, - 3500506699, 3500637781, 3500768881, 3500899993, 3501031109, 3501162239, 3501293329, - 3501424403, 3501555503, 3501686579, 3501817651, 3501948727, 3502079807, 3502210883, - 3502341971, 3502473067, 3502604177, 3502735279, 3502866373, 3502997521, 3503128621, - 3503259709, 3503390833, 3503521919, 3503653001, 3503784101, 3503915179, 3504046277, - 3504177359, 3504308449, 3504439531, 3504570613, 3504701693, 3504832781, 3504963863, - 3505094941, 3505226057, 3505357133, 3505488221, 3505619311, 3505750393, 3505881469, - 3506012551, 3506143633, 3506274713, 3506405797, 3506536889, 3506667971, 3506799047, - 3506930131, 3507061237, 3507192313, 3507323399, 3507454493, 3507585569, 3507716647, - 3507847723, 3507978857, 3508109933, 3508241017, 3508372111, 3508503203, 3508634317, - 3508765399, 3508896493, 3509027573, 3509158721, 3509289907, 3509421001, 3509552089, - 3509683169, 3509814247, 3509945347, 3510076481, 3510207557, 3510338633, 3510469741, - 3510600833, 3510731911, 3510862987, 3510994079, 3511125161, 3511256233, 3511387337, - 3511518443, 3511649543, 3511780633, 3511911719, 3512042803, 3512173879, 3512304979, - 3512436071, 3512567147, 3512698243, 3512829343, 3512960417, 3513091499, 3513222577, - 3513353663, 3513484759, 3513615877, 3513746959, 3513878033, 3514009117, 3514140199, - 3514271273, 3514402349, 3514533427, 3514664509, 3514795591, 3514926671, 3515057743, - 3515188823, 3515319943, 3515451047, 3515582137, 3515713211, 3515844337, 3515975413, - 3516106501, 3516237607, 3516368683, 3516499799, 3516630881, 3516761993, 3516893087, - 3517024177, 3517155289, 3517286411, 3517417507, 3517548583, 3517679663, 3517810753, - 3517941857, 3518072941, 3518204023, 3518335097, 3518466221, 3518597377, 3518728457, - 3518859541, 3518990653, 3519121741, 3519252823, 3519383897, 3519515029, 3519646133, - 3519777221, 3519908323, 3520039417, 3520170499, 3520301579, 3520432667, 3520563757, - 3520694833, 3520825907, 3520956991, 3521088079, 3521219153, 3521350229, 3521481311, - 3521612383, 3521743469, 3521874569, 3522005653, 3522136727, 3522267803, 3522398909, - 3522529991, 3522661081, 3522792191, 3522923263, 3523054343, 3523185431, 3523316513, - 3523447589, 3523578691, 3523709789, 3523840963, 3523972037, 3524103127, 3524234261, - 3524365333, 3524496413, 3524627501, 3524758591, 3524889673, 3525020749, 3525151829, - 3525282907, 3525413993, 3525545069, 3525676153, 3525807239, 3525938323, 3526069409, - 3526200487, 3526331591, 3526462663, 3526593737, 3526724809, 3526855901, 3526987031, - 3527118139, 3527249227, 3527380301, 3527511413, 3527642491, 3527773577, 3527904661, - 3528035737, 3528166843, 3528297919, 3528429017, 3528560117, 3528691223, 3528822313, - 3528953419, 3529084513, 3529215593, 3529346669, 3529477759, 3529608839, 3529739923, - 3529870999, 3530002081, 3530133157, 3530264263, 3530395361, 3530526437, 3530657513, - 3530788619, 3530919709, 3531050791, 3531181879, 3531312979, 3531444053, 3531575141, - 3531706219, 3531837317, 3531968423, 3532099499, 3532230593, 3532361669, 3532492753, - 3532623841, 3532754933, 3532886009, 3533017087, 3533148163, 3533279249, 3533410337, - 3533541461, 3533672537, 3533803631, 3533934709, 3534065789, 3534196877, 3534327967, - 3534459041, 3534590119, 3534721237, 3534852329, 3534983423, 3535114507, 3535245587, - 3535376681, 3535507763, 3535638919, 3535770011, 3535901087, 3536032163, 3536163263, - 3536294347, 3536425427, 3536556509, 3536687597, 3536818679, 3536949751, 3537080837, - 3537211933, 3537343021, 3537474103, 3537605179, 3537736253, 3537867353, 3537998447, - 3538129519, 3538260619, 3538391711, 3538522789, 3538653901, 3538784983, 3538916063, - 3539047177, 3539178259, 3539309383, 3539440493, 3539571577, 3539702653, 3539833727, - 3539964811, 3540095891, 3540226967, 3540358051, 3540489131, 3540620219, 3540751351, - 3540882431, 3541013519, 3541144657, 3541275737, 3541406821, 3541537919, 3541669003, - 3541800079, 3541931171, 3542062247, 3542193373, 3542324447, 3542455549, 3542586637, - 3542717723, 3542848817, 3542979917, 3543110999, 3543242081, 3543373157, 3543504247, - 3543635339, 3543766451, 3543897551, 3544028627, 3544159727, 3544290811, 3544421893, - 3544552967, 3544684049, 3544815137, 3544946239, 3545077313, 3545208389, 3545339461, - 3545470541, 3545601613, 3545732711, 3545863829, 3545994901, 3546125977, 3546257053, - 3546388141, 3546519269, 3546650399, 3546781477, 3546912553, 3547043629, 3547174723, - 3547305809, 3547436881, 3547568039, 3547699139, 3547830241, 3547961321, 3548092409, - 3548223487, 3548354573, 3548485663, 3548616739, 3548747849, 3548878933, 3549010027, - 3549141139, 3549272239, 3549403343, 3549534437, 3549665521, 3549796603, 3549927677, - 3550058761, 3550189837, 3550320923, 3550451999, 3550583119, 3550714201, 3550845329, - 3550976411, 3551107487, 3551238563, 3551369669, 3551500751, 3551631833, 3551762911, - 3551894009, 3552025109, 3552156193, 3552287267, 3552418351, 3552549431, 3552680513, - 3552811601, 3552942703, 3553073801, 3553204957, 3553336069, 3553467167, 3553598267, - 3553729349, 3553860439, 3553991513, 3554122589, 3554253671, 3554384767, 3554515843, - 3554646919, 3554778049, 3554909131, 3555040267, 3555171343, 3555302419, 3555433517, - 3555564599, 3555695677, 3555826753, 3555957829, 3556088911, 3556220047, 3556351133, - 3556482247, 3556613321, 3556744417, 3556875499, 3557006599, 3557137673, 3557268761, - 3557399843, 3557530931, 3557662007, 3557793079, 3557924171, 3558055247, 3558186341, - 3558317431, 3558448547, 3558579653, 3558710809, 3558841901, 3558972997, 3559104089, - 3559235177, 3559366319, 3559497397, 3559628489, 3559759613, 3559890701, 3560021789, - 3560152891, 3560283983, 3560415059, 3560546153, 3560677243, 3560808323, 3560939401, - 3561070483, 3561201583, 3561332699, 3561463781, 3561594853, 3561725929, 3561857009, - 3561988093, 3562119193, 3562250267, 3562381343, 3562512419, 3562643503, 3562774583, - 3562905667, 3563036753, 3563167837, 3563298911, 3563430047, 3563561129, 3563692229, - 3563823301, 3563954437, 3564085523, 3564216613, 3564347711, 3564478789, 3564609863, - 3564741013, 3564872089, 3565003163, 3565134247, 3565265377, 3565396487, 3565527571, - 3565658683, 3565789769, 3565920857, 3566051933, 3566183011, 3566314109, 3566445227, - 3566576309, 3566707399, 3566838491, 3566969569, 3567100657, 3567231757, 3567362833, - 3567493933, 3567625007, 3567756161, 3567887233, 3568018339, 3568149421, 3568280497, - 3568411591, 3568542689, 3568673761, 3568804843, 3568935991, 3569067077, 3569198153, - 3569329237, 3569460313, 3569591387, 3569722493, 3569853607, 3569984699, 3570115777, - 3570246859, 3570377933, 3570509011, 3570640093, 3570771179, 3570902261, 3571033343, - 3571164473, 3571295549, 3571426643, 3571557733, 3571688821, 3571819913, 3571951013, - 3572082149, 3572213221, 3572344301, 3572475383, 3572606467, 3572737541, 3572868653, - 3572999777, 3573130849, 3573261929, 3573393001, 3573524089, 3573655177, 3573786263, - 3573917339, 3574048451, 3574179523, 3574310617, 3574441691, 3574572773, 3574703893, - 3574834999, 3574966079, 3575097173, 3575228263, 3575359343, 3575490419, 3575621501, - 3575752637, 3575883721, 3576014797, 3576145873, 3576276971, 3576408071, 3576539149, - 3576670241, 3576801383, 3576932507, 3577063591, 3577194683, 3577325761, 3577456843, - 3577587931, 3577719011, 3577850083, 3577981189, 3578112283, 3578243371, 3578374453, - 3578505563, 3578636639, 3578767711, 3578898793, 3579029893, 3579160979, 3579292099, - 3579423173, 3579554269, 3579685363, 3579816533, 3579947627, 3580078721, 3580209797, - 3580340887, 3580471987, 3580603063, 3580734137, 3580865209, 3580996301, 3581127397, - 3581258503, 3581389631, 3581520721, 3581651797, 3581782871, 3581913943, 3582045017, - 3582176093, 3582307213, 3582438313, 3582569387, 3582700463, 3582831559, 3582962633, - 3583093711, 3583224811, 3583355899, 3583486981, 3583618111, 3583749187, 3583880269, - 3584011357, 3584142461, 3584273569, 3584404657, 3584535743, 3584666837, 3584797927, - 3584929003, 3585060077, 3585191153, 3585322243, 3585453317, 3585584441, 3585715537, - 3585846629, 3585977701, 3586108781, 3586239857, 3586370971, 3586502063, 3586633159, - 3586764271, 3586895357, 3587026439, 3587157551, 3587288647, 3587419721, 3587550829, - 3587681941, 3587813017, 3587944091, 3588075163, 3588206243, 3588337331, 3588468413, - 3588599501, 3588730577, 3588861659, 3588992731, 3589123817, 3589254913, 3589385993, - 3589517081, 3589648177, 3589779317, 3589910393, 3590041471, 3590172559, 3590303641, - 3590434747, 3590565827, 3590696899, 3590827973, 3590959051, 3591090133, 3591221209, - 3591352283, 3591483391, 3591614489, 3591745589, 3591876661, 3592007761, 3592138843, - 3592269943, 3592401067, 3592532171, 3592663297, 3592794377, 3592925459, 3593056553, - 3593187659, 3593318789, 3593449861, 3593580959, 3593712071, 3593843159, 3593974247, - 3594105329, 3594236411, 3594367507, 3594498599, 3594629699, 3594760811, 3594891887, - 3595022969, 3595154051, 3595285123, 3595416229, 3595547321, 3595678399, 3595809493, - 3595940587, 3596071663, 3596202737, 3596333857, 3596464973, 3596596049, 3596727157, - 3596858233, 3596989349, 3597120421, 3597251503, 3597382577, 3597513653, 3597644749, - 3597775823, 3597906929, 3598038001, 3598169111, 3598300219, 3598431311, 3598562467, - 3598693541, 3598824613, 3598955713, 3599086787, 3599217913, 3599349031, 3599480149, - 3599611261, 3599742343, 3599873423, 3600004517, 3600135613, 3600266687, 3600397789, - 3600528863, 3600659941, 3600791039, 3600922219, 3601053311, 3601184413, 3601315493, - 3601446571, 3601577647, 3601708751, 3601839833, 3601970989, 3602102111, 3602233189, - 3602364281, 3602495431, 3602626541, 3602757629, 3602888701, 3603019789, 3603150871, - 3603281947, 3603413027, 3603544103, 3603675191, 3603806293, 3603937369, 3604068451, - 3604199569, 3604330643, 3604461719, 3604592801, 3604723901, 3604854973, 3604986067, - 3605117161, 3605248243, 3605379317, 3605510437, 3605641561, 3605772637, 3605903747, - 3606034823, 3606165907, 3606297041, 3606428143, 3606559223, 3606690313, 3606821389, - 3606952487, 3607083569, 3607214669, 3607345741, 3607476827, 3607607903, 3607738993, - 3607870099, 3608001193, 3608132273, 3608263369, 3608394467, 3608525539, 3608656627, - 3608787719, 3608918821, 3609049921, 3609180997, 3609312071, 3609443197, 3609574303, - 3609705389, 3609836521, 3609967597, 3610098673, 3610229747, 3610360837, 3610491923, - 3610623019, 3610754099, 3610885181, 3611016281, 3611147363, 3611278471, 3611409563, - 3611540651, 3611671729, 3611802889, 3611933977, 3612065071, 3612196157, 3612327281, - 3612458371, 3612589459, 3612720557, 3612851629, 3612982717, 3613113793, 3613244867, - 3613375951, 3613507043, 3613638121, 3613769197, 3613900271, 3614031353, 3614162449, - 3614293547, 3614424629, 3614555719, 3614686793, 3614817881, 3614948971, 3615080071, - 3615211169, 3615342259, 3615473353, 3615604427, 3615735503, 3615866591, 3615997729, - 3616128833, 3616259929, 3616391033, 3616522123, 3616653197, 3616784287, 3616915361, - 3617046439, 3617177513, 3617308609, 3617439703, 3617570791, 3617701939, 3617833031, - 3617964109, 3618095231, 3618226351, 3618357433, 3618488551, 3618619657, 3618750731, - 3618881821, 3619012907, 3619144003, 3619275089, 3619406171, 3619537267, 3619668413, - 3619799507, 3619930607, 3620061691, 3620192791, 3620323879, 3620454967, 3620586043, - 3620717119, 3620848199, 3620979281, 3621110357, 3621241433, 3621372511, 3621503597, - 3621634691, 3621765793, 3621896879, 3622027967, 3622159081, 3622290163, 3622421267, - 3622552379, 3622683461, 3622814537, 3622945619, 3623076727, 3623207803, 3623338891, - 3623470001, 3623601073, 3623732171, 3623863247, 3623994343, 3624125419, 3624256507, - 3624387581, 3624518663, 3624649739, 3624780811, 3624911897, 3625042999, 3625174073, - 3625305193, 3625436279, 3625567369, 3625698457, 3625829561, 3625960633, 3626091709, - 3626222801, 3626353883, 3626485001, 3626616079, 3626747153, 3626878271, 3627009359, - 3627140431, 3627271507, 3627402619, 3627533699, 3627664783, 3627795877, 3627926963, - 3628058047, 3628189121, 3628320203, 3628451291, 3628582379, 3628713457, 3628844537, - 3628975657, 3629106731, 3629237803, 3629368877, 3629499989, 3629631107, 3629762237, - 3629893313, 3630024403, 3630155489, 3630286571, 3630417671, 3630548767, 3630679841, - 3630810913, 3630941999, 3631073077, 3631204153, 3631335247, 3631466329, 3631597447, - 3631728559, 3631859639, 3631990717, 3632121793, 3632252867, 3632384027, 3632515099, - 3632646179, 3632777321, 3632908393, 3633039469, 3633170543, 3633301663, 3633432749, - 3633563821, 3633694907, 3633826087, 3633957193, 3634088267, 3634219343, 3634350431, - 3634481507, 3634612589, 3634743703, 3634874791, 3635005931, 3635137003, 3635268137, - 3635399227, 3635530361, 3635661439, 3635792513, 3635923661, 3636054781, 3636185863, - 3636316939, 3636448021, 3636579103, 3636710183, 3636841277, 3636972397, 3637103497, - 3637234589, 3637365691, 3637496771, 3637627891, 3637758967, 3637890077, 3638021171, - 3638152249, 3638283331, 3638414407, 3638545489, 3638676589, 3638807663, 3638938739, - 3639069839, 3639200927, 3639332023, 3639463097, 3639594173, 3639725249, 3639856331, - 3639987409, 3640118513, 3640249601, 3640380691, 3640511773, 3640642867, 3640773973, - 3640905053, 3641036131, 3641167207, 3641298307, 3641429383, 3641560457, 3641691611, - 3641822689, 3641953769, 3642084847, 3642215939, 3642347011, 3642478109, 3642609209, - 3642740303, 3642871391, 3643002491, 3643133563, 3643264663, 3643395761, 3643526837, - 3643657951, 3643789033, 3643920113, 3644051197, 3644182279, 3644313353, 3644444467, - 3644575559, 3644706641, 3644837717, 3644968823, 3645099911, 3645231013, 3645362087, - 3645493177, 3645624253, 3645755363, 3645886477, 3646017553, 3646148647, 3646279739, - 3646410827, 3646541911, 3646673011, 3646804087, 3646935163, 3647066251, 3647197369, - 3647328457, 3647459537, 3647590621, 3647721751, 3647852827, 3647983919, 3648114997, - 3648246089, 3648377177, 3648508267, 3648639341, 3648770413, 3648901511, 3649032617, - 3649163689, 3649294771, 3649425937, 3649557011, 3649688087, 3649819177, 3649950263, - 3650081341, 3650212441, 3650343539, 3650474621, 3650605697, 3650736799, 3650867887, - 3650998961, 3651130033, 3651261137, 3651392219, 3651523307, 3651654379, 3651785477, - 3651916573, 3652047673, 3652178759, 3652309847, 3652440943, 3652572019, 3652703107, - 3652834187, 3652965299, 3653096387, 3653227463, 3653358563, 3653489657, 3653620753, - 3653751841, 3653882917, 3654014011, 3654145129, 3654276217, 3654407297, 3654538369, - 3654669443, 3654800519, 3654931597, 3655062683, 3655193771, 3655324859, 3655455931, - 3655587049, 3655718159, 3655849237, 3655980311, 3656111383, 3656242463, 3656373569, - 3656504641, 3656635733, 3656766823, 3656897921, 3657029017, 3657160097, 3657291179, - 3657422267, 3657553369, 3657684473, 3657815573, 3657946681, 3658077763, 3658208861, - 3658339943, 3658471021, 3658602139, 3658733227, 3658864301, 3658995383, 3659126459, - 3659257549, 3659388697, 3659519783, 3659650861, 3659781943, 3659913029, 3660044137, - 3660175213, 3660306317, 3660437411, 3660568489, 3660699577, 3660830651, 3660961723, - 3661092797, 3661223869, 3661354969, 3661486057, 3661617139, 3661748261, 3661879343, - 3662010431, 3662141503, 3662272597, 3662403673, 3662534749, 3662665823, 3662796899, - 3662927999, 3663059083, 3663190163, 3663321253, 3663452333, 3663583409, 3663714521, - 3663845609, 3663976691, 3664107809, 3664238917, 3664370041, 3664501133, 3664632281, - 3664763357, 3664894463, 3665025569, 3665156653, 3665287727, 3665418811, 3665549887, - 3665680969, 3665812057, 3665943131, 3666074207, 3666205321, 3666336403, 3666467491, - 3666598577, 3666729659, 3666860741, 3666991813, 3667122913, 3667254013, 3667385093, - 3667516219, 3667647307, 3667778437, 3667909519, 3668040601, 3668171701, 3668302787, - 3668433863, 3668564969, 3668696041, 3668827133, 3668958239, 3669089323, 3669220409, - 3669351557, 3669482699, 3669613777, 3669744863, 3669875953, 3670007063, 3670138163, - 3670269329, 3670400417, 3670531499, 3670662571, 3670793647, 3670924757, 3671055841, - 3671186917, 3671317999, 3671449139, 3671580223, 3671711311, 3671842423, 3671973517, - 3672104621, 3672235711, 3672366787, 3672497887, 3672628961, 3672760051, 3672891133, - 3673022207, 3673153301, 3673284379, 3673415467, 3673546553, 3673677629, 3673808713, - 3673939811, 3674070901, 3674201981, 3674333083, 3674464163, 3674595241, 3674726333, - 3674857423, 3674988503, 3675119597, 3675250679, 3675381763, 3675512837, 3675643921, - 3675775001, 3675906097, 3676037171, 3676168259, 3676299337, 3676430419, 3676561513, - 3676692611, 3676823687, 3676954843, 3677085931, 3677217007, 3677348111, 3677479187, - 3677610281, 3677741407, 3677872493, 3678003629, 3678134729, 3678265807, 3678396881, - 3678527971, 3678659057, 3678790139, 3678921221, 3679052359, 3679183433, 3679314547, - 3679445647, 3679576721, 3679707793, 3679838893, 3679969981, 3680101063, 3680232161, - 3680363261, 3680494333, 3680625419, 3680756491, 3680887597, 3681018683, 3681149767, - 3681280843, 3681411941, 3681543029, 3681674107, 3681805249, 3681936343, 3682067461, - 3682198567, 3682329641, 3682460731, 3682591859, 3682722931, 3682854029, 3682985113, - 3683116189, 3683247263, 3683378339, 3683509411, 3683640511, 3683771587, 3683902661, - 3684033733, 3684164821, 3684295919, 3684427027, 3684558131, 3684689231, 3684820313, - 3684951401, 3685082473, 3685213547, 3685344647, 3685475741, 3685606853, 3685737931, - 3685869007, 3686000083, 3686131171, 3686262259, 3686393363, 3686524441, 3686655521, - 3686786603, 3686917693, 3687048821, 3687179893, 3687310973, 3687442049, 3687573133, - 3687704221, 3687835301, 3687966407, 3688097489, 3688228601, 3688359737, 3688490809, - 3688621897, 3688753001, 3688884079, 3689015171, 3689146243, 3689277323, 3689408407, - 3689539531, 3689670641, 3689801741, 3689932817, 3690063893, 3690194983, 3690326083, - 3690457159, 3690588233, 3690719317, 3690850447, 3690981521, 3691112597, 3691243679, - 3691374751, 3691505861, 3691636933, 3691768027, 3691899137, 3692030213, 3692161289, - 3692292361, 3692423489, 3692554571, 3692685643, 3692816723, 3692947799, 3693078871, - 3693209959, 3693341063, 3693472141, 3693603227, 3693734393, 3693865477, 3693996577, - 3694127653, 3694258727, 3694389847, 3694520923, 3694652009, 3694783093, 3694914193, - 3695045267, 3695176339, 3695307419, 3695438491, 3695569567, 3695700641, 3695831747, - 3695962861, 3696093937, 3696225011, 3696356093, 3696487169, 3696618307, 3696749449, - 3696880543, 3697011631, 3697142723, 3697273813, 3697404943, 3697536019, 3697667111, - 3697798193, 3697929269, 3698060357, 3698191463, 3698322539, 3698453611, 3698584699, - 3698715791, 3698846873, 3698977957, 3699109087, 3699240187, 3699371293, 3699502439, - 3699633521, 3699764599, 3699895711, 3700026791, 3700157863, 3700288939, 3700420013, - 3700551089, 3700682197, 3700813271, 3700944371, 3701075459, 3701206547, 3701337637, - 3701468713, 3701599799, 3701730899, 3701861981, 3701993063, 3702124157, 3702255229, - 3702386351, 3702517439, 3702648511, 3702779669, 3702910751, 3703041851, 3703172947, - 3703304023, 3703435123, 3703566197, 3703697273, 3703828417, 3703959517, 3704090651, - 3704221723, 3704352859, 3704483933, 3704615009, 3704746099, 3704877173, 3705008257, - 3705139357, 3705270433, 3705401509, 3705532609, 3705663707, 3705794831, 3705925903, - 3706056983, 3706188061, 3706319137, 3706450217, 3706581289, 3706712371, 3706843447, - 3706974521, 3707105639, 3707236717, 3707367857, 3707498929, 3707630009, 3707761091, - 3707892163, 3708023303, 3708154391, 3708285479, 3708416597, 3708547681, 3708678767, - 3708809843, 3708940919, 3709071991, 3709203067, 3709334149, 3709465237, 3709596311, - 3709727393, 3709858511, 3709989583, 3710120663, 3710251777, 3710382869, 3710513987, - 3710645087, 3710776177, 3710907257, 3711038377, 3711169559, 3711300679, 3711431767, - 3711562861, 3711693949, 3711825053, 3711956161, 3712087243, 3712218317, 3712349413, - 3712480489, 3712611601, 3712742711, 3712873783, 3713004899, 3713135983, 3713267059, - 3713398159, 3713529241, 3713660323, 3713791399, 3713922479, 3714053561, 3714184651, - 3714315727, 3714446833, 3714577907, 3714709067, 3714840139, 3714971213, 3715102297, - 3715233373, 3715364459, 3715495547, 3715626619, 3715757713, 3715888801, 3716019907, - 3716150983, 3716282069, 3716413171, 3716544283, 3716675359, 3716806439, 3716937557, - 3717068633, 3717199771, 3717330853, 3717461953, 3717593039, 3717724123, 3717855199, - 3717986273, 3718117367, 3718248463, 3718379543, 3718510661, 3718641733, 3718772809, - 3718903883, 3719034967, 3719166053, 3719297149, 3719428231, 3719559307, 3719690407, - 3719821481, 3719952623, 3720083707, 3720214793, 3720345899, 3720477023, 3720608107, - 3720739181, 3720870271, 3721001353, 3721132427, 3721263523, 3721394603, 3721525681, - 3721656769, 3721787843, 3721918961, 3722050093, 3722181173, 3722312261, 3722443337, - 3722574413, 3722705489, 3722836567, 3722967641, 3723098759, 3723229831, 3723360923, - 3723492023, 3723623153, 3723754271, 3723885349, 3724016449, 3724147541, 3724278617, - 3724409699, 3724540793, 3724671871, 3724802951, 3724934023, 3725065139, 3725196217, - 3725327297, 3725458369, 3725589463, 3725720543, 3725851621, 3725982697, 3726113791, - 3726244883, 3726375973, 3726507053, 3726638137, 3726769213, 3726900311, 3727031437, - 3727162511, 3727293607, 3727424681, 3727555781, 3727686857, 3727817941, 3727949063, - 3728080163, 3728211259, 3728342377, 3728473451, 3728604553, 3728735629, 3728866711, - 3728997791, 3729128863, 3729259939, 3729391069, 3729522143, 3729653231, 3729784307, - 3729915383, 3730046461, 3730177543, 3730308641, 3730439729, 3730570819, 3730701899, - 3730832983, 3730964063, 3731095157, 3731226277, 3731357407, 3731488483, 3731619557, - 3731750639, 3731881763, 3732012847, 3732143927, 3732275011, 3732406087, 3732537169, - 3732668309, 3732799393, 3732930469, 3733061561, 3733192643, 3733323751, 3733454827, - 3733585913, 3733716991, 3733848073, 3733979147, 3734110249, 3734241349, 3734372443, - 3734503519, 3734634593, 3734765701, 3734896801, 3735027889, 3735158989, 3735290107, - 3735421181, 3735552257, 3735683333, 3735814417, 3735945529, 3736076623, 3736207711, - 3736338791, 3736469879, 3736600963, 3736732057, 3736863139, 3736994221, 3737125297, - 3737256409, 3737387503, 3737518583, 3737649673, 3737780747, 3737911913, 3738043009, - 3738174101, 3738305173, 3738436277, 3738567379, 3738698471, 3738829547, 3738960697, - 3739091773, 3739222867, 3739354009, 3739485083, 3739616173, 3739747303, 3739878377, - 3740009467, 3740140589, 3740271679, 3740402789, 3740533871, 3740665013, 3740796091, - 3740927173, 3741058247, 3741189359, 3741320431, 3741451513, 3741582589, 3741713693, - 3741844811, 3741975883, 3742106957, 3742238051, 3742369129, 3742500221, 3742631329, - 3742762411, 3742893493, 3743024573, 3743155649, 3743286733, 3743417819, 3743548961, - 3743680043, 3743811121, 3743942227, 3744073337, 3744204421, 3744335503, 3744466633, - 3744597713, 3744728837, 3744859919, 3744991027, 3745122119, 3745253203, 3745384289, - 3745515377, 3745646551, 3745777627, 3745908703, 3746039789, 3746170871, 3746301959, - 3746433109, 3746564183, 3746695261, 3746826337, 3746957413, 3747088487, 3747219583, - 3747350671, 3747481763, 3747612859, 3747743933, 3747875069, 3748006169, 3748137257, - 3748268369, 3748399451, 3748530529, 3748661603, 3748792693, 3748923767, 3749054857, - 3749185931, 3749317007, 3749448083, 3749579159, 3749710253, 3749841341, 3749972419, - 3750103493, 3750234577, 3750365677, 3750496751, 3750627827, 3750758917, 3750890053, - 3751021129, 3751152217, 3751283311, 3751414399, 3751545487, 3751676561, 3751807751, - 3751938859, 3752069953, 3752201041, 3752332141, 3752463269, 3752594347, 3752725433, - 3752856511, 3752987591, 3753118673, 3753249761, 3753380863, 3753511939, 3753643031, - 3753774103, 3753905209, 3754036289, 3754167379, 3754298459, 3754429531, 3754560611, - 3754691687, 3754822783, 3754953883, 3755084987, 3755216063, 3755347159, 3755478241, - 3755609321, 3755740451, 3755871599, 3756002671, 3756133757, 3756264839, 3756395911, - 3756526987, 3756658069, 3756789173, 3756920267, 3757051379, 3757182463, 3757313537, - 3757444627, 3757575763, 3757706863, 3757837973, 3757969063, 3758100179, 3758231287, - 3758362381, 3758493469, 3758624549, 3758755639, 3758886763, 3759017851, 3759148927, - 3759280009, 3759411083, 3759542177, 3759673261, 3759804343, 3759935447, 3760066523, - 3760197601, 3760328681, 3760459777, 3760590871, 3760721977, 3760853087, 3760984159, - 3761115233, 3761246341, 3761377453, 3761508533, 3761639617, 3761770697, 3761901799, - 3762032887, 3762163961, 3762295039, 3762426119, 3762557209, 3762688283, 3762819367, - 3762950441, 3763081513, 3763212589, 3763343677, 3763474763, 3763605847, 3763736927, - 3763867999, 3763999093, 3764130193, 3764261287, 3764392361, 3764523457, 3764654533, - 3764785627, 3764916707, 3765047779, 3765178897, 3765309983, 3765441059, 3765572189, - 3765703339, 3765834419, 3765965501, 3766096577, 3766227659, 3766358749, 3766489843, - 3766620953, 3766752049, 3766883189, 3767014331, 3767145439, 3767276521, 3767407601, - 3767538689, 3767669779, 3767800879, 3767931977, 3768063053, 3768194161, 3768325283, - 3768456361, 3768587437, 3768718511, 3768849593, 3768980669, 3769111747, 3769242821, - 3769373897, 3769505041, 3769636121, 3769767193, 3769898267, 3770029339, 3770160439, - 3770291513, 3770422589, 3770553671, 3770684789, 3770815871, 3770946947, 3771078037, - 3771209137, 3771340211, 3771471323, 3771602441, 3771733531, 3771864617, 3771995723, - 3772126807, 3772257893, 3772388981, 3772520057, 3772651147, 3772782227, 3772913299, - 3773044403, 3773175487, 3773306569, 3773437649, 3773568791, 3773699903, 3773830981, - 3773962069, 3774093181, 3774224273, 3774355373, 3774486479, 3774617557, 3774748657, - 3774879751, 3775010831, 3775141913, 3775273003, 3775404077, 3775535177, 3775666253, - 3775797329, 3775928407, 3776059481, 3776190559, 3776321669, 3776452747, 3776583827, - 3776714927, 3776846039, 3776977121, 3777108217, 3777239303, 3777370381, 3777501457, - 3777632561, 3777763637, 3777894713, 3778025791, 3778156873, 3778287949, 3778419079, - 3778550189, 3778681267, 3778812383, 3778943489, 3779074571, 3779205649, 3779336761, - 3779467837, 3779598919, 3779730023, 3779861149, 3779992231, 3780123311, 3780254417, - 3780385493, 3780516611, 3780647693, 3780778787, 3780909859, 3781040933, 3781172033, - 3781303199, 3781434277, 3781565351, 3781696433, 3781827523, 3781958599, 3782089681, - 3782220779, 3782351851, 3782482927, 3782614001, 3782745073, 3782876173, 3783007279, - 3783138353, 3783269459, 3783400561, 3783531659, 3783662731, 3783793807, 3783924887, - 3784056007, 3784187087, 3784318171, 3784449287, 3784580363, 3784711493, 3784842571, - 3784973677, 3785104751, 3785235823, 3785366909, 3785498027, 3785629117, 3785760247, - 3785891321, 3786022439, 3786153557, 3786284651, 3786415781, 3786546853, 3786677963, - 3786809051, 3786940123, 3787071199, 3787202281, 3787333393, 3787464469, 3787595543, - 3787726637, 3787857709, 3787988791, 3788119913, 3788251003, 3788382077, 3788513203, - 3788644283, 3788775407, 3788906479, 3789037559, 3789168653, 3789299729, 3789430867, - 3789561943, 3789693029, 3789824117, 3789955229, 3790086323, 3790217401, 3790348481, - 3790479559, 3790610641, 3790741729, 3790872803, 3791003921, 3791134993, 3791266081, - 3791397173, 3791528281, 3791659387, 3791790467, 3791921543, 3792052643, 3792183751, - 3792314837, 3792445949, 3792577027, 3792708163, 3792839257, 3792970331, 3793101407, - 3793232501, 3793363579, 3793494667, 3793625761, 3793756861, 3793887953, 3794019049, - 3794150123, 3794281199, 3794412277, 3794543377, 3794674451, 3794805529, 3794936603, - 3795067769, 3795198859, 3795329953, 3795461039, 3795592139, 3795723227, 3795854311, - 3795985397, 3796116479, 3796247591, 3796378687, 3796509763, 3796640851, 3796771933, - 3796903013, 3797034103, 3797165179, 3797296253, 3797427329, 3797558407, 3797689499, - 3797820581, 3797951687, 3798082787, 3798213931, 3798345073, 3798476179, 3798607259, - 3798738337, 3798869429, 3799000549, 3799131653, 3799262777, 3799393859, 3799524941, - 3799656053, 3799787137, 3799918219, 3800049301, 3800180389, 3800311499, 3800442577, - 3800573653, 3800704751, 3800835827, 3800966899, 3801097997, 3801229097, 3801360193, - 3801491293, 3801622369, 3801753451, 3801884549, 3802015663, 3802146739, 3802277819, - 3802408891, 3802540003, 3802671097, 3802802189, 3802933279, 3803064371, 3803195447, - 3803326519, 3803457599, 3803588671, 3803719811, 3803850887, 3803981969, 3804113041, - 3804244117, 3804375193, 3804506267, 3804637351, 3804768427, 3804899509, 3805030583, - 3805161667, 3805292747, 3805423907, 3805554979, 3805686083, 3805817159, 3805948241, - 3806079349, 3806210449, 3806341579, 3806472701, 3806603777, 3806734849, 3806865929, - 3806997001, 3807128089, 3807259163, 3807390253, 3807521329, 3807652477, 3807783571, - 3807914701, 3808045777, 3808176871, 3808307957, 3808439029, 3808570133, 3808701241, - 3808832369, 3808963463, 3809094563, 3809225647, 3809356739, 3809487839, 3809618941, - 3809750023, 3809881109, 3810012203, 3810143297, 3810274399, 3810405481, 3810536581, - 3810667673, 3810798749, 3810929821, 3811060921, 3811191997, 3811323071, 3811454191, - 3811585279, 3811716367, 3811847447, 3811978523, 3812109601, 3812240699, 3812371799, - 3812502877, 3812633959, 3812765057, 3812896141, 3813027227, 3813158329, 3813289423, - 3813420521, 3813551603, 3813682687, 3813813763, 3813944851, 3814075933, 3814207039, - 3814338131, 3814469221, 3814600333, 3814731407, 3814862483, 3814993571, 3815124679, - 3815255789, 3815386871, 3815517949, 3815649041, 3815780119, 3815911243, 3816042341, - 3816173429, 3816304519, 3816435643, 3816566723, 3816697799, 3816828877, 3816960001, - 3817091077, 3817222153, 3817353271, 3817484353, 3817615427, 3817746533, 3817877621, - 3818008721, 3818139821, 3818270927, 3818402039, 3818533123, 3818664209, 3818795293, - 3818926373, 3819057457, 3819188551, 3819319643, 3819450721, 3819581797, 3819712877, - 3819843959, 3819975037, 3820106153, 3820237259, 3820368337, 3820499453, 3820630531, - 3820761617, 3820892701, 3821023783, 3821154901, 3821285989, 3821417081, 3821548153, - 3821679227, 3821810339, 3821941439, 3822072559, 3822203659, 3822334759, 3822465851, - 3822596951, 3822728023, 3822859121, 3822990229, 3823121303, 3823252379, 3823383467, - 3823514579, 3823645673, 3823776767, 3823907851, 3824038937, 3824170073, 3824301157, - 3824432267, 3824563339, 3824694413, 3824825489, 3824956561, 3825087641, 3825218713, - 3825349793, 3825480887, 3825611963, 3825743063, 3825874139, 3826005223, 3826136317, - 3826267391, 3826398481, 3826529561, 3826660633, 3826791721, 3826922809, 3827053897, - 3827184973, 3827316067, 3827447161, 3827578241, 3827709331, 3827840431, 3827971517, - 3828102601, 3828233681, 3828364783, 3828495883, 3828626969, 3828758041, 3828889213, - 3829020287, 3829151369, 3829282451, 3829413527, 3829544617, 3829675747, 3829806821, - 3829937893, 3830068973, 3830200061, 3830331133, 3830462221, 3830593301, 3830724377, - 3830855477, 3830986553, 3831117629, 3831248737, 3831379831, 3831510979, 3831642071, - 3831773147, 3831904277, 3832035373, 3832166473, 3832297583, 3832428673, 3832559761, - 3832690867, 3832821991, 3832953073, 3833084183, 3833215271, 3833346479, 3833477567, - 3833608643, 3833739733, 3833870857, 3834001933, 3834133027, 3834264101, 3834395197, - 3834526321, 3834657401, 3834788473, 3834919547, 3835050619, 3835181719, 3835312799, - 3835443889, 3835574983, 3835706099, 3835837193, 3835968299, 3836099387, 3836230481, - 3836361619, 3836492701, 3836623781, 3836754863, 3836885951, 3837017027, 3837148099, - 3837279181, 3837410273, 3837541363, 3837672437, 3837803531, 3837934643, 3838065761, - 3838196833, 3838327937, 3838459057, 3838590131, 3838721207, 3838852291, 3838983389, - 3839114467, 3839245559, 3839376631, 3839507717, 3839638813, 3839769887, 3839900983, - 3840032057, 3840163139, 3840294217, 3840425321, 3840556397, 3840687479, 3840818557, - 3840949639, 3841080731, 3841211809, 3841342927, 3841474001, 3841605101, 3841736189, - 3841867273, 3841998367, 3842129453, 3842260553, 3842391653, 3842522759, 3842653847, - 3842784929, 3842916001, 3843047083, 3843178193, 3843309271, 3843440431, 3843571547, - 3843702637, 3843833723, 3843964849, 3844095923, 3844227019, 3844358113, 3844489199, - 3844620271, 3844751359, 3844882487, 3845013559, 3845144663, 3845275739, 3845406821, - 3845537947, 3845669021, 3845800183, 3845931347, 3846062471, 3846193553, 3846324689, - 3846455773, 3846586847, 3846717937, 3846849049, 3846980131, 3847111207, 3847242313, - 3847373393, 3847504477, 3847635557, 3847766639, 3847897717, 3848028797, 3848159873, - 3848290949, 3848422043, 3848553119, 3848684219, 3848815297, 3848946371, 3849077483, - 3849208579, 3849339671, 3849470749, 3849601831, 3849732911, 3849864001, 3849995113, - 3850126211, 3850257331, 3850388441, 3850519553, 3850650641, 3850781719, 3850912801, - 3851043901, 3851174983, 3851306083, 3851437157, 3851568277, 3851699387, 3851830513, - 3851961601, 3852092677, 3852223807, 3852354889, 3852485977, 3852617053, 3852748139, - 3852879229, 3853010303, 3853141421, 3853272499, 3853403599, 3853534697, 3853665779, - 3853796873, 3853927951, 3854059031, 3854190107, 3854321189, 3854452337, 3854583437, - 3854714527, 3854845633, 3854976733, 3855107813, 3855238901, 3855369977, 3855501053, - 3855632129, 3855763201, 3855894277, 3856025351, 3856156439, 3856287521, 3856418603, - 3856549687, 3856680787, 3856811867, 3856942997, 3857074127, 3857205203, 3857336303, - 3857467391, 3857598523, 3857729599, 3857860673, 3857991773, 3858122893, 3858253969, - 3858385087, 3858516173, 3858647257, 3858778331, 3858909409, 3859040483, 3859171579, - 3859302659, 3859433737, 3859564811, 3859695901, 3859826981, 3859958083, 3860089169, - 3860220241, 3860351323, 3860482411, 3860613563, 3860744647, 3860875727, 3861006839, - 3861137911, 3861268987, 3861400093, 3861531209, 3861662293, 3861793387, 3861924491, - 3862055581, 3862186661, 3862317751, 3862448827, 3862579909, 3862711003, 3862842077, - 3862973161, 3863104241, 3863235353, 3863366459, 3863497549, 3863628677, 3863759749, - 3863890841, 3864021929, 3864153001, 3864284141, 3864415229, 3864546311, 3864677389, - 3864808469, 3864939553, 3865070647, 3865201771, 3865332871, 3865463947, 3865595023, - 3865726097, 3865857169, 3865988249, 3866119321, 3866250433, 3866381509, 3866512607, - 3866643691, 3866774767, 3866905877, 3867036977, 3867168061, 3867299153, 3867430253, - 3867561329, 3867692447, 3867823573, 3867954647, 3868085723, 3868216867, 3868347949, - 3868479053, 3868610131, 3868741211, 3868872311, 3869003407, 3869134481, 3869265599, - 3869396677, 3869527763, 3869658839, 3869789941, 3869921023, 3870052099, 3870183199, - 3870314291, 3870445367, 3870576461, 3870707591, 3870838691, 3870969799, 3871100897, - 3871231997, 3871363079, 3871494157, 3871625267, 3871756379, 3871887511, 3872018593, - 3872149667, 3872280739, 3872411849, 3872542979, 3872674061, 3872805179, 3872936281, - 3873067361, 3873198463, 3873329567, 3873460663, 3873591737, 3873722837, 3873853927, - 3873985001, 3874116083, 3874247203, 3874378283, 3874509377, 3874640449, 3874771547, - 3874902631, 3875033711, 3875164831, 3875295937, 3875427011, 3875558123, 3875689199, - 3875820281, 3875951353, 3876082447, 3876213559, 3876344657, 3876475747, 3876606847, - 3876737959, 3876869081, 3877000157, 3877131239, 3877262327, 3877393427, 3877524551, - 3877655623, 3877786697, 3877917773, 3878048851, 3878179939, 3878311033, 3878442119, - 3878573197, 3878704273, 3878835361, 3878966459, 3879097571, 3879228649, 3879359741, - 3879490829, 3879621917, 3879753019, 3879884111, 3880015201, 3880146289, 3880277363, - 3880408439, 3880539521, 3880670621, 3880801693, 3880932767, 3881063843, 3881194949, - 3881326021, 3881457101, 3881588177, 3881719271, 3881850353, 3881981533, 3882112649, - 3882243721, 3882374801, 3882505873, 3882636971, 3882768061, 3882899159, 3883030237, - 3883161349, 3883292459, 3883423549, 3883554673, 3883685749, 3883816829, 3883947901, - 3884078987, 3884210107, 3884341193, 3884472301, 3884603383, 3884734457, 3884865557, - 3884996657, 3885127747, 3885258821, 3885389897, 3885520987, 3885652061, 3885783149, - 3885914231, 3886045363, 3886176473, 3886307561, 3886438637, 3886569721, 3886700833, - 3886831909, 3886962997, 3887094073, 3887225201, 3887356273, 3887487377, 3887618467, - 3887749549, 3887880683, 3888011801, 3888142877, 3888273953, 3888405061, 3888536159, - 3888667259, 3888798421, 3888929531, 3889060649, 3889191737, 3889322809, 3889453891, - 3889584967, 3889716049, 3889847153, 3889978231, 3890109319, 3890240423, 3890371517, - 3890502589, 3890633713, 3890764799, 3890895871, 3891026981, 3891158069, 3891289147, - 3891420251, 3891551333, 3891682411, 3891813487, 3891944579, 3892075651, 3892206727, - 3892337807, 3892468897, 3892600003, 3892731109, 3892862209, 3892993297, 3893124407, - 3893255593, 3893386687, 3893517787, 3893648897, 3893779979, 3893911051, 3894042161, - 3894173237, 3894304319, 3894435401, 3894566483, 3894697559, 3894828631, 3894959711, - 3895090783, 3895221857, 3895352977, 3895484053, 3895615159, 3895746259, 3895877339, - 3896008411, 3896139493, 3896270593, 3896401673, 3896532751, 3896663873, 3896794981, - 3896926073, 3897057161, 3897188261, 3897319337, 3897450409, 3897581521, 3897712627, - 3897843701, 3897974803, 3898105877, 3898236971, 3898368043, 3898499183, 3898630259, - 3898761337, 3898892423, 3899023537, 3899154631, 3899285743, 3899416819, 3899547893, - 3899678969, 3899810063, 3899941153, 3900072229, 3900203317, 3900334397, 3900465479, - 3900596551, 3900727631, 3900858757, 3900989857, 3901120933, 3901252031, 3901383131, - 3901514209, 3901645303, 3901776379, 3901907459, 3902038597, 3902169697, 3902300803, - 3902431877, 3902562953, 3902694041, 3902825119, 3902956201, 3903087283, 3903218359, - 3903349433, 3903480527, 3903611603, 3903742681, 3903873763, 3904004837, 3904135957, - 3904267033, 3904398149, 3904529227, 3904660301, 3904791409, 3904922537, 3905053657, - 3905184749, 3905315833, 3905446939, 3905578013, 3905709089, 3905840171, 3905971261, - 3906102337, 3906233411, 3906364513, 3906495599, 3906626671, 3906757763, 3906888877, - 3907019953, 3907151057, 3907282231, 3907413317, 3907544413, 3907675501, 3907806577, - 3907937699, 3908068799, 3908199941, 3908331019, 3908462099, 3908593187, 3908724271, - 3908855383, 3908986463, 3909117601, 3909248699, 3909379819, 3909510971, 3909642049, - 3909773129, 3909904213, 3910035313, 3910166399, 3910297471, 3910428569, 3910559641, - 3910690723, 3910821857, 3910952933, 3911084011, 3911215153, 3911346233, 3911477321, - 3911608397, 3911739479, 3911870591, 3912001663, 3912132739, 3912263819, 3912394891, - 3912525989, 3912657113, 3912788207, 3912919313, 3913050397, 3913181483, 3913312573, - 3913443671, 3913574779, 3913705853, 3913836967, 3913968043, 3914099141, 3914230219, - 3914361317, 3914492399, 3914623477, 3914754551, 3914885657, 3915016741, 3915147823, - 3915278897, 3915409997, 3915541073, 3915672151, 3915803249, 3915934357, 3916065449, - 3916196521, 3916327601, 3916458731, 3916589837, 3916720931, 3916852031, 3916983121, - 3917114203, 3917245291, 3917376373, 3917507491, 3917638567, 3917769641, 3917900761, - 3918031841, 3918163003, 3918294077, 3918425197, 3918556273, 3918687349, 3918818441, - 3918949543, 3919080623, 3919211711, 3919342813, 3919473893, 3919604993, 3919736111, - 3919867183, 3919998347, 3920129431, 3920260541, 3920391623, 3920522699, 3920653771, - 3920784853, 3920915927, 3921047033, 3921178111, 3921309193, 3921440273, 3921571417, - 3921702553, 3921833659, 3921964747, 3922095839, 3922226929, 3922358021, 3922489097, - 3922620199, 3922751293, 3922882373, 3923013499, 3923144591, 3923275663, 3923406737, - 3923537833, 3923668913, 3923800043, 3923931119, 3924062209, 3924193289, 3924324367, - 3924455443, 3924586517, 3924717607, 3924848717, 3924979811, 3925110887, 3925242011, - 3925373147, 3925504223, 3925635319, 3925766401, 3925897487, 3926028571, 3926159683, - 3926290769, 3926421841, 3926552921, 3926684023, 3926815097, 3926946169, 3927077243, - 3927208339, 3927339419, 3927470527, 3927601603, 3927732689, 3927863813, 3927994897, - 3928125989, 3928257103, 3928388179, 3928519271, 3928650347, 3928781419, 3928912499, - 3929043583, 3929174677, 3929305753, 3929436827, 3929567903, 3929699009, 3929830087, - 3929961169, 3930092261, 3930223337, 3930354419, 3930485509, 3930616589, 3930747671, - 3930878759, 3931009843, 3931140919, 3931272001, 3931403123, 3931534199, 3931665271, - 3931796347, 3931927421, 3932058497, 3932189609, 3932320687, 3932451763, 3932582839, - 3932713969, 3932845051, 3932976233, 3933107377, 3933238471, 3933369589, 3933500699, - 3933631777, 3933762853, 3933893981, 3934025093, 3934156241, 3934287323, 3934418441, - 3934549519, 3934680593, 3934811701, 3934942801, 3935073893, 3935204981, 3935336057, - 3935467177, 3935598257, 3935729353, 3935860433, 3935991529, 3936122621, 3936253733, - 3936384811, 3936515887, 3936646969, 3936778051, 3936909133, 3937040243, 3937171327, - 3937302407, 3937433527, 3937564619, 3937695721, 3937826813, 3937957927, 3938089009, - 3938220101, 3938351237, 3938482309, 3938613401, 3938744483, 3938875573, 3939006647, - 3939137747, 3939268847, 3939399929, 3939531019, 3939662099, 3939793177, 3939924271, - 3940055347, 3940186421, 3940317517, 3940448591, 3940579667, 3940710779, 3940841921, - 3940972999, 3941104093, 3941235209, 3941366353, 3941497463, 3941628541, 3941759629, - 3941890717, 3942021803, 3942152897, 3942283979, 3942415067, 3942546193, 3942677287, - 3942808367, 3942939439, 3943070519, 3943201597, 3943332671, 3943463743, 3943594817, - 3943725911, 3943856993, 3943988129, 3944119321, 3944250419, 3944381509, 3944512639, - 3944643737, 3944774881, 3944906011, 3945037099, 3945168181, 3945299279, 3945430409, - 3945561481, 3945692561, 3945823643, 3945954743, 3946085833, 3946216909, 3946348009, - 3946479101, 3946610201, 3946741273, 3946872367, 3947003461, 3947134559, 3947265643, - 3947396771, 3947527861, 3947658971, 3947790089, 3947921161, 3948052243, 3948183341, - 3948314429, 3948445511, 3948576601, 3948707687, 3948838771, 3948969859, 3949100963, - 3949232069, 3949363147, 3949494221, 3949625311, 3949756403, 3949887509, 3950018587, - 3950149717, 3950280809, 3950411953, 3950543033, 3950674109, 3950805233, 3950936317, - 3951067399, 3951198529, 3951329611, 3951460699, 3951591781, 3951722891, 3951853979, - 3951985067, 3952116149, 3952247231, 3952378319, 3952509391, 3952640491, 3952771619, - 3952902719, 3953033797, 3953164879, 3953295961, 3953427047, 3953558137, 3953689231, - 3953820337, 3953951411, 3954082493, 3954213581, 3954344699, 3954475781, 3954606869, - 3954737947, 3954869053, 3955000163, 3955131251, 3955262327, 3955393423, 3955524497, - 3955655579, 3955786657, 3955917737, 3956048839, 3956179967, 3956311039, 3956442121, - 3956573197, 3956704277, 3956835359, 3956966441, 3957097513, 3957228593, 3957359677, - 3957490769, 3957621869, 3957752951, 3957884027, 3958015111, 3958146209, 3958277287, - 3958408381, 3958539457, 3958670537, 3958801619, 3958932713, 3959063809, 3959194903, - 3959325977, 3959457079, 3959588153, 3959719277, 3959850421, 3959981521, 3960112631, - 3960243731, 3960374849, 3960505933, 3960637111, 3960768187, 3960899269, 3961030349, - 3961161433, 3961292521, 3961423603, 3961554683, 3961685771, 3961816853, 3961947931, - 3962079013, 3962210101, 3962341219, 3962472301, 3962603473, 3962734549, 3962865629, - 3962996707, 3963127781, 3963258853, 3963389929, 3963521041, 3963652127, 3963783203, - 3963914281, 3964045367, 3964176449, 3964307551, 3964438717, 3964569797, 3964700869, - 3964831957, 3964963039, 3965094121, 3965225219, 3965356303, 3965487377, 3965618453, - 3965749603, 3965880691, 3966011779, 3966142853, 3966273931, 3966405017, 3966536099, - 3966667213, 3966798299, 3966929381, 3967060453, 3967191581, 3967322677, 3967453751, - 3967584827, 3967715923, 3967847011, 3967978097, 3968109199, 3968240293, 3968371373, - 3968502487, 3968633567, 3968764649, 3968895751, 3969026833, 3969157939, 3969289019, - 3969420101, 3969551177, 3969682259, 3969813359, 3969944443, 3970075537, 3970206637, - 3970337729, 3970468819, 3970599923, 3970731001, 3970862081, 3970993177, 3971124281, - 3971255357, 3971386429, 3971517533, 3971648621, 3971779739, 3971910853, 3972041977, - 3972173077, 3972304183, 3972435319, 3972566401, 3972697489, 3972828577, 3972959677, - 3973090777, 3973221851, 3973352923, 3973483999, 3973615117, 3973746221, 3973877329, - 3974008427, 3974139539, 3974270633, 3974401751, 3974532949, 3974664053, 3974795137, - 3974926231, 3975057311, 3975188407, 3975319483, 3975450593, 3975581677, 3975712753, - 3975843847, 3975974923, 3976105999, 3976237099, 3976368191, 3976499269, 3976630349, - 3976761449, 3976892537, 3977023681, 3977154763, 3977285857, 3977416931, 3977548009, - 3977679103, 3977810197, 3977941271, 3978072347, 3978203419, 3978334519, 3978465593, - 3978596669, 3978727763, 3978858853, 3978989947, 3979121063, 3979252181, 3979383257, - 3979514339, 3979645421, 3979776509, 3979907623, 3980038729, 3980169839, 3980300941, - 3980432039, 3980563121, 3980694197, 3980825327, 3980956477, 3981087553, 3981218641, - 3981349717, 3981480817, 3981611897, 3981742979, 3981874073, 3982005151, 3982136237, - 3982267309, 3982398389, 3982529477, 3982660553, 3982791643, 3982922729, 3983053829, - 3983184911, 3983315983, 3983447059, 3983578141, 3983709253, 3983840353, 3983971441, - 3984102557, 3984233647, 3984364753, 3984495839, 3984626939, 3984758023, 3984889099, - 3985020187, 3985151263, 3985282339, 3985413427, 3985544527, 3985675609, 3985806691, - 3985937773, 3986068871, 3986199953, 3986331053, 3986462131, 3986593213, 3986724307, - 3986855387, 3986986483, 3987117557, 3987248633, 3987379763, 3987510841, 3987641921, - 3987773017, 3987904103, 3988035209, 3988166297, 3988297373, 3988428449, 3988559539, - 3988690639, 3988821731, 3988952819, 3989083927, 3989215003, 3989346103, 3989477179, - 3989608253, 3989739349, 3989870453, 3990001549, 3990132631, 3990263741, 3990394813, - 3990525893, 3990657071, 3990788147, 3990919237, 3991050313, 3991181393, 3991312477, - 3991443553, 3991574669, 3991705741, 3991836833, 3991967921, 3992099009, 3992230093, - 3992361179, 3992492261, 3992623357, 3992754503, 3992885579, 3993016663, 3993147761, - 3993278843, 3993409919, 3993541063, 3993672143, 3993803243, 3993934331, 3994065403, - 3994196489, 3994327613, 3994458697, 3994589771, 3994720883, 3994851961, 3994983061, - 3995114171, 3995245307, 3995376403, 3995507513, 3995638609, 3995769689, 3995900761, - 3996031877, 3996162977, 3996294077, 3996425177, 3996556259, 3996687361, 3996818443, - 3996949529, 3997080601, 3997211681, 3997342757, 3997473829, 3997604909, 3997736009, - 3997867099, 3997998181, 3998129273, 3998260349, 3998391427, 3998522501, 3998653583, - 3998784677, 3998915749, 3999046853, 3999177929, 3999309011, 3999440129, 3999571217, - 3999702299, 3999833399, 3999964471, 4000095551, 4000226647, 4000357729, 4000488827, - 4000619929, 4000751009, 4000882121, 4001013251, 4001144333, 4001275427, 4001406509, - 4001537587, 4001668669, 4001799743, 4001930827, 4002061907, 4002192979, 4002324089, - 4002455227, 4002586319, 4002717391, 4002848467, 4002979559, 4003110653, 4003241743, - 4003372817, 4003503899, 4003634983, 4003766093, 4003897187, 4004028263, 4004159347, - 4004290421, 4004421503, 4004552599, 4004683673, 4004814799, 4004945881, 4005076969, - 4005208043, 4005339167, 4005470239, 4005601339, 4005732439, 4005863551, 4005994661, - 4006125733, 4006256831, 4006387927, 4006519001, 4006650091, 4006781167, 4006912241, - 4007043317, 4007174389, 4007305483, 4007436577, 4007567653, 4007698729, 4007829803, - 4007960903, 4008091993, 4008223067, 4008354151, 4008485251, 4008616327, 4008747419, - 4008878557, 4009009657, 4009140739, 4009271843, 4009402939, 4009534013, 4009665089, - 4009796179, 4009927253, 4010058343, 4010189453, 4010320583, 4010451659, 4010582767, - 4010713913, 4010844989, 4010976061, 4011107147, 4011238241, 4011369343, 4011500459, - 4011631541, 4011762613, 4011893687, 4012024771, 4012155877, 4012286953, 4012418029, - 4012549129, 4012680241, 4012811317, 4012942393, 4013073487, 4013204563, 4013335661, - 4013466733, 4013597827, 4013728931, 4013860057, 4013991131, 4014122209, 4014253289, - 4014384371, 4014515489, 4014646579, 4014777677, 4014908749, 4015039837, 4015170911, - 4015301987, 4015433143, 4015564219, 4015695311, 4015826383, 4015957469, 4016088589, - 4016219693, 4016350769, 4016481871, 4016612953, 4016744027, 4016875129, 4017006223, - 4017137303, 4017268379, 4017399467, 4017530567, 4017661649, 4017792731, 4017923809, - 4018054889, 4018185989, 4018317089, 4018448177, 4018579261, 4018710337, 4018841413, - 4018972543, 4019103623, 4019234753, 4019365829, 4019496931, 4019628007, 4019759087, - 4019890177, 4020021287, 4020152369, 4020283447, 4020414527, 4020545621, 4020676703, - 4020807781, 4020938861, 4021069933, 4021201013, 4021332113, 4021463207, 4021594331, - 4021725403, 4021856497, 4021987591, 4022118703, 4022249789, 4022380861, 4022511973, - 4022643047, 4022774159, 4022905231, 4023036313, 4023167387, 4023298459, 4023429533, - 4023560621, 4023691697, 4023822787, 4023953929, 4024085003, 4024216099, 4024347179, - 4024478257, 4024609339, 4024740431, 4024871527, 4025002601, 4025133683, 4025264783, - 4025395859, 4025526931, 4025658017, 4025789101, 4025920177, 4026051269, 4026182341, - 4026313429, 4026444511, 4026575591, 4026706679, 4026837791, 4026968887, 4027099987, - 4027231067, 4027362167, 4027493243, 4027624327, 4027755409, 4027886521, 4028017607, - 4028148679, 4028279767, 4028410921, 4028542019, 4028673133, 4028804209, 4028935283, - 4029066361, 4029197453, 4029328529, 4029459617, 4029590701, 4029721781, 4029852859, - 4029983941, 4030115021, 4030246097, 4030377173, 4030508267, 4030639391, 4030770467, - 4030901549, 4031032627, 4031163713, 4031294789, 4031425861, 4031556943, 4031688077, - 4031819153, 4031950253, 4032081329, 4032212407, 4032343487, 4032474569, 4032605659, - 4032736777, 4032867869, 4032998947, 4033130047, 4033261121, 4033392247, 4033523321, - 4033654403, 4033785493, 4033916573, 4034047649, 4034178721, 4034309801, 4034440889, - 4034571977, 4034703077, 4034834183, 4034965261, 4035096341, 4035227431, 4035358519, - 4035489593, 4035620669, 4035751747, 4035882827, 4036013951, 4036145051, 4036276147, - 4036407259, 4036538371, 4036669451, 4036800527, 4036931599, 4037062681, 4037193773, - 4037324867, 4037455999, 4037587093, 4037718173, 4037849251, 4037980343, 4038111421, - 4038242581, 4038373657, 4038504731, 4038635807, 4038766913, 4038898007, 4039029079, - 4039160189, 4039291271, 4039422347, 4039553423, 4039684499, 4039815583, 4039946671, - 4040077757, 4040208829, 4040339917, 4040470999, 4040602087, 4040733163, 4040864329, - 4040995423, 4041126499, 4041257581, 4041388717, 4041519799, 4041650881, 4041781979, - 4041913061, 4042044143, 4042175233, 4042306313, 4042437403, 4042568501, 4042699613, - 4042830691, 4042961801, 4043092877, 4043223991, 4043355067, 4043486149, 4043617231, - 4043748323, 4043879407, 4044010513, 4044141643, 4044272719, 4044403801, 4044534899, - 4044665971, 4044797051, 4044928157, 4045059233, 4045190327, 4045321403, 4045452511, - 4045583627, 4045714709, 4045845781, 4045976867, 4046107939, 4046239027, 4046370109, - 4046501183, 4046632267, 4046763353, 4046894431, 4047025519, 4047156601, 4047287687, - 4047418783, 4047549859, 4047680933, 4047812051, 4047943129, 4048074263, 4048205351, - 4048336423, 4048467497, 4048598573, 4048729649, 4048860721, 4048991797, 4049122871, - 4049253959, 4049385031, 4049516129, 4049647201, 4049778323, 4049909401, 4050040487, - 4050171563, 4050302657, 4050433757, 4050564853, 4050695969, 4050827041, 4050958133, - 4051089221, 4051220351, 4051351453, 4051482541, 4051613617, 4051744709, 4051875787, - 4052006867, 4052137963, 4052269043, 4052400127, 4052531201, 4052662291, 4052793377, - 4052924459, 4053055541, 4053186617, 4053317711, 4053448783, 4053579863, 4053710987, - 4053842081, 4053973193, 4054104293, 4054235387, 4054366529, 4054497611, 4054628693, - 4054759817, 4054890893, 4055021981, 4055153083, 4055284157, 4055415251, 4055546329, - 4055677421, 4055808499, 4055939599, 4056070687, 4056201767, 4056332843, 4056463937, - 4056595013, 4056726101, 4056857179, 4056988283, 4057119403, 4057250507, 4057381579, - 4057512673, 4057643747, 4057774823, 4057905959, 4058037073, 4058168171, 4058299261, - 4058430367, 4058561459, 4058692531, 4058823631, 4058954741, 4059085819, 4059216923, - 4059348017, 4059479101, 4059610201, 4059741277, 4059872353, 4060003433, 4060134509, - 4060265597, 4060396699, 4060527799, 4060658873, 4060789963, 4060921057, 4061052197, - 4061183279, 4061314379, 4061445457, 4061576551, 4061707673, 4061838749, 4061969833, - 4062100937, 4062232021, 4062363113, 4062494239, 4062625331, 4062756403, 4062887503, - 4063018601, 4063149703, 4063280783, 4063411867, 4063542953, 4063674031, 4063805131, - 4063936211, 4064067283, 4064198357, 4064329453, 4064460581, 4064591719, 4064722793, - 4064853893, 4064984969, 4065116047, 4065247127, 4065378199, 4065509303, 4065640391, - 4065771467, 4065902567, 4066033661, 4066164743, 4066295843, 4066426939, 4066558039, - 4066689113, 4066820207, 4066951283, 4067082377, 4067213471, 4067344549, 4067475647, - 4067606731, 4067737813, 4067868923, 4068000059, 4068131131, 4068262229, 4068393319, - 4068524443, 4068655523, 4068786599, 4068917693, 4069048769, 4069179841, 4069310933, - 4069442009, 4069573087, 4069704179, 4069835251, 4069966331, 4070097403, 4070228497, - 4070359571, 4070490643, 4070621717, 4070752789, 4070883871, 4071014963, 4071146089, - 4071277183, 4071408283, 4071539413, 4071670487, 4071801583, 4071932699, 4072063811, - 4072194913, 4072325989, 4072457063, 4072588151, 4072719239, 4072850363, 4072981459, - 4073112541, 4073243663, 4073374769, 4073505869, 4073636947, 4073768029, 4073899121, - 4074030193, 4074161339, 4074292421, 4074423511, 4074554587, 4074685697, 4074816773, - 4074947857, 4075078933, 4075210019, 4075341091, 4075472197, 4075603271, 4075734347, - 4075865477, 4075996549, 4076127637, 4076258717, 4076389799, 4076520883, 4076651981, - 4076783069, 4076914159, 4077045257, 4077176329, 4077307411, 4077438487, 4077569567, - 4077700663, 4077831881, 4077962963, 4078094039, 4078225127, 4078356221, 4078487311, - 4078618409, 4078749491, 4078880563, 4079011639, 4079142733, 4079273827, 4079404933, - 4079536007, 4079667091, 4079798179, 4079929253, 4080060331, 4080191407, 4080322489, - 4080453581, 4080584657, 4080715739, 4080846817, 4080977921, 4081109027, 4081240103, - 4081371179, 4081502261, 4081633363, 4081764457, 4081895539, 4082026661, 4082157799, - 4082288887, 4082419961, 4082551043, 4082682127, 4082813201, 4082944277, 4083075407, - 4083206483, 4083337567, 4083468643, 4083599749, 4083730823, 4083861931, 4083993029, - 4084124141, 4084255243, 4084386337, 4084517413, 4084648487, 4084779577, 4084910651, - 4085041733, 4085172809, 4085303897, 4085434973, 4085566091, 4085697179, 4085828273, - 4085959351, 4086090451, 4086221533, 4086352643, 4086483727, 4086614801, 4086745907, - 4086876979, 4087008061, 4087139137, 4087270273, 4087401349, 4087532431, 4087663519, - 4087794643, 4087925717, 4088056807, 4088187919, 4088318999, 4088450083, 4088581157, - 4088712241, 4088843327, 4088974427, 4089105509, 4089236581, 4089367661, 4089498761, - 4089629861, 4089760933, 4089892007, 4090023083, 4090154161, 4090285253, 4090416329, - 4090547413, 4090678507, 4090809587, 4090940687, 4091071771, 4091202851, 4091333969, - 4091465057, 4091596129, 4091727217, 4091858291, 4091989393, 4092120479, 4092251557, - 4092382631, 4092513703, 4092644779, 4092775859, 4092906941, 4093038017, 4093169089, - 4093300201, 4093431313, 4093562401, 4093693477, 4093824551, 4093955641, 4094086723, - 4094217817, 4094348903, 4094479979, 4094611061, 4094742137, 4094873231, 4095004339, - 4095135431, 4095266521, 4095397619, 4095528691, 4095659797, 4095790873, 4095921967, - 4096053103, 4096184177, 4096315261, 4096446353, 4096577453, 4096708529, 4096839601, - 4096970681, 4097101769, 4097232859, 4097363939, 4097495041, 4097626151, 4097757247, - 4097888359, 4098019447, 4098150521, 4098281609, 4098412697, 4098543781, 4098674869, - 4098805979, 4098937057, 4099068131, 4099199233, 4099330331, 4099461409, 4099592491, - 4099723577, 4099854659, 4099985759, 4100116841, 4100247913, 4100378987, 4100510093, - 4100641169, 4100772241, 4100903321, 4101034393, 4101165469, 4101296569, 4101427669, - 4101558751, 4101689831, 4101820913, 4101951989, 4102083077, 4102214167, 4102345253, - 4102476331, 4102607417, 4102738511, 4102869583, 4103000683, 4103131777, 4103262871, - 4103393953, 4103525077, 4103656169, 4103787263, 4103918393, 4104049489, 4104180571, - 4104311647, 4104442807, 4104573883, 4104704969, 4104836069, 4104967193, 4105098271, - 4105229351, 4105360423, 4105491503, 4105622579, 4105753651, 4105884737, 4106015827, - 4106146907, 4106278027, 4106409113, 4106540227, 4106671337, 4106802409, 4106933497, - 4107064573, 4107195661, 4107326759, 4107457843, 4107588931, 4107720037, 4107851141, - 4107982237, 4108113311, 4108244389, 4108375477, 4108506559, 4108637651, 4108768733, - 4108899863, 4109030957, 4109162041, 4109293129, 4109424211, 4109555293, 4109686393, - 4109817539, 4109948621, 4110079693, 4110210781, 4110341867, 4110472943, 4110604021, - 4110735121, 4110866209, 4110997313, 4111128403, 4111259483, 4111390559, 4111521641, - 4111652737, 4111783811, 4111914883, 4112045983, 4112177071, 4112308181, 4112439271, - 4112570383, 4112701471, 4112832551, 4112963627, 4113094709, 4113225799, 4113356879, - 4113487967, 4113619039, 4113750119, 4113881203, 4114012313, 4114143409, 4114274543, - 4114405627, 4114536703, 4114667779, 4114798861, 4114929937, 4115061011, 4115192087, - 4115323169, 4115454263, 4115585347, 4115716441, 4115847517, 4115978597, 4116109709, - 4116240781, 4116371863, 4116502937, 4116634021, 4116765113, 4116896209, 4117027283, - 4117158361, 4117289437, 4117420511, 4117551601, 4117682713, 4117813789, 4117944931, - 4118076143, 4118207221, 4118338309, 4118469391, 4118600467, 4118731543, 4118862623, - 4118993737, 4119124879, 4119255977, 4119387049, 4119518131, 4119649207, 4119780283, - 4119911401, 4120042477, 4120173557, 4120304651, 4120435727, 4120566847, 4120697923, - 4120829021, 4120960097, 4121091173, 4121222267, 4121353391, 4121484469, 4121615573, - 4121746649, 4121877731, 4122008953, 4122140039, 4122271123, 4122402209, 4122533323, - 4122664421, 4122795497, 4122926569, 4123057681, 4123188779, 4123319881, 4123450967, - 4123582061, 4123713151, 4123844239, 4123975313, 4124106397, 4124237471, 4124368543, - 4124499619, 4124630737, 4124761819, 4124892917, 4125023993, 4125155117, 4125286201, - 4125417281, 4125548363, 4125679451, 4125810583, 4125941681, 4126072763, 4126203857, - 4126334969, 4126466053, 4126597129, 4126728233, 4126859311, 4126990393, 4127121491, - 4127252603, 4127383691, 4127514763, 4127645869, 4127776969, 4127908087, 4128039197, - 4128170279, 4128301469, 4128432589, 4128563689, 4128694763, 4128825859, 4128956969, - 4129088071, 4129219147, 4129350227, 4129481309, 4129612397, 4129743487, 4129874563, - 4130005643, 4130136719, 4130267807, 4130398879, 4130529959, 4130661043, 4130792117, - 4130923217, 4131054299, 4131185381, 4131316457, 4131447547, 4131578719, 4131709807, - 4131840899, 4131971981, 4132103069, 4132234147, 4132365269, 4132496341, 4132627439, - 4132758523, 4132889627, 4133020699, 4133151791, 4133282869, 4133413943, 4133545033, - 4133676139, 4133807231, 4133938363, 4134069437, 4134200533, 4134331613, 4134462707, - 4134593779, 4134724861, 4134855947, 4134987023, 4135118107, 4135249187, 4135380299, - 4135511381, 4135642457, 4135773569, 4135904677, 4136035751, 4136166823, 4136297903, - 4136428979, 4136560081, 4136691157, 4136822231, 4136953339, 4137084433, 4137215539, - 4137346639, 4137477787, 4137608861, 4137739993, 4137871069, 4138002149, 4138133267, - 4138264379, 4138395461, 4138526537, 4138657631, 4138788713, 4138919801, 4139050913, - 4139182009, 4139313097, 4139444191, 4139575367, 4139706443, 4139837521, 4139968601, - 4140099683, 4140230867, 4140361963, 4140493057, 4140624149, 4140755231, 4140886313, - 4141017401, 4141148483, 4141279573, 4141410661, 4141541737, 4141672817, 4141803931, - 4141935089, 4142066171, 4142197261, 4142328373, 4142459449, 4142590523, 4142721629, - 4142852717, 4142983799, 4143114889, 4143245999, 4143377093, 4143508169, 4143639259, - 4143770339, 4143901481, 4144032559, 4144163641, 4144294717, 4144425797, 4144556879, - 4144687973, 4144819051, 4144950133, 4145081233, 4145212343, 4145343457, 4145474533, - 4145605621, 4145736701, 4145867777, 4145998859, 4146129931, 4146261047, 4146392149, - 4146523291, 4146654419, 4146785491, 4146916591, 4147047691, 4147178767, 4147309871, - 4147440967, 4147572041, 4147703143, 4147834247, 4147965359, 4148096431, 4148227513, - 4148358593, 4148489677, 4148620757, 4148751833, 4148882909, 4149014027, 4149145123, - 4149276233, 4149407363, 4149538447, 4149669523, 4149800671, 4149931769, 4150062853, - 4150193947, 4150325051, 4150456127, 4150587227, 4150718323, 4150849397, 4150980469, - 4151111551, 4151242633, 4151373739, 4151504837, 4151635919, 4151767019, 4151898133, - 4152029213, 4152160297, 4152291371, 4152422447, 4152553519, 4152684607, 4152815699, - 4152946783, 4153077857, 4153208957, 4153340063, 4153471141, 4153602247, 4153733333, - 4153864409, 4153995481, 4154126593, 4154257669, 4154388751, 4154519827, 4154650939, - 4154782033, 4154913107, 4155044191, 4155175291, 4155306391, 4155437537, 4155568643, - 4155699749, 4155830827, 4155961907, 4156093009, 4156224109, 4156355201, 4156486273, - 4156617359, 4156748459, 4156879537, 4157010631, 4157141717, 4157272829, 4157403911, - 4157534999, 4157666077, 4157797169, 4157928259, 4158059333, 4158190409, 4158321491, - 4158452587, 4158583687, 4158714773, 4158845863, 4158976963, 4159108043, 4159239121, - 4159370203, 4159501279, 4159632457, 4159763533, 4159894649, 4160025733, 4160156821, - 4160287897, 4160418973, 4160550049, 4160681137, 4160812213, 4160943389, 4161074473, - 4161205553, 4161336649, 4161467729, 4161598811, 4161729889, 4161860977, 4161992053, - 4162123127, 4162254227, 4162385299, 4162516373, 4162647451, 4162778563, 4162909657, - 4163040773, 4163171869, 4163302943, 4163434031, 4163565127, 4163696213, 4163827303, - 4163958413, 4164089537, 4164220657, 4164351749, 4164482831, 4164613919, 4164745007, - 4164876113, 4165007239, 4165138339, 4165269421, 4165400501, 4165531577, 4165662661, - 4165793767, 4165924877, 4166056009, 4166187097, 4166318179, 4166449289, 4166580373, - 4166711459, 4166842571, 4166973667, 4167104779, 4167235867, 4167366947, 4167498029, - 4167629161, 4167760271, 4167891353, 4168022429, 4168153559, 4168284683, 4168415767, - 4168546853, 4168677959, 4168809049, 4168940123, 4169071217, 4169202337, 4169333423, - 4169464511, 4169595607, 4169726689, 4169857777, 4169988857, 4170119939, 4170251023, - 4170382109, 4170513199, 4170644279, 4170775373, 4170906451, 4171037561, 4171168633, - 4171299731, 4171430807, 4171561931, 4171693003, 4171824079, 4171955209, 4172086333, - 4172217407, 4172348501, 4172479573, 4172610647, 4172741731, 4172872813, 4173003941, - 4173135047, 4173266129, 4173397211, 4173528283, 4173659383, 4173790463, 4173921569, - 4174052669, 4174183771, 4174314871, 4174445963, 4174577063, 4174708151, 4174839247, - 4174970321, 4175101459, 4175232563, 4175363651, 4175494783, 4175625889, 4175756993, - 4175888069, 4176019153, 4176150233, 4176281323, 4176412447, 4176543521, 4176674629, - 4176805709, 4176936793, 4177067887, 4177198967, 4177330039, 4177461121, 4177592197, - 4177723313, 4177854391, 4177985477, 4178116573, 4178247653, 4178378753, 4178509831, - 4178640979, 4178772053, 4178903167, 4179034253, 4179165329, 4179296413, 4179427487, - 4179558569, 4179689653, 4179820739, 4179951833, 4180082923, 4180214011, 4180345093, - 4180476169, 4180607261, 4180738351, 4180869487, 4181000563, 4181131639, 4181262731, - 4181393803, 4181524891, 4181656009, 4181787089, 4181918189, 4182049337, 4182180437, - 4182311519, 4182442619, 4182573701, 4182704807, 4182835889, 4182966961, 4183098037, - 4183229111, 4183360199, 4183491271, 4183622347, 4183753433, 4183884533, 4184015609, - 4184146721, 4184277803, 4184408903, 4184539981, 4184671061, 4184802133, 4184933213, - 4185064307, 4185195383, 4185326459, 4185457543, 4185588637, 4185719723, 4185850829, - 4185981937, 4186113037, 4186244143, 4186375229, 4186506349, 4186637437, 4186768529, - 4186899601, 4187030677, 4187161757, 4187292833, 4187423917, 4187554993, 4187686073, - 4187817173, 4187948269, 4188079367, 4188210463, 4188341537, 4188472609, 4188603689, - 4188734773, 4188865847, 4188996953, 4189128029, 4189259147, 4189390243, 4189521331, - 4189652429, 4189783511, 4189914583, 4190045663, 4190176747, 4190307827, 4190438911, - 4190570003, 4190701103, 4190832181, 4190963261, 4191094343, 4191225449, 4191356531, - 4191487621, 4191618701, 4191749777, 4191880867, 4192011953, 4192143037, 4192274113, - 4192405211, 4192536287, 4192667387, 4192798459, 4192929547, 4193060629, 4193191711, - 4193322797, 4193453897, 4193584987, 4193716061, 4193847137, 4193978219, 4194109301, - 4194240373, 4194371449, 4194502541, 4194633647, 4194764731, 4194895807, 4195026911, - 4195158031, 4195289123, 4195420213, 4195551287, 4195682389, 4195813471, 4195944563, - 4196075641, 4196206727, 4196337839, 4196468911, 4196599993, 4196731073, 4196862151, - 4196993279, 4197124363, 4197255449, 4197386527, 4197517603, 4197648677, 4197779821, - 4197910957, 4198042049, 4198173131, 4198304213, 4198435289, 4198566391, 4198697533, - 4198828609, 4198959719, 4199090827, 4199221913, 4199352991, 4199484071, 4199615153, - 4199746247, 4199877347, 4200008419, 4200139529, 4200270601, 4200401693, 4200532769, - 4200663847, 4200794959, 4200926069, 4201057151, 4201188239, 4201319333, 4201450423, - 4201581499, 4201712587, 4201843693, 4201974769, 4202105861, 4202236981, 4202368067, - 4202499143, 4202630251, 4202761361, 4202892451, 4203023527, 4203154607, 4203285731, - 4203416837, 4203547927, 4203679001, 4203810077, 4203941167, 4204072253, 4204203331, - 4204334429, 4204465523, 4204596611, 4204727699, 4204858811, 4204989917, 4205120989, - 4205252069, 4205383153, 4205514233, 4205645341, 4205776423, 4205907509, 4206038597, - 4206169687, 4206300779, 4206431909, 4206562991, 4206694067, 4206825157, 4206956239, - 4207087319, 4207218439, 4207349563, 4207480679, 4207611761, 4207742873, 4207873973, - 4208005063, 4208136193, 4208267279, 4208398361, 4208529433, 4208660509, 4208791583, - 4208922659, 4209053731, 4209184813, 4209315899, 4209446971, 4209578129, 4209709241, - 4209840367, 4209971501, 4210102583, 4210233701, 4210364777, 4210495901, 4210626983, - 4210758061, 4210889141, 4211020243, 4211151331, 4211282431, 4211413513, 4211544593, - 4211675669, 4211806751, 4211937823, 4212068899, 4212199987, 4212331061, 4212462151, - 4212593233, 4212724349, 4212855443, 4212986539, 4213117663, 4213248757, 4213379831, - 4213510907, 4213641983, 4213773071, 4213904171, 4214035253, 4214166371, 4214297453, - 4214428531, 4214559611, 4214690699, 4214821823, 4214952899, 4215084001, 4215215077, - 4215346151, 4215477239, 4215608321, 4215739421, 4215870497, 4216001579, 4216132673, - 4216263749, 4216394849, 4216525939, 4216657019, 4216788101, 4216919183, 4217050289, - 4217181373, 4217312459, 4217443537, 4217574619, 4217705717, 4217836789, 4217967883, - 4218098959, 4218230053, 4218361129, 4218492203, 4218623293, 4218754373, 4218885467, - 4219016539, 4219147637, 4219278733, 4219409813, 4219540891, 4219671991, 4219803097, - 4219934171, 4220065253, 4220196347, 4220327429, 4220458549, 4220589623, 4220720729, - 4220851801, 4220982889, 4221114047, 4221245173, 4221376259, 4221507373, 4221638459, - 4221769561, 4221900637, 4222031711, 4222162799, 4222293871, 4222424959, 4222556053, - 4222687151, 4222818253, 4222949377, 4223080451, 4223211523, 4223342611, 4223473687, - 4223604779, 4223735861, 4223866949, 4223998073, 4224129149, 4224260221, 4224391309, - 4224522409, 4224653491, 4224784567, 4224915649, 4225046723, 4225177799, 4225308887, - 4225440007, 4225571081, 4225702153, 4225833229, 4225964321, 4226095403, 4226226479, - 4226357579, 4226488663, 4226619809, 4226750897, 4226881993, 4227013073, 4227144167, - 4227275243, 4227406319, 4227537397, 4227668503, 4227799613, 4227930709, 4228061809, - 4228192883, 4228323977, 4228455061, 4228586161, 4228717237, 4228848331, 4228979407, - 4229110493, 4229241581, 4229372657, 4229503757, 4229634853, 4229765933, 4229897011, - 4230028087, 4230159161, 4230290243, 4230421331, 4230552419, 4230683497, 4230814571, - 4230945673, 4231076753, 4231207861, 4231338967, 4231470041, 4231601113, 4231732187, - 4231863269, 4231994381, 4232125477, 4232256551, 4232387641, 4232518751, 4232649829, - 4232780939, 4232912027, 4233043141, 4233174227, 4233305299, 4233436399, 4233567493, - 4233698591, 4233829667, 4233960743, 4234091819, 4234222913, 4234354021, 4234485097, - 4234616249, 4234747339, 4234878413, 4235009497, 4235140607, 4235271749, 4235402887, - 4235533997, 4235665097, 4235796203, 4235927299, 4236058397, 4236189481, 4236320603, - 4236451759, 4236582887, 4236713969, 4236845143, 4236976223, 4237107337, 4237238419, - 4237369501, 4237500583, 4237631659, 4237762751, 4237893823, 4238024909, 4238156011, - 4238287091, 4238418203, 4238549299, 4238680399, 4238811491, 4238942567, 4239073661, - 4239204743, 4239335831, 4239466939, 4239598039, 4239729121, 4239860213, 4239991333, - 4240122413, 4240253489, 4240384609, 4240515689, 4240646777, 4240777867, 4240908943, - 4241040053, 4241171131, 4241302207, 4241433281, 4241564381, 4241695457, 4241826559, - 4241957639, 4242088733, 4242219809, 4242350911, 4242482021, 4242613099, 4242744263, - 4242875353, 4243006441, 4243137527, 4243268633, 4243399709, 4243530793, 4243661869, - 4243792961, 4243924033, 4244055121, 4244186213, 4244317289, 4244448367, 4244579441, - 4244710529, 4244841637, 4244972717, 4245103801, 4245234901, 4245365981, 4245497063, - 4245628151, 4245759233, 4245890317, 4246021411, 4246152517, 4246283623, 4246414699, - 4246545773, 4246676867, 4246807973, 4246939051, 4247070181, 4247201263, 4247332337, - 4247463421, 4247594503, 4247725577, 4247856653, 4247987741, 4248118817, 4248249893, - 4248380987, 4248512083, 4248643171, 4248774289, 4248905371, 4249036459, 4249167541, - 4249298617, 4249429739, 4249560853, 4249691959, 4249823051, 4249954127, 4250085209, - 4250216303, 4250347379, 4250478451, 4250609533, 4250740621, 4250871727, 4251002803, - 4251133919, 4251265027, 4251396101, 4251527179, 4251658267, 4251789349, 4251920423, - 4252051501, 4252182589, 4252313687, 4252444811, 4252575907, 4252706981, 4252838089, - 4252969163, 4253100251, 4253231329, 4253362411, 4253493499, 4253624593, 4253755669, - 4253886773, 4254017869, 4254149017, 4254280109, 4254411181, 4254542287, 4254673411, - 4254804487, 4254935579, 4255066657, 4255197743, 4255328821, 4255459919, 4255591013, - 4255722101, 4255853179, 4255984259, 4256115373, 4256246447, 4256377523, 4256508617, - 4256639689, 4256770789, 4256902007, 4257033103, 4257164207, 4257295283, 4257426361, - 4257557461, 4257688579, 4257819691, 4257950783, 4258081871, 4258212947, 4258344053, - 4258475153, 4258606243, 4258737361, 4258868437, 4258999529, 4259130653, 4259261731, - 4259392807, 4259523881, 4259654953, 4259786057, 4259917133, 4260048229, 4260179303, - 4260310387, 4260441461, 4260572543, 4260703639, 4260834731, 4260965827, 4261096927, - 4261228019, 4261359097, 4261490179, 4261621279, 4261752353, 4261883473, 4262014591, - 4262145673, 4262276747, 4262407819, 4262538913, 4262670031, 4262801111, 4262932183, - 4263063281, 4263194393, 4263325511, 4263456599, 4263587677, 4263718757, 4263849829, - 4263980927, 4264112009, 4264243091, 4264374181, 4264505257, 4264636339, 4264767439, - 4264898513, 4265029589, 4265160661, 4265291791, 4265422873, 4265553977, 4265685089, - 4265816189, 4265947261, 4266078353, 4266209443, 4266340517, 4266471631, 4266602723, - 4266733813, 4266864949, 4266996037, 4267127119, 4267258223, 4267389331, 4267520437, - 4267651519, 4267782613, 4267913687, 4268044771, 4268175881, 4268306963, 4268438087, - 4268569177, 4268700283, 4268831381, 4268962469, 4269093551, 4269224689, 4269355771, - 4269486901, 4269617977, 4269749063, 4269880169, 4270011253, 4270142339, 4270273429, - 4270404623, 4270535707, 4270666823, 4270797901, 4270928983, 4271060069, 4271191151, - 4271322343, 4271453423, 4271584511, 4271715611, 4271846713, 4271977807, 4272108881, - 4272239957, 4272371053, 4272502183, 4272633257, 4272764333, 4272895411, 4273026509, - 4273157593, 4273288681, 4273419763, 4273550843, 4273681931, 4273813067, 4273944197, - 4274075279, 4274206361, 4274337433, 4274468531, 4274599639, 4274730739, 4274861849, - 4274992949, 4275124081, 4275255161, 4275386237, 4275517327, 4275648409, 4275779483, - 4275910607, 4276041689, 4276172779, 4276303853, 4276434947, 4276566023, 4276697107, - 4276828243, 4276959317, 4277090393, 4277221469, 4277352553, 4277483641, 4277614729, - 4277745803, 4277876963, 4278008039, 4278139153, 4278270247, 4278401321, 4278532393, - 4278663497, 4278794599, 4278925741, 4279056829, 4279187903, 4279318997, 4279450121, - 4279581197, 4279712287, 4279843441, 4279974551, 4280105651, 4280236747, 4280367853, - 4280498939, 4280630033, 4280761129, 4280892271, 4281023377, 4281154453, 4281285529, - 4281416609, 4281547691, 4281678787, 4281809863, 4281940961, 4282072051, 4282203157, - 4282334239, 4282465367, 4282596443, 4282727521, 4282858607, 4282989703, 4283120813, - 4283251891, 4283382977, 4283514061, 4283645147, 4283776249, 4283907337, 4284038411, - 4284169489, 4284300569, 4284431707, 4284562781, 4284693877, 4284824969, 4284956047, - 4285087123, 4285218199, 4285349293, 4285480379, 4285611527, 4285742603, 4285873679, - 4286004761, 4286135851, 4286266927, 4286398001, 4286529077, 4286660219, 4286791307, - 4286922407, 4287053483, 4287184591, 4287315671, 4287446771, 4287577843, 4287708917, - 4287840049, 4287971141, 4288102237, 4288233311, 4288364387, 4288495459, 4288626539, - 4288757611, 4288888687, 4289019773, 4289150851, 4289281933, 4289413027, 4289544143, - 4289675233, 4289806309, 4289937389, 4290068521, 4290199597, 4290330677, 4290461759, - 4290592837, 4290723929, 4290855011, 4290986101, 4291117183, 4291248257, 4291379329, - 4291510403, 4291641509, 4291772581, 4291903663, 4292034737, 4292165879, 4292296963, - 4292428037, 4292559163, 4292690239, 4292821333, 4292952407, 4293083503, 4293214589, - 4293345677, 4293476749, 4293607841, 4293738937, 4293870011, 4294001149, 4294132229, - 4294263373, 4294394509, 4294525637, 4294656731, 4294787813, 4294918949, 4295050069, - 4295181169, 4295312243, 4295443367, 4295574457, 4295705543, 4295836631, 4295967703, - 4296098783, 4296229871, 4296360947, 4296492043, 4296623137, 4296754213, 4296885289, - 4297016369, 4297147487, 4297278571, 4297409671, 4297540763, 4297671863, 4297802941, - 4297934041, 4298065117, 4298196191, 4298327263, 4298458363, 4298589437, 4298720537, - 4298851621, 4298982719, 4299113801, 4299244891, 4299375991, 4299507067, 4299638141, - 4299769237, 4299900329, 4300031431, 4300162513, 4300293589, 4300424677, 4300555771, - 4300686847, 4300817957, 4300949033, 4301080123, 4301211221, 4301342317, 4301473453, - 4301604529, 4301735617, 4301866697, 4301997773, 4302128921, 4302259993, 4302391073, - 4302522151, 4302653231, 4302784313, 4302915433, 4303046509, 4303177597, 4303308701, - 4303439801, 4303570891, 4303701977, 4303833091, 4303964167, 4304095261, 4304226359, - 4304357437, 4304488541, 4304619637, 4304750731, 4304881811, 4305012919, 4305144007, - 4305275099, 4305406199, 4305537277, 4305668383, 4305799471, 4305930571, 4306061671, - 4306192757, 4306323859, 4306454939, 4306586021, 4306717109, 4306848229, 4306979309, - 4307110397, 4307241469, 4307372551, 4307503631, 4307634703, 4307765801, 4307896889, - 4308027961, 4308159059, 4308290159, 4308421267, 4308552341, 4308683429, 4308814501, - 4308945577, 4309076669, 4309207741, 4309338827, 4309469939, 4309601039, 4309732123, - 4309863197, 4309994281, 4310125363, 4310256469, 4310387567, 4310518643, 4310649743, - 4310780843, 4310911951, 4311043069, 4311174167, 4311305261, 4311436417, 4311567493, - 4311698639, 4311829723, 4311960799, 4312091881, 4312222961, 4312354037, 4312485109, - 4312616197, 4312747291, 4312878377, 4313009471, 4313140561, 4313271659, 4313402749, - 4313533831, 4313664907, 4313796029, 4313927113, 4314058201, 4314189283, 4314320377, - 4314451459, 4314582533, 4314713609, 4314844687, 4314975793, 4315106897, 4315237973, - 4315369087, 4315500169, 4315631249, 4315762327, 4315893497, 4316024593, 4316155667, - 4316286787, 4316417863, 4316548939, 4316680031, 4316811131, 4316942249, 4317073333, - 4317204421, 4317335501, 4317466639, 4317597727, 4317728803, 4317859891, 4317990967, - 4318122059, 4318253131, 4318384207, 4318515293, 4318646377, 4318777457, 4318908551, - 4319039651, 4319170729, 4319301841, 4319432939, 4319564027, 4319695117, 4319826193, - 4319957321, 4320088393, 4320219499, 4320350599, 4320481691, 4320612833, 4320743909, - 4320874997, 4321006091, 4321137169, 4321268251, 4321399331, 4321530419, 4321661501, - 4321792577, 4321923677, 4322054753, 4322185841, 4322316937, 4322448049, 4322579123, - 4322710219, 4322841301, 4322972387, 4323103493, 4323234581, 4323365653, 4323496769, - 4323627863, 4323758947, 4323890027, 4324021109, 4324152227, 4324283323, 4324414397, - 4324545469, 4324676549, 4324807621, 4324938767, 4325069843, 4325200937, 4325332043, - 4325463127, 4325594213, 4325725297, 4325856371, 4325987461, 4326118547, 4326249619, - 4326380701, 4326511789, 4326642883, 4326773963, 4326905119, 4327036199, 4327167289, - 4327298363, 4327429451, 4327560533, 4327691611, 4327822703, 4327953793, 4328084867, - 4328215961, 4328347087, 4328478173, 4328609249, 4328740321, 4328871401, 4329002567, - 4329133687, 4329264763, 4329395881, 4329526961, 4329658057, 4329789161, 4329920233, - 4330051321, 4330182397, 4330313473, 4330444579, 4330575671, 4330706747, 4330837859, - 4330968989, 4331100061, 4331231141, 4331362219, 4331493293, 4331624383, 4331755459, - 4331886593, 4332017687, 4332148771, 4332279901, 4332410981, 4332542057, 4332673133, - 4332804253, 4332935329, 4333066453, 4333197527, 4333328599, 4333459673, 4333590823, - 4333721921, 4333853011, 4333984103, 4334115217, 4334246291, 4334377429, 4334508509, - 4334639627, 4334770709, 4334901787, 4335032873, 4335163961, 4335295061, 4335426133, - 4335557221, 4335688309, 4335819403, 4335950539, 4336081619, 4336212707, 4336343807, - 4336474889, 4336605983, 4336737059, 4336868203, 4336999283, 4337130373, 4337261449, - 4337392567, 4337523719, 4337654791, 4337785873, 4337916953, 4338048031, 4338179143, - 4338310237, 4338441337, 4338572411, 4338703547, 4338834629, 4338965711, 4339096793, - 4339227869, 4339358981, 4339490053, 4339621141, 4339752239, 4339883351, 4340014433, - 4340145521, 4340276593, 4340407667, 4340538767, 4340669849, 4340800943, 4340932051, - 4341063131, 4341194219, 4341325297, 4341456391, 4341587491, 4341718571, 4341849667, - 4341980767, 4342111841, 4342242917, 4342373989, 4342505071, 4342636153, 4342767229, - 4342898311, 4343029409, 4343160487, 4343291599, 4343422687, 4343553761, 4343684833, - 4343815909, 4343947019, 4344078107, 4344209197, 4344340307, 4344471421, 4344602527, - 4344733637, 4344864739, 4344995819, 4345126913, 4345257989, 4345389067, 4345520149, - 4345651223, 4345782323, 4345913399, 4346044481, 4346175557, 4346306659, 4346437793, - 4346568893, 4346699989, 4346831107, 4346962189, 4347093271, 4347224347, 4347355429, - 4347486503, 4347617579, 4347748697, 4347879779, 4348010851, 4348141951, 4348273043, - 4348404209, 4348535287, 4348666367, 4348797449, 4348928561, 4349059633, 4349190709, - 4349321783, 4349452859, 4349583941, 4349715043, 4349846129, 4349977201, 4350108293, - 4350239371, 4350370457, 4350501559, 4350632653, 4350763741, 4350894817, 4351025971, - 4351157047, 4351288141, 4351419217, 4351550303, 4351681381, 4351812467, 4351943581, - 4352074663, 4352205743, 4352336881, 4352467963, 4352599039, 4352730127, 4352861269, - 4352992361, 4353123443, 4353254519, 4353385591, 4353516667, 4353647743, 4353778867, - 4353909943, 4354041019, 4354172111, 4354303189, 4354434299, 4354565417, 4354696517, - 4354827643, 4354958747, 4355089841, 4355220923, 4355351999, 4355483071, 4355614187, - 4355745281, 4355876363, 4356007441, 4356138559, 4356269653, 4356400729, 4356531833, - 4356662909, 4356793997, 4356925091, 4357056167, 4357187257, 4357318333, 4357449443, - 4357580551, 4357711637, 4357842733, 4357973827, 4358104909, 4358236007, 4358367131, - 4358498237, 4358629309, 4358760391, 4358891473, 4359022553, 4359153671, 4359284837, - 4359415909, 4359547013, 4359678131, 4359809213, 4359940313, 4360071389, 4360202501, - 4360333573, 4360464659, 4360595747, 4360726849, 4360857923, 4360989001, 4361120111, - 4361251189, 4361382367, 4361513501, 4361644577, 4361775661, 4361906743, 4362037817, - 4362168901, 4362299983, 4362431063, 4362562153, 4362693259, 4362824357, 4362955447, - 4363086523, 4363217597, 4363348681, 4363479761, 4363610837, 4363741957, 4363873039, - 4364004119, 4364135201, 4364266327, 4364397409, 4364528501, 4364659589, 4364790679, - 4364921789, 4365052871, 4365183967, 4365315043, 4365446117, 4365577217, 4365708289, - 4365839389, 4365970517, 4366101601, 4366232683, 4366363777, 4366494877, 4366625951, - 4366757051, 4366888159, 4367019253, 4367150351, 4367281439, 4367412521, 4367543611, - 4367674687, 4367805769, 4367936851, 4368067939, 4368199027, 4368330103, 4368461213, - 4368592297, 4368723383, 4368854467, 4368985573, 4369116659, 4369247731, 4369378813, - 4369509901, 4369640981, 4369772063, 4369903163, 4370034283, 4370165363, 4370296459, - 4370427553, 4370558627, 4370689699, 4370820787, 4370951861, 4371083053, 4371214153, - 4371345227, 4371476323, 4371607397, 4371738509, 4371869591, 4372000669, 4372131749, - 4372262849, 4372393939, 4372525013, 4372656097, 4372787173, 4372918259, 4373049337, - 4373180411, 4373311511, 4373442611, 4373573683, 4373704799, 4373835877, 4373966957, - 4374098039, 4374229121, 4374360281, 4374491383, 4374622457, 4374753541, 4374884617, - 4375015691, 4375146781, 4375277857, 4375408963, 4375540063, 4375671163, 4375802293, - 4375933381, 4376064461, 4376195581, 4376326657, 4376457763, 4376588903, 4376720011, - 4376851109, 4376982221, 4377113311, 4377244387, 4377375461, 4377506537, 4377637613, - 4377768737, 4377899809, 4378030903, 4378161979, 4378293053, 4378424143, 4378555229, - 4378686313, 4378817411, 4378948507, 4379079581, 4379210669, 4379341753, 4379472863, - 4379603953, 4379735027, 4379866109, 4379997187, 4380128281, 4380259381, 4380390479, - 4380521591, 4380652691, 4380783767, 4380914851, 4381046027, 4381177121, 4381308209, - 4381439329, 4381570409, 4381701487, 4381832563, 4381963637, 4382094737, 4382225819, - 4382356903, 4382487983, 4382619067, 4382750173, 4382881301, 4383012377, 4383143449, - 4383274537, 4383405623, 4383536701, 4383667777, 4383798869, 4383930071, 4384061147, - 4384192231, 4384323313, 4384454413, 4384585523, 4384716599, 4384847671, 4384978747, - 4385109847, 4385240939, 4385372011, 4385503093, 4385634173, 4385765249, 4385896363, - 4386027449, 4386158533, 4386289613, 4386420691, 4386551809, 4386682903, 4386813979, - 4386945053, 4387076129, 4387207213, 4387338323, 4387469413, 4387600493, 4387731583, - 4387862657, 4387993747, 4388124833, 4388255923, 4388387023, 4388518111, 4388649193, - 4388780269, 4388911343, 4389042433, 4389173549, 4389304631, 4389435707, 4389566809, - 4389697883, 4389828983, 4389960061, 4390091143, 4390222223, 4390353301, 4390484387, - 4390615459, 4390746551, 4390877651, 4391008747, 4391139869, 4391270941, 4391402021, - 4391533093, 4391664169, 4391795341, 4391926417, 4392057497, 4392188569, 4392319643, - 4392450721, 4392581803, 4392712879, 4392843967, 4392975061, 4393106161, 4393237259, - 4393368337, 4393499413, 4393630489, 4393761569, 4393892651, 4394023747, 4394154841, - 4394285927, 4394417011, 4394548087, 4394679173, 4394810269, 4394941391, 4395072463, - 4395203581, 4395334693, 4395465793, 4395596897, 4395727979, 4395859067, 4395990167, - 4396121291, 4396252363, 4396383469, 4396514569, 4396645667, 4396776749, 4396907831, - 4397038903, 4397170049, 4397301163, 4397432293, 4397563369, 4397694463, 4397825543, - 4397956637, 4398087737, 4398218809, 4398349883, 4398480959, 4398612067, 4398743177, - 4398874261, 4399005349, 4399136431, 4399267507, 4399398581, 4399529689, 4399660801, - 4399791883, 4399922981, 4400054059, 4400185159, 4400316241, 4400447321, 4400578397, - 4400709493, 4400840581, 4400971661, 4401102733, 4401233827, 4401364901, 4401495991, - 4401627067, 4401758171, 4401889279, 4402020373, 4402151461, 4402282559, 4402413649, - 4402544767, 4402675891, 4402806983, 4402938073, 4403069149, 4403200223, 4403331323, - 4403462461, 4403593549, 4403724629, 4403855713, 4403986789, 4404117929, 4404249029, - 4404380107, 4404511207, 4404642317, 4404773411, 4404904487, 4405035589, 4405166669, - 4405297747, 4405428857, 4405559933, 4405691071, 4405822147, 4405953221, 4406084317, - 4406215423, 4406346499, 4406477627, 4406608747, 4406739829, 4406870921, 4407001997, - 4407133117, 4407264217, 4407395303, 4407526411, 4407657491, 4407788597, 4407919673, - 4408050799, 4408181891, 4408312967, 4408444081, 4408575179, 4408706273, 4408837361, - 4408968439, 4409099537, 4409230681, 4409361821, 4409492897, 4409623969, 4409755081, - 4409886161, 4410017257, 4410148331, 4410279413, 4410410497, 4410541613, 4410672691, - 4410803767, 4410934841, 4411065913, 4411197029, 4411328101, 4411459177, 4411590251, - 4411721351, 4411852441, 4411983551, 4412114657, 4412245729, 4412376851, 4412507941, - 4412639027, 4412770127, 4412901209, 4413032293, 4413163393, 4413294481, 4413425591, - 4413556663, 4413687767, 4413818863, 4413950003, 4414081079, 4414212161, 4414343237, - 4414474331, 4414605467, 4414736561, 4414867643, 4414998781, 4415129879, 4415260957, - 4415392039, 4415523113, 4415654197, 4415785277, 4415916359, 4416047437, 4416178567, - 4416309647, 4416440719, 4416571799, 4416702877, 4416833999, 4416965071, 4417096147, - 4417227253, 4417358347, 4417489469, 4417620541, 4417751621, 4417882697, 4418013773, - 4418144869, 4418275957, 4418407033, 4418538109, 4418669191, 4418800291, 4418931383, - 4419062489, 4419193577, 4419324649, 4419455743, 4419586817, 4419717899, 4419848977, - 4419980057, 4420111147, 4420242221, 4420373311, 4420504409, 4420635481, 4420766579, - 4420897667, 4421028749, 4421159833, 4421290927, 4421422009, 4421553091, 4421684177, - 4421815271, 4421946343, 4422077437, 4422208529, 4422339611, 4422470683, 4422601811, - 4422732883, 4422864001, 4422995099, 4423126193, 4423257269, 4423388351, 4423519427, - 4423650523, 4423781603, 4423912693, 4424043791, 4424174891, 4424305993, 4424437133, - 4424568227, 4424699371, 4424830483, 4424961557, 4425092681, 4425223757, 4425354839, - 4425485923, 4425617011, 4425748097, 4425879223, 4426010297, 4426141373, 4426272449, - 4426403537, 4426534691, 4426665781, 4426796863, 4426927963, 4427059069, 4427190143, - 4427321243, 4427452319, 4427583403, 4427714527, 4427845601, 4427976677, 4428107753, - 4428238879, 4428369961, 4428501059, 4428632183, 4428763259, 4428894373, 4429025477, - 4429156549, 4429287631, 4429418717, 4429549799, 4429680901, 4429812001, 4429943143, - 4430074223, 4430205331, 4430336447, 4430467577, 4430598659, 4430729747, 4430860831, - 4430991923, 4431123017, 4431254101, 4431385213, 4431516311, 4431647411, 4431778487, - 4431909577, 4432040651, 4432171741, 4432302817, 4432433903, 4432565017, 4432696123, - 4432827199, 4432958287, 4433089363, 4433220443, 4433351599, 4433482687, 4433613781, - 4433744933, 4433876009, 4434007087, 4434138179, 4434269251, 4434400337, 4434531427, - 4434662503, 4434793589, 4434924667, 4435055767, 4435186871, 4435317961, 4435449043, - 4435580117, 4435711199, 4435842287, 4435973359, 4436104441, 4436235523, 4436366621, - 4436497711, 4436628799, 4436759879, 4436890957, 4437022081, 4437153157, 4437284279, - 4437415357, 4437546467, 4437677551, 4437808649, 4437939721, 4438070803, 4438201891, - 4438332971, 4438464047, 4438595123, 4438726199, 4438857287, 4438988479, 4439119571, - 4439250659, 4439381747, 4439512823, 4439643899, 4439774971, 4439906071, 4440037159, - 4440168241, 4440299323, 4440430399, 4440561523, 4440692611, 4440823711, 4440954803, - 4441085879, 4441216951, 4441348099, 4441479173, 4441610269, 4441741399, 4441872481, - 4442003557, 4442134637, 4442265757, 4442396867, 4442527961, 4442659037, 4442790127, - 4442921213, 4443052309, 4443183413, 4443314507, 4443445579, 4443576667, 4443707761, - 4443838849, 4443969953, 4444101047, 4444232147, 4444363237, 4444494311, 4444625411, - 4444756487, 4444887581, 4445018741, 4445149837, 4445280971, 4445412061, 4445543149, - 4445674223, 4445805349, 4445936423, 4446067537, 4446198611, 4446329687, 4446460787, - 4446591871, 4446722947, 4446854023, 4446985097, 4447116187, 4447247261, 4447378339, - 4447509413, 4447640507, 4447771583, 4447902713, 4448033797, 4448164873, 4448295947, - 4448427019, 4448558117, 4448689199, 4448820307, 4448951389, 4449082481, 4449213619, - 4449344707, 4449475781, 4449606853, 4449737959, 4449869033, 4450000109, 4450131197, - 4450262287, 4450393361, 4450524523, 4450655603, 4450786723, 4450917817, 4451048893, - 4451179969, 4451311061, 4451442137, 4451573219, 4451704297, 4451835371, 4451966473, - 4452097567, 4452228653, 4452359759, 4452490877, 4452621949, 4452753031, 4452884123, - 4453015201, 4453146283, 4453277357, 4453408457, 4453539533, 4453670609, 4453801691, - 4453932767, 4454063879, 4454194951, 4454326031, 4454457149, 4454588263, 4454719349, - 4454850467, 4454981543, 4455112661, 4455243733, 4455374831, 4455505981, 4455637093, - 4455768169, 4455899243, 4456030333, 4456161439, 4456292513, 4456423603, 4456554691, - 4456685777, 4456816853, 4456947931, 4457079007, 4457210113, 4457341219, 4457472319, - 4457603401, 4457734483, 4457865571, 4457996651, 4458127741, 4458258839, 4458389921, - 4458521009, 4458652087, 4458783193, 4458914269, 4459045369, 4459176473, 4459307609, - 4459438769, 4459569847, 4459700929, 4459832009, 4459963093, 4460094167, 4460225279, - 4460356363, 4460487439, 4460618521, 4460749613, 4460880689, 4461011761, 4461142837, - 4461273923, 4461405019, 4461536111, 4461667207, 4461798307, 4461929383, 4462060457, - 4462191551, 4462322647, 4462453739, 4462584851, 4462715969, 4462847069, 4462978183, - 4463109271, 4463240351, 4463371459, 4463502551, 4463633641, 4463764717, 4463895859, - 4464026951, 4464158057, 4464289169, 4464420241, 4464551389, 4464682463, 4464813623, - 4464944741, 4465075831, 4465206997, 4465338103, 4465469189, 4465600291, 4465731379, - 4465862503, 4465993603, 4466124679, 4466255771, 4466386843, 4466517917, 4466648999, - 4466780077, 4466911159, 4467042233, 4467173341, 4467304433, 4467435527, 4467566603, - 4467697691, 4467828787, 4467959861, 4468090961, 4468222049, 4468353133, 4468484233, - 4468615313, 4468746389, 4468877473, 4469008549, 4469139671, 4469270759, 4469401873, - 4469532979, 4469664053, 4469795173, 4469926267, 4470057373, 4470188473, 4470319573, - 4470450653, 4470581729, 4470712823, 4470843907, 4470975043, 4471106141, 4471237217, - 4471368289, 4471499407, 4471630483, 4471761599, 4471892671, 4472023753, 4472154839, - 4472285927, 4472417003, 4472548079, 4472679191, 4472810269, 4472941367, 4473072479, - 4473203561, 4473334633, 4473465709, 4473596783, 4473727883, 4473858967, 4473990041, - 4474121137, 4474252229, 4474383301, 4474514381, 4474645457, 4474776529, 4474907609, - 4475038693, 4475169767, 4475300861, 4475431943, 4475563019, 4475694109, 4475825191, - 4475956279, 4476087353, 4476218441, 4476349523, 4476480599, 4476611687, 4476742763, - 4476873839, 4477004951, 4477136023, 4477267133, 4477398217, 4477529321, 4477660417, - 4477791491, 4477922573, 4478053663, 4478184749, 4478315843, 4478446957, 4478578033, - 4478709113, 4478840221, 4478971297, 4479102373, 4479233453, 4479364531, 4479495611, - 4479626707, 4479757787, 4479888877, 4480020031, 4480151119, 4480282211, 4480413299, - 4480544381, 4480675457, 4480806601, 4480937677, 4481068769, 4481199841, 4481330921, - 4481462009, 4481593111, 4481724187, 4481855267, 4481986339, 4482117421, 4482248501, - 4482379591, 4482510667, 4482641749, 4482772873, 4482903949, 4483035071, 4483166189, - 4483297267, 4483428353, 4483559429, 4483690511, 4483821611, 4483952713, 4484083787, - 4484214877, 4484345959, 4484477069, 4484608151, 4484739227, 4484870311, 4485001399, - 4485132481, 4485263579, 4485394673, 4485525763, 4485656849, 4485787921, 4485919001, - 4486050077, 4486181179, 4486312297, 4486443371, 4486574473, 4486705577, 4486836667, - 4486967747, 4487098823, 4487229907, 4487360993, 4487492071, 4487623169, 4487754241, - 4487885317, 4488016397, 4488147493, 4488278567, 4488409697, 4488540769, 4488671861, - 4488802949, 4488934061, 4489065167, 4489196249, 4489327321, 4489458397, 4489589471, - 4489720549, 4489851629, 4489982711, 4490113861, 4490244991, 4490376083, 4490507191, - 4490638279, 4490769359, 4490900503, 4491031591, 4491162667, 4491293773, 4491424849, - 4491555973, 4491687047, 4491818131, 4491949309, 4492080401, 4492211483, 4492342597, - 4492473697, 4492604771, 4492735859, 4492866949, 4492998049, 4493129167, 4493260273, - 4493391373, 4493522521, 4493653603, 4493784679, 4493915761, 4494046841, 4494177917, - 4494308993, 4494440081, 4494571157, 4494702239, 4494833311, 4494964423, 4495095529, - 4495226611, 4495357721, 4495488797, 4495619881, 4495750957, 4495882037, 4496013121, - 4496144201, 4496275279, 4496406359, 4496537449, 4496668523, 4496799607, 4496930693, - 4497061817, 4497192899, 4497323981, 4497455063, 4497586141, 4497717223, 4497848309, - 4497979411, 4498110493, 4498241641, 4498372741, 4498503827, 4498634951, 4498766023, - 4498897127, 4499028199, 4499159279, 4499290373, 4499421461, 4499552539, 4499683663, - 4499814757, 4499945831, 4500076927, 4500208001, 4500339073, 4500470147, 4500601249, - 4500732347, 4500863429, 4500994517, 4501125611, 4501256701, 4501387783, 4501518869, - 4501649941, 4501781021, 4501912097, 4502043187, 4502174267, 4502305363, 4502436467, - 4502567551, 4502698631, 4502829707, 4502960789, 4503091883, 4503223001, 4503354139, - 4503485219, 4503616291, 4503747371, 4503878443, 4504009547, 4504140637, 4504271731, - 4504402813, 4504533893, 4504664971, 4504796063, 4504927187, 4505058281, 4505189357, - 4505320441, 4505451553, 4505582647, 4505713781, 4505844859, 4505975933, 4506107033, - 4506238147, 4506369223, 4506500303, 4506631403, 4506762503, 4506893627, 4507024699, - 4507155781, 4507286869, 4507417979, 4507549051, 4507680193, 4507811281, 4507942357, - 4508073433, 4508204507, 4508335603, 4508466719, 4508597813, 4508728897, 4508859973, - 4508991103, 4509122221, 4509253313, 4509384389, 4509515473, 4509646549, 4509777653, - 4509908749, 4510039829, 4510170937, 4510302019, 4510433093, 4510564243, 4510695367, - 4510826459, 4510957543, 4511088643, 4511219731, 4511350813, 4511481899, 4511612977, - 4511744057, 4511875133, 4512006269, 4512137363, 4512268459, 4512399553, 4512530651, - 4512661729, 4512792811, 4512923903, 4513054999, 4513186087, 4513317167, 4513448243, - 4513579321, 4513710403, 4513841483, 4513972591, 4514103677, 4514234761, 4514365841, - 4514496941, 4514628031, 4514759107, 4514890187, 4515021263, 4515152359, 4515283447, - 4515414539, 4515545611, 4515676699, 4515807827, 4515938927, 4516070011, 4516201091, - 4516332169, 4516463243, 4516594343, 4516725431, 4516856543, 4516987627, 4517118713, - 4517249903, 4517381059, 4517512171, 4517643259, 4517774353, 4517905429, 4518036521, - 4518167593, 4518298693, 4518429911, 4518561001, 4518692093, 4518823189, 4518954269, - 4519085359, 4519216477, 4519347563, 4519478657, 4519609751, 4519740913, 4519872001, - 4520003077, 4520134169, 4520265257, 4520396351, 4520527523, 4520658629, 4520789717, - 4520920841, 4521051943, 4521183053, 4521314129, 4521445207, 4521576287, 4521707369, - 4521838499, 4521969601, 4522100677, 4522231771, 4522362857, 4522493939, 4522625011, - 4522756111, 4522887199, 4523018341, 4523149441, 4523280521, 4523411597, 4523542679, - 4523673751, 4523804827, 4523935919, 4524067003, 4524198079, 4524329189, 4524460279, - 4524591377, 4524722467, 4524853559, 4524984679, 4525115831, 4525246907, 4525378001, - 4525509083, 4525640173, 4525771267, 4525902341, 4526033417, 4526164493, 4526295589, - 4526426683, 4526557781, 4526688869, 4526819951, 4526951047, 4527082129, 4527213209, - 4527344281, 4527475357, 4527606431, 4527737531, 4527868607, 4527999701, 4528130801, - 4528261939, 4528393021, 4528524101, 4528655179, 4528786253, 4528917331, 4529048413, - 4529179493, 4529310571, 4529441671, 4529572753, 4529703877, 4529834989, 4529966071, - 4530097157, 4530228253, 4530359377, 4530490469, 4530621553, 4530752627, 4530883703, - 4531014809, 4531145893, 4531276993, 4531408081, 4531539161, 4531670233, 4531801349, - 4531932467, 4532063567, 4532194651, 4532325727, 4532456861, 4532587951, 4532719049, - 4532850139, 4532981227, 4533112301, 4533243419, 4533374501, 4533505633, 4533636739, - 4533767827, 4533898903, 4534030001, 4534161089, 4534292177, 4534423259, 4534554331, - 4534685423, 4534816499, 4534947601, 4535078689, 4535209771, 4535340853, 4535471929, - 4535603027, 4535734103, 4535865179, 4535996251, 4536127333, 4536258407, 4536389489, - 4536520577, 4536651667, 4536782759, 4536913853, 4537044943, 4537176031, 4537307113, - 4537438187, 4537569307, 4537700459, 4537831531, 4537962613, 4538093699, 4538224771, - 4538355847, 4538486941, 4538618033, 4538749121, 4538880217, 4539011311, 4539142411, - 4539273503, 4539404581, 4539535673, 4539666749, 4539797849, 4539928957, 4540060039, - 4540191121, 4540322197, 4540453273, 4540584361, 4540715441, 4540846573, 4540977647, - 4541108729, 4541239811, 4541370917, 4541502011, 4541633101, 4541764177, 4541895269, - 4542026369, 4542157441, 4542288529, 4542419603, 4542550681, 4542681761, 4542812843, - 4542943921, 4543075013, 4543206097, 4543337221, 4543468343, 4543599421, 4543730537, - 4543861633, 4543992737, 4544123827, 4544254907, 4544385997, 4544517097, 4544648183, - 4544779279, 4544910353, 4545041437, 4545172543, 4545303619, 4545434693, 4545565793, - 4545696871, 4545827959, 4545959101, 4546090177, 4546221259, 4546352333, 4546483421, - 4546614497, 4546745573, 4546876669, 4547007749, 4547138821, 4547269907, 4547400983, - 4547532061, 4547663147, 4547794259, 4547925359, 4548056441, 4548187543, 4548318623, - 4548449699, 4548580781, 4548711877, 4548842959, 4548974041, 4549105177, 4549236269, - 4549367359, 4549498441, 4549629521, 4549760597, 4549891681, 4550022761, 4550153837, - 4550284913, 4550416007, 4550547149, 4550678281, 4550809363, 4550940437, 4551071527, - 4551202657, 4551333751, 4551464843, 4551595921, 4551727007, 4551858107, 4551989203, - 4552120319, 4552251397, 4552382491, 4552513591, 4552644731, 4552775803, 4552906877, - 4553037949, 4553169043, 4553300117, 4553431189, 4553562263, 4553693351, 4553824427, - 4553955547, 4554086623, 4554217699, 4554348779, 4554479851, 4554610927, 4554742009, - 4554873091, 4555004213, 4555135313, 4555266421, 4555397519, 4555528609, 4555659683, - 4555790777, 4555921849, 4556052929, 4556184019, 4556315147, 4556446241, 4556577331, - 4556708417, 4556839517, 4556970601, 4557101693, 4557232781, 4557363857, 4557494941, - 4557626057, 4557757133, 4557888217, 4558019299, 4558150391, 4558281487, 4558412581, - 4558543663, 4558674739, 4558805819, 4558936901, 4559067983, 4559199061, 4559330161, - 4559461237, 4559592377, 4559723449, 4559854543, 4559985631, 4560116731, 4560247823, - 4560378913, 4560510011, 4560641083, 4560772169, 4560903247, 4561034327, 4561165423, - 4561296527, 4561427609, 4561558681, 4561689757, 4561820833, 4561951931, 4562083007, - 4562214103, 4562345209, 4562476283, 4562607367, 4562738561, 4562869667, 4563000791, - 4563131863, 4563262943, 4563394021, 4563525137, 4563656221, 4563787337, 4563918431, - 4564049537, 4564180609, 4564311683, 4564442777, 4564573861, 4564704941, 4564836049, - 4564967123, 4565098199, 4565229287, 4565360399, 4565491477, 4565622559, 4565753641, - 4565884717, 4566015791, 4566146881, 4566277981, 4566409073, 4566540191, 4566671273, - 4566802349, 4566933467, 4567064597, 4567195687, 4567326767, 4567457857, 4567588931, - 4567720037, 4567851121, 4567982197, 4568113271, 4568244353, 4568375453, 4568506529, - 4568637611, 4568768753, 4568899831, 4569030911, 4569162023, 4569293129, 4569424201, - 4569555299, 4569686413, 4569817507, 4569948587, 4570079681, 4570210763, 4570341859, - 4570472947, 4570604021, 4570735111, 4570866221, 4570997357, 4571128483, 4571259569, - 4571390641, 4571521727, 4571652851, 4571783947, 4571915021, 4572046117, 4572177191, - 4572308341, 4572439439, 4572570517, 4572701663, 4572832751, 4572963877, 4573094987, - 4573226087, 4573357169, 4573488259, 4573619339, 4573750429, 4573881511, 4574012609, - 4574143703, 4574274797, 4574405873, 4574536969, 4574668067, 4574799167, 4574930263, - 4575061417, 4575192509, 4575323581, 4575454711, 4575585793, 4575716879, 4575848023, - 4575979123, 4576110197, 4576241279, 4576372351, 4576503493, 4576634567, 4576765651, - 4576896767, 4577027839, 4577158921, 4577290009, 4577421083, 4577552197, 4577683273, - 4577814347, 4577945447, 4578076553, 4578207653, 4578338767, 4578469867, 4578601031, - 4578732127, 4578863227, 4578994313, 4579125443, 4579256531, 4579387633, 4579518721, - 4579649843, 4579780921, 4579911997, 4580043077, 4580174149, 4580305253, 4580436347, - 4580567423, 4580698517, 4580829593, 4580960677, 4581091759, 4581222847, 4581353971, - 4581485053, 4581616141, 4581747217, 4581878297, 4582009387, 4582140467, 4582271557, - 4582402633, 4582533733, 4582664809, 4582795939, 4582927021, 4583058097, 4583189251, - 4583320337, 4583451409, 4583582513, 4583713597, 4583844721, 4583975821, 4584106909, - 4584237997, 4584369137, 4584500209, 4584631283, 4584762359, 4584893449, 4585024529, - 4585155613, 4585286707, 4585417787, 4585548859, 4585679953, 4585811033, 4585942111, - 4586073229, 4586204303, 4586335421, 4586466509, 4586597611, 4586728693, 4586859773, - 4586990861, 4587121937, 4587253019, 4587384103, 4587515197, 4587646279, 4587777391, - 4587908477, 4588039549, 4588170623, 4588301701, 4588432811, 4588563883, 4588694977, - 4588826089, 4588957201, 4589088277, 4589219351, 4589350511, 4589481593, 4589612681, - 4589743849, 4589874923, 4590006019, 4590137107, 4590268187, 4590399269, 4590530387, - 4590661469, 4590792551, 4590923633, 4591054723, 4591185799, 4591316903, 4591447999, - 4591579073, 4591710169, 4591841251, 4591972327, 4592103421, 4592234501, 4592365573, - 4592496653, 4592627759, 4592758861, 4592889943, 4593021077, 4593152149, 4593283223, - 4593414299, 4593545377, 4593676501, 4593807607, 4593938689, 4594069763, 4594200841, - 4594331953, 4594463053, 4594594127, 4594725257, 4594856401, 4594987483, 4595118557, - 4595249657, 4595380729, 4595511821, 4595642897, 4595773969, 4595905073, 4596036199, - 4596167299, 4596298393, 4596429473, 4596560587, 4596691681, 4596822823, 4596953909, - 4597084997, 4597216093, 4597347197, 4597478339, 4597609469, 4597740577, 4597871657, - 4598002729, 4598133811, 4598264939, 4598396027, 4598527099, 4598658173, 4598789263, - 4598920351, 4599051451, 4599182527, 4599313619, 4599444721, 4599575809, 4599706883, - 4599837959, 4599969041, 4600100123, 4600231231, 4600362359, 4600493477, 4600624571, - 4600755647, 4600886723, 4601017807, 4601148941, 4601280017, 4601411093, 4601542177, - 4601673269, 4601804353, 4601935447, 4602066533, 4602197617, 4602328693, 4602459769, - 4602590879, 4602721969, 4602853043, 4602984131, 4603115221, 4603246301, 4603377421, - 4603508519, 4603639591, 4603770671, 4603901759, 4604032831, 4604163929, 4604295001, - 4604426087, 4604557159, 4604688259, 4604819339, 4604950423, 4605081497, 4605212593, - 4605343679, 4605474763, 4605605863, 4605736939, 4605868031, 4605999109, 4606130203, - 4606261279, 4606392359, 4606523477, 4606654571, 4606785649, 4606916723, 4607047799, - 4607178893, 4607309969, 4607441057, 4607572133, 4607703257, 4607834339, 4607965423, - 4608096509, 4608227599, 4608358687, 4608489779, 4608620857, 4608751943, 4608883043, - 4609014121, 4609145197, 4609276277, 4609407373, 4609538471, 4609669543, 4609800619, - 4609931707, 4610062811, 4610193883, 4610324981, 4610456107, 4610587181, 4610718271, - 4610849417, 4610980501, 4611111581, 4611242659, 4611373759, 4611504893, 4611635969, - 4611767047, 4611898121, 4612029203, 4612160279, 4612291379, 4612422499, 4612553573, - 4612684673, 4612815749, 4612946827, 4613077901, 4613208979, 4613340059, 4613471143, - 4613602243, 4613733391, 4613864473, 4613995591, 4614126677, 4614257771, 4614388861, - 4614519937, 4614651017, 4614782099, 4614913181, 4615044289, 4615175399, 4615306519, - 4615437601, 4615568693, 4615699783, 4615830883, 4615961983, 4616093071, 4616224159, - 4616355371, 4616486509, 4616617591, 4616748673, 4616879753, 4617010891, 4617141967, - 4617273043, 4617404117, 4617535201, 4617666337, 4617797419, 4617928507, 4618059587, - 4618190671, 4618321769, 4618452841, 4618583927, 4618715021, 4618846121, 4618977227, - 4619108309, 4619239403, 4619370479, 4619501561, 4619632651, 4619763727, 4619894827, - 4620025951, 4620157027, 4620288103, 4620419189, 4620550261, 4620681341, 4620812431, - 4620943541, 4621074637, 4621205737, 4621336813, 4621467919, 4621598999, 4621730159, - 4621861261, 4621992343, 4622123417, 4622254493, 4622385583, 4622516659, 4622647747, - 4622778821, 4622909899, 4623040991, 4623172069, 4623303151, 4623434239, 4623565319, - 4623696391, 4623827473, 4623958589, 4624089683, 4624220767, 4624351873, 4624482949, - 4624614047, 4624745123, 4624876229, 4625007307, 4625138381, 4625269457, 4625400607, - 4625531681, 4625662759, 4625793841, 4625924921, 4626056041, 4626187141, 4626318217, - 4626449297, 4626580369, 4626711491, 4626842567, 4626973679, 4627104791, 4627235897, - 4627367009, 4627498147, 4627629229, 4627760329, 4627891403, 4628022479, 4628153557, - 4628284673, 4628415817, 4628546891, 4628677981, 4628809067, 4628940143, 4629071231, - 4629202321, 4629333407, 4629464501, 4629595573, 4629726697, 4629857797, 4629988873, - 4630119953, 4630251071, 4630382147, 4630513243, 4630644377, 4630775453, 4630906541, - 4631037661, 4631168741, 4631299831, 4631430913, 4631561989, 4631693111, 4631824189, - 4631955277, 4632086359, 4632217481, 4632348563, 4632479653, 4632610727, 4632741809, - 4632872891, 4633003981, 4633135057, 4633266137, 4633397221, 4633528297, 4633659377, - 4633790479, 4633921559, 4634052659, 4634183747, 4634314843, 4634445917, 4634576993, - 4634708069, 4634839163, 4634970251, 4635101327, 4635232417, 4635363503, 4635494593, - 4635625711, 4635756803, 4635887891, 4636019009, 4636150091, 4636281187, 4636412269, - 4636543349, 4636674437, 4636805513, 4636936589, 4637067689, 4637198771, 4637329877, - 4637460953, 4637592031, 4637723117, 4637854223, 4637985301, 4638116377, 4638247451, - 4638378527, 4638509677, 4638640771, 4638771847, 4638902921, 4639033999, 4639165073, - 4639296169, 4639427257, 4639558337, 4639689409, 4639820483, 4639951571, 4640082649, - 4640213723, 4640344801, 4640475911, 4640606989, 4640738077, 4640869169, 4641000311, - 4641131431, 4641262567, 4641393649, 4641524747, 4641655819, 4641786899, 4641918007, - 4642049081, 4642180189, 4642311269, 4642442353, 4642573433, 4642704541, 4642835623, - 4642966733, 4643097829, 4643228917, 4643359993, 4643491081, 4643622163, 4643753243, - 4643884331, 4644015413, 4644146527, 4644277601, 4644408677, 4644539749, 4644670837, - 4644801911, 4644932993, 4645064069, 4645195153, 4645326233, 4645457309, 4645588397, - 4645719479, 4645850579, 4645981651, 4646112787, 4646243863, 4646374939, 4646506019, - 4646637091, 4646768171, 4646899247, 4647030337, 4647161419, 4647292519, 4647423607, - 4647554699, 4647685781, 4647816857, 4647947929, 4648079011, 4648210121, 4648341289, - 4648472377, 4648603489, 4648734577, 4648865653, 4648996769, 4649127881, 4649258981, - 4649390059, 4649521133, 4649652233, 4649783351, 4649914447, 4650045523, 4650176599, - 4650307679, 4650438787, 4650569879, 4650700969, 4650832057, 4650963137, 4651094219, - 4651225331, 4651356407, 4651487497, 4651618613, 4651749769, 4651880887, 4652011963, - 4652143079, 4652274157, 4652405231, 4652536367, 4652667473, 4652798551, 4652929661, - 4653060733, 4653191819, 4653322907, 4653454037, 4653585121, 4653716203, 4653847277, - 4653978353, 4654109459, 4654240531, 4654371637, 4654502717, 4654633799, 4654764871, - 4654895951, 4655027051, 4655158129, 4655289203, 4655420279, 4655551357, 4655682463, - 4655813549, 4655944627, 4656075703, 4656206801, 4656337891, 4656468967, 4656600041, - 4656731117, 4656862211, 4656993283, 4657124357, 4657255429, 4657386511, 4657517629, - 4657648703, 4657779787, 4657910861, 4658041937, 4658173033, 4658304121, 4658435209, - 4658566291, 4658697377, 4658828477, 4658959549, 4659090641, 4659221713, 4659352799, - 4659483887, 4659614959, 4659746089, 4659877193, 4660008271, 4660139353, 4660270481, - 4660401601, 4660532741, 4660663829, 4660794907, 4660925987, 4661057077, 4661188157, - 4661319241, 4661450341, 4661581439, 4661712521, 4661843611, 4661974777, 4662105853, - 4662236933, 4662368021, 4662499103, 4662630187, 4662761261, 4662892387, 4663023467, - 4663154611, 4663285687, 4663416763, 4663547879, 4663678961, 4663810043, 4663941151, - 4664072293, 4664203393, 4664334541, 4664465621, 4664596723, 4664727811, 4664858893, - 4664989999, 4665121093, 4665252187, 4665383297, 4665514393, 4665645521, 4665776593, - 4665907699, 4666038869, 4666169951, 4666301039, 4666432171, 4666563271, 4666694353, - 4666825447, 4666956523, 4667087597, 4667218669, 4667349749, 4667480821, 4667611933, - 4667743013, 4667874089, 4668005171, 4668136247, 4668267343, 4668398419, 4668529499, - 4668660583, 4668791711, 4668922787, 4669053869, 4669184951, 4669316027, 4669447129, - 4669578217, 4669709321, 4669840423, 4669971499, 4670102573, 4670233681, 4670364767, - 4670495857, 4670626967, 4670758063, 4670889163, 4671020239, 4671151339, 4671282431, - 4671413507, 4671544589, 4671675677, 4671806801, 4671937889, 4672069001, 4672200167, - 4672331291, 4672462363, 4672593439, 4672724521, 4672855601, 4672986677, 4673117873, - 4673248961, 4673380057, 4673511133, 4673642209, 4673773319, 4673904397, 4674035503, - 4674166579, 4674297689, 4674428761, 4674559861, 4674690941, 4674822023, 4674953117, - 4675084207, 4675215287, 4675346371, 4675477453, 4675608529, 4675739611, 4675870699, - 4676001773, 4676132887, 4676263961, 4676395067, 4676526157, 4676657233, 4676788313, - 4676919409, 4677050491, 4677181589, 4677312667, 4677443741, 4677574813, 4677705917, - 4677837019, 4677968101, 4678099177, 4678230269, 4678361371, 4678492447, 4678623583, - 4678754657, 4678885751, 4679016829, 4679147903, 4679278991, 4679410063, 4679541151, - 4679672269, 4679803351, 4679934439, 4680065539, 4680196643, 4680327737, 4680458837, - 4680589919, 4680721009, 4680852083, 4680983171, 4681114247, 4681245323, 4681376407, - 4681507507, 4681638583, 4681769707, 4681900781, 4682031929, 4682163007, 4682294107, - 4682425193, 4682556317, 4682687393, 4682818499, 4682949599, 4683080671, 4683211747, - 4683342841, 4683473933, 4683605011, 4683736093, 4683867197, 4683998269, 4684129361, - 4684260433, 4684391507, 4684522589, 4684653667, 4684784743, 4684915819, 4685046901, - 4685177999, 4685309117, 4685440237, 4685571313, 4685702429, 4685833501, 4685964607, - 4686095681, 4686226771, 4686357889, 4686488971, 4686620053, 4686751133, 4686882227, - 4687013311, 4687144391, 4687275497, 4687406569, 4687537663, 4687668749, 4687799839, - 4687930913, 4688061991, 4688193101, 4688324197, 4688455271, 4688586359, 4688717443, - 4688848559, 4688979653, 4689110749, 4689241847, 4689372937, 4689504023, 4689635101, - 4689766231, 4689897307, 4690028401, 4690159493, 4690290587, 4690421677, 4690552751, - 4690683827, 4690814899, 4690945993, 4691077073, 4691208173, 4691339281, 4691470369, - 4691601457, 4691732543, 4691863663, 4691994793, 4692125891, 4692256963, 4692388037, - 4692519109, 4692650201, 4692781273, 4692912361, 4693043461, 4693174559, 4693305637, - 4693436711, 4693567787, 4693698881, 4693829971, 4693961057, 4694092129, 4694223223, - 4694354309, 4694485409, 4694616517, 4694747623, 4694878757, 4695009857, 4695140941, - 4695272033, 4695403109, 4695534187, 4695665267, 4695796351, 4695927589, 4696058687, - 4696189789, 4696320869, 4696451957, 4696583033, 4696714109, 4696845253, 4696976327, - 4697107399, 4697238589, 4697369681, 4697500757, 4697631847, 4697762929, 4697894011, - 4698025093, 4698156181, 4698287281, 4698418381, 4698549487, 4698680573, 4698811669, - 4698942779, 4699073879, 4699204981, 4699336087, 4699467173, 4699598287, 4699729379, - 4699860467, 4699991539, 4700122613, 4700253689, 4700384761, 4700515871, 4700646943, - 4700778037, 4700909113, 4701040189, 4701171283, 4701302381, 4701433459, 4701564533, - 4701695611, 4701826687, 4701957761, 4702088843, 4702219919, 4702350997, 4702482073, - 4702613177, 4702744273, 4702875361, 4703006453, 4703137577, 4703268649, 4703399797, - 4703530891, 4703661973, 4703793077, 4703924161, 4704055253, 4704186329, 4704317419, - 4704448501, 4704579599, 4704710693, 4704841777, 4704972871, 4705103959, 4705235131, - 4705366223, 4705497299, 4705628371, 4705759447, 4705890521, 4706021597, 4706152669, - 4706283779, 4706414891, 4706545973, 4706677049, 4706808133, 4706939207, 4707070283, - 4707201361, 4707332459, 4707463559, 4707594649, 4707725723, 4707856799, 4707987877, - 4708118951, 4708250033, 4708381121, 4708512223, 4708643309, 4708774391, 4708905491, - 4709036621, 4709167693, 4709298767, 4709429843, 4709560931, 4709692007, 4709823121, - 4709954231, 4710085319, 4710216421, 4710347503, 4710478579, 4710609653, 4710740789, - 4710871883, 4711003043, 4711134157, 4711265311, 4711396433, 4711527511, 4711658599, - 4711789697, 4711920799, 4712051957, 4712183039, 4712314121, 4712445211, 4712576399, - 4712707471, 4712838547, 4712969621, 4713100697, 4713231773, 4713362861, 4713493963, - 4713625073, 4713756149, 4713887239, 4714018327, 4714149409, 4714280503, 4714411621, - 4714542709, 4714673797, 4714804877, 4714935949, 4715067043, 4715198129, 4715329231, - 4715460311, 4715591401, 4715722507, 4715853619, 4715984717, 4716115823, 4716246901, - 4716377977, 4716509059, 4716640133, 4716771221, 4716902341, 4717033427, 4717164503, - 4717295591, 4717426687, 4717557769, 4717688851, 4717819987, 4717951079, 4718082157, - 4718213243, 4718344333, 4718475451, 4718606527, 4718737643, 4718868743, 4718999843, - 4719130931, 4719262003, 4719393079, 4719524167, 4719655249, 4719786343, 4719917429, - 4720048511, 4720179587, 4720310659, 4720441753, 4720572841, 4720703917, 4720834999, - 4720966163, 4721097263, 4721228399, 4721359481, 4721490559, 4721621651, 4721752733, - 4721883809, 4722014897, 4722145973, 4722277099, 4722408209, 4722539321, 4722670411, - 4722801541, 4722932633, 4723063711, 4723194787, 4723325869, 4723456957, 4723588033, - 4723719151, 4723850227, 4723981373, 4724112451, 4724243527, 4724374607, 4724505689, - 4724636779, 4724767897, 4724898977, 4725030113, 4725161191, 4725292283, 4725423359, - 4725554443, 4725685537, 4725816611, 4725947683, 4726078769, 4726209883, 4726340963, - 4726472077, 4726603199, 4726734283, 4726865369, 4726996441, 4727127523, 4727258617, - 4727389697, 4727520781, 4727651861, 4727782967, 4727914049, 4728045137, 4728176209, - 4728307303, 4728438409, 4728569497, 4728700577, 4728831649, 4728962723, 4729093841, - 4729224937, 4729356011, 4729487089, 4729618171, 4729749281, 4729880359, 4730011459, - 4730142551, 4730273671, 4730404801, 4730535893, 4730666977, 4730798117, 4730929223, - 4731060343, 4731191417, 4731322493, 4731453569, 4731584651, 4731715763, 4731846839, - 4731977941, 4732109051, 4732240129, 4732371221, 4732502293, 4732633429, 4732764523, - 4732895599, 4733026681, 4733157823, 4733288927, 4733420009, 4733551093, 4733682179, - 4733813267, 4733944343, 4734075421, 4734206501, 4734337591, 4734468709, 4734599783, - 4734730867, 4734861961, 4734993061, 4735124143, 4735255223, 4735386319, 4735517401, - 4735648487, 4735779569, 4735910659, 4736041753, 4736172829, 4736303927, 4736435021, - 4736566117, 4736697193, 4736828267, 4736959517, 4737090599, 4737221677, 4737352751, - 4737483841, 4737614929, 4737746017, 4737877093, 4738008179, 4738139261, 4738270337, - 4738401413, 4738532507, 4738663603, 4738794691, 4738925777, 4739056871, 4739187949, - 4739319031, 4739450143, 4739581219, 4739712301, 4739843393, 4739974507, 4740105583, - 4740236659, 4740367733, 4740498811, 4740629893, 4740760991, 4740892069, 4741023149, - 4741154239, 4741285321, 4741416409, 4741547509, 4741678583, 4741809659, 4741940767, - 4742071843, 4742202923, 4742334043, 4742465137, 4742596217, 4742727299, 4742858371, - 4742989463, 4743120587, 4743251717, 4743382801, 4743513883, 4743644987, 4743776087, - 4743907163, 4744038281, 4744169357, 4744300439, 4744431521, 4744562609, 4744693687, - 4744824787, 4744955881, 4745086987, 4745218063, 4745349137, 4745480219, 4745611331, - 4745742451, 4745873537, 4746004649, 4746135727, 4746266807, 4746397907, 4746529027, - 4746660101, 4746791177, 4746922249, 4747053341, 4747184437, 4747315519, 4747446607, - 4747577687, 4747708787, 4747839869, 4747970957, 4748102039, 4748233123, 4748364277, - 4748495357, 4748626429, 4748757521, 4748888603, 4749019687, 4749150773, 4749281869, - 4749412949, 4749544021, 4749675107, 4749806183, 4749937307, 4750068383, 4750199537, - 4750330609, 4750461701, 4750592807, 4750723927, 4750855001, 4750986077, 4751117159, - 4751248231, 4751379323, 4751510411, 4751641483, 4751772569, 4751903669, 4752034747, - 4752165833, 4752296917, 4752428053, 4752559127, 4752690233, 4752821321, 4752952397, - 4753083473, 4753214549, 4753345621, 4753476703, 4753607801, 4753738879, 4753869959, - 4754001037, 4754132153, 4754263249, 4754394341, 4754525453, 4754656549, 4754787637, - 4754918711, 4755049807, 4755180893, 4755311969, 4755443053, 4755574129, 4755705203, - 4755836279, 4755967357, 4756098443, 4756229521, 4756360633, 4756491763, 4756622837, - 4756753933, 4756885027, 4757016107, 4757147207, 4757278319, 4757409409, 4757540483, - 4757671579, 4757802659, 4757933731, 4758064921, 4758195997, 4758327071, 4758458161, - 4758589261, 4758720341, 4758851437, 4758982511, 4759113587, 4759244669, 4759375771, - 4759506889, 4759637969, 4759769041, 4759900127, 4760031223, 4760162371, 4760293451, - 4760424527, 4760555627, 4760686699, 4760817779, 4760948887, 4761079979, 4761211057, - 4761342143, 4761473219, 4761604303, 4761735397, 4761866513, 4761997589, 4762128661, - 4762259741, 4762390819, 4762521923, 4762653001, 4762784077, 4762915159, 4763046251, - 4763177339, 4763308411, 4763439563, 4763570657, 4763701753, 4763832833, 4763963923, - 4764094997, 4764226099, 4764357181, 4764488257, 4764619381, 4764750457, 4764881531, - 4765012607, 4765143701, 4765274779, 4765405961, 4765537037, 4765668109, 4765799209, - 4765930283, 4766061407, 4766192479, 4766323559, 4766454683, 4766585767, 4766716841, - 4766847919, 4766979073, 4767110147, 4767241231, 4767372317, 4767503393, 4767634471, - 4767765553, 4767896629, 4768027717, 4768158797, 4768289879, 4768420957, 4768552039, - 4768683149, 4768814249, 4768945367, 4769076443, 4769207539, 4769338643, 4769469721, - 4769600809, 4769731907, 4769862983, 4769994091, 4770125179, 4770256279, 4770387367, - 4770518453, 4770649529, 4770780613, 4770911707, 4771042799, 4771173877, 4771304959, - 4771436057, 4771567159, 4771698233, 4771829329, 4771960423, 4772091551, 4772222639, - 4772353741, 4772484833, 4772615917, 4772746999, 4772878081, 4773009169, 4773140243, - 4773271343, 4773402457, 4773533549, 4773664627, 4773795703, 4773926777, 4774057903, - 4774189001, 4774320077, 4774451153, 4774582229, 4774713301, 4774844441, 4774975531, - 4775106617, 4775237689, 4775368811, 4775499901, 4775630983, 4775762083, 4775893163, - 4776024247, 4776155353, 4776286429, 4776417509, 4776548611, 4776679711, 4776810803, - 4776941879, 4777072987, 4777204079, 4777335151, 4777466227, 4777597309, 4777728427, - 4777859521, 4777990601, 4778121697, 4778252771, 4778383861, 4778514941, 4778646031, - 4778777189, 4778908327, 4779039403, 4779170489, 4779301567, 4779432727, 4779563801, - 4779694879, 4779825977, 4779957089, 4780088167, 4780219261, 4780350361, 4780481443, - 4780612519, 4780743631, 4780874717, 4781005807, 4781136911, 4781267989, 4781399071, - 4781530153, 4781661253, 4781792333, 4781923409, 4782054481, 4782185567, 4782316697, - 4782447809, 4782578897, 4782710017, 4782841103, 4782972197, 4783103321, 4783234397, - 4783365481, 4783496579, 4783627679, 4783758779, 4783889923, 4784021003, 4784152213, - 4784283299, 4784414387, 4784545459, 4784676551, 4784807627, 4784938727, 4785069811, - 4785200911, 4785331987, 4785463069, 4785594161, 4785725239, 4785856373, 4785987457, - 4786118537, 4786249621, 4786380721, 4786511801, 4786642873, 4786773967, 4786905043, - 4787036131, 4787167223, 4787298301, 4787429377, 4787560471, 4787691551, 4787822629, - 4787953739, 4788084839, 4788215911, 4788347051, 4788478127, 4788609209, 4788740287, - 4788871363, 4789002473, 4789133561, 4789264651, 4789395749, 4789526849, 4789657993, - 4789789111, 4789920193, 4790051303, 4790182417, 4790313491, 4790444573, 4790575651, - 4790706727, 4790837827, 4790968901, 4791099991, 4791231077, 4791362207, 4791493327, - 4791624401, 4791755533, 4791886643, 4792017719, 4792148797, 4792279901, 4792410991, - 4792542067, 4792673173, 4792804279, 4792935353, 4793066459, 4793197531, 4793328649, - 4793459753, 4793590843, 4793721941, 4793853017, 4793984101, 4794115189, 4794246287, - 4794377443, 4794508573, 4794639649, 4794770723, 4794901823, 4795032941, 4795164013, - 4795295119, 4795426199, 4795557287, 4795688377, 4795819453, 4795950539, 4796081627, - 4796212711, 4796343787, 4796474863, 4796605937, 4796737027, 4796868107, 4796999183, - 4797130271, 4797261349, 4797392423, 4797523519, 4797654593, 4797785669, 4797916741, - 4798047817, 4798178899, 4798309981, 4798441057, 4798572131, 4798703267, 4798834349, - 4798965461, 4799096587, 4799227663, 4799358737, 4799489831, 4799620907, 4799751991, - 4799883073, 4800014171, 4800145243, 4800276317, 4800407413, 4800538517, 4800669607, - 4800800701, 4800931783, 4801062857, 4801193933, 4801325027, 4801456133, 4801587239, - 4801718329, 4801849421, 4801980511, 4802111641, 4802242717, 4802373791, 4802504911, - 4802635991, 4802767063, 4802898151, 4803029239, 4803160339, 4803291413, 4803422501, - 4803553589, 4803684667, 4803815743, 4803946817, 4804077907, 4804208999, 4804340089, - 4804471187, 4804602263, 4804733347, 4804864423, 4804995497, 4805126591, 4805257679, - 4805388751, 4805519827, 4805650903, 4805781979, 4805913059, 4806044137, 4806175237, - 4806306311, 4806437401, 4806568477, 4806699571, 4806830659, 4806961739, 4807092827, - 4807223903, 4807355009, 4807486097, 4807617173, 4807748317, 4807879393, 4808010469, - 4808141543, 4808272619, 4808403703, 4808534777, 4808665859, 4808796943, 4808928029, - 4809059119, 4809190223, 4809321299, 4809452377, 4809583453, 4809714527, 4809845609, - 4809976747, 4810107859, 4810238971, 4810370057, 4810501147, 4810632251, 4810763323, - 4810894409, 4811025493, 4811156639, 4811287739, 4811418853, 4811549983, 4811681059, - 4811812147, 4811943223, 4812074297, 4812205439, 4812336577, 4812467659, 4812598733, - 4812729847, 4812860933, 4812992033, 4813123141, 4813254233, 4813385327, 4813516423, - 4813647533, 4813778657, 4813909757, 4814040911, 4814172019, 4814303101, 4814434223, - 4814565299, 4814696371, 4814827447, 4814958527, 4815089621, 4815220703, 4815351787, - 4815482869, 4815613961, 4815745063, 4815876139, 4816007227, 4816138321, 4816269413, - 4816400527, 4816531633, 4816662731, 4816793803, 4816924901, 4817055973, 4817187049, - 4817318131, 4817449211, 4817580337, 4817711411, 4817842501, 4817973577, 4818104701, - 4818235801, 4818366893, 4818497977, 4818629051, 4818760123, 4818891239, 4819022333, - 4819153457, 4819284529, 4819415617, 4819546727, 4819677857, 4819808933, 4819940023, - 4820071097, 4820202223, 4820333351, 4820464457, 4820595587, 4820726663, 4820857747, - 4820988827, 4821119903, 4821250999, 4821382117, 4821513223, 4821644341, 4821775421, - 4821906517, 4822037621, 4822168709, 4822299791, 4822430863, 4822561943, 4822693021, - 4822824133, 4822955209, 4823086327, 4823217403, 4823348479, 4823479553, 4823610637, - 4823741753, 4823872829, 4824003913, 4824135011, 4824266089, 4824397163, 4824528259, - 4824659339, 4824790423, 4824921539, 4825052611, 4825183717, 4825314821, 4825445929, - 4825577011, 4825708123, 4825839197, 4825970297, 4826101387, 4826232469, 4826363543, - 4826494693, 4826625779, 4826756863, 4826887937, 4827019019, 4827150091, 4827281171, - 4827412279, 4827543353, 4827674443, 4827805517, 4827936593, 4828067693, 4828198769, - 4828329859, 4828460933, 4828592033, 4828723111, 4828854193, 4828985333, 4829116417, - 4829247539, 4829378629, 4829509717, 4829640793, 4829771879, 4829903011, 4830034103, - 4830165181, 4830296257, 4830427331, 4830558407, 4830689489, 4830820597, 4830951679, - 4831082759, 4831213843, 4831344919, 4831475993, 4831607069, 4831738141, 4831869221, - 4832000317, 4832131393, 4832262467, 4832393543, 4832524633, 4832655713, 4832786789, - 4832917867, 4833048947, 4833180031, 4833311113, 4833442189, 4833573299, 4833704371, - 4833835451, 4833966523, 4834097621, 4834228699, 4834359773, 4834490867, 4834621943, - 4834753093, 4834884227, 4835015299, 4835146453, 4835277527, 4835408621, 4835539733, - 4835670809, 4835801897, 4835932987, 4836064063, 4836195151, 4836326233, 4836457349, - 4836588431, 4836719509, 4836850589, 4836981689, 4837112767, 4837243843, 4837374917, - 4837505989, 4837637093, 4837768171, 4837899247, 4838030369, 4838161451, 4838292541, - 4838423621, 4838554703, 4838685793, 4838816867, 4838947951, 4839079027, 4839210113, - 4839341189, 4839472289, 4839603371, 4839734443, 4839865519, 4839996649, 4840127737, - 4840258847, 4840389929, 4840521001, 4840652081, 4840783229, 4840914307, 4841045381, - 4841176463, 4841307551, 4841438663, 4841569753, 4841700833, 4841831927, 4841963039, - 4842094141, 4842225217, 4842356293, 4842487387, 4842618463, 4842749543, 4842880619, - 4843011703, 4843142783, 4843273867, 4843404971, 4843536043, 4843667141, 4843798213, - 4843929341, 4844060423, 4844191507, 4844322619, 4844453699, 4844584807, 4844715881, - 4844846957, 4844978041, 4845109121, 4845240203, 4845371281, 4845502373, 4845633449, - 4845764527, 4845895609, 4846026739, 4846157831, 4846288927, 4846420037, 4846551121, - 4846682219, 4846813333, 4846944407, 4847075489, 4847206577, 4847337673, 4847468767, - 4847599843, 4847730941, 4847862029, 4847993113, 4848124187, 4848255317, 4848386401, - 4848517483, 4848648559, 4848779699, 4848910771, 4849041877, 4849172963, 4849304039, - 4849435127, 4849566199, 4849697297, 4849828381, 4849959481, 4850090617, 4850221741, - 4850352821, 4850483899, 4850614973, 4850746081, 4850877167, 4851008243, 4851139331, - 4851270491, 4851401609, 4851532687, 4851663767, 4851794897, 4851925979, 4852057051, - 4852188139, 4852319221, 4852450349, 4852581431, 4852712531, 4852843621, 4852974697, - 4853105783, 4853236859, 4853367941, 4853499019, 4853630113, 4853761189, 4853892311, - 4854023387, 4854154463, 4854285589, 4854416669, 4854547769, 4854678893, 4854809987, - 4854941059, 4855072153, 4855203289, 4855334401, 4855465477, 4855596563, 4855727651, - 4855858723, 4855989799, 4856120903, 4856251997, 4856383073, 4856514149, 4856645231, - 4856776313, 4856907389, 4857038467, 4857169547, 4857300647, 4857431731, 4857562817, - 4857693901, 4857824989, 4857956071, 4858087151, 4858218259, 4858349341, 4858480421, - 4858611503, 4858742591, 4858873699, 4859004793, 4859135887, 4859266981, 4859398069, - 4859529149, 4859660231, 4859791327, 4859922409, 4860053501, 4860184597, 4860315737, - 4860446819, 4860577903, 4860709013, 4860840143, 4860971293, 4861102369, 4861233451, - 4861364537, 4861495651, 4861626733, 4861757843, 4861888961, 4862020057, 4862151137, - 4862282213, 4862413289, 4862544367, 4862675471, 4862806549, 4862937623, 4863068701, - 4863199813, 4863330911, 4863462007, 4863593083, 4863724189, 4863855307, 4863986383, - 4864117499, 4864248581, 4864379659, 4864510733, 4864641811, 4864772893, 4864903993, - 4865035067, 4865166161, 4865297243, 4865428327, 4865559437, 4865690569, 4865821673, - 4865952757, 4866083951, 4866215027, 4866346127, 4866477199, 4866608273, 4866739351, - 4866870439, 4867001533, 4867132609, 4867263689, 4867394767, 4867525843, 4867656953, - 4867788031, 4867919267, 4868050357, 4868181431, 4868312513, 4868443589, 4868574661, - 4868705741, 4868836813, 4868967931, 4869099007, 4869230143, 4869361223, 4869492317, - 4869623389, 4869754471, 4869885557, 4870016633, 4870147753, 4870278827, 4870409909, - 4870541017, 4870672111, 4870803193, 4870934267, 4871065363, 4871196443, 4871327533, - 4871458609, 4871589689, 4871720761, 4871851837, 4871982931, 4872114059, 4872245143, - 4872376279, 4872507359, 4872638443, 4872769529, 4872900611, 4873031711, 4873162787, - 4873293883, 4873424977, 4873556113, 4873687199, 4873818283, 4873949413, 4874080501, - 4874211577, 4874342651, 4874473727, 4874604799, 4874735909, 4874866999, 4874998087, - 4875129163, 4875260261, 4875391333, 4875522409, 4875653527, 4875784649, 4875915731, - 4876046803, 4876177903, 4876308989, 4876440073, 4876571149, 4876702249, 4876833337, - 4876964431, 4877095519, 4877226617, 4877357699, 4877488793, 4877619871, 4877750947, - 4877882039, 4878013123, 4878144223, 4878275329, 4878406409, 4878537491, 4878668563, - 4878799643, 4878930733, 4879061807, 4879192891, 4879324007, 4879455089, 4879586171, - 4879717259, 4879848401, 4879979477, 4880110577, 4880241649, 4880372729, 4880503813, - 4880634893, 4880765969, 4880897057, 4881028133, 4881159229, 4881290321, 4881421397, - 4881552469, 4881683549, 4881814633, 4881945713, 4882076803, 4882207903, 4882338983, - 4882470059, 4882601137, 4882732229, 4882863311, 4882994401, 4883125529, 4883256629, - 4883387737, 4883518813, 4883649889, 4883780977, 4883912071, 4884043147, 4884174227, - 4884305299, 4884436391, 4884567463, 4884698537, 4884829613, 4884960697, 4885091773, - 4885222871, 4885353943, 4885485061, 4885616143, 4885747259, 4885878391, 4886009477, - 4886140559, 4886271647, 4886402723, 4886533811, 4886664901, 4886795981, 4886927113, - 4887058207, 4887189323, 4887320413, 4887451501, 4887582577, 4887713687, 4887844771, - 4887975857, 4888106929, 4888238011, 4888369117, 4888500191, 4888631281, 4888762363, - 4888893463, 4889024549, 4889155631, 4889286707, 4889417779, 4889548861, 4889679947, - 4889811019, 4889942107, 4890073229, 4890204313, 4890335389, 4890466499, 4890597611, - 4890728723, 4890859807, 4890990889, 4891121981, 4891253057, 4891384133, 4891515257, - 4891646339, 4891777433, 4891908523, 4892039617, 4892170721, 4892301833, 4892432921, - 4892563999, 4892695109, 4892826199, 4892957339, 4893088441, 4893219563, 4893350701, - 4893481783, 4893612863, 4893743977, 4893875057, 4894006153, 4894137229, 4894268321, - 4894399403, 4894530481, 4894661581, 4894792691, 4894923799, 4895054887, 4895185961, - 4895317051, 4895448223, 4895579309, 4895710399, 4895841499, 4895972581, 4896103657, - 4896234769, 4896365843, 4896496919, 4896628019, 4896759151, 4896890237, 4897021313, - 4897152401, 4897283509, 4897414591, 4897545677, 4897676801, 4897807877, 4897938953, - 4898070031, 4898201129, 4898332211, 4898463287, 4898594359, 4898725441, 4898856517, - 4898987593, 4899118717, 4899249791, 4899380887, 4899511973, 4899643097, 4899774181, - 4899905261, 4900036343, 4900167449, 4900298551, 4900429627, 4900560761, 4900691839, - 4900822967, 4900954039, 4901085127, 4901216207, 4901347313, 4901478391, 4901609467, - 4901740541, 4901871641, 4902002713, 4902133829, 4902264901, 4902395983, 4902527093, - 4902658171, 4902789247, 4902920339, 4903051451, 4903182533, 4903313669, 4903444751, - 4903575823, 4903706923, 4903838033, 4903969111, 4904100209, 4904231291, 4904362369, - 4904493443, 4904624531, 4904755649, 4904886731, 4905017809, 4905148909, 4905279983, - 4905411067, 4905542167, 4905673271, 4905804353, 4905935449, 4906066531, 4906197607, - 4906328689, 4906459763, 4906590841, 4906721929, 4906853027, 4906984183, 4907115277, - 4907246363, 4907377439, 4907508523, 4907639617, 4907770697, 4907901773, 4908032851, - 4908163963, 4908295039, 4908426119, 4908557201, 4908688283, 4908819361, 4908950461, - 4909081561, 4909212643, 4909343723, 4909474813, 4909605901, 4909736981, 4909868057, - 4909999141, 4910130217, 4910261299, 4910392379, 4910523451, 4910654531, 4910785613, - 4910916713, 4911047821, 4911178903, 4911309989, 4911441071, 4911572167, 4911703241, - 4911834329, 4911965417, 4912096517, 4912227623, 4912358767, 4912489853, 4912620931, - 4912752017, 4912883089, 4913014189, 4913145311, 4913276411, 4913407511, 4913538613, - 4913669687, 4913800823, 4913931929, 4914063013, 4914194093, 4914325183, 4914456269, - 4914587351, 4914718427, 4914849551, 4914980683, 4915111771, 4915242847, 4915373927, - 4915505003, 4915636079, 4915767151, 4915898227, 4916029331, 4916160407, 4916291483, - 4916422561, 4916553637, 4916684713, 4916815807, 4916946911, 4917077983, 4917209159, - 4917340243, 4917471329, 4917602483, 4917733663, 4917864767, 4917995851, 4918126933, - 4918258019, 4918389097, 4918520203, 4918651279, 4918782383, 4918913537, 4919044609, - 4919175707, 4919306839, 4919437927, 4919569033, 4919700113, 4919831201, 4919962273, - 4920093371, 4920224453, 4920355529, 4920486617, 4920617711, 4920748813, 4920879889, - 4921011047, 4921142119, 4921273207, 4921404289, 4921535371, 4921666469, 4921797589, - 4921928699, 4922059783, 4922190857, 4922321941, 4922453023, 4922584097, 4922715181, - 4922846303, 4922977403, 4923108583, 4923239669, 4923370757, 4923501881, 4923632993, - 4923764071, 4923895153, 4924026227, 4924157299, 4924288373, 4924419497, 4924550569, - 4924681651, 4924812727, 4924943813, 4925074897, 4925205991, 4925337077, 4925468183, - 4925599277, 4925730349, 4925861453, 4925992537, 4926123623, 4926254719, 4926385819, - 4926516899, 4926647983, 4926779119, 4926910207, 4927041281, 4927172353, 4927303427, - 4927434503, 4927565623, 4927696699, 4927827787, 4927958869, 4928089961, 4928221043, - 4928352157, 4928483239, 4928614331, 4928745487, 4928876629, 4929007723, 4929138803, - 4929269879, 4929400979, 4929532057, 4929663131, 4929794267, 4929925339, 4930056419, - 4930187497, 4930318577, 4930449697, 4930580789, 4930711883, 4930842977, 4930974079, - 4931105159, 4931236319, 4931367401, 4931498479, 4931629567, 4931760653, 4931891729, - 4932022811, 4932153899, 4932284983, 4932416089, 4932547199, 4932678271, 4932809417, - 4932940489, 4933071629, 4933202719, 4933333817, 4933464937, 4933596023, 4933727111, - 4933858217, 4933989289, 4934120447, 4934251519, 4934382599, 4934513681, 4934644753, - 4934775829, 4934906927, 4935038011, 4935169103, 4935300191, 4935431269, 4935562351, - 4935693431, 4935824513, 4935955589, 4936086671, 4936217747, 4936348819, 4936479917, - 4936611047, 4936742137, 4936873211, 4937004311, 4937135407, 4937266511, 4937397599, - 4937528683, 4937659787, 4937790863, 4937921953, 4938053027, 4938184099, 4938315203, - 4938446281, 4938577373, 4938708449, 4938839533, 4938970627, 4939101707, 4939232783, - 4939363879, 4939494953, 4939626031, 4939757143, 4939888229, 4940019311, 4940150387, - 4940281469, 4940412553, 4940543651, 4940674723, 4940805799, 4940936893, 4941067981, - 4941199093, 4941330187, 4941461269, 4941592367, 4941723467, 4941854557, 4941985637, - 4942116709, 4942247801, 4942378877, 4942509953, 4942641031, 4942772171, 4942903247, - 4943034329, 4943165401, 4943296489, 4943427563, 4943558687, 4943689787, 4943820901, - 4943951977, 4944083051, 4944214129, 4944345223, 4944476309, 4944607399, 4944738479, - 4944869599, 4945000691, 4945131781, 4945262857, 4945393933, 4945525009, 4945656101, - 4945787177, 4945918249, 4946049337, 4946180411, 4946311507, 4946442593, 4946573689, - 4946704771, 4946835847, 4946966957, 4947098029, 4947229121, 4947360203, 4947491303, - 4947622399, 4947753487, 4947884573, 4948015649, 4948146739, 4948277827, 4948408957, - 4948540057, 4948671131, 4948802267, 4948933357, 4949064467, 4949195549, 4949326631, - 4949457703, 4949588801, 4949719897, 4949850979, 4949982077, 4950113171, 4950244267, - 4950375379, 4950506479, 4950637561, 4950768661, 4950899741, 4951030823, 4951161947, - 4951293029, 4951424119, 4951555223, 4951686301, 4951817459, 4951948559, 4952079641, - 4952210717, 4952341789, 4952472901, 4952603987, 4952735077, 4952866199, 4952997281, - 4953128357, 4953259439, 4953390527, 4953521623, 4953652699, 4953783773, 4953914851, - 4954045931, 4954177013, 4954308091, 4954439167, 4954570249, 4954701329, 4954832401, - 4954963477, 4955094559, 4955225633, 4955356711, 4955487787, 4955618903, 4955749979, - 4955881057, 4956012133, 4956143207, 4956274303, 4956405397, 4956536527, 4956667609, - 4956798733, 4956929827, 4957060909, 4957191983, 4957323067, 4957454143, 4957585219, - 4957716311, 4957847399, 4957978471, 4958109617, 4958240717, 4958371799, 4958502893, - 4958633969, 4958765041, 4958896157, 4959027233, 4959158333, 4959289411, 4959420497, - 4959551603, 4959682681, 4959813773, 4959944887, 4960075961, 4960207069, 4960338161, - 4960469233, 4960600321, 4960731397, 4960862477, 4960993553, 4961124647, 4961255743, - 4961386831, 4961517919, 4961649029, 4961780141, 4961911219, 4962042301, 4962173449, - 4962304531, 4962435617, 4962566717, 4962697793, 4962828881, 4962959993, 4963091083, - 4963222189, 4963353319, 4963484429, 4963615507, 4963746589, 4963877669, 4964008759, - 4964139857, 4964270933, 4964402017, 4964533109, 4964664197, 4964795291, 4964926391, - 4965057499, 4965188573, 4965319669, 4965450767, 4965581857, 4965712931, 4965844021, - 4965975107, 4966106191, 4966237279, 4966368359, 4966499431, 4966630519, 4966761601, - 4966892729, 4967023813, 4967154889, 4967285971, 4967417069, 4967548141, 4967679229, - 4967810311, 4967941441, 4968072601, 4968203683, 4968334759, 4968465847, 4968596923, - 4968727997, 4968859097, 4968990179, 4969121257, 4969252367, 4969383487, 4969514567, - 4969645657, 4969776751, 4969907849, 4970038963, 4970170067, 4970301163, 4970432237, - 4970563319, 4970694397, 4970825501, 4970956591, 4971087673, 4971218779, 4971349871, - 4971480961, 4971612059, 4971743137, 4971874211, 4972005319, 4972136401, 4972267483, - 4972398581, 4972529693, 4972660787, 4972791869, 4972922993, 4973054101, 4973185201, - 4973316287, 4973447371, 4973578447, 4973709539, 4973840623, 4973971729, 4974102803, - 4974233879, 4974364957, 4974496031, 4974627107, 4974758179, 4974889267, 4975020353, - 4975151429, 4975282511, 4975413589, 4975544737, 4975675829, 4975806907, 4975937983, - 4976069069, 4976200171, 4976331259, 4976462353, 4976593429, 4976724509, 4976855623, - 4976986733, 4977117833, 4977248959, 4977380047, 4977511129, 4977642223, 4977773327, - 4977904403, 4978035493, 4978166569, 4978297679, 4978428757, 4978559843, 4978690939, - 4978822019, 4978953107, 4979084203, 4979215309, 4979346389, 4979477471, 4979608553, - 4979739631, 4979870719, 4980001801, 4980132877, 4980263957, 4980395029, 4980526129, - 4980657233, 4980788311, 4980919421, 4981050493, 4981181567, 4981312663, 4981443739, - 4981574813, 4981705889, 4981836973, 4981968109, 4982099183, 4982230339, 4982361427, - 4982492527, 4982623627, 4982754709, 4982885801, 4983016879, 4983147971, 4983279053, - 4983410143, 4983541223, 4983672329, 4983803413, 4983934493, 4984065587, 4984196681, - 4984327753, 4984458851, 4984589927, 4984721017, 4984852091, 4984983167, 4985114243, - 4985245417, 4985376493, 4985507633, 4985638781, 4985770001, 4985901073, 4986032167, - 4986163243, 4986294329, 4986425407, 4986556507, 4986687581, 4986818653, 4986949729, - 4987080851, 4987211927, 4987342999, 4987474109, 4987605209, 4987736287, 4987867369, - 4987998467, 4988129539, 4988260643, 4988391739, 4988522813, 4988653897, 4988785049, - 4988916143, 4989047221, 4989178319, 4989309401, 4989440497, 4989571571, 4989702667, - 4989833741, 4989964823, 4990095919, 4990226999, 4990358101, 4990489241, 4990620331, - 4990751407, 4990882489, 4991013563, 4991144657, 4991275771, 4991406853, 4991537953, - 4991669027, 4991800159, 4991931251, 4992062329, 4992193411, 4992324503, 4992455581, - 4992586693, 4992717773, 4992848867, 4992979973, 4993111049, 4993242143, 4993373233, - 4993504343, 4993635431, 4993766527, 4993897613, 4994028701, 4994159813, 4994290907, - 4994422057, 4994553139, 4994684231, 4994815321, 4994946427, 4995077501, 4995208579, - 4995339667, 4995470741, 4995601823, 4995732923, 4995864011, 4995995089, 4996126199, - 4996257349, 4996388429, 4996519501, 4996650619, 4996781701, 4996912801, 4997043913, - 4997174989, 4997306089, 4997437163, 4997568239, 4997699323, 4997830403, 4997961481, - 4998092569, 4998223693, 4998354791, 4998485887, 4998616963, 4998748043, 4998879143, - 4999010267, 4999141339, 4999272451, 4999403567, 4999534669, 4999665791, 4999796873, - 4999927967, 5000059081, 5000190163, 5000321237, 5000452309, 5000583383, 5000714461, - 5000845537, 5000976619, 5001107693, 5001238769, 5001369851, 5001500923, 5001631997, - 5001763097, 5001894169, 5002025261, 5002156339, 5002287421, 5002418497, 5002549571, - 5002680679, 5002811761, 5002942837, 5003073923, 5003205017, 5003336159, 5003467241, - 5003598329, 5003729429, 5003860517, 5003991607, 5004122689, 5004253777, 5004384899, - 5004515977, 5004647069, 5004778169, 5004909251, 5005040323, 5005171397, 5005302559, - 5005433633, 5005564709, 5005695791, 5005826879, 5005957963, 5006089061, 5006220133, - 5006351227, 5006482301, 5006613433, 5006744537, 5006875609, 5007006703, 5007137797, - 5007268879, 5007399953, 5007531031, 5007662117, 5007793237, 5007924331, 5008055419, - 5008186507, 5008317581, 5008448663, 5008579747, 5008710853, 5008841927, 5008972999, - 5009104073, 5009235151, 5009366233, 5009497349, 5009628451, 5009759551, 5009890651, - 5010021733, 5010152831, 5010283903, 5010414979, 5010546053, 5010677197, 5010808301, - 5010939403, 5011070503, 5011201583, 5011332659, 5011463747, 5011594897, 5011725989, - 5011857061, 5011988153, 5012119249, 5012250329, 5012381443, 5012512559, 5012643677, - 5012774749, 5012905847, 5013036923, 5013168049, 5013299191, 5013430273, 5013561361, - 5013692449, 5013823541, 5013954629, 5014085737, 5014216813, 5014347889, 5014478969, - 5014610059, 5014741181, 5014872253, 5015003327, 5015134427, 5015265499, 5015396609, - 5015527681, 5015658787, 5015789861, 5015920957, 5016052043, 5016183119, 5016314227, - 5016445309, 5016576401, 5016707473, 5016838553, 5016969649, 5017100743, 5017231823, - 5017362913, 5017494007, 5017625083, 5017756169, 5017887241, 5018018339, 5018149463, - 5018280559, 5018411677, 5018542819, 5018673931, 5018805031, 5018936113, 5019067231, - 5019198307, 5019329383, 5019460493, 5019591593, 5019722671, 5019853757, 5019984841, - 5020115921, 5020246993, 5020378073, 5020509181, 5020640267, 5020771387, 5020902463, - 5021033539, 5021164627, 5021295709, 5021426783, 5021557907, 5021689003, 5021820101, - 5021951177, 5022082249, 5022213331, 5022344449, 5022475543, 5022606629, 5022737719, - 5022868819, 5022999901, 5023130993, 5023262089, 5023393183, 5023524257, 5023655341, - 5023786421, 5023917499, 5024048581, 5024179687, 5024310773, 5024441869, 5024572951, - 5024704063, 5024835181, 5024966291, 5025097367, 5025228457, 5025359567, 5025490669, - 5025621749, 5025752843, 5025883921, 5026015003, 5026146109, 5026277197, 5026408291, - 5026539367, 5026670443, 5026801517, 5026932607, 5027063683, 5027194807, 5027325883, - 5027456999, 5027588089, 5027719217, 5027850313, 5027981411, 5028112483, 5028243557, - 5028374639, 5028505717, 5028636791, 5028767893, 5028898981, 5029030057, 5029161131, - 5029292227, 5029423307, 5029554379, 5029685477, 5029816567, 5029947667, 5030078759, - 5030209831, 5030340923, 5030472001, 5030603099, 5030734199, 5030865313, 5030996401, - 5031127483, 5031258569, 5031389641, 5031520721, 5031651797, 5031782869, 5031913979, - 5032045079, 5032176161, 5032307233, 5032438309, 5032569383, 5032700459, 5032831547, - 5032962643, 5033093731, 5033224843, 5033355917, 5033486989, 5033618113, 5033749207, - 5033880337, 5034011417, 5034142489, 5034273577, 5034404653, 5034535733, 5034666853, - 5034797927, 5034928999, 5035060073, 5035191173, 5035322251, 5035453333, 5035584461, - 5035715539, 5035846657, 5035977731, 5036108807, 5036239889, 5036370979, 5036502061, - 5036633149, 5036764261, 5036895361, 5037026453, 5037157549, 5037288623, 5037419729, - 5037550801, 5037681923, 5037813019, 5037944111, 5038075247, 5038206319, 5038337393, - 5038468493, 5038599571, 5038730659, 5038861757, 5038992839, 5039123911, 5039255021, - 5039386111, 5039517199, 5039648303, 5039779411, 5039910487, 5040041579, 5040172667, - 5040303773, 5040434891, 5040565967, 5040697049, 5040828157, 5040959237, 5041090309, - 5041221413, 5041352513, 5041483607, 5041614689, 5041745767, 5041876843, 5042007961, - 5042139043, 5042270143, 5042401237, 5042532347, 5042663443, 5042794529, 5042925653, - 5043056789, 5043187873, 5043318961, 5043450043, 5043581117, 5043712189, 5043843289, - 5043974389, 5044105481, 5044236569, 5044367723, 5044498817, 5044629917, 5044761013, - 5044892107, 5045023213, 5045154287, 5045285419, 5045416517, 5045547599, 5045678689, - 5045809817, 5045940899, 5046071977, 5046203077, 5046334151, 5046465223, 5046596297, - 5046727373, 5046858457, 5046989561, 5047120649, 5047251743, 5047382819, 5047513901, - 5047645007, 5047776079, 5047907153, 5048038319, 5048169391, 5048300471, 5048431567, - 5048562671, 5048693761, 5048824843, 5048955931, 5049087011, 5049218107, 5049349187, - 5049480269, 5049611401, 5049742487, 5049873607, 5050004689, 5050135781, 5050266877, - 5050397969, 5050529041, 5050660171, 5050791247, 5050922407, 5051053489, 5051184569, - 5051315641, 5051446721, 5051577799, 5051708873, 5051839981, 5051971063, 5052102161, - 5052233239, 5052364327, 5052495433, 5052626521, 5052757643, 5052888739, 5053019813, - 5053150889, 5053281967, 5053413041, 5053544113, 5053675201, 5053806299, 5053937393, - 5054068469, 5054199559, 5054330663, 5054461739, 5054592833, 5054723929, 5054855017, - 5054986093, 5055117173, 5055248257, 5055379333, 5055510413, 5055641497, 5055772571, - 5055903647, 5056034771, 5056165843, 5056296919, 5056427993, 5056559113, 5056690207, - 5056821283, 5056952387, 5057083489, 5057214581, 5057345659, 5057476733, 5057607869, - 5057738971, 5057870047, 5058001133, 5058132223, 5058263311, 5058394391, 5058525463, - 5058656573, 5058787663, 5058918749, 5059049837, 5059180913, 5059311991, 5059443113, - 5059574189, 5059705279, 5059836373, 5059967477, 5060098579, 5060229653, 5060360779, - 5060491853, 5060622949, 5060754037, 5060885131, 5061016223, 5061147317, 5061278393, - 5061409499, 5061540623, 5061671711, 5061802783, 5061933871, 5062064957, 5062196039, - 5062327129, 5062458221, 5062589293, 5062720367, 5062851487, 5062982563, 5063113639, - 5063244721, 5063375803, 5063506901, 5063637973, 5063769101, 5063900173, 5064031283, - 5064162377, 5064293477, 5064424553, 5064555631, 5064686717, 5064817817, 5064948929, - 5065080001, 5065211077, 5065342153, 5065473307, 5065604381, 5065735471, 5065866557, - 5065997639, 5066128723, 5066259797, 5066390899, 5066521973, 5066653061, 5066784139, - 5066915219, 5067046297, 5067177421, 5067308497, 5067439579, 5067570707, 5067701801, - 5067832873, 5067963949, 5068095037, 5068226123, 5068357201, 5068488277, 5068619357, - 5068750429, 5068881523, 5069012633, 5069143721, 5069274811, 5069405959, 5069537059, - 5069668151, 5069799223, 5069930323, 5070061411, 5070192493, 5070323591, 5070454667, - 5070585749, 5070716843, 5070847919, 5070979003, 5071110091, 5071241179, 5071372283, - 5071503413, 5071634537, 5071765609, 5071896721, 5072027813, 5072158901, 5072290021, - 5072421113, 5072552209, 5072683333, 5072814407, 5072945497, 5073076577, 5073207653, - 5073338741, 5073469969, 5073601079, 5073732163, 5073863237, 5073994333, 5074125409, - 5074256503, 5074387583, 5074518667, 5074649779, 5074780859, 5074911931, 5075043011, - 5075174107, 5075305181, 5075436259, 5075567339, 5075698423, 5075829509, 5075960581, - 5076091681, 5076222803, 5076353903, 5076485027, 5076616121, 5076747211, 5076878311, - 5077009409, 5077140503, 5077271593, 5077402709, 5077533781, 5077664959, 5077796039, - 5077927133, 5078058241, 5078189321, 5078320421, 5078451523, 5078582611, 5078713693, - 5078844781, 5078975873, 5079106969, 5079238049, 5079369121, 5079500201, 5079631273, - 5079762349, 5079893453, 5080024531, 5080155607, 5080286683, 5080417781, 5080548877, - 5080679953, 5080811039, 5080942123, 5081073247, 5081204329, 5081335423, 5081466527, - 5081597617, 5081728693, 5081859773, 5081990873, 5082121973, 5082253049, 5082384133, - 5082515213, 5082646291, 5082777367, 5082908461, 5083039541, 5083170619, 5083301701, - 5083432789, 5083563871, 5083694947, 5083826039, 5083957157, 5084088253, 5084219339, - 5084350423, 5084481539, 5084612627, 5084743747, 5084874857, 5085005951, 5085137027, - 5085268103, 5085399181, 5085530257, 5085661337, 5085792421, 5085923503, 5086054651, - 5086185733, 5086316843, 5086447921, 5086579021, 5086710103, 5086841183, 5086972259, - 5087103337, 5087234417, 5087365489, 5087496577, 5087627653, 5087758747, 5087889853, - 5088020947, 5088152039, 5088283111, 5088414197, 5088545311, 5088676441, 5088807539, - 5088938639, 5089069757, 5089200829, 5089331957, 5089463039, 5089594127, 5089725227, - 5089856311, 5089987411, 5090118493, 5090249617, 5090380693, 5090511821, 5090642899, - 5090773973, 5090905069, 5091036143, 5091167267, 5091298339, 5091429461, 5091560543, - 5091691637, 5091822709, 5091953791, 5092084871, 5092215971, 5092347047, 5092478143, - 5092609229, 5092740313, 5092871387, 5093002469, 5093133541, 5093264633, 5093395717, - 5093526793, 5093657869, 5093788949, 5093920021, 5094051113, 5094182231, 5094313303, - 5094444379, 5094575461, 5094706541, 5094837613, 5094968713, 5095099819, 5095230923, - 5095362037, 5095493119, 5095624207, 5095755299, 5095886401, 5096017477, 5096148557, - 5096279647, 5096410721, 5096541811, 5096672887, 5096803973, 5096935073, 5097066211, - 5097197381, 5097328469, 5097459541, 5097590627, 5097721729, 5097852853, 5097983941, - 5098115063, 5098246151, 5098377239, 5098508329, 5098639411, 5098770487, 5098901641, - 5099032739, 5099163829, 5099294903, 5099425997, 5099557097, 5099688173, 5099819267, - 5099950363, 5100081457, 5100212549, 5100343627, 5100474707, 5100605813, 5100736919, - 5100868001, 5100999083, 5101130161, 5101261267, 5101392367, 5101523467, 5101654577, - 5101785649, 5101916821, 5102047901, 5102178979, 5102310089, 5102441209, 5102572289, - 5102703373, 5102834483, 5102965561, 5103096643, 5103227743, 5103358831, 5103489907, - 5103621013, 5103752111, 5103883219, 5104014299, 5104145383, 5104276483, 5104407569, - 5104538653, 5104669727, 5104800821, 5104931899, 5105062993, 5105194069, 5105325149, - 5105456227, 5105587313, 5105718403, 5105849477, 5105980553, 5106111643, 5106242731, - 5106373807, 5106504883, 5106635957, 5106767053, 5106898151, 5107029223, 5107160297, - 5107291391, 5107422469, 5107553543, 5107684619, 5107815703, 5107946791, 5108077879, - 5108208961, 5108340077, 5108471171, 5108602267, 5108733367, 5108864441, 5108995531, - 5109126623, 5109257711, 5109388829, 5109519901, 5109650983, 5109782057, 5109913141, - 5110044217, 5110175293, 5110306429, 5110437539, 5110568627, 5110699709, 5110830797, - 5110961917, 5111092999, 5111224073, 5111355181, 5111486257, 5111617337, 5111748437, - 5111879537, 5112010621, 5112141719, 5112272797, 5112403873, 5112534983, 5112666079, - 5112797177, 5112928277, 5113059361, 5113190441, 5113321513, 5113452587, 5113583711, - 5113714783, 5113845899, 5113976983, 5114108081, 5114239157, 5114370241, 5114501321, - 5114632441, 5114763541, 5114894627, 5115025781, 5115156863, 5115287993, 5115419107, - 5115550211, 5115681283, 5115812357, 5115943453, 5116074541, 5116205669, 5116336789, - 5116467869, 5116598947, 5116730027, 5116861117, 5116992191, 5117123311, 5117254397, - 5117385487, 5117516567, 5117647771, 5117778847, 5117909921, 5118041003, 5118172153, - 5118303241, 5118434323, 5118565447, 5118696521, 5118827603, 5118958681, 5119089761, - 5119220851, 5119351961, 5119483043, 5119614121, 5119745207, 5119876301, 5120007457, - 5120138609, 5120269681, 5120400773, 5120531849, 5120662927, 5120794001, 5120925077, - 5121056159, 5121187231, 5121318317, 5121449453, 5121580571, 5121711659, 5121842741, - 5121973837, 5122104919, 5122236013, 5122367101, 5122498207, 5122629289, 5122760389, - 5122891507, 5123022581, 5123153663, 5123284757, 5123415833, 5123546947, 5123678023, - 5123809109, 5123940221, 5124071327, 5124202469, 5124333619, 5124464693, 5124595789, - 5124726869, 5124857987, 5124989059, 5125120139, 5125251221, 5125382347, 5125513483, - 5125644593, 5125775701, 5125906781, 5126037877, 5126168987, 5126300059, 5126431139, - 5126562227, 5126693321, 5126824393, 5126955469, 5127086557, 5127217651, 5127348763, - 5127479843, 5127610927, 5127742003, 5127873089, 5128004171, 5128135253, 5128266331, - 5128397419, 5128528541, 5128659631, 5128790713, 5128921841, 5129052913, 5129183987, - 5129315101, 5129446199, 5129577289, 5129708383, 5129839457, 5129970533, 5130101609, - 5130232699, 5130363809, 5130494899, 5130625999, 5130757129, 5130888223, 5131019317, - 5131150403, 5131281481, 5131412563, 5131543657, 5131674749, 5131805857, 5131936937, - 5132068021, 5132199101, 5132330191, 5132461273, 5132592397, 5132723473, 5132854583, - 5132985721, 5133116827, 5133247907, 5133379019, 5133510113, 5133641203, 5133772277, - 5133903361, 5134034449, 5134165567, 5134296649, 5134427807, 5134558889, 5134689961, - 5134821053, 5134952161, 5135083237, 5135214311, 5135345387, 5135476459, 5135607557, - 5135738653, 5135869729, 5136000839, 5136131929, 5136263047, 5136394157, 5136525307, - 5136656381, 5136787471, 5136918557, 5137049633, 5137180757, 5137311833, 5137442911, - 5137573993, 5137705103, 5137836191, 5137967267, 5138098373, 5138229491, 5138360567, - 5138491639, 5138622733, 5138753833, 5138884939, 5139016087, 5139147187, 5139278273, - 5139409357, 5139540443, 5139671521, 5139802601, 5139933691, 5140064773, 5140195861, - 5140326959, 5140458053, 5140589141, 5140720223, 5140851341, 5140982477, 5141113567, - 5141244643, 5141375783, 5141506919, 5141637997, 5141769097, 5141900173, 5142031249, - 5142162331, 5142293413, 5142424493, 5142555577, 5142686657, 5142817769, 5142948847, - 5143079927, 5143210999, 5143342081, 5143473169, 5143604251, 5143735349, 5143866439, - 5143997519, 5144128601, 5144259677, 5144390767, 5144521841, 5144652917, 5144784019, - 5144915099, 5145046199, 5145177277, 5145308369, 5145439441, 5145570517, 5145701591, - 5145832667, 5145963763, 5146094879, 5146225951, 5146357031, 5146488107, 5146619197, - 5146750303, 5146881379, 5147012471, 5147143553, 5147274653, 5147405759, 5147536841, - 5147667919, 5147799001, 5147930083, 5148061157, 5148192233, 5148323329, 5148454417, - 5148585503, 5148716591, 5148847663, 5148978781, 5149109887, 5149240979, 5149372061, - 5149503137, 5149634219, 5149765303, 5149896413, 5150027503, 5150158577, 5150289671, - 5150420749, 5150551849, 5150682923, 5150814073, 5150945153, 5151076237, 5151207311, - 5151338383, 5151469457, 5151600533, 5151731623, 5151862753, 5151993829, 5152124917, - 5152256033, 5152387169, 5152518251, 5152649377, 5152780463, 5152911553, 5153042677, - 5153173783, 5153304881, 5153436011, 5153567093, 5153698177, 5153829257, 5153960341, - 5154091447, 5154222527, 5154353609, 5154484747, 5154615827, 5154746963, 5154878051, - 5155009133, 5155140217, 5155271327, 5155402403, 5155533497, 5155664587, 5155795699, - 5155926779, 5156057861, 5156188957, 5156320069, 5156451187, 5156582281, 5156713363, - 5156844439, 5156975533, 5157106609, 5157237689, 5157368779, 5157499877, 5157630949, - 5157762031, 5157893131, 5158024241, 5158155341, 5158286417, 5158417489, 5158548587, - 5158679671, 5158810747, 5158941833, 5159072939, 5159204059, 5159335133, 5159466211, - 5159597293, 5159728367, 5159859473, 5159990557, 5160121643, 5160252737, 5160383843, - 5160514927, 5160646009, 5160777101, 5160908173, 5161039283, 5161170379, 5161301459, - 5161432547, 5161563697, 5161694777, 5161825871, 5161956967, 5162088047, 5162219119, - 5162350247, 5162481343, 5162612459, 5162743543, 5162874643, 5163005719, 5163136813, - 5163267911, 5163398987, 5163530063, 5163661147, 5163792223, 5163923333, 5164054411, - 5164185511, 5164316639, 5164447711, 5164578821, 5164709897, 5164840979, 5164972073, - 5165103191, 5165234273, 5165365351, 5165496439, 5165627521, 5165758621, 5165889697, - 5166020801, 5166151933, 5166283013, 5166414101, 5166545201, 5166676303, 5166807383, - 5166938461, 5167069541, 5167200617, 5167331749, 5167462823, 5167593943, 5167725041, - 5167856123, 5167987211, 5168118323, 5168249419, 5168380507, 5168511583, 5168642659, - 5168773751, 5168904823, 5169035897, 5169166969, 5169298049, 5169429197, 5169560281, - 5169691367, 5169822439, 5169953531, 5170084631, 5170215709, 5170346791, 5170477867, - 5170608943, 5170740019, 5170871093, 5171002259, 5171133337, 5171264467, 5171395549, - 5171526641, 5171657717, 5171788819, 5171919967, 5172051041, 5172182123, 5172313243, - 5172444331, 5172575407, 5172706529, 5172837613, 5172968693, 5173099777, 5173230851, - 5173361929, 5173493053, 5173624129, 5173755211, 5173886287, 5174017361, 5174148437, - 5174279573, 5174410673, 5174541761, 5174672849, 5174803967, 5174935049, 5175066133, - 5175197231, 5175328307, 5175459389, 5175590477, 5175721567, 5175852667, 5175983783, - 5176114861, 5176245937, 5176377029, 5176508119, 5176639231, 5176770329, 5176901407, - 5177032507, 5177163613, 5177294701, 5177425777, 5177556851, 5177687923, 5177819021, - 5177950093, 5178081173, 5178212251, 5178343367, 5178474439, 5178605513, 5178736657, - 5178867737, 5178998831, 5179129913, 5179260991, 5179392067, 5179523147, 5179654219, - 5179785313, 5179916393, 5180047529, 5180178643, 5180309723, 5180440819, 5180571917, - 5180703061, 5180834147, 5180965259, 5181096353, 5181227449, 5181358531, 5181489623, - 5181620699, 5181751789, 5181882883, 5182013957, 5182145047, 5182276153, 5182407229, - 5182538341, 5182669421, 5182800509, 5182931623, 5183062721, 5183193797, 5183324893, - 5183455997, 5183587081, 5183718157, 5183849257, 5183980343, 5184111467, 5184242579, - 5184373679, 5184504757, 5184635837, 5184766967, 5184898039, 5185029119, 5185160207, - 5185291303, 5185422409, 5185553497, 5185684579, 5185815667, 5185946741, 5186077837, - 5186208913, 5186339993, 5186471093, 5186602193, 5186733271, 5186864357, 5186995433, - 5187126517, 5187257599, 5187388693, 5187519773, 5187650863, 5187781943, 5187913021, - 5188044143, 5188175227, 5188306303, 5188437379, 5188568471, 5188699547, 5188830629, - 5188961711, 5189092819, 5189223947, 5189355037, 5189486111, 5189617187, 5189748259, - 5189879341, 5190010451, 5190141527, 5190272611, 5190403693, 5190534883, 5190665957, - 5190797047, 5190928139, 5191059239, 5191190357, 5191321451, 5191452523, 5191583599, - 5191714673, 5191845749, 5191976827, 5192107919, 5192239033, 5192370109, 5192501189, - 5192632267, 5192763343, 5192894417, 5193025493, 5193156587, 5193287663, 5193418777, - 5193549857, 5193680939, 5193812011, 5193943087, 5194074161, 5194205249, 5194336321, - 5194467403, 5194598501, 5194729591, 5194860703, 5194991777, 5195122909, 5195253991, - 5195385071, 5195516153, 5195647229, 5195778311, 5195909417, 5196040489, 5196171571, - 5196302653, 5196433763, 5196564871, 5196695993, 5196827071, 5196958171, 5197089251, - 5197220363, 5197351441, 5197482527, 5197613611, 5197744753, 5197875829, 5198006903, - 5198137999, 5198269081, 5198400187, 5198531291, 5198662367, 5198793461, 5198924567, - 5199055639, 5199186763, 5199317839, 5199448921, 5199580039, 5199711149, 5199842281, - 5199973369, 5200104461, 5200235539, 5200366621, 5200497697, 5200628827, 5200759903, - 5200891009, 5201022097, 5201153171, 5201284261, 5201415361, 5201546437, 5201677511, - 5201808607, 5201939723, 5202070799, 5202201883, 5202332959, 5202464087, 5202595159, - 5202726239, 5202857353, 5202988463, 5203119589, 5203250737, 5203381853, 5203512943, - 5203644059, 5203775147, 5203906237, 5204037323, 5204168413, 5204299489, 5204430577, - 5204561651, 5204692741, 5204823817, 5204954893, 5205085979, 5205217057, 5205348179, - 5205479281, 5205610369, 5205741449, 5205872557, 5206003639, 5206134793, 5206265873, - 5206396963, 5206528037, 5206659119, 5206790213, 5206921333, 5207052511, 5207183587, - 5207314669, 5207445779, 5207576879, 5207707987, 5207839097, 5207970239, 5208101357, - 5208232453, 5208363527, 5208494611, 5208625687, 5208756793, 5208887897, 5209018979, - 5209150087, 5209281169, 5209412251, 5209543333, 5209674427, 5209805539, 5209936657, - 5210067739, 5210198839, 5210329913, 5210460989, 5210592061, 5210723149, 5210854247, - 5210985319, 5211116411, 5211247487, 5211378559, 5211509669, 5211640783, 5211771869, - 5211902981, 5212034081, 5212165159, 5212296241, 5212427329, 5212558423, 5212689523, - 5212820611, 5212951693, 5213082767, 5213213851, 5213345021, 5213476097, 5213607193, - 5213738267, 5213869361, 5214000481, 5214131567, 5214262667, 5214393739, 5214524857, - 5214655931, 5214787013, 5214918089, 5215049197, 5215180283, 5215311359, 5215442443, - 5215573523, 5215704617, 5215835689, 5215966793, 5216097877, 5216229001, 5216360113, - 5216491237, 5216622337, 5216753413, 5216884637, 5217015731, 5217146827, 5217277903, - 5217409003, 5217540101, 5217671183, 5217802267, 5217933353, 5218064461, 5218195573, - 5218326697, 5218457771, 5218588853, 5218719937, 5218851013, 5218982089, 5219113177, - 5219244287, 5219375407, 5219506547, 5219637623, 5219768717, 5219899831, 5220030923, - 5220162007, 5220293087, 5220424169, 5220555251, 5220686329, 5220817411, 5220948511, - 5221079621, 5221210693, 5221341773, 5221472863, 5221603939, 5221735019, 5221866113, - 5221997191, 5222128333, 5222259409, 5222390501, 5222521631, 5222652703, 5222783791, - 5222914897, 5223045973, 5223177061, 5223308137, 5223439217, 5223570311, 5223701423, - 5223832529, 5223963623, 5224094723, 5224225813, 5224356901, 5224487987, 5224619087, - 5224750189, 5224881293, 5225012371, 5225143463, 5225274583, 5225405659, 5225536733, - 5225667877, 5225798953, 5225930029, 5226061109, 5226192197, 5226323299, 5226454399, - 5226585541, 5226716641, 5226847723, 5226978817, 5227109911, 5227241059, 5227372141, - 5227503241, 5227634323, 5227765481, 5227896581, 5228027653, 5228158739, 5228289851, - 5228420957, 5228552051, 5228683123, 5228814209, 5228945287, 5229076387, 5229207461, - 5229338539, 5229469613, 5229600697, 5229731809, 5229862901, 5229993983, 5230125071, - 5230256153, 5230387237, 5230518311, 5230649399, 5230780481, 5230911557, 5231042629, - 5231173741, 5231304817, 5231435899, 5231566979, 5231698063, 5231829143, 5231960291, - 5232091363, 5232222449, 5232353561, 5232484633, 5232615721, 5232746797, 5232877873, - 5233008997, 5233140091, 5233271171, 5233402249, 5233533353, 5233664441, 5233795529, - 5233926601, 5234057681, 5234188783, 5234319863, 5234450951, 5234582039, 5234713153, - 5234844227, 5234975357, 5235106447, 5235237541, 5235368627, 5235499699, 5235630779, - 5235761857, 5235892943, 5236024033, 5236155131, 5236286203, 5236417349, 5236548433, - 5236679563, 5236810639, 5236941761, 5237072839, 5237203913, 5237334989, 5237466079, - 5237597173, 5237728267, 5237859377, 5237990449, 5238121529, 5238252631, 5238383729, - 5238514811, 5238645911, 5238776993, 5238908089, 5239039171, 5239170263, 5239301381, - 5239432477, 5239563551, 5239694641, 5239825729, 5239956803, 5240087893, 5240218967, - 5240350051, 5240481139, 5240612227, 5240743301, 5240874389, 5241005477, 5241136553, - 5241267673, 5241398807, 5241529883, 5241660959, 5241792041, 5241923119, 5242054273, - 5242185349, 5242316461, 5242447549, 5242578631, 5242709749, 5242840843, 5242971941, - 5243103037, 5243234137, 5243365217, 5243496301, 5243627381, 5243758489, 5243889659, - 5244020777, 5244151849, 5244282937, 5244414011, 5244545083, 5244676163, 5244807257, - 5244938357, 5245069433, 5245200511, 5245331591, 5245462681, 5245593799, 5245724893, - 5245855997, 5245987069, 5246118181, 5246249273, 5246380361, 5246511443, 5246642521, - 5246773621, 5246904709, 5247035797, 5247166871, 5247297953, 5247429029, 5247560107, - 5247691199, 5247822299, 5247953371, 5248084451, 5248215523, 5248346617, 5248477699, - 5248608817, 5248739891, 5248870993, 5249002067, 5249133151, 5249264287, 5249395421, - 5249526523, 5249657617, 5249788727, 5249919839, 5250050921, 5250181997, 5250313139, - 5250444223, 5250575339, 5250706423, 5250837521, 5250968599, 5251099691, 5251230779, - 5251361851, 5251492997, 5251624069, 5251755143, 5251886221, 5252017307, 5252148383, - 5252279479, 5252410573, 5252541661, 5252672741, 5252803813, 5252934917, 5253065989, - 5253197077, 5253328187, 5253459317, 5253590417, 5253721511, 5253852587, 5253983687, - 5254114771, 5254245853, 5254376971, 5254508089, 5254639189, 5254770263, 5254901339, - 5255032439, 5255163517, 5255294591, 5255425699, 5255556781, 5255687867, 5255818961, - 5255950043, 5256081121, 5256212209, 5256343327, 5256474451, 5256605527, 5256736601, - 5256867683, 5256998777, 5257129853, 5257260941, 5257392013, 5257523107, 5257654189, - 5257785319, 5257916401, 5258047499, 5258178571, 5258309669, 5258440819, 5258571931, - 5258703031, 5258834129, 5258965207, 5259096307, 5259227381, 5259358469, 5259489577, - 5259620669, 5259751759, 5259882833, 5260013923, 5260145021, 5260276093, 5260407167, - 5260538249, 5260669331, 5260800439, 5260931513, 5261062613, 5261193709, 5261324791, - 5261455999, 5261587099, 5261718173, 5261849249, 5261980351, 5262111443, 5262242521, - 5262373601, 5262504697, 5262635813, 5262766897, 5262897977, 5263029067, 5263160171, - 5263291247, 5263422397, 5263553479, 5263684553, 5263815691, 5263946767, 5264077849, - 5264208947, 5264340049, 5264471131, 5264602241, 5264733319, 5264864393, 5264995469, - 5265126541, 5265257623, 5265388769, 5265519887, 5265650989, 5265782063, 5265913139, - 5266044211, 5266175287, 5266306403, 5266437479, 5266568551, 5266699651, 5266830733, - 5266961809, 5267092889, 5267223971, 5267355059, 5267486153, 5267617249, 5267748329, - 5267879423, 5268010511, 5268141629, 5268272707, 5268403783, 5268534857, 5268665929, - 5268797011, 5268928087, 5269059161, 5269190233, 5269321307, 5269452401, 5269583489, - 5269714579, 5269845673, 5269976807, 5270107901, 5270238973, 5270370067, 5270501141, - 5270632259, 5270763341, 5270894413, 5271025489, 5271156563, 5271287641, 5271418723, - 5271549809, 5271680899, 5271812017, 5271943109, 5272074239, 5272205321, 5272336393, - 5272467469, 5272598561, 5272729633, 5272860751, 5272991833, 5273122937, 5273254013, - 5273385097, 5273516197, 5273647273, 5273778359, 5273909447, 5274040529, 5274171619, - 5274302711, 5274433811, 5274564913, 5274696019, 5274827113, 5274958193, 5275089269, - 5275220341, 5275351421, 5275482521, 5275613617, 5275744697, 5275875853, 5276006927, - 5276138009, 5276269093, 5276400193, 5276531279, 5276662373, 5276793463, 5276924573, - 5277055681, 5277186763, 5277317863, 5277448951, 5277580129, 5277711211, 5277842291, - 5277973423, 5278104521, 5278235609, 5278366711, 5278497793, 5278628867, 5278759939, - 5278891019, 5279022097, 5279153197, 5279284321, 5279415419, 5279546491, 5279677583, - 5279808691, 5279939767, 5280070841, 5280201919, 5280332999, 5280464071, 5280595169, - 5280726257, 5280857353, 5280988451, 5281119527, 5281250633, 5281381709, 5281512787, - 5281643891, 5281774991, 5281906087, 5282037161, 5282168267, 5282299349, 5282430427, - 5282561527, 5282692661, 5282823737, 5282954821, 5283085967, 5283217039, 5283348127, - 5283479219, 5283610291, 5283741373, 5283872449, 5284003561, 5284134637, 5284265713, - 5284396813, 5284527887, 5284658959, 5284790039, 5284921151, 5285052313, 5285183399, - 5285314481, 5285445559, 5285576671, 5285707807, 5285838881, 5285969957, 5286101081, - 5286232169, 5286363317, 5286494401, 5286625481, 5286756569, 5286887741, 5287018813, - 5287149899, 5287281001, 5287412077, 5287543189, 5287674269, 5287805353, 5287936439, - 5288067523, 5288198599, 5288329687, 5288460761, 5288591843, 5288723003, 5288854121, - 5288985193, 5289116299, 5289247409, 5289378509, 5289509587, 5289640711, 5289771787, - 5289902867, 5290033943, 5290165031, 5290296119, 5290427201, 5290558289, 5290689361, - 5290820443, 5290951517, 5291082611, 5291213699, 5291344783, 5291475863, 5291606963, - 5291738069, 5291869183, 5292000271, 5292131357, 5292262471, 5292393553, 5292524771, - 5292655867, 5292786949, 5292918041, 5293049131, 5293180213, 5293311299, 5293442377, - 5293573457, 5293704557, 5293835633, 5293966709, 5294097811, 5294228897, 5294359991, - 5294491063, 5294622163, 5294753257, 5294884333, 5295015491, 5295146629, 5295277763, - 5295408847, 5295539957, 5295671033, 5295802111, 5295933199, 5296064299, 5296195379, - 5296326457, 5296457561, 5296588639, 5296719713, 5296850809, 5296981889, 5297112979, - 5297244059, 5297375131, 5297506213, 5297637343, 5297768417, 5297899517, 5298030593, - 5298161677, 5298292757, 5298423829, 5298554923, 5298686011, 5298817151, 5298948223, - 5299079341, 5299210429, 5299341533, 5299472627, 5299603711, 5299734857, 5299865933, - 5299997029, 5300128121, 5300259227, 5300390327, 5300521417, 5300652491, 5300783599, - 5300914679, 5301045781, 5301176891, 5301307969, 5301439049, 5301570151, 5301701257, - 5301832337, 5301963437, 5302094519, 5302225597, 5302356671, 5302487747, 5302618891, - 5302749989, 5302881061, 5303012137, 5303143213, 5303274313, 5303405399, 5303536493, - 5303667571, 5303798657, 5303929733, 5304060851, 5304191933, 5304323009, 5304454081, - 5304585173, 5304716257, 5304847337, 5304978409, 5305109507, 5305240607, 5305371749, - 5305502821, 5305633933, 5305765019, 5305896103, 5306027197, 5306158283, 5306289367, - 5306420479, 5306551571, 5306682643, 5306813717, 5306944829, 5307075911, 5307207007, - 5307338083, 5307469159, 5307600257, 5307731399, 5307862487, 5307993599, 5308124687, - 5308255789, 5308386899, 5308518029, 5308649161, 5308780261, 5308911337, 5309042411, - 5309173543, 5309304667, 5309435773, 5309566883, 5309697971, 5309829067, 5309960167, - 5310091271, 5310222343, 5310353423, 5310484523, 5310615619, 5310746699, 5310877771, - 5311008853, 5311139927, 5311271023, 5311402127, 5311533223, 5311664329, 5311795427, - 5311926517, 5312057593, 5312188667, 5312319767, 5312450903, 5312581987, 5312713067, - 5312844149, 5312975231, 5313106303, 5313237379, 5313368477, 5313499553, 5313630631, - 5313761707, 5313892783, 5314023901, 5314154983, 5314286063, 5314417151, 5314548257, - 5314679333, 5314810411, 5314941487, 5315072573, 5315203651, 5315334727, 5315465851, - 5315596931, 5315728031, 5315859151, 5315990233, 5316121319, 5316252401, 5316383477, - 5316514549, 5316645629, 5316776713, 5316907823, 5317038931, 5317170013, 5317301113, - 5317432189, 5317563287, 5317694411, 5317825483, 5317956557, 5318087641, 5318218721, - 5318349847, 5318480933, 5318612009, 5318743139, 5318874217, 5319005353, 5319136463, - 5319267559, 5319398639, 5319529741, 5319660821, 5319791933, 5319923027, 5320054099, - 5320185179, 5320316273, 5320447351, 5320578427, 5320709501, 5320840573, 5320971647, - 5321102737, 5321233843, 5321364959, 5321496031, 5321627111, 5321758207, 5321889299, - 5322020381, 5322151453, 5322282557, 5322413633, 5322544723, 5322675829, 5322806933, - 5322938009, 5323069091, 5323200163, 5323331267, 5323462363, 5323593439, 5323724531, - 5323855631, 5323986727, 5324117807, 5324248901, 5324379979, 5324511067, 5324642153, - 5324773253, 5324904331, 5325035413, 5325166489, 5325297581, 5325428657, 5325559747, - 5325690833, 5325821911, 5325952991, 5326084063, 5326215149, 5326346237, 5326477313, - 5326608401, 5326739477, 5326870589, 5327001721, 5327132827, 5327263951, 5327395039, - 5327526121, 5327657243, 5327788351, 5327919463, 5328050591, 5328181673, 5328312749, - 5328443821, 5328574919, 5328706001, 5328837089, 5328968201, 5329099273, 5329230419, - 5329361491, 5329492577, 5329623653, 5329754737, 5329885837, 5330016929, 5330148011, - 5330279111, 5330410193, 5330541269, 5330672341, 5330803433, 5330934517, 5331065617, - 5331196709, 5331327791, 5331458863, 5331589969, 5331721051, 5331852133, 5331983219, - 5332114301, 5332245377, 5332376449, 5332507541, 5332638643, 5332769723, 5332900813, - 5333031901, 5333162977, 5333294051, 5333425133, 5333556223, 5333687297, 5333818379, - 5333949469, 5334080561, 5334211637, 5334342733, 5334473813, 5334604903, 5334736021, - 5334867107, 5334998237, 5335129321, 5335260397, 5335391471, 5335522547, 5335653619, - 5335784737, 5335915829, 5336046913, 5336177993, 5336309071, 5336440147, 5336571257, - 5336702353, 5336833441, 5336964553, 5337095633, 5337226709, 5337357787, 5337488869, - 5337619943, 5337751019, 5337882103, 5338013201, 5338144291, 5338275379, 5338406587, - 5338537679, 5338668757, 5338799831, 5338930939, 5339062049, 5339193131, 5339324231, - 5339455309, 5339586391, 5339717473, 5339848583, 5339979661, 5340110753, 5340241831, - 5340372929, 5340504023, 5340635141, 5340766217, 5340897301, 5341028387, 5341159459, - 5341290533, 5341421627, 5341552747, 5341683827, 5341814899, 5341945981, 5342077063, - 5342208149, 5342339263, 5342470339, 5342601419, 5342732501, 5342863577, 5342994649, - 5343125731, 5343256823, 5343387901, 5343518977, 5343650051, 5343781169, 5343912251, - 5344043323, 5344174411, 5344305511, 5344436623, 5344567733, 5344698829, 5344829911, - 5344960991, 5345092073, 5345223193, 5345354281, 5345485363, 5345616457, 5345747543, - 5345878631, 5346009743, 5346140857, 5346271951, 5346403039, 5346534121, 5346665209, - 5346796303, 5346927409, 5347058491, 5347189567, 5347320647, 5347451729, 5347582843, - 5347713977, 5347845053, 5347976141, 5348107273, 5348238349, 5348369431, 5348500529, - 5348631601, 5348762681, 5348893793, 5349024869, 5349155951, 5349287023, 5349418103, - 5349549181, 5349680269, 5349811343, 5349942419, 5350073507, 5350204591, 5350335689, - 5350466773, 5350597951, 5350729031, 5350860107, 5350991207, 5351122279, 5351253361, - 5351384449, 5351515531, 5351646617, 5351777689, 5351908763, 5352039839, 5352170939, - 5352302023, 5352433117, 5352564197, 5352695279, 5352826373, 5352957451, 5353088561, - 5353219633, 5353350721, 5353481801, 5353612883, 5353743977, 5353875053, 5354006131, - 5354137237, 5354268313, 5354399419, 5354530501, 5354661601, 5354792687, 5354923793, - 5355054871, 5355185971, 5355317087, 5355448177, 5355579259, 5355710351, 5355841457, - 5355972541, 5356103617, 5356234699, 5356365779, 5356496861, 5356627967, 5356759061, - 5356890139, 5357021239, 5357152313, 5357283403, 5357414479, 5357545559, 5357676637, - 5357807713, 5357938811, 5358069887, 5358200971, 5358332069, 5358463153, 5358594281, - 5358725353, 5358856427, 5358987509, 5359118599, 5359249681, 5359380791, 5359511863, - 5359642963, 5359774037, 5359905121, 5360036257, 5360167339, 5360298413, 5360429489, - 5360560577, 5360691649, 5360822807, 5360953883, 5361084977, 5361216059, 5361347153, - 5361478249, 5361609343, 5361740431, 5361871517, 5362002617, 5362133701, 5362264777, - 5362395851, 5362526941, 5362658069, 5362789147, 5362920229, 5363051311, 5363182471, - 5363313547, 5363444629, 5363575703, 5363706779, 5363837851, 5363968949, 5364100033, - 5364231113, 5364362221, 5364493313, 5364624389, 5364755489, 5364886561, 5365017673, - 5365148783, 5365279891, 5365410989, 5365542067, 5365673149, 5365804243, 5365935319, - 5366066413, 5366197489, 5366328571, 5366459653, 5366590739, 5366721863, 5366852941, - 5366984071, 5367115153, 5367246271, 5367377357, 5367508451, 5367639523, 5367770609, - 5367901681, 5368032793, 5368163869, 5368294949, 5368426051, 5368557133, 5368688291, - 5368819363, 5368950497, 5369081573, 5369212657, 5369343799, 5369474893, 5369605973, - 5369737081, 5369868169, 5369999251, 5370130343, 5370261433, 5370392509, 5370523583, - 5370654691, 5370785767, 5370916843, 5371047937, 5371179013, 5371310099, 5371441199, - 5371572277, 5371703357, 5371834519, 5371965593, 5372096687, 5372227759, 5372358839, - 5372489933, 5372621053, 5372752139, 5372883211, 5373014299, 5373145397, 5373276481, - 5373407569, 5373538741, 5373669817, 5373800893, 5373931973, 5374063067, 5374194157, - 5374325233, 5374456333, 5374587431, 5374718543, 5374849703, 5374980799, 5375111887, - 5375242963, 5375374051, 5375505133, 5375636213, 5375767289, 5375898377, 5376029471, - 5376160619, 5376291703, 5376422791, 5376553979, 5376685109, 5376816187, 5376947273, - 5377078349, 5377209421, 5377340513, 5377471601, 5377602679, 5377733821, 5377864909, - 5377995983, 5378127091, 5378258167, 5378389243, 5378520319, 5378651413, 5378782529, - 5378913613, 5379044743, 5379175829, 5379306913, 5379437989, 5379569087, 5379700163, - 5379831239, 5379962383, 5380093483, 5380224557, 5380355633, 5380486777, 5380617937, - 5380749037, 5380880129, 5381011201, 5381142281, 5381273363, 5381404499, 5381535587, - 5381666669, 5381797769, 5381928889, 5382059983, 5382191117, 5382322229, 5382453311, - 5382584413, 5382715493, 5382846577, 5382977653, 5383108727, 5383239817, 5383370917, - 5383501997, 5383633081, 5383764167, 5383895263, 5384026337, 5384157421, 5384288519, - 5384419637, 5384550757, 5384681843, 5384812949, 5384944027, 5385075139, 5385206221, - 5385337297, 5385468427, 5385599501, 5385730579, 5385861653, 5385992747, 5386123823, - 5386254901, 5386386001, 5386517089, 5386648187, 5386779271, 5386910363, 5387041453, - 5387172541, 5387303641, 5387434721, 5387565797, 5387696869, 5387827961, 5387959081, - 5388090157, 5388221287, 5388352373, 5388483461, 5388614563, 5388745643, 5388876743, - 5389007917, 5389139047, 5389270163, 5389401247, 5389532353, 5389663451, 5389794533, - 5389925621, 5390056697, 5390187769, 5390318849, 5390449931, 5390581019, 5390712127, - 5390843203, 5390974279, 5391105371, 5391236507, 5391367621, 5391498709, 5391629797, - 5391760877, 5391891949, 5392023029, 5392154111, 5392285189, 5392416319, 5392547393, - 5392678537, 5392809619, 5392940701, 5393071799, 5393202887, 5393333983, 5393465057, - 5393596157, 5393727233, 5393858329, 5393989421, 5394120493, 5394251567, 5394382661, - 5394513737, 5394644809, 5394775907, 5394906991, 5395038083, 5395169191, 5395300271, - 5395431397, 5395562503, 5395693591, 5395824673, 5395955783, 5396086859, 5396217941, - 5396349031, 5396480113, 5396611217, 5396742289, 5396873381, 5397004499, 5397135577, - 5397266663, 5397397771, 5397528853, 5397659957, 5397791029, 5397922109, 5398053191, - 5398184263, 5398315343, 5398446437, 5398577539, 5398708613, 5398839701, 5398970791, - 5399101913, 5399232991, 5399364073, 5399495147, 5399626237, 5399757313, 5399888401, - 5400019477, 5400150557, 5400281629, 5400412711, 5400543839, 5400674953, 5400806029, - 5400937121, 5401068221, 5401199317, 5401330391, 5401461463, 5401592543, 5401723699, - 5401854781, 5401985887, 5402116987, 5402248067, 5402379163, 5402510237, 5402641319, - 5402772407, 5402903483, 5403034577, 5403165659, 5403296737, 5403427811, 5403558917, - 5403690029, 5403821153, 5403952237, 5404083319, 5404214437, 5404345511, 5404476587, - 5404607699, 5404738771, 5404869859, 5405000969, 5405132041, 5405263133, 5405394217, - 5405525299, 5405656387, 5405787463, 5405918549, 5406049637, 5406180757, 5406311849, - 5406442927, 5406574007, 5406705079, 5406836167, 5406967273, 5407098349, 5407229461, - 5407360603, 5407491697, 5407622777, 5407753849, 5407884929, 5408016007, 5408147123, - 5408278201, 5408409311, 5408540407, 5408671487, 5408802571, 5408933681, 5409064763, - 5409195877, 5409326953, 5409458069, 5409589147, 5409720241, 5409851389, 5409982493, - 5410113571, 5410244647, 5410375787, 5410506859, 5410637951, 5410769093, 5410900171, - 5411031247, 5411162333, 5411293417, 5411424503, 5411555587, 5411686751, 5411817841, - 5411948939, 5412080017, 5412211097, 5412342191, 5412473281, 5412604361, 5412735457, - 5412866573, 5412997649, 5413128731, 5413259837, 5413390987, 5413522061, 5413653139, - 5413784219, 5413915291, 5414046377, 5414177449, 5414308561, 5414439697, 5414570779, - 5414701861, 5414832949, 5414964031, 5415095143, 5415226217, 5415357301, 5415488383, - 5415619459, 5415750559, 5415881677, 5416012753, 5416143839, 5416274917, 5416405997, - 5416537069, 5416668151, 5416799231, 5416930333, 5417061437, 5417192537, 5417323619, - 5417454703, 5417585777, 5417716853, 5417847931, 5417979019, 5418110143, 5418241243, - 5418372317, 5418503399, 5418634493, 5418765581, 5418896663, 5419027777, 5419158881, - 5419289963, 5419421039, 5419552121, 5419683197, 5419814269, 5419945381, 5420076509, - 5420207581, 5420338657, 5420469799, 5420600891, 5420731963, 5420863037, 5420994121, - 5421125221, 5421256319, 5421387407, 5421518489, 5421649567, 5421780659, 5421911741, - 5422042831, 5422173943, 5422305019, 5422436147, 5422567247, 5422698349, 5422829429, - 5422960507, 5423091631, 5423222729, 5423353813, 5423484889, 5423615963, 5423747039, - 5423878121, 5424009193, 5424140317, 5424271403, 5424402479, 5424533581, 5424664667, - 5424795743, 5424926863, 5425057949, 5425189027, 5425320107, 5425451183, 5425582277, - 5425713379, 5425844467, 5425975549, 5426106667, 5426237753, 5426368841, 5426499919, - 5426630999, 5426762119, 5426893207, 5427024287, 5427155359, 5427286457, 5427417539, - 5427548657, 5427679729, 5427810803, 5427941933, 5428073011, 5428204097, 5428335191, - 5428466293, 5428597381, 5428728491, 5428859563, 5428990643, 5429121721, 5429252809, - 5429383889, 5429514967, 5429646043, 5429777123, 5429908201, 5430039281, 5430170443, - 5430301549, 5430432673, 5430563771, 5430694861, 5430825937, 5430957013, 5431088101, - 5431219181, 5431350263, 5431481339, 5431612423, 5431743547, 5431874633, 5432005729, - 5432136811, 5432267909, 5432398997, 5432530073, 5432661187, 5432792263, 5432923339, - 5433054437, 5433185539, 5433316613, 5433447787, 5433578861, 5433709933, 5433841013, - 5433972091, 5434103167, 5434234243, 5434365383, 5434496479, 5434627553, 5434758647, - 5434889773, 5435020859, 5435151949, 5435283023, 5435414203, 5435545277, 5435676377, - 5435807453, 5435938531, 5436069629, 5436200729, 5436331801, 5436462877, 5436593989, - 5436725083, 5436856181, 5436987263, 5437118383, 5437249483, 5437380577, 5437511663, - 5437642739, 5437773811, 5437904893, 5438036011, 5438167121, 5438298211, 5438429291, - 5438560367, 5438691509, 5438822611, 5438953691, 5439084817, 5439215897, 5439346973, - 5439478067, 5439609157, 5439740263, 5439871343, 5440002433, 5440133533, 5440264637, - 5440395721, 5440526803, 5440657907, 5440788979, 5440920059, 5441051159, 5441182259, - 5441313331, 5441444423, 5441575511, 5441706601, 5441837701, 5441968789, 5442099889, - 5442231001, 5442362087, 5442493211, 5442624283, 5442755387, 5442886459, 5443017539, - 5443148611, 5443279693, 5443410767, 5443541869, 5443672979, 5443804081, 5443935163, - 5444066237, 5444197331, 5444328431, 5444459551, 5444590631, 5444721727, 5444852807, - 5444983889, 5445114973, 5445246061, 5445377149, 5445508231, 5445639313, 5445770431, - 5445901511, 5446032587, 5446163687, 5446294759, 5446425857, 5446556933, 5446688011, - 5446819093, 5446950169, 5447081243, 5447212333, 5447343409, 5447474489, 5447605567, - 5447736643, 5447867731, 5447998813, 5448129913, 5448261019, 5448392093, 5448523187, - 5448654259, 5448785347, 5448916433, 5449047511, 5449178591, 5449309667, 5449440739, - 5449571821, 5449702897, 5449833971, 5449965049, 5450096131, 5450227261, 5450358343, - 5450489417, 5450620507, 5450751583, 5450882663, 5451013783, 5451144889, 5451275983, - 5451407063, 5451538163, 5451669239, 5451800327, 5451931409, 5452062547, 5452193629, - 5452324729, 5452455847, 5452586939, 5452718039, 5452849133, 5452980223, 5453111297, - 5453242381, 5453373461, 5453504561, 5453635637, 5453766733, 5453897863, 5454028963, - 5454160051, 5454291173, 5454422269, 5454553399, 5454684497, 5454815591, 5454946697, - 5455077769, 5455208867, 5455339949, 5455471051, 5455602179, 5455733267, 5455864367, - 5455995451, 5456126531, 5456257603, 5456388683, 5456519773, 5456650867, 5456781959, - 5456913037, 5457044161, 5457175261, 5457306389, 5457437467, 5457568591, 5457699671, - 5457830789, 5457961867, 5458092949, 5458224041, 5458355143, 5458486217, 5458617319, - 5458748441, 5458879519, 5459010611, 5459141689, 5459272817, 5459403899, 5459534981, - 5459666071, 5459797177, 5459928251, 5460059383, 5460190469, 5460321541, 5460452629, - 5460583721, 5460714793, 5460845867, 5460976943, 5461108019, 5461239101, 5461370179, - 5461501267, 5461632343, 5461763431, 5461894511, 5462025587, 5462156663, 5462287739, - 5462418811, 5462549893, 5462680981, 5462812057, 5462943173, 5463074249, 5463205369, - 5463336493, 5463467579, 5463598663, 5463729763, 5463860851, 5463991969, 5464123061, - 5464254161, 5464385257, 5464516333, 5464647469, 5464778563, 5464909661, 5465040733, - 5465171851, 5465302943, 5465434027, 5465565109, 5465696233, 5465827307, 5465958391, - 5466089467, 5466220547, 5466351629, 5466482701, 5466613777, 5466744863, 5466875969, - 5467007089, 5467138267, 5467269371, 5467400453, 5467531529, 5467662617, 5467793693, - 5467924783, 5468055877, 5468186987, 5468318069, 5468449171, 5468580251, 5468711327, - 5468842399, 5468973473, 5469104567, 5469235663, 5469366757, 5469497857, 5469628937, - 5469760027, 5469891103, 5470022179, 5470153289, 5470284427, 5470415537, 5470546667, - 5470677739, 5470808831, 5470939931, 5471071007, 5471202103, 5471333177, 5471464259, - 5471595331, 5471726441, 5471857513, 5471988631, 5472119717, 5472250807, 5472381907, - 5472512989, 5472644069, 5472775151, 5472906239, 5473037369, 5473168483, 5473299563, - 5473430647, 5473561721, 5473692799, 5473823879, 5473954961, 5474086039, 5474217113, - 5474348221, 5474479303, 5474610377, 5474741479, 5474872577, 5475003671, 5475134771, - 5475265867, 5475396961, 5475528067, 5475659141, 5475790213, 5475921287, 5476052383, - 5476183469, 5476314541, 5476445621, 5476576711, 5476707787, 5476838893, 5476969999, - 5477101093, 5477232181, 5477363291, 5477494381, 5477625457, 5477756539, 5477887619, - 5478018701, 5478149783, 5478280897, 5478412007, 5478543079, 5478674153, 5478805231, - 5478936347, 5479067423, 5479198601, 5479329677, 5479460801, 5479591891, 5479722979, - 5479854067, 5479985143, 5480116217, 5480247317, 5480378413, 5480509513, 5480640617, - 5480771693, 5480902769, 5481033847, 5481164999, 5481296081, 5481427169, 5481558241, - 5481689327, 5481820429, 5481951521, 5482082603, 5482213729, 5482344809, 5482475909, - 5482607003, 5482738103, 5482869187, 5483000309, 5483131399, 5483262481, 5483393557, - 5483524661, 5483655757, 5483786851, 5483917969, 5484049049, 5484180133, 5484311207, - 5484442289, 5484573427, 5484704501, 5484835589, 5484966727, 5485097803, 5485228901, - 5485360003, 5485491091, 5485622171, 5485753277, 5485884359, 5486015461, 5486146537, - 5486277613, 5486408701, 5486539789, 5486670877, 5486801981, 5486933059, 5487064151, - 5487195239, 5487326323, 5487457433, 5487588527, 5487719651, 5487850727, 5487981817, - 5488112897, 5488243987, 5488375073, 5488506161, 5488637251, 5488768343, 5488899457, - 5489030609, 5489161687, 5489292763, 5489423837, 5489554933, 5489686043, 5489817163, - 5489948263, 5490079363, 5490210437, 5490341537, 5490472613, 5490603689, 5490734827, - 5490865903, 5490996983, 5491128103, 5491259287, 5491390397, 5491521491, 5491652597, - 5491783691, 5491914767, 5492045843, 5492176967, 5492308043, 5492439133, 5492570231, - 5492701321, 5492832407, 5492963503, 5493094603, 5493225707, 5493356797, 5493487903, - 5493618989, 5493750061, 5493881167, 5494012243, 5494143383, 5494274459, 5494405547, - 5494536643, 5494667791, 5494798889, 5494929971, 5495061059, 5495192167, 5495323243, - 5495454361, 5495585443, 5495716529, 5495847611, 5495978689, 5496109781, 5496240889, - 5496371963, 5496503041, 5496634141, 5496765229, 5496896309, 5497027387, 5497158497, - 5497289579, 5497420673, 5497551757, 5497682837, 5497813921, 5497945003, 5498076107, - 5498207207, 5498338289, 5498469433, 5498600543, 5498731633, 5498862749, 5498993837, - 5499124927, 5499256019, 5499387133, 5499518221, 5499649307, 5499780379, 5499911453, - 5500042543, 5500173631, 5500304707, 5500435823, 5500566913, 5500698017, 5500829093, - 5500960177, 5501091313, 5501222393, 5501353469, 5501484581, 5501615687, 5501746813, - 5501877919, 5502009017, 5502140089, 5502271183, 5502402271, 5502533353, 5502664451, - 5502795533, 5502926629, 5503057733, 5503188811, 5503319893, 5503450999, 5503582079, - 5503713157, 5503844233, 5503975331, 5504106437, 5504237527, 5504368607, 5504499719, - 5504630797, 5504761877, 5504892959, 5505024103, 5505155189, 5505286291, 5505417373, - 5505548483, 5505679559, 5505810637, 5505941719, 5506072801, 5506203881, 5506334963, - 5506466051, 5506597189, 5506728277, 5506859353, 5506990427, 5507121539, 5507252633, - 5507383727, 5507514833, 5507645911, 5507776999, 5507908073, 5508039167, 5508170263, - 5508301363, 5508432437, 5508563519, 5508694591, 5508825677, 5508956771, 5509087853, - 5509219013, 5509350097, 5509481179, 5509612253, 5509743353, 5509874449, 5510005549, - 5510136631, 5510267713, 5510398871, 5510530001, 5510661073, 5510792171, 5510923277, - 5511054371, 5511185461, 5511316541, 5511447619, 5511578713, 5511709789, 5511840883, - 5511971987, 5512103059, 5512234141, 5512365239, 5512496321, 5512627411, 5512758499, - 5512889587, 5513020693, 5513151767, 5513282843, 5513413937, 5513545013, 5513676109, - 5513807191, 5513938271, 5514069349, 5514200437, 5514331513, 5514462637, 5514593717, - 5514724793, 5514855869, 5514986959, 5515118041, 5515249121, 5515380217, 5515511327, - 5515642427, 5515773499, 5515904621, 5516035703, 5516166781, 5516297869, 5516428949, - 5516560117, 5516691209, 5516822293, 5516953369, 5517084487, 5517215569, 5517346687, - 5517477769, 5517608849, 5517739979, 5517871127, 5518002209, 5518133281, 5518264357, - 5518395433, 5518526509, 5518657583, 5518788661, 5518919743, 5519050841, 5519181917, - 5519312999, 5519444087, 5519575219, 5519706301, 5519837381, 5519968541, 5520099617, - 5520230731, 5520361807, 5520492881, 5520623959, 5520755059, 5520886157, 5521017233, - 5521148317, 5521279409, 5521410491, 5521541581, 5521672661, 5521803739, 5521934813, - 5522065889, 5522196961, 5522328067, 5522459191, 5522590277, 5522721349, 5522852443, - 5522983519, 5523114593, 5523245677, 5523376759, 5523507833, 5523638909, 5523770017, - 5523901139, 5524032223, 5524163297, 5524294397, 5524425481, 5524556563, 5524687657, - 5524818743, 5524949821, 5525080919, 5525212009, 5525343091, 5525474167, 5525605313, - 5525736409, 5525867483, 5525998579, 5526129659, 5526260731, 5526391811, 5526522893, - 5526653983, 5526785083, 5526916217, 5527047301, 5527178383, 5527309471, 5527440577, - 5527571689, 5527702777, 5527833853, 5527964927, 5528096003, 5528227097, 5528358181, - 5528489287, 5528620367, 5528751439, 5528882543, 5529013639, 5529144713, 5529275803, - 5529406889, 5529537973, 5529669071, 5529800161, 5529931283, 5530062383, 5530193503, - 5530324609, 5530455703, 5530586779, 5530717853, 5530848931, 5530980019, 5531111123, - 5531242201, 5531373277, 5531504351, 5531635427, 5531766503, 5531897593, 5532028679, - 5532159793, 5532290893, 5532421967, 5532553067, 5532684161, 5532815251, 5532946339, - 5533077437, 5533208537, 5533339667, 5533470793, 5533601867, 5533732949, 5533864027, - 5533995121, 5534126201, 5534257291, 5534388373, 5534519449, 5534650523, 5534781599, - 5534912689, 5535043777, 5535174859, 5535305953, 5535437041, 5535568117, 5535699209, - 5535830297, 5535961463, 5536092539, 5536223611, 5536354687, 5536485763, 5536616861, - 5536747949, 5536879043, 5537010131, 5537141219, 5537272291, 5537403373, 5537534449, - 5537665543, 5537796659, 5537927753, 5538058847, 5538189931, 5538321053, 5538452149, - 5538583229, 5538714319, 5538845407, 5538976517, 5539107589, 5539238681, 5539369799, - 5539500877, 5539631957, 5539763029, 5539894111, 5540025199, 5540156273, 5540287351, - 5540418451, 5540549593, 5540680667, 5540811769, 5540942861, 5541073939, 5541205031, - 5541336131, 5541467209, 5541598291, 5541729409, 5541860503, 5541991603, 5542122679, - 5542253837, 5542384927, 5542516027, 5542647107, 5542778179, 5542909261, 5543040341, - 5543171441, 5543302543, 5543433617, 5543564707, 5543695783, 5543826863, 5543957953, - 5544089039, 5544220111, 5544351203, 5544482291, 5544613387, 5544744473, 5544875561, - 5545006639, 5545137727, 5545268831, 5545399931, 5545531037, 5545662113, 5545793191, - 5545924271, 5546055373, 5546186453, 5546317537, 5546448617, 5546579707, 5546710817, - 5546841899, 5546973001, 5547104081, 5547235157, 5547366233, 5547497309, 5547628397, - 5547759493, 5547890567, 5548021657, 5548152737, 5548283837, 5548414931, 5548546007, - 5548677091, 5548808179, 5548939259, 5549070341, 5549201419, 5549332501, 5549463613, - 5549594711, 5549725787, 5549856859, 5549988019, 5550119123, 5550250207, 5550381341, - 5550512419, 5550643547, 5550774673, 5550905761, 5551036859, 5551167943, 5551299031, - 5551430117, 5551561193, 5551692281, 5551823371, 5551954453, 5552085527, 5552216599, - 5552347733, 5552478847, 5552609941, 5552741017, 5552872097, 5553003257, 5553134347, - 5553265427, 5553396503, 5553527587, 5553658667, 5553789781, 5553920861, 5554051967, - 5554183049, 5554314127, 5554445249, 5554576333, 5554707409, 5554838503, 5554969579, - 5555100671, 5555231777, 5555362859, 5555493989, 5555625067, 5555756147, 5555887219, - 5556018311, 5556149407, 5556280487, 5556411559, 5556542639, 5556673729, 5556804859, - 5556935933, 5557067011, 5557198111, 5557329187, 5557460281, 5557591411, 5557722539, - 5557853611, 5557984703, 5558115781, 5558246873, 5558377963, 5558509067, 5558640167, - 5558771269, 5558902397, 5559033479, 5559164557, 5559295667, 5559426767, 5559557867, - 5559688943, 5559820027, 5559951109, 5560082189, 5560213261, 5560344337, 5560475461, - 5560606549, 5560737631, 5560868743, 5560999849, 5561130943, 5561262059, 5561393137, - 5561524259, 5561655343, 5561786443, 5561917549, 5562048629, 5562179717, 5562310799, - 5562441971, 5562573073, 5562704149, 5562835247, 5562966329, 5563097401, 5563228493, - 5563359583, 5563490663, 5563621751, 5563752823, 5563883933, 5564015063, 5564146157, - 5564277233, 5564408309, 5564539381, 5564670487, 5564801563, 5564932649, 5565063743, - 5565194821, 5565325901, 5565456983, 5565588073, 5565719183, 5565850289, 5565981371, - 5566112459, 5566243531, 5566374607, 5566505699, 5566636771, 5566767859, 5566898933, - 5567030017, 5567161111, 5567292217, 5567423297, 5567554393, 5567685493, 5567816567, - 5567947657, 5568078739, 5568209813, 5568340891, 5568471983, 5568603091, 5568734191, - 5568865277, 5568996361, 5569127467, 5569258547, 5569389629, 5569520713, 5569651793, - 5569782871, 5569913953, 5570045027, 5570176099, 5570307181, 5570438273, 5570569451, - 5570700529, 5570831653, 5570962741, 5571093823, 5571224899, 5571356023, 5571487109, - 5571618193, 5571749291, 5571880367, 5572011481, 5572142561, 5572273639, 5572404713, - 5572535797, 5572666877, 5572798003, 5572929079, 5573060153, 5573191229, 5573322301, - 5573453377, 5573584477, 5573715559, 5573846671, 5573977789, 5574108863, 5574239977, - 5574371063, 5574502151, 5574633223, 5574764411, 5574895483, 5575026559, 5575157677, - 5575288753, 5575419827, 5575550947, 5575682029, 5575813123, 5575944197, 5576075279, - 5576206351, 5576337449, 5576468531, 5576599603, 5576730689, 5576861761, 5576992843, - 5577123977, 5577255049, 5577386147, 5577517223, 5577648359, 5577779447, 5577910523, - 5578041607, 5578172683, 5578303763, 5578434839, 5578565957, 5578697041, 5578828133, - 5578959209, 5579090323, 5579221441, 5579352533, 5579483629, 5579614709, 5579745803, - 5579876881, 5580007969, 5580139057, 5580270133, 5580401219, 5580532327, 5580663419, - 5580794501, 5580925579, 5581056671, 5581187743, 5581318817, 5581449893, 5581580971, - 5581712063, 5581843181, 5581974263, 5582105369, 5582236441, 5582367521, 5582498599, - 5582629681, 5582760787, 5582891879, 5583022961, 5583154039, 5583285157, 5583416239, - 5583547331, 5583678413, 5583809513, 5583940591, 5584071667, 5584202759, 5584333849, - 5584464943, 5584596053, 5584727143, 5584858217, 5584989307, 5585120399, 5585251471, - 5585382547, 5585513621, 5585644693, 5585775773, 5585906849, 5586037921, 5586168997, - 5586300089, 5586431173, 5586562249, 5586693331, 5586824423, 5586955513, 5587086599, - 5587217677, 5587348751, 5587479827, 5587610921, 5587742021, 5587873117, 5588004197, - 5588135281, 5588266357, 5588397473, 5588528551, 5588659627, 5588790733, 5588921843, - 5589052981, 5589184063, 5589315161, 5589446249, 5589577321, 5589708407, 5589839483, - 5589970571, 5590101661, 5590232741, 5590363829, 5590494913, 5590626073, 5590757149, - 5590888267, 5591019349, 5591150423, 5591281499, 5591412581, 5591543653, 5591674729, - 5591805827, 5591936921, 5592068003, 5592199099, 5592330181, 5592461263, 5592592349, - 5592723439, 5592854513, 5592985589, 5593116667, 5593247743, 5593378849, 5593509931, - 5593641037, 5593772113, 5593903207, 5594034307, 5594165407, 5594296507, 5594427599, - 5594558677, 5594689757, 5594820893, 5594951987, 5595083107, 5595214181, 5595345257, - 5595476387, 5595607469, 5595738541, 5595869621, 5596000699, 5596131773, 5596262851, - 5596393937, 5596525057, 5596656133, 5596787237, 5596918309, 5597049391, 5597180473, - 5597311589, 5597442671, 5597573753, 5597704837, 5597835913, 5597966999, 5598098071, - 5598229171, 5598360281, 5598491359, 5598622459, 5598753539, 5598884653, 5599015759, - 5599146869, 5599277951, 5599409033, 5599540129, 5599671247, 5599802381, 5599933457, - 5600064529, 5600195621, 5600326727, 5600457817, 5600588899, 5600719981, 5600851057, - 5600982131, 5601113207, 5601244279, 5601375371, 5601506473, 5601637583, 5601768671, - 5601899761, 5602030849, 5602161937, 5602293023, 5602424117, 5602555193, 5602686269, - 5602817357, 5602948433, 5603079527, 5603210617, 5603341697, 5603472793, 5603603891, - 5603734967, 5603866057, 5603997143, 5604128239, 5604259369, 5604390443, 5604521537, - 5604652681, 5604783781, 5604914857, 5605045933, 5605177033, 5605308113, 5605439219, - 5605570297, 5605701371, 5605832483, 5605963577, 5606094667, 5606225743, 5606356831, - 5606487907, 5606618999, 5606750099, 5606881177, 5607012269, 5607143357, 5607274481, - 5607405637, 5607536731, 5607667811, 5607798883, 5607929993, 5608061077, 5608192151, - 5608323223, 5608454363, 5608585457, 5608716559, 5608847693, 5608978849, 5609109929, - 5609241007, 5609372129, 5609503201, 5609634299, 5609765377, 5609896477, 5610027559, - 5610158641, 5610289757, 5610420863, 5610551941, 5610683047, 5610814127, 5610945203, - 5611076293, 5611207367, 5611338463, 5611469537, 5611600609, 5611731691, 5611862777, - 5611993873, 5612124971, 5612256103, 5612387227, 5612518321, 5612649397, 5612780471, - 5612911567, 5613042649, 5613173737, 5613304861, 5613435937, 5613567049, 5613698131, - 5613829217, 5613960299, 5614091383, 5614222457, 5614353539, 5614484683, 5614615763, - 5614746871, 5614877953, 5615009041, 5615140133, 5615271223, 5615402333, 5615533411, - 5615664497, 5615795579, 5615926651, 5616057731, 5616188803, 5616319909, 5616451003, - 5616582079, 5616713153, 5616844253, 5616975349, 5617106431, 5617237543, 5617368661, - 5617499743, 5617630847, 5617761923, 5617893041, 5618024131, 5618155217, 5618286391, - 5618417471, 5618548561, 5618679691, 5618810837, 5618941943, 5619073037, 5619204121, - 5619335201, 5619466327, 5619597433, 5619728531, 5619859603, 5619990689, 5620121791, - 5620252889, 5620383961, 5620515041, 5620646113, 5620777193, 5620908287, 5621039377, - 5621170481, 5621301589, 5621432731, 5621563807, 5621694889, 5621825981, 5621957113, - 5622088189, 5622219271, 5622350351, 5622481441, 5622612547, 5622743653, 5622874759, - 5623005893, 5623136969, 5623268069, 5623399169, 5623530251, 5623661327, 5623792439, - 5623923523, 5624054603, 5624185711, 5624316827, 5624447911, 5624579003, 5624710081, - 5624841179, 5624972261, 5625103333, 5625234427, 5625365513, 5625496601, 5625627767, - 5625758851, 5625889931, 5626021067, 5626152167, 5626283239, 5626414351, 5626545439, - 5626676519, 5626807591, 5626938689, 5627069771, 5627200847, 5627331929, 5627463031, - 5627594117, 5627725193, 5627856277, 5627987389, 5628118471, 5628249581, 5628380663, - 5628511781, 5628642883, 5628773957, 5628905041, 5629036139, 5629167217, 5629298299, - 5629429387, 5629560479, 5629691567, 5629822643, 5629953737, 5630084819, 5630215901, - 5630346973, 5630478083, 5630609167, 5630740249, 5630871343, 5631002417, 5631133513, - 5631264619, 5631395699, 5631526781, 5631657947, 5631789047, 5631920137, 5632051253, - 5632182373, 5632313471, 5632444553, 5632575661, 5632706759, 5632837841, 5632968917, - 5633100007, 5633231081, 5633362177, 5633493251, 5633624323, 5633755399, 5633886473, - 5634017563, 5634148643, 5634279719, 5634410833, 5634541907, 5634672991, 5634804083, - 5634935213, 5635066319, 5635197457, 5635328551, 5635459649, 5635590721, 5635721801, - 5635852883, 5635984001, 5636115151, 5636246267, 5636377367, 5636508481, 5636639557, - 5636770637, 5636901791, 5637032867, 5637163963, 5637295049, 5637426127, 5637557227, - 5637688339, 5637819413, 5637950491, 5638081573, 5638212647, 5638343729, 5638474811, - 5638605919, 5638737023, 5638868111, 5638999187, 5639130281, 5639261363, 5639392453, - 5639523557, 5639654641, 5639785721, 5639916811, 5640047911, 5640178993, 5640310073, - 5640441173, 5640572269, 5640703351, 5640834427, 5640965507, 5641096579, 5641227653, - 5641358729, 5641489801, 5641620893, 5641751977, 5641883057, 5642014129, 5642145211, - 5642276287, 5642407363, 5642538437, 5642669537, 5642800619, 5642931713, 5643062813, - 5643193901, 5643324997, 5643456079, 5643587219, 5643718313, 5643849389, 5643980471, - 5644111547, 5644242629, 5644373729, 5644504829, 5644635907, 5644766983, 5644898087, - 5645029193, 5645160277, 5645291359, 5645422459, 5645553553, 5645684647, 5645815739, - 5645946811, 5646077887, 5646208987, 5646340087, 5646471203, 5646602293, 5646733373, - 5646864469, 5646995561, 5647126633, 5647257773, 5647388861, 5647519937, 5647651049, - 5647782121, 5647913203, 5648044279, 5648175371, 5648306449, 5648437523, 5648568599, - 5648699671, 5648830753, 5648961833, 5649092929, 5649224071, 5649355181, 5649486263, - 5649617353, 5649748427, 5649879503, 5650010581, 5650141661, 5650272767, 5650403851, - 5650534931, 5650666061, 5650797133, 5650928237, 5651059327, 5651190409, 5651321521, - 5651452649, 5651583737, 5651714819, 5651845909, 5651976997, 5652108157, 5652239261, - 5652370351, 5652501457, 5652632539, 5652763631, 5652894727, 5653025809, 5653156919, - 5653288007, 5653419131, 5653550237, 5653681321, 5653812397, 5653943473, 5654074579, - 5654205659, 5654336759, 5654467843, 5654598919, 5654729999, 5654861087, 5654992163, - 5655123239, 5655254321, 5655385531, 5655516617, 5655647689, 5655778769, 5655909863, - 5656040993, 5656172077, 5656303199, 5656434281, 5656565357, 5656696439, 5656827511, - 5656958603, 5657089723, 5657220799, 5657351891, 5657482969, 5657614051, 5657745131, - 5657876243, 5658007331, 5658138403, 5658269497, 5658400609, 5658531713, 5658662813, - 5658793897, 5658925007, 5659056113, 5659187251, 5659318333, 5659449407, 5659580533, - 5659711613, 5659842703, 5659973849, 5660104951, 5660236027, 5660367127, 5660498201, - 5660629279, 5660760359, 5660891441, 5661022531, 5661153623, 5661284701, 5661415777, - 5661546851, 5661677933, 5661809009, 5661940087, 5662071197, 5662202269, 5662333363, - 5662464463, 5662595591, 5662726669, 5662857751, 5662988843, 5663119919, 5663250997, - 5663382143, 5663513221, 5663644297, 5663775419, 5663906581, 5664037657, 5664168733, - 5664299831, 5664430909, 5664561983, 5664693061, 5664824149, 5664955229, 5665086319, - 5665217401, 5665348483, 5665479571, 5665610647, 5665741721, 5665872803, 5666003947, - 5666135051, 5666266129, 5666397223, 5666528297, 5666659429, 5666790529, 5666921633, - 5667052711, 5667183787, 5667314881, 5667445963, 5667577087, 5667708199, 5667839273, - 5667970369, 5668101463, 5668232561, 5668363637, 5668494719, 5668625821, 5668756909, - 5668887989, 5669019089, 5669150197, 5669281279, 5669412361, 5669543449, 5669674559, - 5669805649, 5669936749, 5670067853, 5670198973, 5670330049, 5670461141, 5670592217, - 5670723313, 5670854389, 5670985487, 5671116587, 5671247693, 5671378771, 5671509853, - 5671640971, 5671772083, 5671903183, 5672034271, 5672165351, 5672296439, 5672427577, - 5672558651, 5672689733, 5672820841, 5672951917, 5673082993, 5673214069, 5673345149, - 5673476233, 5673607337, 5673738449, 5673869521, 5674000637, 5674131713, 5674262857, - 5674393981, 5674525111, 5674656191, 5674787333, 5674918429, 5675049511, 5675180603, - 5675311679, 5675442781, 5675573983, 5675705107, 5675836193, 5675967281, 5676098377, - 5676229463, 5676360581, 5676491659, 5676622747, 5676753827, 5676884911, 5677015991, - 5677147079, 5677278161, 5677409261, 5677540333, 5677671443, 5677802521, 5677933631, - 5678064713, 5678195801, 5678326873, 5678457947, 5678589047, 5678720191, 5678851267, - 5678982343, 5679113437, 5679244511, 5679375587, 5679506671, 5679637759, 5679768847, - 5679899921, 5680030999, 5680162121, 5680293193, 5680424279, 5680555357, 5680686461, - 5680817609, 5680948709, 5681079793, 5681210893, 5681341969, 5681473079, 5681604157, - 5681735233, 5681866313, 5681997403, 5682128503, 5682259589, 5682390661, 5682521759, - 5682652847, 5682783937, 5682915011, 5683046087, 5683177177, 5683308259, 5683439381, - 5683570463, 5683701539, 5683832639, 5683963723, 5684094799, 5684225873, 5684356949, - 5684488037, 5684619113, 5684750191, 5684881289, 5685012391, 5685143467, 5685274571, - 5685405679, 5685536761, 5685667837, 5685798929, 5685930001, 5686061083, 5686192219, - 5686323301, 5686454399, 5686585477, 5686716551, 5686847623, 5686978697, 5687109787, - 5687240861, 5687371939, 5687503013, 5687634107, 5687765179, 5687896271, 5688027379, - 5688158453, 5688289531, 5688420613, 5688551699, 5688682777, 5688813929, 5688945019, - 5689076101, 5689207177, 5689338289, 5689469399, 5689600573, 5689731667, 5689862767, - 5689993849, 5690124943, 5690256043, 5690387161, 5690518241, 5690649329, 5690780441, - 5690911519, 5691042607, 5691173681, 5691304763, 5691435863, 5691566939, 5691698011, - 5691829133, 5691960221, 5692091303, 5692222379, 5692353497, 5692484579, 5692615651, - 5692746749, 5692877837, 5693008913, 5693139989, 5693271091, 5693402189, 5693533273, - 5693664349, 5693795461, 5693926541, 5694057619, 5694188701, 5694319789, 5694450871, - 5694581951, 5694713071, 5694844151, 5694975229, 5695106321, 5695237397, 5695368473, - 5695499587, 5695630673, 5695761749, 5695892831, 5696023903, 5696154977, 5696286059, - 5696417147, 5696548259, 5696679343, 5696810443, 5696941561, 5697072637, 5697203741, - 5697334817, 5697465911, 5697597011, 5697728083, 5697859157, 5697990239, 5698121327, - 5698252409, 5698383491, 5698514567, 5698645639, 5698776749, 5698907821, 5699038897, - 5699170003, 5699301103, 5699432183, 5699563279, 5699694361, 5699825437, 5699956529, - 5700087649, 5700218753, 5700349891, 5700480983, 5700612061, 5700743137, 5700874211, - 5701005319, 5701136393, 5701267469, 5701398557, 5701529677, 5701660807, 5701791889, - 5701922977, 5702054119, 5702185201, 5702316281, 5702447357, 5702578477, 5702709559, - 5702840653, 5702971783, 5703102883, 5703234011, 5703365099, 5703496187, 5703627263, - 5703758351, 5703889463, 5704020547, 5704151623, 5704282709, 5704413787, 5704544861, - 5704676023, 5704807099, 5704938191, 5705069281, 5705200381, 5705331469, 5705462563, - 5705593637, 5705724751, 5705855941, 5705987041, 5706118129, 5706249203, 5706380279, - 5706511361, 5706642443, 5706773521, 5706904603, 5707035689, 5707166789, 5707297891, - 5707428977, 5707560073, 5707691149, 5707822283, 5707953379, 5708084479, 5708215553, - 5708346671, 5708477759, 5708608837, 5708739913, 5708871013, 5709002093, 5709133187, - 5709264277, 5709395381, 5709526453, 5709657539, 5709788611, 5709919703, 5710050779, - 5710181863, 5710312961, 5710444079, 5710575151, 5710706233, 5710837333, 5710968407, - 5711099483, 5711230561, 5711361641, 5711492713, 5711623789, 5711754899, 5711885999, - 5712017099, 5712148177, 5712279281, 5712410383, 5712541459, 5712672547, 5712803647, - 5712934753, 5713065881, 5713196989, 5713328069, 5713459151, 5713590229, 5713721303, - 5713852411, 5713983529, 5714114617, 5714245709, 5714376781, 5714507863, 5714638991, - 5714770063, 5714901139, 5715032231, 5715163327, 5715294437, 5715425509, 5715556643, - 5715687721, 5715818807, 5715949879, 5716080971, 5716212049, 5716343137, 5716474219, - 5716605299, 5716736429, 5716867529, 5716998601, 5717129681, 5717260753, 5717391829, - 5717522957, 5717654029, 5717785103, 5717916181, 5718047317, 5718178391, 5718309469, - 5718440551, 5718571669, 5718702751, 5718833863, 5718964957, 5719096043, 5719227149, - 5719358261, 5719489339, 5719620449, 5719751561, 5719882639, 5720013721, 5720144803, - 5720275903, 5720406983, 5720538121, 5720669203, 5720800277, 5720931371, 5721062443, - 5721193537, 5721324641, 5721455717, 5721586811, 5721717887, 5721848971, 5721980057, - 5722111139, 5722242233, 5722373323, 5722504429, 5722635533, 5722766629, 5722897709, - 5723028811, 5723159921, 5723290999, 5723422087, 5723553161, 5723684293, 5723815367, - 5723946457, 5724077587, 5724208663, 5724339743, 5724470849, 5724601937, 5724733013, - 5724864107, 5724995179, 5725126279, 5725257361, 5725388443, 5725519519, 5725650629, - 5725781707, 5725912781, 5726043863, 5726174947, 5726306039, 5726437111, 5726568193, - 5726699267, 5726830399, 5726961533, 5727092627, 5727223709, 5727354803, 5727485887, - 5727616981, 5727748063, 5727879149, 5728010251, 5728141339, 5728272419, 5728403503, - 5728534589, 5728665697, 5728796803, 5728927889, 5729058967, 5729190041, 5729321119, - 5729452213, 5729583313, 5729714387, 5729845469, 5729976563, 5730107659, 5730238783, - 5730369881, 5730500953, 5730632041, 5730763117, 5730894229, 5731025317, 5731156397, - 5731287491, 5731418591, 5731549687, 5731680793, 5731811873, 5731942969, 5732074063, - 5732205137, 5732336209, 5732467289, 5732598379, 5732729459, 5732860537, 5732991611, - 5733122683, 5733253783, 5733384859, 5733515941, 5733647033, 5733778151, 5733909239, - 5734040359, 5734171453, 5734302527, 5734433611, 5734564711, 5734695793, 5734826939, - 5734958027, 5735089099, 5735220199, 5735351291, 5735482439, 5735613601, 5735744683, - 5735875787, 5736006863, 5736137941, 5736269051, 5736400127, 5736531217, 5736662317, - 5736793399, 5736924491, 5737055573, 5737186649, 5737317749, 5737448833, 5737579909, - 5737710989, 5737842101, 5737973173, 5738104259, 5738235341, 5738366467, 5738497547, - 5738628629, 5738759701, 5738890847, 5739021931, 5739153047, 5739284143, 5739415229, - 5739546311, 5739677387, 5739808471, 5739939559, 5740070641, 5740201721, 5740332809, - 5740463887, 5740594991, 5740726091, 5740857173, 5740988251, 5741119327, 5741250413, - 5741381507, 5741512591, 5741643673, 5741774791, 5741905867, 5742036961, 5742168059, - 5742299137, 5742430223, 5742561299, 5742692381, 5742823453, 5742954541, 5743085629, - 5743216723, 5743347853, 5743478927, 5743610003, 5743741099, 5743872181, 5744003257, - 5744134339, 5744265431, 5744396549, 5744527661, 5744658757, 5744789839, 5744920957, - 5745052043, 5745183151, 5745314261, 5745445351, 5745576437, 5745707519, 5745838627, - 5745969707, 5746100791, 5746231873, 5746362949, 5746494067, 5746625167, 5746756303, - 5746887427, 5747018509, 5747149609, 5747280709, 5747411801, 5747542873, 5747674001, - 5747805073, 5747936153, 5748067229, 5748198317, 5748329401, 5748460493, 5748591571, - 5748722647, 5748853723, 5748984931, 5749116017, 5749247089, 5749378183, 5749509263, - 5749640359, 5749771453, 5749902541, 5750033621, 5750164729, 5750295809, 5750426909, - 5750557999, 5750689079, 5750820191, 5750951263, 5751082339, 5751213427, 5751344531, - 5751475637, 5751606727, 5751737809, 5751868891, 5751999977, 5752131053, 5752262147, - 5752393237, 5752524329, 5752655411, 5752786483, 5752917571, 5753048663, 5753179753, - 5753310839, 5753441963, 5753573039, 5753704133, 5753835209, 5753966291, 5754097367, - 5754228439, 5754359537, 5754490631, 5754621731, 5754752831, 5754883919, 5755015001, - 5755146073, 5755277179, 5755408279, 5755539371, 5755670461, 5755801547, 5755932619, - 5756063707, 5756194819, 5756325931, 5756457017, 5756588107, 5756719183, 5756850259, - 5756981359, 5757112447, 5757243533, 5757374627, 5757505703, 5757636779, 5757767867, - 5757898957, 5758030087, 5758161161, 5758292261, 5758423337, 5758554419, 5758685507, - 5758816597, 5758947673, 5759078807, 5759209879, 5759340973, 5759472053, 5759603173, - 5759734289, 5759865373, 5759996449, 5760127531, 5760258607, 5760389681, 5760520769, - 5760651859, 5760782939, 5760914017, 5761045111, 5761176209, 5761307291, 5761438369, - 5761569469, 5761700563, 5761831651, 5761962797, 5762093893, 5762224967, 5762356049, - 5762487121, 5762618203, 5762749313, 5762880407, 5763011483, 5763142559, 5763273647, - 5763404723, 5763535801, 5763666907, 5763797983, 5763929071, 5764060187, 5764191269, - 5764322341, 5764453439, 5764584517, 5764715599, 5764846699, 5764977791, 5765108903, - 5765239981, 5765371057, 5765502131, 5765633207, 5765764289, 5765895361, 5766026437, - 5766157519, 5766288617, 5766419717, 5766550793, 5766681917, 5766813053, 5766944137, - 5767075229, 5767206301, 5767337383, 5767468463, 5767599559, 5767730663, 5767861741, - 5767992821, 5768123899, 5768255041, 5768386121, 5768517193, 5768648269, 5768779351, - 5768910443, 5769041521, 5769172603, 5769303779, 5769434863, 5769565943, 5769697019, - 5769828109, 5769959213, 5770090289, 5770221361, 5770352437, 5770483517, 5770614617, - 5770745753, 5770876849, 5771007967, 5771139133, 5771270209, 5771401283, 5771532391, - 5771663467, 5771794541, 5771925637, 5772056713, 5772187807, 5772318889, 5772449987, - 5772581099, 5772712181, 5772843253, 5772974351, 5773105427, 5773236541, 5773367617, - 5773498691, 5773629773, 5773760851, 5773891939, 5774023019, 5774154097, 5774285227, - 5774416309, 5774547407, 5774678479, 5774809553, 5774940629, 5775071719, 5775202799, - 5775333887, 5775464971, 5775596053, 5775727151, 5775858227, 5775989311, 5776120393, - 5776251493, 5776382581, 5776513669, 5776644779, 5776775857, 5776906937, 5777038019, - 5777169107, 5777300183, 5777431277, 5777562367, 5777693447, 5777824523, 5777955607, - 5778086719, 5778217811, 5778348883, 5778479963, 5778611089, 5778742181, 5778873307, - 5779004411, 5779135489, 5779266599, 5779397681, 5779528801, 5779659877, 5779790959, - 5779922129, 5780053229, 5780184301, 5780315393, 5780446487, 5780577581, 5780708669, - 5780839751, 5780970823, 5781101897, 5781232987, 5781364067, 5781495173, 5781626273, - 5781757351, 5781888467, 5782019567, 5782150643, 5782281731, 5782412803, 5782543883, - 5782674971, 5782806049, 5782937137, 5783068223, 5783199311, 5783330383, 5783461483, - 5783592557, 5783723669, 5783854759, 5783985839, 5784116917, 5784247993, 5784379087, - 5784510161, 5784641237, 5784772337, 5784903409, 5785034599, 5785165679, 5785296773, - 5785427849, 5785558921, 5785690007, 5785821109, 5785952203, 5786083283, 5786214359, - 5786345431, 5786476513, 5786607601, 5786738719, 5786869793, 5787000881, 5787131969, - 5787263047, 5787394127, 5787525223, 5787656311, 5787787387, 5787918469, 5788049563, - 5788180637, 5788311733, 5788442819, 5788573949, 5788705049, 5788836143, 5788967227, - 5789098303, 5789229401, 5789360483, 5789491579, 5789622653, 5789753741, 5789884853, - 5790015953, 5790147031, 5790278119, 5790409199, 5790540311, 5790671431, 5790802517, - 5790933593, 5791064693, 5791195793, 5791326889, 5791458007, 5791589081, 5791720169, - 5791851251, 5791982323, 5792113409, 5792244499, 5792375599, 5792506697, 5792637769, - 5792768843, 5792899919, 5793031009, 5793162121, 5793293203, 5793424277, 5793555403, - 5793686491, 5793817591, 5793948691, 5794079777, 5794210859, 5794341989, 5794473077, - 5794604149, 5794735229, 5794866383, 5794997479, 5795128583, 5795259667, 5795390803, - 5795521957, 5795653067, 5795784139, 5795915231, 5796046327, 5796177407, 5796308501, - 5796439589, 5796570707, 5796701791, 5796832891, 5796964021, 5797095097, 5797226177, - 5797357283, 5797488379, 5797619459, 5797750531, 5797881613, 5798012687, 5798143763, - 5798274841, 5798405927, 5798536999, 5798668087, 5798799277, 5798930353, 5799061453, - 5799192533, 5799323669, 5799454741, 5799585817, 5799716939, 5799848017, 5799979099, - 5800110181, 5800241261, 5800372337, 5800503409, 5800634503, 5800765583, 5800896659, - 5801027741, 5801158813, 5801289911, 5801420987, 5801552129, 5801683207, 5801814283, - 5801945447, 5802076541, 5802207613, 5802338699, 5802469787, 5802600889, 5802731971, - 5802863051, 5802994159, 5803125299, 5803256401, 5803387511, 5803518583, 5803649659, - 5803780733, 5803911829, 5804042903, 5804174023, 5804305099, 5804436173, 5804567309, - 5804698423, 5804829533, 5804960659, 5805091753, 5805222851, 5805353927, 5805485003, - 5805616081, 5805747161, 5805878237, 5806009333, 5806140409, 5806271483, 5806402571, - 5806533673, 5806664749, 5806795829, 5806926901, 5807057983, 5807189083, 5807320157, - 5807451233, 5807582321, 5807713393, 5807844467, 5807975539, 5808106613, 5808237703, - 5808368789, 5808499883, 5808630959, 5808762067, 5808893191, 5809024271, 5809155371, - 5809286453, 5809417541, 5809548643, 5809679797, 5809810891, 5809941967, 5810073047, - 5810204149, 5810335229, 5810466313, 5810597393, 5810728481, 5810859557, 5810990659, - 5811121753, 5811252833, 5811383933, 5811515023, 5811646097, 5811777193, 5811908327, - 5812039421, 5812170499, 5812301617, 5812432693, 5812563781, 5812694869, 5812825951, - 5812957027, 5813088109, 5813219183, 5813350297, 5813481383, 5813612459, 5813743541, - 5813874613, 5814005731, 5814136807, 5814267997, 5814399113, 5814530207, 5814661301, - 5814792397, 5814923573, 5815054667, 5815185769, 5815316863, 5815447943, 5815579019, - 5815710091, 5815841177, 5815972249, 5816103329, 5816234401, 5816365487, 5816496571, - 5816627669, 5816758751, 5816889833, 5817020921, 5817151999, 5817283081, 5817414179, - 5817545257, 5817676339, 5817807433, 5817938507, 5818069597, 5818200673, 5818331777, - 5818462873, 5818593947, 5818725049, 5818856123, 5818987247, 5819118341, 5819249419, - 5819380499, 5819511571, 5819642651, 5819773723, 5819904851, 5820035929, 5820167011, - 5820298091, 5820429191, 5820560293, 5820691379, 5820822509, 5820953581, 5821084657, - 5821215749, 5821346833, 5821477913, 5821609019, 5821740107, 5821871201, 5822002301, - 5822133379, 5822264519, 5822395597, 5822526691, 5822657833, 5822788919, 5822920057, - 5823051133, 5823182213, 5823313291, 5823444371, 5823575477, 5823706613, 5823837697, - 5823968789, 5824099873, 5824231057, 5824362139, 5824493219, 5824624291, 5824755367, - 5824886447, 5825017529, 5825148619, 5825279699, 5825410777, 5825541889, 5825672987, - 5825804063, 5825935153, 5826066269, 5826197357, 5826328481, 5826459559, 5826590633, - 5826721753, 5826852841, 5826983917, 5827114991, 5827246099, 5827377187, 5827508273, - 5827639351, 5827770439, 5827901543, 5828032627, 5828163751, 5828294827, 5828425907, - 5828557001, 5828688079, 5828819173, 5828950277, 5829081359, 5829212461, 5829343579, - 5829474661, 5829605759, 5829736831, 5829867917, 5829999001, 5830130081, 5830261159, - 5830392263, 5830523351, 5830654483, 5830785577, 5830916719, 5831047811, 5831178887, - 5831309983, 5831441071, 5831572189, 5831703281, 5831834357, 5831965439, 5832096511, - 5832227651, 5832358757, 5832489847, 5832620939, 5832752033, 5832883127, 5833014203, - 5833145291, 5833276381, 5833407469, 5833538561, 5833669651, 5833800727, 5833931833, - 5834062919, 5834194027, 5834325173, 5834456281, 5834587417, 5834718541, 5834849623, - 5834980733, 5835111823, 5835242921, 5835374059, 5835505141, 5835636229, 5835767303, - 5835898391, 5836029491, 5836160567, 5836291711, 5836422803, 5836553897, 5836684979, - 5836816079, 5836947157, 5837078237, 5837209331, 5837340413, 5837471491, 5837602577, - 5837733691, 5837864833, 5837995927, 5838127013, 5838258103, 5838389197, 5838520271, - 5838651359, 5838782437, 5838913523, 5839044599, 5839175677, 5839306751, 5839437839, - 5839568941, 5839700017, 5839831091, 5839962199, 5840093291, 5840224391, 5840355467, - 5840486543, 5840617669, 5840748743, 5840879827, 5841010907, 5841141983, 5841273071, - 5841404147, 5841535241, 5841666329, 5841797419, 5841928549, 5842059649, 5842190741, - 5842321841, 5842452919, 5842584001, 5842715077, 5842846183, 5842977269, 5843108351, - 5843239459, 5843370539, 5843501621, 5843632721, 5843763799, 5843894897, 5844025987, - 5844157061, 5844288157, 5844419281, 5844550367, 5844681443, 5844812527, 5844943607, - 5845074679, 5845205777, 5845336853, 5845467961, 5845599047, 5845730119, 5845861193, - 5845992319, 5846123401, 5846254499, 5846385593, 5846516693, 5846647799, 5846778881, - 5846909989, 5847041077, 5847172181, 5847303277, 5847434389, 5847565511, 5847696587, - 5847827677, 5847958759, 5848089833, 5848220909, 5848352011, 5848483103, 5848614197, - 5848745311, 5848876391, 5849007469, 5849138573, 5849269649, 5849400761, 5849531837, - 5849662913, 5849793991, 5849925073, 5850056153, 5850187247, 5850318323, 5850449399, - 5850580471, 5850711563, 5850842659, 5850973747, 5851104859, 5851235963, 5851367069, - 5851498189, 5851629271, 5851760351, 5851891439, 5852022529, 5852153611, 5852284717, - 5852415839, 5852546911, 5852678071, 5852809169, 5852940259, 5853071333, 5853202409, - 5853333481, 5853464563, 5853595663, 5853726751, 5853857833, 5853988937, 5854120031, - 5854251103, 5854382267, 5854513351, 5854644427, 5854775561, 5854906633, 5855037707, - 5855168779, 5855299867, 5855430979, 5855562079, 5855693153, 5855824229, 5855955307, - 5856086389, 5856217469, 5856348583, 5856479693, 5856610769, 5856741853, 5856872933, - 5857004009, 5857135169, 5857266251, 5857397323, 5857528403, 5857659487, 5857790563, - 5857921639, 5858052731, 5858183839, 5858314927, 5858446043, 5858577121, 5858708213, - 5858839291, 5858970449, 5859101539, 5859232637, 5859363737, 5859494857, 5859625931, - 5859757039, 5859888149, 5860019237, 5860150313, 5860281403, 5860412477, 5860543607, - 5860674709, 5860805813, 5860936891, 5861067967, 5861199053, 5861330147, 5861461223, - 5861592311, 5861723401, 5861854487, 5861985587, 5862116747, 5862247823, 5862378911, - 5862510001, 5862641087, 5862772169, 5862903257, 5863034329, 5863165409, 5863296493, - 5863427599, 5863558721, 5863689823, 5863820923, 5863951997, 5864083073, 5864214157, - 5864345233, 5864476327, 5864607403, 5864738491, 5864869651, 5865000727, 5865131803, - 5865262877, 5865393977, 5865525049, 5865656123, 5865787211, 5865918283, 5866049377, - 5866180553, 5866311677, 5866442753, 5866573829, 5866704911, 5866835987, 5866967063, - 5867098147, 5867229223, 5867360311, 5867491411, 5867622493, 5867753569, 5867884667, - 5868015793, 5868146899, 5868277973, 5868409051, 5868540143, 5868671257, 5868802333, - 5868933439, 5869064521, 5869195597, 5869326703, 5869457779, 5869588853, 5869719929, - 5869851011, 5869982089, 5870113163, 5870244241, 5870375323, 5870506409, 5870637481, - 5870768573, 5870899669, 5871030749, 5871161897, 5871293003, 5871424093, 5871555167, - 5871686243, 5871817319, 5871948437, 5872079513, 5872210607, 5872341703, 5872472779, - 5872603853, 5872734941, 5872866017, 5872997093, 5873128187, 5873259283, 5873390437, - 5873521517, 5873652593, 5873783719, 5873914799, 5874045883, 5874177007, 5874308081, - 5874439159, 5874570239, 5874701317, 5874832423, 5874963499, 5875094587, 5875225663, - 5875356743, 5875487843, 5875618933, 5875750009, 5875881083, 5876012159, 5876143283, - 5876274359, 5876405489, 5876536577, 5876667703, 5876798779, 5876929853, 5877060953, - 5877192053, 5877323161, 5877454237, 5877585313, 5877716387, 5877847471, 5877978563, - 5878109647, 5878240723, 5878371823, 5878502951, 5878634023, 5878765127, 5878896217, - 5879027299, 5879158379, 5879289461, 5879420543, 5879551649, 5879682773, 5879813861, - 5879944969, 5880076099, 5880207199, 5880338273, 5880469351, 5880600431, 5880731531, - 5880862633, 5880993721, 5881124801, 5881255921, 5881387003, 5881518089, 5881649161, - 5881780243, 5881911319, 5882042399, 5882173477, 5882304557, 5882435707, 5882566787, - 5882697869, 5882828957, 5882960093, 5883091199, 5883222277, 5883353369, 5883484447, - 5883615539, 5883746629, 5883877721, 5884008803, 5884139879, 5884270963, 5884402039, - 5884533133, 5884664207, 5884795289, 5884926361, 5885057471, 5885188553, 5885319637, - 5885450713, 5885581799, 5885712907, 5885844043, 5885975153, 5886106243, 5886237317, - 5886368393, 5886499499, 5886630587, 5886761663, 5886892789, 5887023889, 5887154993, - 5887286071, 5887417177, 5887548253, 5887679333, 5887810417, 5887941503, 5888072629, - 5888203709, 5888334839, 5888465939, 5888597023, 5888728099, 5888859191, 5888990291, - 5889121369, 5889252449, 5889383527, 5889514621, 5889645703, 5889776777, 5889907897, - 5890038989, 5890170079, 5890301177, 5890432253, 5890563383, 5890694533, 5890825613, - 5890956727, 5891087801, 5891218897, 5891350001, 5891481091, 5891612203, 5891743283, - 5891874367, 5892005447, 5892136519, 5892267599, 5892398671, 5892529763, 5892660889, - 5892791963, 5892923041, 5893054129, 5893185211, 5893316309, 5893447381, 5893578503, - 5893709587, 5893840669, 5893971763, 5894102869, 5894233981, 5894365067, 5894496149, - 5894627251, 5894758327, 5894889439, 5895020563, 5895151687, 5895282761, 5895413837, - 5895544909, 5895675991, 5895807089, 5895938189, 5896069271, 5896200371, 5896331473, - 5896462549, 5896593631, 5896724741, 5896855847, 5896986941, 5897118037, 5897249131, - 5897380207, 5897511283, 5897642369, 5897773513, 5897904611, 5898035699, 5898166777, - 5898297871, 5898429011, 5898560093, 5898691171, 5898822253, 5898953329, 5899084403, - 5899215499, 5899346599, 5899477679, 5899608761, 5899739863, 5899870939, 5900002013, - 5900133097, 5900264189, 5900395271, 5900526367, 5900657453, 5900788541, 5900919613, - 5901050689, 5901181799, 5901312887, 5901443981, 5901575089, 5901706177, 5901837287, - 5901968363, 5902099439, 5902230553, 5902361627, 5902492753, 5902623829, 5902754911, - 5902886021, 5903017103, 5903148193, 5903279267, 5903410339, 5903541437, 5903672513, - 5903803627, 5903934719, 5904065807, 5904196889, 5904327977, 5904459049, 5904590173, - 5904721267, 5904852347, 5904983429, 5905114529, 5905245649, 5905376761, 5905507849, - 5905638941, 5905770049, 5905901123, 5906032199, 5906163293, 5906294371, 5906425451, - 5906556533, 5906687609, 5906818699, 5906949791, 5907080887, 5907211963, 5907343037, - 5907474191, 5907605293, 5907736379, 5907867457, 5907998531, 5908129627, 5908260727, - 5908391807, 5908522883, 5908653983, 5908785073, 5908916147, 5909047241, 5909178323, - 5909309407, 5909440513, 5909571611, 5909702693, 5909833793, 5909964869, 5910095941, - 5910227023, 5910358163, 5910489259, 5910620381, 5910751453, 5910882553, 5911013659, - 5911144781, 5911275893, 5911406987, 5911538069, 5911669163, 5911800259, 5911931341, - 5912062433, 5912193509, 5912324591, 5912455697, 5912586781, 5912717869, 5912848957, - 5912980043, 5913111131, 5913242227, 5913373303, 5913504379, 5913635461, 5913766543, - 5913897617, 5914028699, 5914159777, 5914290869, 5914421959, 5914553033, 5914684133, - 5914815281, 5914946353, 5915077429, 5915208511, 5915339609, 5915470703, 5915601779, - 5915732857, 5915863937, 5915995013, 5916126091, 5916257173, 5916388267, 5916519431, - 5916650533, 5916781631, 5916912733, 5917043827, 5917174903, 5917305997, 5917437133, - 5917568263, 5917699339, 5917830419, 5917961501, 5918092573, 5918223659, 5918354737, - 5918485813, 5918616911, 5918747983, 5918879081, 5919010159, 5919141299, 5919272417, - 5919403513, 5919534601, 5919665701, 5919796793, 5919927889, 5920058983, 5920190057, - 5920321139, 5920452217, 5920583297, 5920714391, 5920845473, 5920976569, 5921107657, - 5921238779, 5921369863, 5921500943, 5921632043, 5921763121, 5921894281, 5922025357, - 5922156473, 5922287587, 5922418751, 5922549833, 5922680917, 5922811991, 5922943087, - 5923074161, 5923205243, 5923336337, 5923467421, 5923598501, 5923729589, 5923860673, - 5923991747, 5924122823, 5924253901, 5924384987, 5924516069, 5924647151, 5924778259, - 5924909339, 5925040417, 5925171491, 5925302567, 5925433649, 5925564721, 5925695801, - 5925826877, 5925957959, 5926089031, 5926220117, 5926351243, 5926482323, 5926613447, - 5926744519, 5926875601, 5927006707, 5927137787, 5927268869, 5927399977, 5927531053, - 5927662127, 5927793217, 5927924309, 5928055391, 5928186491, 5928317573, 5928448681, - 5928579757, 5928710831, 5928841903, 5928972979, 5929104053, 5929235167, 5929366243, - 5929497347, 5929628423, 5929759523, 5929890643, 5930021803, 5930152927, 5930284021, - 5930415107, 5930546189, 5930677279, 5930808379, 5930939453, 5931070531, 5931201607, - 5931332681, 5931463801, 5931594883, 5931725977, 5931857069, 5931988267, 5932119341, - 5932250449, 5932381529, 5932512617, 5932643729, 5932774817, 5932905899, 5933036999, - 5933168071, 5933299181, 5933430263, 5933561341, 5933692417, 5933823517, 5933954597, - 5934085669, 5934216751, 5934347857, 5934478937, 5934610013, 5934741107, 5934872191, - 5935003379, 5935134473, 5935265593, 5935396697, 5935527799, 5935658899, 5935790039, - 5935921141, 5936052223, 5936183303, 5936314393, 5936445469, 5936576551, 5936707631, - 5936838709, 5936969821, 5937100907, 5937232033, 5937363109, 5937494197, 5937625273, - 5937756353, 5937887453, 5938018531, 5938149617, 5938280731, 5938411819, 5938542899, - 5938673989, 5938805063, 5938936139, 5939067229, 5939198303, 5939329393, 5939460473, - 5939591551, 5939722651, 5939853757, 5939984833, 5940115913, 5940247013, 5940378089, - 5940509171, 5940640243, 5940771349, 5940902441, 5941033519, 5941164599, 5941295671, - 5941426759, 5941557863, 5941688939, 5941820021, 5941951153, 5942082247, 5942213363, - 5942344489, 5942475599, 5942606671, 5942737747, 5942868821, 5942999917, 5943131081, - 5943262181, 5943393257, 5943524329, 5943655427, 5943786559, 5943917657, 5944048757, - 5944179883, 5944310963, 5944442041, 5944573139, 5944704217, 5944835291, 5944966369, - 5945097449, 5945228537, 5945359619, 5945490737, 5945621819, 5945752909, 5945883989, - 5946015071, 5946146147, 5946277229, 5946408323, 5946539413, 5946670501, 5946801587, - 5946932713, 5947063823, 5947194917, 5947325999, 5947457149, 5947588223, 5947719313, - 5947850399, 5947981489, 5948112607, 5948243701, 5948374813, 5948505889, 5948636989, - 5948768081, 5948899169, 5949030251, 5949161363, 5949292471, 5949423563, 5949554669, - 5949685751, 5949816863, 5949947981, 5950079053, 5950210127, 5950341227, 5950472327, - 5950603427, 5950734523, 5950865597, 5950996699, 5951127773, 5951258849, 5951389957, - 5951521061, 5951652139, 5951783219, 5951914303, 5952045377, 5952176449, 5952307547, - 5952438623, 5952569713, 5952700801, 5952831887, 5952962959, 5953094053, 5953225127, - 5953356229, 5953487311, 5953618397, 5953749497, 5953880683, 5954011787, 5954142899, - 5954274043, 5954405123, 5954536219, 5954667307, 5954798407, 5954929493, 5955060589, - 5955191687, 5955322759, 5955453853, 5955584927, 5955716009, 5955847109, 5955978187, - 5956109287, 5956240373, 5956371493, 5956502639, 5956633717, 5956764823, 5956895911, - 5957027009, 5957158111, 5957289211, 5957420291, 5957551363, 5957682439, 5957813629, - 5957944709, 5958075793, 5958206867, 5958337967, 5958469051, 5958600143, 5958731221, - 5958862297, 5958993421, 5959124531, 5959255609, 5959386683, 5959517783, 5959648873, - 5959779949, 5959911029, 5960042107, 5960173187, 5960304277, 5960435353, 5960566433, - 5960697529, 5960828623, 5960959751, 5961090859, 5961221947, 5961353029, 5961484117, - 5961615223, 5961746317, 5961877393, 5962008473, 5962139549, 5962270627, 5962401703, - 5962532827, 5962663919, 5962794997, 5962926121, 5963057237, 5963188327, 5963319403, - 5963450497, 5963581607, 5963712683, 5963843813, 5963974909, 5964105997, 5964237073, - 5964368153, 5964499253, 5964630337, 5964761431, 5964892553, 5965023637, 5965154729, - 5965285841, 5965416913, 5965547989, 5965679087, 5965810163, 5965941239, 5966072341, - 5966203469, 5966334541, 5966465629, 5966596703, 5966727787, 5966858869, 5966989949, - 5967121033, 5967252107, 5967383237, 5967514313, 5967645427, 5967776527, 5967907601, - 5968038677, 5968169761, 5968300847, 5968431947, 5968563019, 5968694107, 5968825189, - 5968956269, 5969087359, 5969218447, 5969349521, 5969480597, 5969611673, 5969742749, - 5969873821, 5970004921, 5970136049, 5970267133, 5970398227, 5970529307, 5970660379, - 5970791461, 5970922547, 5971053619, 5971184719, 5971315793, 5971446931, 5971578013, - 5971709089, 5971840169, 5971971253, 5972102351, 5972233439, 5972364527, 5972495609, - 5972626697, 5972757809, 5972888903, 5973019981, 5973151099, 5973282173, 5973413261, - 5973544333, 5973675427, 5973806533, 5973937631, 5974068703, 5974199807, 5974330909, - 5974462001, 5974593109, 5974724219, 5974855301, 5974986397, 5975117497, 5975248579, - 5975379659, 5975510731, 5975641807, 5975772889, 5975903977, 5976035071, 5976166169, - 5976297263, 5976428389, 5976559481, 5976690557, 5976821629, 5976952727, 5977083857, - 5977214933, 5977346071, 5977477193, 5977608283, 5977739377, 5977870487, 5978001569, - 5978132681, 5978263769, 5978394871, 5978525947, 5978657039, 5978788117, 5978919239, - 5979050317, 5979181399, 5979312473, 5979443563, 5979574681, 5979705757, 5979836857, - 5979967969, 5980099043, 5980230127, 5980361209, 5980492283, 5980623361, 5980754449, - 5980885579, 5981016659, 5981147747, 5981278879, 5981409953, 5981541053, 5981672149, - 5981803271, 5981934377, 5982065459, 5982196547, 5982327677, 5982458753, 5982589861, - 5982720941, 5982852019, 5982983119, 5983114219, 5983245299, 5983376411, 5983507489, - 5983638571, 5983769647, 5983900733, 5984031811, 5984162953, 5984294039, 5984425129, - 5984556209, 5984687281, 5984818361, 5984949469, 5985080551, 5985211637, 5985342767, - 5985473843, 5985604951, 5985736033, 5985867133, 5985998243, 5986129333, 5986260407, - 5986391479, 5986522609, 5986653697, 5986784773, 5986915849, 5987046929, 5987178013, - 5987309099, 5987440181, 5987571257, 5987702377, 5987833499, 5987964583, 5988095671, - 5988226747, 5988357857, 5988488959, 5988620041, 5988751123, 5988882227, 5989013323, - 5989144423, 5989275499, 5989406581, 5989537657, 5989668733, 5989799821, 5989930897, - 5990062009, 5990193101, 5990324177, 5990455279, 5990586367, 5990717449, 5990848553, - 5990979649, 5991110729, 5991241811, 5991372973, 5991504049, 5991635173, 5991766289, - 5991897377, 5992028453, 5992159543, 5992290617, 5992421713, 5992552843, 5992683919, - 5992815011, 5992946101, 5993077177, 5993208283, 5993339371, 5993470451, 5993601541, - 5993732621, 5993863741, 5993994829, 5994125903, 5994256981, 5994388061, 5994519149, - 5994650231, 5994781307, 5994912379, 5995043479, 5995174561, 5995305643, 5995436731, - 5995567861, 5995698977, 5995830077, 5995961159, 5996092243, 5996223347, 5996354443, - 5996485559, 5996616631, 5996747741, 5996878813, 5997009901, 5997140977, 5997272101, - 5997403177, 5997534269, 5997665369, 5997796487, 5997927571, 5998058659, 5998189733, - 5998320827, 5998451903, 5998583021, 5998714103, 5998845179, 5998976281, 5999107357, - 5999238461, 5999369539, 5999500631, 5999631713, 5999762803, 5999893909, 6000025039, - 6000156121, 6000287213, 6000418301, 6000549403, 6000680489, 6000811567, 6000942671, - 6001073747, 6001204831, 6001335917, 6001467001, 6001598089, 6001729193, 6001860283, - 6001991363, 6002122537, 6002253613, 6002384693, 6002515769, 6002646857, 6002777951, - 6002909047, 6003040151, 6003171247, 6003302323, 6003433411, 6003564487, 6003695567, - 6003826639, 6003957719, 6004088807, 6004219927, 6004351013, 6004482091, 6004613189, - 6004744289, 6004875379, 6005006461, 6005137603, 6005268701, 6005399791, 6005530901, - 6005662009, 6005793083, 6005924189, 6006055271, 6006186409, 6006317501, 6006448573, - 6006579679, 6006710761, 6006841847, 6006972929, 6007104041, 6007235119, 6007366201, - 6007497283, 6007628399, 6007759493, 6007890587, 6008021671, 6008152753, 6008283839, - 6008414911, 6008546003, 6008677079, 6008808187, 6008939273, 6009070351, 6009201433, - 6009332507, 6009463591, 6009594671, 6009725819, 6009856891, 6009987967, 6010119053, - 6010250153, 6010381241, 6010512337, 6010643411, 6010774501, 6010905613, 6011036699, - 6011167781, 6011298859, 6011429939, 6011561021, 6011692111, 6011823217, 6011954303, - 6012085379, 6012216451, 6012347533, 6012478607, 6012609683, 6012740809, 6012871903, - 6013003063, 6013134163, 6013265243, 6013396331, 6013527413, 6013658491, 6013789597, - 6013920709, 6014051833, 6014182907, 6014313997, 6014445119, 6014576207, 6014707319, - 6014838413, 6014969507, 6015100583, 6015231689, 6015362777, 6015493873, 6015624977, - 6015756073, 6015887147, 6016018297, 6016149371, 6016280497, 6016411573, 6016542659, - 6016673731, 6016804813, 6016935889, 6017066969, 6017198041, 6017329177, 6017460271, - 6017591347, 6017722421, 6017853509, 6017984593, 6018115667, 6018246743, 6018377819, - 6018508921, 6018640007, 6018771089, 6018902161, 6019033261, 6019164379, 6019295467, - 6019426547, 6019557647, 6019688747, 6019819843, 6019950917, 6020081989, 6020213063, - 6020344151, 6020475233, 6020606311, 6020737417, 6020868499, 6020999627, 6021130699, - 6021261787, 6021392869, 6021523943, 6021655043, 6021786143, 6021917221, 6022048343, - 6022179437, 6022310521, 6022441597, 6022572727, 6022703821, 6022834903, 6022966069, - 6023097151, 6023228251, 6023359327, 6023490457, 6023621609, 6023752717, 6023883851, - 6024014981, 6024146081, 6024277177, 6024408263, 6024539359, 6024670433, 6024801521, - 6024932603, 6025063741, 6025194817, 6025325947, 6025457021, 6025588109, 6025719181, - 6025850269, 6025981349, 6026112437, 6026243519, 6026374619, 6026505713, 6026636789, - 6026767867, 6026899027, 6027030133, 6027161207, 6027292283, 6027423383, 6027554521, - 6027685607, 6027816727, 6027947867, 6028079027, 6028210099, 6028341181, 6028472267, - 6028603369, 6028734469, 6028865587, 6028996669, 6029127761, 6029258861, 6029389969, - 6029521061, 6029652143, 6029783257, 6029914333, 6030045419, 6030176521, 6030307603, - 6030438683, 6030569759, 6030700849, 6030831943, 6030963041, 6031094117, 6031225253, - 6031356329, 6031487431, 6031618543, 6031749667, 6031880741, 6032011813, 6032142911, - 6032273993, 6032405081, 6032536183, 6032667269, 6032798371, 6032929471, 6033060547, - 6033191623, 6033322697, 6033453773, 6033584873, 6033715949, 6033847049, 6033978151, - 6034109227, 6034240351, 6034371449, 6034502521, 6034633597, 6034764683, 6034895761, - 6035026891, 6035158007, 6035289083, 6035420177, 6035551289, 6035682371, 6035813503, - 6035944583, 6036075707, 6036206783, 6036337861, 6036468943, 6036600041, 6036731117, - 6036862199, 6036993341, 6037124453, 6037255531, 6037386623, 6037517699, 6037648777, - 6037779851, 6037910947, 6038042047, 6038173123, 6038304203, 6038435321, 6038566403, - 6038697491, 6038828581, 6038959697, 6039090787, 6039221861, 6039352951, 6039484043, - 6039615119, 6039746191, 6039877273, 6040008347, 6040139449, 6040270529, 6040401607, - 6040532761, 6040663877, 6040794953, 6040926041, 6041057119, 6041188213, 6041319289, - 6041450381, 6041581453, 6041712529, 6041843609, 6041974693, 6042105787, 6042236861, - 6042367943, 6042499061, 6042630133, 6042761209, 6042892291, 6043023367, 6043154443, - 6043285529, 6043416611, 6043547729, 6043678819, 6043809901, 6043940977, 6044072053, - 6044203133, 6044334209, 6044465309, 6044596423, 6044727499, 6044858593, 6044989667, - 6045120749, 6045251827, 6045382901, 6045514003, 6045645091, 6045776207, 6045907289, - 6046038409, 6046169483, 6046300613, 6046431737, 6046562833, 6046693907, 6046824983, - 6046956073, 6047087149, 6047218249, 6047349377, 6047480477, 6047611579, 6047742653, - 6047873747, 6048004829, 6048135901, 6048266993, 6048398089, 6048529163, 6048660257, - 6048791347, 6048922427, 6049053539, 6049184611, 6049315709, 6049446811, 6049577899, - 6049708981, 6049840057, 6049971133, 6050102221, 6050233307, 6050364401, 6050495491, - 6050626573, 6050757653, 6050888731, 6051019811, 6051150883, 6051281969, 6051413047, - 6051544123, 6051675197, 6051806311, 6051937391, 6052068467, 6052199581, 6052330657, - 6052461743, 6052592831, 6052723909, 6052855013, 6052986089, 6053117171, 6053248283, - 6053379401, 6053510479, 6053641567, 6053772653, 6053903743, 6054034817, 6054165913, - 6054297043, 6054428117, 6054559201, 6054690287, 6054821363, 6054952499, 6055083581, - 6055214657, 6055345763, 6055476997, 6055608079, 6055739213, 6055870309, 6056001421, - 6056132497, 6056263621, 6056394697, 6056525773, 6056656883, 6056787973, 6056919109, - 6057050213, 6057181301, 6057312379, 6057443453, 6057574591, 6057705683, 6057836777, - 6057967879, 6058098953, 6058230131, 6058361209, 6058492301, 6058623379, 6058754473, - 6058885571, 6059016643, 6059147723, 6059278831, 6059409907, 6059540983, 6059672063, - 6059803147, 6059934227, 6060065309, 6060196399, 6060327473, 6060458581, 6060589663, - 6060720739, 6060851821, 6060982897, 6061113983, 6061245061, 6061376137, 6061507213, - 6061638301, 6061769377, 6061900457, 6062031533, 6062162609, 6062293697, 6062424787, - 6062555867, 6062686939, 6062818049, 6062949127, 6063080227, 6063211303, 6063342379, - 6063473459, 6063604543, 6063735619, 6063866713, 6063997813, 6064128899, 6064259983, - 6064391143, 6064522279, 6064653359, 6064784437, 6064915513, 6065046607, 6065177681, - 6065308757, 6065439839, 6065570911, 6065702003, 6065833097, 6065964209, 6066095281, - 6066226357, 6066357439, 6066488557, 6066619631, 6066750731, 6066881831, 6067012937, - 6067144009, 6067275101, 6067406179, 6067537261, 6067668337, 6067799447, 6067930529, - 6068061607, 6068192693, 6068323771, 6068454857, 6068585953, 6068717047, 6068848133, - 6068979289, 6069110387, 6069241469, 6069372583, 6069503681, 6069634757, 6069765881, - 6069896977, 6070028057, 6070159133, 6070290223, 6070421297, 6070552381, 6070683481, - 6070814569, 6070945717, 6071076793, 6071207873, 6071338961, 6071470039, 6071601227, - 6071732327, 6071863417, 6071994527, 6072125627, 6072256709, 6072387781, 6072518899, - 6072649997, 6072781069, 6072912149, 6073043231, 6073174313, 6073305397, 6073436471, - 6073567559, 6073698637, 6073829743, 6073960817, 6074091889, 6074222969, 6074354089, - 6074485199, 6074616323, 6074747473, 6074878567, 6075009641, 6075140779, 6075271889, - 6075402961, 6075534041, 6075665117, 6075796189, 6075927283, 6076058363, 6076189439, - 6076320511, 6076451597, 6076582691, 6076713803, 6076844911, 6076976021, 6077107159, - 6077238253, 6077369351, 6077500447, 6077631541, 6077762641, 6077893729, 6078024851, - 6078155929, 6078287003, 6078418111, 6078549193, 6078680287, 6078811441, 6078942563, - 6079073647, 6079204739, 6079335841, 6079466923, 6079597999, 6079729087, 6079860173, - 6079991251, 6080122327, 6080253427, 6080384507, 6080515621, 6080646701, 6080777783, - 6080908859, 6081039967, 6081171053, 6081302141, 6081433213, 6081564301, 6081695381, - 6081826463, 6081957569, 6082088647, 6082219723, 6082350871, 6082481987, 6082613059, - 6082744153, 6082875263, 6083006357, 6083137433, 6083268533, 6083399627, 6083530703, - 6083661781, 6083792857, 6083923931, 6084055039, 6084186133, 6084317209, 6084448301, - 6084579377, 6084710449, 6084841531, 6084972643, 6085103741, 6085234819, 6085365899, - 6085496999, 6085628071, 6085759153, 6085890241, 6086021341, 6086152421, 6086283503, - 6086414627, 6086545763, 6086676839, 6086807911, 6086938987, 6087070091, 6087201167, - 6087332327, 6087463423, 6087594503, 6087725587, 6087856661, 6087987751, 6088118873, - 6088249949, 6088381027, 6088512119, 6088643221, 6088774301, 6088905377, 6089036479, - 6089167561, 6089298637, 6089429743, 6089560823, 6089691929, 6089823023, 6089954111, - 6090085213, 6090216313, 6090347387, 6090478469, 6090609541, 6090740639, 6090871739, - 6091002823, 6091133897, 6091264973, 6091396063, 6091527139, 6091658227, 6091789309, - 6091920397, 6092051477, 6092182549, 6092313671, 6092444749, 6092575847, 6092706979, - 6092838079, 6092969171, 6093100243, 6093231329, 6093362417, 6093493501, 6093624583, - 6093755671, 6093886769, 6094017871, 6094148959, 6094280041, 6094411123, 6094542199, - 6094673279, 6094804361, 6094935433, 6095066507, 6095197579, 6095328677, 6095459761, - 6095590843, 6095721953, 6095853053, 6095984131, 6096115229, 6096246307, 6096377381, - 6096508471, 6096639547, 6096770621, 6096901747, 6097032853, 6097164013, 6097295117, - 6097426217, 6097557317, 6097688407, 6097819489, 6097950581, 6098081669, 6098212751, - 6098343829, 6098474903, 6098606039, 6098737133, 6098868211, 6098999311, 6099130391, - 6099261491, 6099392573, 6099523649, 6099654727, 6099785807, 6099916961, 6100048057, - 6100179131, 6100310219, 6100441343, 6100572437, 6100703519, 6100834613, 6100965709, - 6101096803, 6101227879, 6101359031, 6101490113, 6101621209, 6101752343, 6101883439, - 6102014531, 6102145607, 6102276709, 6102407797, 6102538889, 6102670087, 6102801167, - 6102932243, 6103063327, 6103194431, 6103325509, 6103456591, 6103587667, 6103718741, - 6103849823, 6103980901, 6104111977, 6104243059, 6104374151, 6104505289, 6104636383, - 6104767481, 6104898559, 6105029641, 6105160753, 6105291859, 6105422941, 6105554017, - 6105685121, 6105816209, 6105947291, 6106078379, 6106209457, 6106340549, 6106471633, - 6106602709, 6106733791, 6106864877, 6106995977, 6107127053, 6107258159, 6107389259, - 6107520347, 6107651467, 6107782567, 6107913659, 6108044737, 6108175817, 6108306889, - 6108437981, 6108569053, 6108700139, 6108831241, 6108962341, 6109093469, 6109224553, - 6109355639, 6109486729, 6109617817, 6109748933, 6109880083, 6110011207, 6110142281, - 6110273353, 6110404439, 6110535521, 6110666599, 6110797703, 6110928799, 6111059893, - 6111190973, 6111322069, 6111453149, 6111584233, 6111715331, 6111846407, 6111977483, - 6112108571, 6112239643, 6112370717, 6112501807, 6112632907, 6112764011, 6112895141, - 6113026219, 6113157293, 6113288393, 6113419493, 6113550587, 6113681659, 6113812739, - 6113943827, 6114074903, 6114205987, 6114337069, 6114468161, 6114599261, 6114730337, - 6114861449, 6114992537, 6115123639, 6115254713, 6115385821, 6115516903, 6115647991, - 6115779067, 6115910189, 6116041279, 6116172353, 6116303429, 6116434501, 6116565583, - 6116696687, 6116827799, 6116958899, 6117089977, 6117221081, 6117352193, 6117483277, - 6117614381, 6117745453, 6117876529, 6118007603, 6118138709, 6118269803, 6118400917, - 6118532029, 6118663121, 6118794277, 6118925353, 6119056441, 6119187517, 6119318627, - 6119449709, 6119580791, 6119711893, 6119842979, 6119974087, 6120105193, 6120236273, - 6120367369, 6120498451, 6120629569, 6120760649, 6120891737, 6121022851, 6121153957, - 6121285031, 6121416113, 6121547207, 6121678309, 6121809403, 6121940509, 6122071597, - 6122202677, 6122333759, 6122464879, 6122596001, 6122727073, 6122858171, 6122989259, - 6123120337, 6123251413, 6123382493, 6123513569, 6123644699, 6123775793, 6123906881, - 6124037957, 6124169069, 6124300159, 6124431241, 6124562317, 6124693423, 6124824523, - 6124955621, 6125086729, 6125217823, 6125348899, 6125479993, 6125611081, 6125742193, - 6125873287, 6126004369, 6126135461, 6126266533, 6126397679, 6126528773, 6126659879, - 6126790951, 6126922027, 6127053103, 6127184209, 6127315307, 6127446419, 6127577497, - 6127708577, 6127839691, 6127970791, 6128101867, 6128232959, 6128364041, 6128495129, - 6128626201, 6128757289, 6128888393, 6129019493, 6129150589, 6129281701, 6129412829, - 6129543949, 6129675061, 6129806159, 6129937243, 6130068337, 6130199417, 6130330499, - 6130461593, 6130592669, 6130723747, 6130854853, 6130985929, 6131117021, 6131248093, - 6131379197, 6131510279, 6131641363, 6131772461, 6131903539, 6132034621, 6132165703, - 6132296791, 6132427871, 6132558953, 6132690037, 6132821119, 6132952193, 6133083293, - 6133214401, 6133345487, 6133476607, 6133607719, 6133738811, 6133869887, 6134000987, - 6134132077, 6134263181, 6134394263, 6134525347, 6134656421, 6134787497, 6134918623, - 6135049729, 6135180809, 6135311881, 6135442961, 6135574043, 6135705137, 6135836233, - 6135967309, 6136098407, 6136229483, 6136360567, 6136491671, 6136622747, 6136753849, - 6136884953, 6137016043, 6137147123, 6137278241, 6137409323, 6137540407, 6137671487, - 6137802589, 6137933743, 6138064837, 6138195913, 6138327011, 6138458083, 6138589169, - 6138720257, 6138851371, 6138982457, 6139113529, 6139244609, 6139375709, 6139506781, - 6139637857, 6139768933, 6139900007, 6140031097, 6140162263, 6140293343, 6140424461, - 6140555543, 6140686621, 6140817721, 6140948797, 6141079877, 6141210991, 6141342083, - 6141473197, 6141604309, 6141735419, 6141866503, 6141997577, 6142128653, 6142259737, - 6142390817, 6142521893, 6142652983, 6142784057, 6142915139, 6143046253, 6143177353, - 6143308427, 6143439551, 6143570659, 6143701763, 6143832839, 6143963911, 6144094993, - 6144226073, 6144357179, 6144488263, 6144619339, 6144750421, 6144881497, 6145012579, - 6145143677, 6145274753, 6145405829, 6145537039, 6145668119, 6145799201, 6145930291, - 6146061367, 6146192477, 6146323627, 6146454719, 6146585869, 6146716943, 6146848027, - 6146979101, 6147110237, 6147241333, 6147372419, 6147503513, 6147634607, 6147765683, - 6147896761, 6148027843, 6148158923, 6148289999, 6148421077, 6148552159, 6148683257, - 6148814341, 6148945421, 6149076503, 6149207591, 6149338681, 6149469779, 6149600867, - 6149731943, 6149863051, 6149994161, 6150125287, 6150256361, 6150387437, 6150518533, - 6150649607, 6150780707, 6150911791, 6151042879, 6151173967, 6151305053, 6151436131, - 6151567211, 6151698317, 6151829399, 6151960483, 6152091599, 6152222717, 6152353793, - 6152484869, 6152616011, 6152747113, 6152878253, 6153009341, 6153140437, 6153271511, - 6153402583, 6153533663, 6153664807, 6153795913, 6153926993, 6154058069, 6154189199, - 6154320307, 6154451383, 6154582459, 6154713553, 6154844669, 6154975741, 6155106833, - 6155237947, 6155369063, 6155500139, 6155631211, 6155762311, 6155893399, 6156024481, - 6156155557, 6156286639, 6156417713, 6156548803, 6156679889, 6156810997, 6156942073, - 6157073161, 6157204247, 6157335341, 6157466429, 6157597519, 6157728637, 6157859761, - 6157990843, 6158121917, 6158253007, 6158384083, 6158515171, 6158646257, 6158777333, - 6158908411, 6159039503, 6159170581, 6159301661, 6159432733, 6159563827, 6159694909, - 6159826031, 6159957107, 6160088201, 6160219277, 6160350359, 6160481441, 6160612543, - 6160743707, 6160874779, 6161005859, 6161136941, 6161268013, 6161399129, 6161530223, - 6161661299, 6161792383, 6161923463, 6162054553, 6162185641, 6162316729, 6162447883, - 6162578957, 6162710053, 6162841151, 6162972223, 6163103311, 6163234397, 6163365469, - 6163496543, 6163627619, 6163758721, 6163889861, 6164020969, 6164152051, 6164283131, - 6164414213, 6164545337, 6164676433, 6164807533, 6164938669, 6165069749, 6165200849, - 6165331927, 6165463013, 6165594101, 6165725227, 6165856303, 6165987409, 6166118509, - 6166249597, 6166380677, 6166511759, 6166642847, 6166773997, 6166905103, 6167036177, - 6167167267, 6167298341, 6167429417, 6167560499, 6167691581, 6167822663, 6167953789, - 6168084917, 6168216001, 6168347111, 6168478201, 6168609299, 6168740387, 6168871477, - 6169002577, 6169133651, 6169264757, 6169395847, 6169526921, 6169657997, 6169789099, - 6169920227, 6170051311, 6170182393, 6170313559, 6170444689, 6170575847, 6170706967, - 6170838043, 6170969141, 6171100213, 6171231289, 6171362381, 6171493457, 6171624559, - 6171755651, 6171886741, 6172017833, 6172148933, 6172280039, 6172411129, 6172542247, - 6172673357, 6172804441, 6172935521, 6173066609, 6173197687, 6173328773, 6173459857, - 6173590939, 6173722081, 6173853199, 6173984291, 6174115373, 6174246553, 6174377633, - 6174508709, 6174639781, 6174770869, 6174902009, 6175033099, 6175164187, 6175295281, - 6175426391, 6175557491, 6175688569, 6175819649, 6175950721, 6176081797, 6176212871, - 6176343949, 6176475049, 6176606143, 6176737249, 6176868331, 6176999417, 6177130507, - 6177261581, 6177392653, 6177523727, 6177654817, 6177785893, 6177916967, 6178048039, - 6178179113, 6178310197, 6178441273, 6178572359, 6178703437, 6178834547, 6178965679, - 6179096771, 6179227853, 6179358931, 6179490007, 6179621137, 6179752213, 6179883287, - 6180014359, 6180145441, 6180276533, 6180407729, 6180538801, 6180669883, 6180800981, - 6180932057, 6181063139, 6181194263, 6181325357, 6181456429, 6181587527, 6181718603, - 6181849691, 6181980773, 6182111861, 6182242943, 6182374027, 6182505103, 6182636209, - 6182767291, 6182898367, 6183029507, 6183160579, 6183291677, 6183422759, 6183553847, - 6183684929, 6183816007, 6183947083, 6184078163, 6184209307, 6184340387, 6184471459, - 6184602623, 6184733699, 6184864783, 6184995871, 6185126951, 6185258039, 6185389117, - 6185520197, 6185651317, 6185782399, 6185913473, 6186044563, 6186175661, 6186306743, - 6186437863, 6186568937, 6186700019, 6186831109, 6186962219, 6187093307, 6187224401, - 6187355483, 6187486559, 6187617637, 6187748729, 6187879811, 6188010883, 6188142007, - 6188273107, 6188404181, 6188535263, 6188666401, 6188797501, 6188928671, 6189059749, - 6189190831, 6189321907, 6189453001, 6189584083, 6189715157, 6189846233, 6189977357, - 6190108451, 6190239533, 6190370623, 6190501697, 6190632803, 6190763903, 6190894979, - 6191026057, 6191157139, 6191288219, 6191419303, 6191550397, 6191681501, 6191812631, - 6191943721, 6192074821, 6192205897, 6192336973, 6192468151, 6192599279, 6192730373, - 6192861491, 6192992579, 6193123661, 6193254733, 6193385827, 6193516907, 6193647983, - 6193779071, 6193910153, 6194041229, 6194172307, 6194303399, 6194434471, 6194565557, - 6194696639, 6194827741, 6194958829, 6195089903, 6195220979, 6195352057, 6195483139, - 6195614219, 6195745307, 6195876397, 6196007491, 6196138573, 6196269649, 6196400723, - 6196531799, 6196662947, 6196794031, 6196925113, 6197056231, 6197187317, 6197318401, - 6197449481, 6197580611, 6197711687, 6197842789, 6197973893, 6198105029, 6198236117, - 6198367247, 6198498373, 6198629453, 6198760531, 6198891619, 6199022693, 6199153799, - 6199284893, 6199416019, 6199547143, 6199678231, 6199809311, 6199940389, 6200071489, - 6200202563, 6200333677, 6200464763, 6200595859, 6200726971, 6200858047, 6200989141, - 6201120221, 6201251311, 6201382391, 6201513463, 6201644549, 6201775667, 6201906757, - 6202037857, 6202168957, 6202300073, 6202431149, 6202562239, 6202693319, 6202824449, - 6202955531, 6203086609, 6203217719, 6203348803, 6203479883, 6203610971, 6203742043, - 6203873119, 6204004201, 6204135323, 6204266401, 6204397487, 6204528587, 6204659663, - 6204790751, 6204921823, 6205052897, 6205184039, 6205315111, 6205446193, 6205577321, - 6205708417, 6205839491, 6205970567, 6206101639, 6206232719, 6206363819, 6206494909, - 6206625991, 6206757071, 6206888143, 6207019261, 6207150353, 6207281453, 6207412567, - 6207543647, 6207674771, 6207805909, 6207936983, 6208068071, 6208199147, 6208330229, - 6208461313, 6208592393, 6208723481, 6208854571, 6208985681, 6209116757, 6209247839, - 6209378921, 6209510003, 6209641079, 6209772181, 6209903281, 6210034357, 6210165457, - 6210296551, 6210427631, 6210558707, 6210689783, 6210820879, 6210951997, 6211083079, - 6211214153, 6211345237, 6211476353, 6211607483, 6211738583, 6211869661, 6212000737, - 6212131817, 6212262899, 6212393983, 6212525069, 6212656181, 6212787299, 6212918389, - 6213049541, 6213180629, 6213311719, 6213442793, 6213573871, 6213704951, 6213836023, - 6213967099, 6214098227, 6214229303, 6214360379, 6214491469, 6214622569, 6214753667, - 6214884749, 6215015827, 6215146901, 6215277989, 6215409097, 6215540183, 6215671279, - 6215802407, 6215933483, 6216064601, 6216195677, 6216326783, 6216457873, 6216588949, - 6216720031, 6216851203, 6216982319, 6217113451, 6217244531, 6217375607, 6217506689, - 6217637779, 6217768861, 6217899943, 6218031023, 6218162101, 6218293177, 6218424269, - 6218555351, 6218686429, 6218817547, 6218948623, 6219079709, 6219210791, 6219341899, - 6219472979, 6219604117, 6219735191, 6219866267, 6219997351, 6220128449, 6220259543, - 6220390697, 6220521781, 6220652857, 6220783963, 6220915061, 6221046133, 6221177219, - 6221308297, 6221439377, 6221570479, 6221701609, 6221832689, 6221963831, 6222094903, - 6222225991, 6222357109, 6222488203, 6222619297, 6222750407, 6222881491, 6223012597, - 6223143671, 6223274753, 6223405841, 6223536961, 6223668053, 6223799147, 6223930241, - 6224061313, 6224192393, 6224323493, 6224454581, 6224585669, 6224716747, 6224847821, - 6224978897, 6225110027, 6225241117, 6225372191, 6225503267, 6225634339, 6225765431, - 6225896503, 6226027649, 6226158721, 6226289801, 6226420903, 6226552001, 6226683077, - 6226814171, 6226945261, 6227076337, 6227207461, 6227338541, 6227469629, 6227600723, - 6227731799, 6227862871, 6227993951, 6228125023, 6228256103, 6228387181, 6228518291, - 6228649367, 6228780461, 6228911539, 6229042613, 6229173701, 6229304773, 6229435867, - 6229566949, 6229698047, 6229829119, 6229960201, 6230091281, 6230222371, 6230353453, - 6230484539, 6230615653, 6230746747, 6230877857, 6231008957, 6231140081, 6231271183, - 6231402263, 6231533411, 6231664487, 6231795569, 6231926647, 6232057771, 6232188863, - 6232319957, 6232451033, 6232582121, 6232713197, 6232844273, 6232975363, 6233106461, - 6233237533, 6233368607, 6233499697, 6233630791, 6233761871, 6233892961, 6234024037, - 6234155117, 6234286207, 6234417289, 6234548377, 6234679459, 6234810607, 6234941689, - 6235072793, 6235203881, 6235334957, 6235466047, 6235597189, 6235728263, 6235859381, - 6235990459, 6236121557, 6236252629, 6236383709, 6236514793, 6236645879, 6236776963, - 6236908049, 6237039131, 6237170263, 6237301363, 6237432473, 6237563641, 6237694721, - 6237825899, 6237956987, 6238088063, 6238219201, 6238350289, 6238481369, 6238612469, - 6238743547, 6238874641, 6239005723, 6239136811, 6239267887, 6239399017, 6239530097, - 6239661173, 6239792249, 6239923331, 6240054413, 6240185509, 6240316591, 6240447667, - 6240578741, 6240709823, 6240840901, 6240971977, 6241103051, 6241234127, 6241365199, - 6241496273, 6241627361, 6241758463, 6241889543, 6242020633, 6242151731, 6242282821, - 6242413901, 6242545039, 6242676163, 6242807261, 6242938343, 6243069473, 6243200597, - 6243331673, 6243462749, 6243593833, 6243724909, 6243856037, 6243987121, 6244118197, - 6244249279, 6244380367, 6244511453, 6244642559, 6244773637, 6244904779, 6245035879, - 6245166997, 6245298071, 6245429147, 6245560219, 6245691301, 6245822393, 6245953507, - 6246084587, 6246215671, 6246346751, 6246477877, 6246608959, 6246740047, 6246871123, - 6247002277, 6247133351, 6247264447, 6247395527, 6247526617, 6247657699, 6247788773, - 6247919857, 6248050931, 6248182013, 6248313091, 6248444179, 6248575259, 6248706367, - 6248837467, 6248968543, 6249099737, 6249230809, 6249361883, 6249492973, 6249624113, - 6249755209, 6249886297, 6250017391, 6250148497, 6250279573, 6250410679, 6250541761, - 6250672837, 6250803917, 6250935049, 6251066183, 6251197261, 6251328337, 6251459429, - 6251590529, 6251721617, 6251852693, 6251983781, 6252114853, 6252245927, 6252377029, - 6252508111, 6252639233, 6252770351, 6252901423, 6253032553, 6253163629, 6253294711, - 6253425793, 6253556921, 6253688041, 6253819127, 6253950203, 6254081369, 6254212451, - 6254343587, 6254474693, 6254605783, 6254736911, 6254867999, 6254999077, 6255130151, - 6255261247, 6255392329, 6255523433, 6255654511, 6255785593, 6255916703, 6256047781, - 6256178879, 6256310003, 6256441097, 6256572181, 6256703291, 6256834403, 6256965479, - 6257096557, 6257227637, 6257358727, 6257489813, 6257620921, 6257752009, 6257883083, - 6258014171, 6258145259, 6258276331, 6258407431, 6258538511, 6258669611, 6258800683, - 6258931807, 6259062893, 6259193971, 6259325053, 6259456153, 6259587233, 6259718347, - 6259849469, 6259980553, 6260111629, 6260242739, 6260373857, 6260504933, 6260636047, - 6260767129, 6260898211, 6261029293, 6261160379, 6261291457, 6261422533, 6261553633, - 6261684721, 6261815821, 6261946913, 6262078001, 6262209073, 6262340153, 6262471249, - 6262602337, 6262733413, 6262864501, 6262995577, 6263126663, 6263257747, 6263388827, - 6263519923, 6263650999, 6263782087, 6263913167, 6264044243, 6264175343, 6264306457, - 6264437537, 6264568633, 6264699731, 6264830813, 6264961897, 6265092971, 6265224089, - 6265355177, 6265486261, 6265617343, 6265748417, 6265879523, 6266010613, 6266141711, - 6266272783, 6266403859, 6266534969, 6266666101, 6266797177, 6266928259, 6267059341, - 6267190417, 6267321521, 6267452599, 6267583687, 6267714769, 6267845867, 6267976969, - 6268108061, 6268239149, 6268370231, 6268501303, 6268632439, 6268763533, 6268894657, - 6269025731, 6269156813, 6269287933, 6269419043, 6269550121, 6269681203, 6269812301, - 6269943389, 6270074483, 6270205573, 6270336647, 6270467773, 6270598849, 6270729931, - 6270861007, 6270992081, 6271123153, 6271254257, 6271385359, 6271516457, 6271647563, - 6271778659, 6271909733, 6272040823, 6272171953, 6272303029, 6272434117, 6272565199, - 6272696273, 6272827387, 6272958463, 6273089551, 6273220631, 6273351703, 6273482777, - 6273613849, 6273744943, 6273876017, 6274007143, 6274138229, 6274269341, 6274400413, - 6274531507, 6274662593, 6274793683, 6274924801, 6275055887, 6275186963, 6275318039, - 6275449129, 6275580203, 6275711287, 6275842373, 6275973449, 6276104531, 6276235621, - 6276366703, 6276497779, 6276628879, 6276759959, 6276891037, 6277022111, 6277153199, - 6277284281, 6277415383, 6277546481, 6277677607, 6277808687, 6277939771, 6278070857, - 6278201959, 6278333041, 6278464133, 6278595283, 6278726387, 6278857489, 6278988571, - 6279119653, 6279250729, 6279381811, 6279512893, 6279643967, 6279775049, 6279906121, - 6280037221, 6280168303, 6280299379, 6280430473, 6280561561, 6280692637, 6280823753, - 6280954837, 6281085919, 6281216999, 6281348081, 6281479153, 6281610263, 6281741339, - 6281872481, 6282003589, 6282134671, 6282265771, 6282396859, 6282527941, 6282659029, - 6282790117, 6282921233, 6283052311, 6283183433, 6283314509, 6283445653, 6283576727, - 6283707803, 6283838879, 6283969973, 6284101049, 6284232133, 6284363219, 6284494343, - 6284625449, 6284756587, 6284887669, 6285018763, 6285149867, 6285280943, 6285412019, - 6285543101, 6285674249, 6285805327, 6285936403, 6286067477, 6286198559, 6286329661, - 6286460743, 6286591849, 6286722929, 6286854037, 6286985123, 6287116223, 6287247319, - 6287378411, 6287509489, 6287640563, 6287771663, 6287902739, 6288033841, 6288164951, - 6288296041, 6288427133, 6288558239, 6288689321, 6288820409, 6288951509, 6289082599, - 6289213703, 6289344823, 6289475897, 6289606991, 6289738067, 6289869241, 6290000351, - 6290131459, 6290262551, 6290393623, 6290524711, 6290655797, 6290786891, 6290917973, - 6291049069, 6291180167, 6291311249, 6291442321, 6291573439, 6291704521, 6291835597, - 6291966691, 6292097771, 6292228849, 6292359947, 6292491071, 6292622143, 6292753237, - 6292884329, 6293015431, 6293146507, 6293277589, 6293408669, 6293539751, 6293670829, - 6293801923, 6293933071, 6294064151, 6294195263, 6294326341, 6294457441, 6294588529, - 6294719611, 6294850733, 6294981811, 6295112891, 6295243963, 6295375063, 6295506149, - 6295637239, 6295768327, 6295899419, 6296030501, 6296161583, 6296292659, 6296423743, - 6296554861, 6296685953, 6296817041, 6296948113, 6297079213, 6297210323, 6297341417, - 6297472543, 6297603629, 6297734713, 6297865787, 6297996863, 6298128097, 6298259197, - 6298390277, 6298521349, 6298652443, 6298783549, 6298914649, 6299045729, 6299176811, - 6299307901, 6299438987, 6299570083, 6299701159, 6299832251, 6299963333, 6300094421, - 6300225559, 6300356651, 6300487729, 6300618809, 6300749951, 6300881029, 6301012117, - 6301143197, 6301274293, 6301405367, 6301536443, 6301667521, 6301798619, 6301929707, - 6302060783, 6302191867, 6302322941, 6302454017, 6302585089, 6302716163, 6302847263, - 6302978347, 6303109427, 6303240529, 6303371603, 6303502679, 6303633767, 6303764861, - 6303895937, 6304027027, 6304158103, 6304289179, 6304420253, 6304551349, 6304682431, - 6304813577, 6304944721, 6305075801, 6305206877, 6305337949, 6305469047, 6305600131, - 6305731213, 6305862287, 6305993359, 6306124457, 6306255541, 6306386663, 6306517739, - 6306648833, 6306779909, 6306910991, 6307042067, 6307173149, 6307304233, 6307435327, - 6307566409, 6307697509, 6307828607, 6307959683, 6308090809, 6308221921, 6308353021, - 6308484113, 6308615207, 6308746289, 6308877409, 6309008483, 6309139579, 6309270659, - 6309401731, 6309532819, 6309663907, 6309794983, 6309926059, 6310057183, 6310188257, - 6310319339, 6310450429, 6310581503, 6310712593, 6310843687, 6310974767, 6311105839, - 6311236937, 6311368079, 6311499151, 6311630243, 6311761319, 6311892409, 6312023519, - 6312154603, 6312285701, 6312416777, 6312547849, 6312678937, 6312810043, 6312941149, - 6313072273, 6313203361, 6313334449, 6313465567, 6313596643, 6313727731, 6313858813, - 6313989887, 6314120959, 6314252129, 6314383249, 6314514329, 6314645419, 6314776519, - 6314907611, 6315038711, 6315169787, 6315300863, 6315431939, 6315563011, 6315694087, - 6315825163, 6315956261, 6316087399, 6316218499, 6316349621, 6316480697, 6316611779, - 6316742879, 6316873961, 6317005033, 6317136121, 6317267219, 6317398303, 6317529451, - 6317660533, 6317791609, 6317922701, 6318053801, 6318184879, 6318315961, 6318447053, - 6318578141, 6318709273, 6318840349, 6318971441, 6319102541, 6319233629, 6319364773, - 6319495907, 6319626979, 6319758059, 6319889131, 6320020261, 6320151361, 6320282443, - 6320413531, 6320544611, 6320675689, 6320806813, 6320937911, 6321068989, 6321200063, - 6321331171, 6321462271, 6321593353, 6321724433, 6321855511, 6321986599, 6322117691, - 6322248797, 6322379881, 6322510967, 6322642111, 6322773187, 6322904261, 6323035351, - 6323166433, 6323297507, 6323428583, 6323559667, 6323690749, 6323821831, 6323952967, - 6324084043, 6324215147, 6324346219, 6324477293, 6324608369, 6324739489, 6324870619, - 6325001693, 6325132787, 6325263869, 6325394947, 6325526047, 6325657189, 6325788263, - 6325919339, 6326050417, 6326181497, 6326312581, 6326443657, 6326574797, 6326705881, - 6326836963, 6326968057, 6327099133, 6327230207, 6327361301, 6327492389, 6327623479, - 6327754571, 6327885643, 6328016759, 6328147873, 6328278959, 6328410037, 6328541111, - 6328672199, 6328803277, 6328934351, 6329065427, 6329196529, 6329327603, 6329458679, - 6329589751, 6329720827, 6329851903, 6329983027, 6330114137, 6330245209, 6330376289, - 6330507389, 6330638527, 6330769603, 6330900679, 6331031809, 6331162913, 6331294009, - 6331425097, 6331556191, 6331687267, 6331818377, 6331949467, 6332080571, 6332211647, - 6332342749, 6332473859, 6332604961, 6332736089, 6332867161, 6332998271, 6333129347, - 6333260477, 6333391601, 6333522677, 6333653759, 6333784859, 6333915941, 6334047047, - 6334178119, 6334309193, 6334440271, 6334571377, 6334702457, 6334833541, 6334964617, - 6335095721, 6335226803, 6335357939, 6335489057, 6335620183, 6335751259, 6335882339, - 6336013421, 6336144523, 6336275609, 6336406693, 6336537803, 6336668879, 6336799981, - 6336931079, 6337062161, 6337193237, 6337324337, 6337455413, 6337586503, 6337717591, - 6337848679, 6337979761, 6338110843, 6338241929, 6338373011, 6338504089, 6338635169, - 6338766289, 6338897371, 6339028447, 6339159523, 6339290611, 6339421709, 6339552809, - 6339683897, 6339815021, 6339946141, 6340077217, 6340208311, 6340339391, 6340470473, - 6340601573, 6340732663, 6340863751, 6340994831, 6341125927, 6341257003, 6341388091, - 6341519179, 6341650297, 6341781443, 6341912569, 6342043679, 6342174793, 6342305869, - 6342436943, 6342568031, 6342699119, 6342830231, 6342961333, 6343092433, 6343223519, - 6343354603, 6343485703, 6343616779, 6343747867, 6343878941, 6344010019, 6344141099, - 6344272199, 6344403277, 6344534377, 6344665451, 6344796539, 6344927681, 6345058781, - 6345189853, 6345320951, 6345452023, 6345583141, 6345714223, 6345845333, 6345976409, - 6346107511, 6346238597, 6346369681, 6346500767, 6346631869, 6346762963, 6346894039, - 6347025137, 6347156213, 6347287301, 6347418421, 6347549557, 6347680649, 6347811731, - 6347942827, 6348073903, 6348204983, 6348336073, 6348467149, 6348598229, 6348729311, - 6348860459, 6348991541, 6349122613, 6349253699, 6349384801, 6349515917, 6349647047, - 6349778209, 6349909297, 6350040371, 6350171467, 6350302547, 6350433619, 6350564699, - 6350695829, 6350826929, 6350958011, 6351089099, 6351220219, 6351351311, 6351482411, - 6351613487, 6351744571, 6351875659, 6352006747, 6352137859, 6352268941, 6352400027, - 6352531111, 6352662191, 6352793281, 6352924363, 6353055473, 6353186563, 6353317681, - 6353448757, 6353579849, 6353710931, 6353842031, 6353973113, 6354104201, 6354235291, - 6354366367, 6354497453, 6354628541, 6354759629, 6354890749, 6355021837, 6355152919, - 6355284011, 6355415083, 6355546177, 6355677277, 6355808399, 6355939501, 6356070587, - 6356201681, 6356332777, 6356463857, 6356594953, 6356726083, 6356857181, 6356988269, - 6357119357, 6357250429, 6357381521, 6357512611, 6357643723, 6357774803, 6357905881, - 6358036957, 6358168031, 6358299131, 6358430207, 6358561309, 6358692397, 6358823477, - 6358954559, 6359085643, 6359216749, 6359347829, 6359478901, 6359609983, 6359741081, - 6359872199, 6360003283, 6360134357, 6360265469, 6360396577, 6360527681, 6360658781, - 6360789889, 6360920989, 6361052081, 6361183187, 6361314283, 6361445371, 6361576457, - 6361707529, 6361838603, 6361969693, 6362100769, 6362231849, 6362362957, 6362494031, - 6362625127, 6362756207, 6362887339, 6363018413, 6363149519, 6363280613, 6363411697, - 6363542777, 6363673873, 6363804977, 6363936127, 6364067201, 6364198331, 6364329403, - 6364460521, 6364591603, 6364722677, 6364853749, 6364984837, 6365115917, 6365247001, - 6365378099, 6365509231, 6365640311, 6365771383, 6365902471, 6366033559, 6366164683, - 6366295769, 6366426851, 6366557957, 6366689089, 6366820193, 6366951277, 6367082383, - 6367213471, 6367344553, 6367475627, 6367606753, 6367737829, 6367868933, 6368000017, - 6368131109, 6368262191, 6368393293, 6368524387, 6368655463, 6368786573, 6368917699, - 6369048779, 6369179879, 6369310951, 6369442069, 6369573157, 6369704233, 6369835309, - 6369966413, 6370097501, 6370228577, 6370359679, 6370490759, 6370621847, 6370752961, - 6370884041, 6371015117, 6371146189, 6371277299, 6371408413, 6371539501, 6371670619, - 6371801693, 6371932771, 6372063853, 6372194947, 6372326057, 6372457151, 6372588223, - 6372719299, 6372850381, 6372981467, 6373112567, 6373243651, 6373374737, 6373505821, - 6373636901, 6373767977, 6373899079, 6374030171, 6374161247, 6374292359, 6374423431, - 6374554507, 6374685631, 6374816717, 6374947837, 6375078937, 6375210043, 6375341143, - 6375472247, 6375603323, 6375734401, 6375865477, 6375996553, 6376127671, 6376258793, - 6376389881, 6376520987, 6376652099, 6376783183, 6376914277, 6377045351, 6377176427, - 6377307523, 6377438653, 6377569729, 6377700869, 6377831959, 6377963051, 6378094139, - 6378225211, 6378356287, 6378487361, 6378618437, 6378749513, 6378880609, 6379011707, - 6379142807, 6379273963, 6379405069, 6379536157, 6379667309, 6379798441, 6379929529, - 6380060623, 6380191709, 6380322829, 6380453909, 6380585011, 6380716087, 6380847163, - 6380978269, 6381109349, 6381240487, 6381371567, 6381502643, 6381633749, 6381764843, - 6381895937, 6382027027, 6382158103, 6382289227, 6382420309, 6382551389, 6382682461, - 6382813537, 6382944649, 6383075747, 6383206831, 6383337943, 6383469031, 6383600141, - 6383731241, 6383862343, 6383993417, 6384124489, 6384255589, 6384386681, 6384517829, - 6384648929, 6384780011, 6384911083, 6385042171, 6385173247, 6385304353, 6385435447, - 6385566533, 6385697609, 6385828699, 6385959779, 6386090897, 6386221997, 6386353073, - 6386484173, 6386615281, 6386746381, 6386877479, 6387008591, 6387139663, 6387270763, - 6387401861, 6387532933, 6387664021, 6387795097, 6387926191, 6388057297, 6388188371, - 6388319447, 6388450529, 6388581631, 6388712747, 6388843823, 6388974919, 6389106011, - 6389237083, 6389368211, 6389499331, 6389630419, 6389761513, 6389892611, 6390023693, - 6390154777, 6390285877, 6390416959, 6390548039, 6390679129, 6390810211, 6390941341, - 6391072417, 6391203493, 6391334581, 6391465697, 6391596803, 6391727891, 6391859003, - 6391990091, 6392121163, 6392252287, 6392383373, 6392514481, 6392645591, 6392776681, - 6392907769, 6393038863, 6393169963, 6393301037, 6393432127, 6393563219, 6393694327, - 6393825419, 6393956497, 6394087571, 6394218643, 6394349729, 6394480817, 6394611901, - 6394742983, 6394874063, 6395005147, 6395136221, 6395267297, 6395398531, 6395529631, - 6395660731, 6395791823, 6395922901, 6396053977, 6396185071, 6396316153, 6396447229, - 6396578327, 6396709411, 6396840487, 6396971563, 6397102651, 6397233751, 6397364833, - 6397495927, 6397627001, 6397758089, 6397889167, 6398020273, 6398151359, 6398282453, - 6398413537, 6398544623, 6398675707, 6398806781, 6398937997, 6399069077, 6399200167, - 6399331243, 6399462343, 6399593419, 6399724517, 6399855589, 6399986669, 6400117769, - 6400248853, 6400379969, 6400511041, 6400642123, 6400773199, 6400904299, 6401035373, - 6401166461, 6401297593, 6401428699, 6401559779, 6401690873, 6401821967, 6401953067, - 6402084149, 6402215233, 6402346337, 6402477413, 6402608489, 6402739573, 6402870671, - 6403001777, 6403132859, 6403263947, 6403395023, 6403526099, 6403657181, 6403788277, - 6403919359, 6404050489, 6404181577, 6404312659, 6404443751, 6404574857, 6404705929, - 6404837009, 6404968111, 6405099191, 6405230291, 6405361423, 6405492539, 6405623639, - 6405754757, 6405885833, 6406016909, 6406147997, 6406279073, 6406410149, 6406541227, - 6406672303, 6406803407, 6406934489, 6407065571, 6407196647, 6407327723, 6407458801, - 6407589883, 6407720959, 6407852039, 6407983139, 6408114217, 6408245297, 6408376369, - 6408507449, 6408638521, 6408769643, 6408900739, 6409031869, 6409162987, 6409294069, - 6409425149, 6409556323, 6409687409, 6409818581, 6409949659, 6410080763, 6410211859, - 6410342963, 6410474047, 6410605129, 6410736209, 6410867293, 6410998453, 6411129553, - 6411260627, 6411391699, 6411522839, 6411653947, 6411785063, 6411916151, 6412047227, - 6412178317, 6412309417, 6412440491, 6412571567, 6412702643, 6412833761, 6412964849, - 6413095921, 6413227001, 6413358073, 6413489167, 6413620247, 6413751329, 6413882413, - 6414013499, 6414144593, 6414275701, 6414406787, 6414537889, 6414668969, 6414800047, - 6414931123, 6415062211, 6415193293, 6415324367, 6415455451, 6415586537, 6415717661, - 6415848737, 6415979813, 6416110891, 6416241991, 6416373071, 6416504177, 6416635273, - 6416766373, 6416897477, 6417028559, 6417159667, 6417290741, 6417421819, 6417552907, - 6417683989, 6417815087, 6417946169, 6418077257, 6418208333, 6418339423, 6418470511, - 6418601621, 6418732693, 6418863769, 6418994851, 6419125987, 6419257081, 6419388181, - 6419519269, 6419650343, 6419781421, 6419912503, 6420043583, 6420174659, 6420305761, - 6420436849, 6420567941, 6420699071, 6420830153, 6420961249, 6421092329, 6421223401, - 6421354483, 6421485557, 6421616633, 6421747747, 6421878847, 6422009939, 6422141039, - 6422272123, 6422403227, 6422534311, 6422665397, 6422796481, 6422927579, 6423058657, - 6423189733, 6423320821, 6423451897, 6423582973, 6423714053, 6423845149, 6423976231, - 6424107311, 6424238393, 6424369481, 6424500557, 6424631701, 6424762781, 6424893877, - 6425025053, 6425156141, 6425287223, 6425418301, 6425549419, 6425680531, 6425811629, - 6425942701, 6426073777, 6426204877, 6426336001, 6426467119, 6426598193, 6426729289, - 6426860389, 6426991469, 6427122587, 6427253681, 6427384763, 6427515869, 6427646983, - 6427778083, 6427909157, 6428040239, 6428171311, 6428302393, 6428433469, 6428564587, - 6428695667, 6428826739, 6428957849, 6429088933, 6429220013, 6429351197, 6429482287, - 6429613391, 6429744473, 6429875579, 6430006651, 6430137731, 6430268809, 6430399903, - 6430531073, 6430662193, 6430793287, 6430924387, 6431055467, 6431186543, 6431317663, - 6431448739, 6431579813, 6431710897, 6431841973, 6431973071, 6432104183, 6432235279, - 6432366407, 6432497509, 6432628597, 6432759689, 6432890767, 6433021849, 6433152949, - 6433284029, 6433415117, 6433546211, 6433677293, 6433808387, 6433939513, 6434070611, - 6434201699, 6434332781, 6434463857, 6434594941, 6434726021, 6434857103, 6434988187, - 6435119263, 6435250337, 6435381413, 6435512507, 6435643609, 6435774703, 6435905803, - 6436036913, 6436168009, 6436299119, 6436430191, 6436561283, 6436692373, 6436823453, - 6436954543, 6437085617, 6437216689, 6437347837, 6437478913, 6437609987, 6437741071, - 6437872159, 6438003259, 6438134359, 6438265451, 6438396623, 6438527717, 6438658817, - 6438789893, 6438921019, 6439052093, 6439183183, 6439314311, 6439445399, 6439576477, - 6439707557, 6439838653, 6439969741, 6440100817, 6440231891, 6440362997, 6440494069, - 6440625157, 6440756233, 6440887351, 6441018427, 6441149509, 6441280583, 6441411667, - 6441542741, 6441673837, 6441804949, 6441936037, 6442067117, 6442198193, 6442329269, - 6442460347, 6442591447, 6442722607, 6442853687, 6442984787, 6443115883, 6443246969, - 6443378047, 6443509139, 6443640211, 6443771291, 6443902363, 6444033451, 6444164543, - 6444295681, 6444426811, 6444557893, 6444688973, 6444820069, 6444951179, 6445082261, - 6445213337, 6445344421, 6445475501, 6445606589, 6445737671, 6445868771, 6445999843, - 6446130937, 6446262029, 6446393111, 6446524211, 6446655301, 6446786383, 6446917523, - 6447048607, 6447179707, 6447310783, 6447441877, 6447572953, 6447704051, 6447835139, - 6447966271, 6448097389, 6448228489, 6448359563, 6448490681, 6448621783, 6448752887, - 6448883981, 6449015071, 6449146153, 6449277253, 6449408369, 6449539507, 6449670607, - 6449801719, 6449932799, 6450063883, 6450194963, 6450326083, 6450457159, 6450588247, - 6450719323, 6450850429, 6450981541, 6451112623, 6451243703, 6451374827, 6451505927, - 6451637021, 6451768123, 6451899203, 6452030303, 6452161421, 6452292499, 6452423629, - 6452554741, 6452685859, 6452816947, 6452948023, 6453079141, 6453210227, 6453341299, - 6453472397, 6453603469, 6453734549, 6453865631, 6453996727, 6454127807, 6454258891, - 6454389967, 6454521071, 6454652143, 6454783249, 6454914359, 6455045431, 6455176517, - 6455307631, 6455438707, 6455569787, 6455700859, 6455831939, 6455963011, 6456094111, - 6456225203, 6456356287, 6456487379, 6456618457, 6456749531, 6456880603, 6457011719, - 6457142899, 6457273993, 6457405079, 6457536157, 6457667263, 6457798349, 6457929449, - 6458060561, 6458191661, 6458322733, 6458453839, 6458584927, 6458716003, 6458847089, - 6458978177, 6459109301, 6459240373, 6459371453, 6459502537, 6459633643, 6459764747, - 6459895829, 6460026919, 6460158031, 6460289111, 6460420193, 6460551269, 6460682341, - 6460813421, 6460944493, 6461075581, 6461206657, 6461337739, 6461468869, 6461599957, - 6461731039, 6461862119, 6461993201, 6462124297, 6462255439, 6462386527, 6462517613, - 6462648707, 6462779783, 6462910877, 6463041953, 6463173049, 6463304131, 6463435213, - 6463566341, 6463697431, 6463828513, 6463959587, 6464090669, 6464221747, 6464352847, - 6464483923, 6464615009, 6464746109, 6464877197, 6465008273, 6465139349, 6465270439, - 6465401513, 6465532609, 6465663697, 6465794827, 6465925913, 6466056997, 6466188073, - 6466319147, 6466450231, 6466581311, 6466712389, 6466843463, 6466974559, 6467105651, - 6467236817, 6467367889, 6467498963, 6467630053, 6467761141, 6467892227, 6468023351, - 6468154447, 6468285557, 6468416651, 6468547733, 6468678841, 6468809917, 6468941033, - 6469072111, 6469203199, 6469334303, 6469465391, 6469596473, 6469727549, 6469858651, - 6469989731, 6470120897, 6470251979, 6470383081, 6470514187, 6470645261, 6470776337, - 6470907409, 6471038503, 6471169583, 6471300673, 6471431767, 6471562841, 6471693953, - 6471825053, 6471956137, 6472087213, 6472218287, 6472349393, 6472480501, 6472611601, - 6472742701, 6472873787, 6473004859, 6473135941, 6473267023, 6473398147, 6473529241, - 6473660321, 6473791453, 6473922557, 6474053629, 6474184711, 6474315811, 6474446911, - 6474577987, 6474709103, 6474840199, 6474971281, 6475102363, 6475233437, 6475364629, - 6475495711, 6475626799, 6475757881, 6475888957, 6476020039, 6476151133, 6476282231, - 6476413373, 6476544449, 6476675567, 6476806709, 6476937791, 6477068869, 6477199943, - 6477331019, 6477462149, 6477593263, 6477724339, 6477855413, 6477986539, 6478117649, - 6478248761, 6478379917, 6478510991, 6478642069, 6478773143, 6478904251, 6479035327, - 6479166403, 6479297509, 6479428607, 6479559689, 6479690761, 6479821849, 6479952923, - 6480083999, 6480215087, 6480346183, 6480477259, 6480608357, 6480739471, 6480870547, - 6481001641, 6481132753, 6481263917, 6481395017, 6481526089, 6481657183, 6481788301, - 6481919377, 6482050459, 6482181539, 6482312701, 6482443777, 6482574851, 6482705941, - 6482837027, 6482968099, 6483099173, 6483230261, 6483361333, 6483492439, 6483623533, - 6483754633, 6483885719, 6484016807, 6484147883, 6484278967, 6484410067, 6484541177, - 6484672267, 6484803349, 6484934459, 6485065537, 6485196631, 6485327711, 6485458783, - 6485589911, 6485721001, 6485852081, 6485983201, 6486114289, 6486245371, 6486376447, - 6486507551, 6486638629, 6486769721, 6486900809, 6487031951, 6487163069, 6487294243, - 6487425383, 6487556497, 6487687571, 6487818691, 6487949771, 6488080849, 6488211931, - 6488343013, 6488474101, 6488605177, 6488736253, 6488867339, 6488998423, 6489129497, - 6489260633, 6489391717, 6489522797, 6489653879, 6489784979, 6489916067, 6490047163, - 6490178237, 6490309333, 6490440427, 6490571509, 6490702583, 6490833659, 6490964743, - 6491095823, 6491226923, 6491358001, 6491489077, 6491620169, 6491751241, 6491882339, - 6492013421, 6492144497, 6492275609, 6492406681, 6492537757, 6492668893, 6492799969, - 6492931087, 6493062181, 6493193261, 6493324333, 6493455407, 6493586483, 6493717577, - 6493848679, 6493979759, 6494110867, 6494241947, 6494373019, 6494504153, 6494635229, - 6494766301, 6494897377, 6495028451, 6495159523, 6495290611, 6495421721, 6495552793, - 6495683879, 6495814993, 6495946087, 6496077173, 6496208309, 6496339391, 6496470509, - 6496601593, 6496732729, 6496863809, 6496994923, 6497126017, 6497257223, 6497388299, - 6497519393, 6497650469, 6497781581, 6497912683, 6498043787, 6498174899, 6498305999, - 6498437107, 6498568187, 6498699283, 6498830369, 6498961531, 6499092637, 6499223737, - 6499354867, 6499485977, 6499617053, 6499748141, 6499879223, 6500010337, 6500141441, - 6500272529, 6500403601, 6500534687, 6500665771, 6500796859, 6500927987, 6501059077, - 6501190181, 6501321263, 6501452351, 6501583423, 6501714533, 6501845621, 6501976693, - 6502107769, 6502238867, 6502369963, 6502501087, 6502632161, 6502763233, 6502894319, - 6503025401, 6503156477, 6503287577, 6503418683, 6503549761, 6503680877, 6503811953, - 6503943053, 6504074141, 6504205217, 6504336361, 6504467441, 6504598517, 6504729617, - 6504860741, 6504991819, 6505122893, 6505253977, 6505385063, 6505516159, 6505647251, - 6505778329, 6505909429, 6506040503, 6506171587, 6506302681, 6506433763, 6506564837, - 6506695919, 6506827003, 6506958079, 6507089179, 6507220309, 6507351397, 6507482473, - 6507613547, 6507744631, 6507875729, 6508006823, 6508137907, 6508268983, 6508400057, - 6508531129, 6508662221, 6508793293, 6508924381, 6509055463, 6509186543, 6509317631, - 6509448709, 6509579827, 6509710937, 6509842021, 6509973161, 6510104291, 6510235363, - 6510366437, 6510497533, 6510628609, 6510759683, 6510890783, 6511021871, 6511152971, - 6511284047, 6511415147, 6511546231, 6511677311, 6511808389, 6511939463, 6512070557, - 6512201629, 6512332709, 6512463781, 6512594863, 6512725943, 6512857019, 6512988109, - 6513119233, 6513250309, 6513381383, 6513512497, 6513643583, 6513774667, 6513905743, - 6514036819, 6514167923, 6514299031, 6514430113, 6514561223, 6514692311, 6514823389, - 6514954469, 6515085587, 6515216699, 6515347781, 6515478881, 6515609981, 6515741059, - 6515872133, 6516003209, 6516134291, 6516265433, 6516396533, 6516527617, 6516658691, - 6516789871, 6516920951, 6517052023, 6517183109, 6517314197, 6517445269, 6517576361, - 6517707433, 6517838513, 6517969603, 6518100707, 6518231803, 6518363009, 6518494097, - 6518625181, 6518756261, 6518887363, 6519018439, 6519149537, 6519280613, 6519411779, - 6519542923, 6519673997, 6519805073, 6519936149, 6520067237, 6520198337, 6520329421, - 6520460501, 6520591573, 6520722653, 6520853737, 6520984837, 6521115947, 6521247053, - 6521378183, 6521509261, 6521640337, 6521771411, 6521902507, 6522033587, 6522164689, - 6522295823, 6522426919, 6522557999, 6522689083, 6522820159, 6522951233, 6523082323, - 6523213423, 6523344497, 6523475611, 6523606757, 6523737853, 6523868927, 6524000009, - 6524131091, 6524262167, 6524393243, 6524524327, 6524655421, 6524786509, 6524917601, - 6525048697, 6525179779, 6525310859, 6525442003, 6525573181, 6525704291, 6525835363, - 6525966451, 6526097549, 6526228627, 6526359703, 6526490801, 6526621891, 6526752971, - 6526884071, 6527015167, 6527146253, 6527277373, 6527408449, 6527539553, 6527670631, - 6527801717, 6527932891, 6528063967, 6528195059, 6528326149, 6528457237, 6528588329, - 6528719401, 6528850501, 6528981581, 6529112669, 6529243741, 6529374821, 6529505893, - 6529636991, 6529768073, 6529899149, 6530030233, 6530161373, 6530292449, 6530423573, - 6530554673, 6530685787, 6530816861, 6530947967, 6531079109, 6531210197, 6531341281, - 6531472379, 6531603511, 6531734591, 6531865667, 6531996749, 6532127827, 6532258939, - 6532390013, 6532521113, 6532652233, 6532783333, 6532914433, 6533045531, 6533176609, - 6533307707, 6533438801, 6533569949, 6533701037, 6533832133, 6533963207, 6534094289, - 6534225361, 6534356441, 6534487559, 6534618631, 6534749717, 6534880811, 6535011887, - 6535142959, 6535274059, 6535405147, 6535536221, 6535667351, 6535798441, 6535929539, - 6536060617, 6536191699, 6536322799, 6536453873, 6536584973, 6536716051, 6536847137, - 6536978233, 6537109361, 6537240461, 6537371569, 6537502651, 6537633733, 6537764819, - 6537895961, 6538027037, 6538158119, 6538289201, 6538420307, 6538551413, 6538682509, - 6538813613, 6538944703, 6539075783, 6539206879, 6539337971, 6539469047, 6539600147, - 6539731279, 6539862353, 6539993429, 6540124537, 6540255613, 6540386717, 6540517811, - 6540648889, 6540780007, 6540911119, 6541042219, 6541173293, 6541304381, 6541435507, - 6541566593, 6541697719, 6541828861, 6541959937, 6542091037, 6542222131, 6542353247, - 6542484331, 6542615407, 6542746517, 6542877641, 6543008723, 6543139831, 6543270907, - 6543401981, 6543533057, 6543664187, 6543795287, 6543926383, 6544057483, 6544188559, - 6544319633, 6544450711, 6544581809, 6544712903, 6544844003, 6544975091, 6545106179, - 6545237261, 6545368337, 6545499419, 6545630491, 6545761571, 6545892671, 6546023761, - 6546154883, 6546285959, 6546417037, 6546548117, 6546679189, 6546810287, 6546941389, - 6547072463, 6547203547, 6547334623, 6547465699, 6547596779, 6547727867, 6547858939, - 6547990019, 6548121113, 6548252189, 6548383267, 6548514347, 6548645449, 6548776523, - 6548907619, 6549038747, 6549169841, 6549300913, 6549431989, 6549563071, 6549694181, - 6549825307, 6549956389, 6550087469, 6550218557, 6550349629, 6550480711, 6550611799, - 6550742873, 6550873957, 6551005037, 6551136113, 6551267197, 6551398279, 6551529371, - 6551660449, 6551791601, 6551922673, 6552053779, 6552184913, 6552316031, 6552447127, - 6552578231, 6552709333, 6552840407, 6552971489, 6553102573, 6553233649, 6553364737, - 6553495813, 6553626971, 6553758049, 6553889137, 6554020229, 6554151313, 6554282401, - 6554413499, 6554544571, 6554675693, 6554806771, 6554937859, 6555068939, 6555200023, - 6555331109, 6555462197, 6555593269, 6555724367, 6555855451, 6555986531, 6556117621, - 6556248697, 6556379773, 6556510867, 6556641941, 6556773053, 6556904129, 6557035211, - 6557166289, 6557297363, 6557428441, 6557559523, 6557690603, 6557821693, 6557952767, - 6558083839, 6558214913, 6558345991, 6558477067, 6558608159, 6558739249, 6558870323, - 6559001399, 6559132499, 6559263583, 6559394657, 6559525729, 6559656847, 6559787939, - 6559919029, 6560050153, 6560181227, 6560312321, 6560443427, 6560574521, 6560705617, - 6560836693, 6560967781, 6561098861, 6561229937, 6561361019, 6561492097, 6561623197, - 6561754301, 6561885377, 6562016459, 6562147547, 6562278631, 6562409723, 6562540807, - 6562671881, 6562802959, 6562934033, 6563065109, 6563196229, 6563327321, 6563458393, - 6563589467, 6563720557, 6563851631, 6563982713, 6564113789, 6564244871, 6564375943, - 6564507017, 6564638231, 6564769307, 6564900401, 6565031497, 6565162577, 6565293661, - 6565424737, 6565555837, 6565686923, 6565818019, 6565949167, 6566080291, 6566211383, - 6566342467, 6566473561, 6566604701, 6566735783, 6566866877, 6566997977, 6567129077, - 6567260159, 6567391267, 6567522343, 6567653441, 6567784519, 6567915671, 6568046743, - 6568177831, 6568308913, 6568440001, 6568571089, 6568702169, 6568833259, 6568964357, - 6569095433, 6569226533, 6569357609, 6569488691, 6569619781, 6569750893, 6569881993, - 6570013123, 6570144199, 6570275287, 6570406393, 6570537487, 6570668563, 6570799657, - 6570930799, 6571061873, 6571192951, 6571324103, 6571455181, 6571586291, 6571717423, - 6571848509, 6571979611, 6572110709, 6572241791, 6572372867, 6572503961, 6572635033, - 6572766107, 6572897179, 6573028261, 6573159413, 6573290489, 6573421577, 6573552653, - 6573683749, 6573814823, 6573945899, 6574076983, 6574208087, 6574339171, 6574470247, - 6574601323, 6574732447, 6574863527, 6574994623, 6575125741, 6575256823, 6575387899, - 6575519009, 6575650091, 6575781197, 6575912281, 6576043373, 6576174457, 6576305537, - 6576436637, 6576567719, 6576698801, 6576829877, 6576960967, 6577092061, 6577223183, - 6577354313, 6577485391, 6577616491, 6577747567, 6577878677, 6578009759, 6578140831, - 6578271913, 6578402993, 6578534069, 6578665147, 6578796229, 6578927347, 6579058457, - 6579189541, 6579320617, 6579451699, 6579582839, 6579713963, 6579845047, 6579976163, - 6580107253, 6580238377, 6580369459, 6580500557, 6580631639, 6580762711, 6580893829, - 6581024903, 6581155979, 6581287087, 6581418187, 6581549263, 6581680363, 6581811479, - 6581942567, 6582073643, 6582204731, 6582335807, 6582466883, 6582597971, 6582729059, - 6582860147, 6582991297, 6583122373, 6583253477, 6583384601, 6583515691, 6583646767, - 6583777841, 6583908967, 6584040049, 6584171123, 6584302223, 6584433301, 6584564387, - 6584695471, 6584826551, 6584957651, 6585088733, 6585219811, 6585350887, 6585481961, - 6585613039, 6585744127, 6585875207, 6586006303, 6586137427, 6586268567, 6586399643, - 6586530739, 6586661881, 6586793047, 6586924129, 6587055221, 6587186293, 6587317381, - 6587448487, 6587579591, 6587710663, 6587841761, 6587972849, 6588103937, 6588235021, - 6588366139, 6588497219, 6588628297, 6588759391, 6588890501, 6589021601, 6589152679, - 6589283783, 6589414879, 6589545959, 6589677043, 6589808227, 6589939303, 6590070397, - 6590201503, 6590332601, 6590463679, 6590594783, 6590725913, 6590856989, 6590988067, - 6591119149, 6591250229, 6591381311, 6591512387, 6591643463, 6591774571, 6591905651, - 6592036753, 6592167871, 6592298969, 6592430063, 6592561163, 6592692289, 6592823401, - 6592954493, 6593085589, 6593216677, 6593347753, 6593478887, 6593609983, 6593741087, - 6593872193, 6594003281, 6594134377, 6594265511, 6594396583, 6594527663, 6594658789, - 6594789869, 6594921017, 6595052117, 6595183211, 6595314353, 6595445459, 6595576567, - 6595707647, 6595838749, 6595969829, 6596100911, 6596232001, 6596363089, 6596494171, - 6596625247, 6596756401, 6596887481, 6597018569, 6597149641, 6597280771, 6597411859, - 6597542947, 6597674023, 6597805099, 6597936173, 6598067263, 6598198351, 6598329427, - 6598460503, 6598591609, 6598722761, 6598853851, 6598984927, 6599116003, 6599247077, - 6599378161, 6599509243, 6599640323, 6599771419, 6599902513, 6600033611, 6600164689, - 6600295783, 6600426869, 6600557969, 6600689087, 6600820183, 6600951257, 6601082329, - 6601213447, 6601344539, 6601475651, 6601606723, 6601737803, 6601868891, 6601999967, - 6602131121, 6602262197, 6602393311, 6602524399, 6602655503, 6602786609, 6602917703, - 6603048787, 6603179879, 6603310957, 6603442037, 6603573121, 6603704197, 6603835313, - 6603966419, 6604097503, 6604228619, 6604359709, 6604490797, 6604621957, 6604753063, - 6604884157, 6605015231, 6605146367, 6605277443, 6605408519, 6605539597, 6605670749, - 6605801821, 6605932903, 6606064007, 6606195143, 6606326219, 6606457307, 6606588409, - 6606719491, 6606850609, 6606981707, 6607112783, 6607243859, 6607374973, 6607506071, - 6607637143, 6607768231, 6607899323, 6608030411, 6608161489, 6608292571, 6608423699, - 6608554831, 6608685931, 6608817011, 6608948113, 6609079199, 6609210281, 6609341357, - 6609472523, 6609603599, 6609734689, 6609865763, 6609996839, 6610127917, 6610259021, - 6610390103, 6610521187, 6610652329, 6610783423, 6610914503, 6611045593, 6611176679, - 6611307767, 6611438843, 6611569931, 6611701043, 6611832121, 6611963201, 6612094273, - 6612225353, 6612356449, 6612487529, 6612618629, 6612749701, 6612880789, 6613011863, - 6613142947, 6613274021, 6613405103, 6613536221, 6613667293, 6613798379, 6613929463, - 6614060567, 6614191667, 6614322749, 6614453843, 6614584937, 6614716013, 6614847089, - 6614978189, 6615109261, 6615240347, 6615371467, 6615502547, 6615633637, 6615764713, - 6615895787, 6616026887, 6616157959, 6616289047, 6616420147, 6616551223, 6616682323, - 6616813417, 6616944563, 6617075639, 6617206733, 6617337809, 6617468933, 6617600051, - 6617731181, 6617862253, 6617993329, 6618124421, 6618255559, 6618386647, 6618517727, - 6618648809, 6618779911, 6618910993, 6619042117, 6619173229, 6619304359, 6619435447, - 6619566523, 6619697611, 6619828687, 6619959763, 6620090837, 6620221921, 6620353009, - 6620484083, 6620615219, 6620746309, 6620877391, 6621008467, 6621139571, 6621270661, - 6621401747, 6621532837, 6621663941, 6621795031, 6621926117, 6622057199, 6622188319, - 6622319399, 6622450477, 6622581583, 6622712669, 6622843763, 6622974863, 6623105959, - 6623237041, 6623368117, 6623499227, 6623630303, 6623761379, 6623892467, 6624023563, - 6624154637, 6624285727, 6624416803, 6624547877, 6624678959, 6624810043, 6624941129, - 6625072219, 6625203349, 6625334473, 6625465549, 6625596629, 6625727741, 6625858823, - 6625989901, 6626120983, 6626252099, 6626383201, 6626514283, 6626645359, 6626776439, - 6626907517, 6627038591, 6627169663, 6627300761, 6627431849, 6627562939, 6627694027, - 6627825101, 6627956183, 6628087343, 6628218427, 6628349503, 6628480583, 6628611739, - 6628742821, 6628873931, 6629005021, 6629136133, 6629267251, 6629398331, 6629529421, - 6629660549, 6629791621, 6629922697, 6630053777, 6630184849, 6630315931, 6630447023, - 6630578117, 6630709207, 6630840283, 6630971357, 6631102507, 6631233589, 6631364681, - 6631495753, 6631626853, 6631757941, 6631889021, 6632020097, 6632151179, 6632282257, - 6632413367, 6632544439, 6632675551, 6632806637, 6632937713, 6633068821, 6633199913, - 6633331009, 6633462091, 6633593167, 6633724283, 6633855359, 6633986501, 6634117573, - 6634248697, 6634379783, 6634510871, 6634641947, 6634773043, 6634904117, 6635035217, - 6635166319, 6635297413, 6635428489, 6635559587, 6635690671, 6635821757, 6635952871, - 6636083969, 6636215041, 6636346121, 6636477251, 6636608453, 6636739541, 6636870619, - 6637001713, 6637132787, 6637263869, 6637394941, 6637526017, 6637657093, 6637788167, - 6637919279, 6638050399, 6638181479, 6638312563, 6638443699, 6638574773, 6638705851, - 6638836927, 6638968013, 6639099101, 6639230183, 6639361277, 6639492383, 6639623467, - 6639754547, 6639885647, 6640016741, 6640147819, 6640278929, 6640410013, 6640541087, - 6640672163, 6640803241, 6640934323, 6641065397, 6641196493, 6641327569, 6641458651, - 6641589727, 6641720849, 6641851943, 6641983021, 6642114109, 6642245189, 6642376261, - 6642507371, 6642638467, 6642769543, 6642900629, 6643031723, 6643162807, 6643293911, - 6643424989, 6643556071, 6643687147, 6643818239, 6643949327, 6644080427, 6644211529, - 6644342629, 6644473723, 6644604829, 6644735939, 6644867057, 6644998141, 6645129221, - 6645260311, 6645391387, 6645522467, 6645653593, 6645784667, 6645915739, 6646046831, - 6646177907, 6646308989, 6646440061, 6646571137, 6646702261, 6646833337, 6646964473, - 6647095561, 6647226667, 6647357741, 6647488871, 6647619947, 6647751041, 6647882207, - 6648013291, 6648144397, 6648275479, 6648406553, 6648537641, 6648668827, 6648799901, - 6648931019, 6649062113, 6649193231, 6649324309, 6649455409, 6649586483, 6649717579, - 6649848701, 6649979773, 6650110853, 6650241937, 6650373029, 6650504101, 6650635177, - 6650766277, 6650897353, 6651028429, 6651159511, 6651290593, 6651421687, 6651552799, - 6651683887, 6651814991, 6651946097, 6652077209, 6652208323, 6652339457, 6652470547, - 6652601647, 6652732721, 6652863799, 6652994899, 6653126003, 6653257097, 6653388179, - 6653519287, 6653650361, 6653781451, 6653912527, 6654043601, 6654174679, 6654305783, - 6654436879, 6654567967, 6654699091, 6654830179, 6654961297, 6655092371, 6655223459, - 6655354571, 6655485647, 6655616753, 6655747853, 6655878937, 6656010019, 6656141117, - 6656272193, 6656403319, 6656534393, 6656665511, 6656796659, 6656927747, 6657058819, - 6657189901, 6657320977, 6657452057, 6657583133, 6657714229, 6657845329, 6657976427, - 6658107541, 6658238617, 6658369693, 6658500791, 6658631869, 6658762949, 6658894027, - 6659025119, 6659156191, 6659287301, 6659418379, 6659549459, 6659680571, 6659811643, - 6659942747, 6660073859, 6660204949, 6660336043, 6660467147, 6660598271, 6660729359, - 6660860441, 6660991517, 6661122649, 6661253747, 6661384837, 6661515911, 6661646983, - 6661778059, 6661909157, 6662040241, 6662171377, 6662302457, 6662433553, 6662564663, - 6662695789, 6662826917, 6662957989, 6663089063, 6663220139, 6663351217, 6663482291, - 6663613381, 6663744457, 6663875539, 6664006633, 6664137731, 6664268827, 6664399913, - 6664530989, 6664662061, 6664793141, 6664924237, 6665055317, 6665186389, 6665317489, - 6665448607, 6665579707, 6665710847, 6665841971, 6665973043, 6666104117, 6666235231, - 6666366319, 6666497401, 6666628481, 6666759557, 6666890669, 6667021763, 6667152847, - 6667283971, 6667415071, 6667546189, 6667677271, 6667808419, 6667939507, 6668070593, - 6668201671, 6668332789, 6668463871, 6668594951, 6668726033, 6668857109, 6668988197, - 6669119273, 6669250349, 6669381427, 6669512533, 6669643639, 6669774733, 6669905819, - 6670036931, 6670168013, 6670299131, 6670430227, 6670561309, 6670692419, 6670823491, - 6670954579, 6671085727, 6671216819, 6671347957, 6671479033, 6671610107, 6671741191, - 6671872271, 6672003343, 6672134453, 6672265591, 6672396667, 6672527753, 6672658879, - 6672789971, 6672921053, 6673052147, 6673183219, 6673314299, 6673445413, 6673576499, - 6673707571, 6673838653, 6673969733, 6674100809, 6674231911, 6674362987, 6674494063, - 6674625149, 6674756233, 6674887367, 6675018461, 6675149549, 6675280649, 6675411731, - 6675542803, 6675673891, 6675804973, 6675936089, 6676067173, 6676198261, 6676329389, - 6676460467, 6676591541, 6676722641, 6676853723, 6676984823, 6677115899, 6677246993, - 6677378111, 6677509211, 6677640317, 6677771423, 6677902573, 6678033679, 6678164761, - 6678295837, 6678426913, 6678558023, 6678689099, 6678820177, 6678951277, 6679082353, - 6679213427, 6679344521, 6679475597, 6679606691, 6679737781, 6679868861, 6679999957, - 6680131033, 6680262131, 6680393231, 6680524351, 6680655439, 6680786549, 6680917631, - 6681048721, 6681179807, 6681310891, 6681441967, 6681573043, 6681704137, 6681835253, - 6681966329, 6682097407, 6682228489, 6682359571, 6682490651, 6682621793, 6682752899, - 6682883989, 6683015069, 6683146159, 6683277247, 6683408323, 6683539439, 6683670517, - 6683801599, 6683932681, 6684063767, 6684194903, 6684325979, 6684457061, 6684588133, - 6684719231, 6684850321, 6684981397, 6685112471, 6685243601, 6685374691, 6685505767, - 6685636843, 6685767997, 6685899091, 6686030171, 6686161267, 6686292367, 6686423453, - 6686554573, 6686685671, 6686816761, 6686947859, 6687078947, 6687210031, 6687341147, - 6687472277, 6687603359, 6687734491, 6687865571, 6687996671, 6688127759, 6688258831, - 6688389931, 6688521013, 6688652093, 6688783181, 6688914269, 6689045351, 6689176433, - 6689307517, 6689438593, 6689569669, 6689700793, 6689831873, 6689962949, 6690094039, - 6690225149, 6690356227, 6690487337, 6690618421, 6690749497, 6690880579, 6691011653, - 6691142791, 6691273877, 6691404983, 6691536113, 6691667189, 6691798279, 6691929397, - 6692060491, 6692191589, 6692322733, 6692453827, 6692584967, 6692716049, 6692847121, - 6692978207, 6693109279, 6693240377, 6693371449, 6693502523, 6693633599, 6693764677, - 6693895753, 6694026847, 6694157923, 6694289003, 6694420091, 6694551167, 6694682249, - 6694813361, 6694944439, 6695075537, 6695206613, 6695337689, 6695468777, 6695599853, - 6695730947, 6695862031, 6695993111, 6696124187, 6696255263, 6696386341, 6696517423, - 6696648499, 6696779627, 6696910709, 6697041839, 6697172929, 6697304017, 6697435109, - 6697566191, 6697697273, 6697828363, 6697959449, 6698090527, 6698221603, 6698352677, - 6698483777, 6698614861, 6698745941, 6698877043, 6699008143, 6699139217, 6699270299, - 6699401393, 6699532501, 6699663577, 6699794663, 6699925753, 6700056827, 6700187899, - 6700318979, 6700450063, 6700581137, 6700712209, 6700843379, 6700974457, 6701105539, - 6701236637, 6701367733, 6701498827, 6701629919, 6701761007, 6701892101, 6702023183, - 6702154267, 6702285347, 6702416443, 6702547519, 6702678599, 6702809681, 6702940771, - 6703071853, 6703202929, 6703334003, 6703465133, 6703596257, 6703727357, 6703858529, - 6703989601, 6704120693, 6704251811, 6704382899, 6704513993, 6704645071, 6704776159, - 6704907241, 6705038339, 6705169417, 6705300523, 6705431627, 6705562711, 6705693829, - 6705824903, 6705955979, 6706087051, 6706218137, 6706349249, 6706480321, 6706611403, - 6706742489, 6706873583, 6707004683, 6707135767, 6707266847, 6707397943, 6707529043, - 6707660143, 6707791219, 6707922293, 6708053369, 6708184481, 6708315553, 6708446651, - 6708577751, 6708708829, 6708839923, 6708971029, 6709102109, 6709233191, 6709364267, - 6709495339, 6709626421, 6709757503, 6709888607, 6710019683, 6710150773, 6710281847, - 6710412949, 6710544023, 6710675099, 6710806171, 6710937269, 6711068417, 6711199511, - 6711330583, 6711461657, 6711592733, 6711723833, 6711854921, 6711986009, 6712117081, - 6712248163, 6712379239, 6712510331, 6712641407, 6712772489, 6712903567, 6713034677, - 6713165749, 6713296829, 6713427911, 6713559001, 6713690077, 6713821151, 6713952229, - 6714083303, 6714214421, 6714345497, 6714476569, 6714607663, 6714738739, 6714869881, - 6715001023, 6715132111, 6715263197, 6715394297, 6715525391, 6715656487, 6715787581, - 6715918667, 6716049761, 6716180839, 6716311963, 6716443061, 6716574133, 6716705207, - 6716836283, 6716967379, 6717098461, 6717229553, 6717360631, 6717491717, 6717622799, - 6717753883, 6717884993, 6718016077, 6718147169, 6718278271, 6718409371, 6718540447, - 6718671521, 6718802593, 6718933667, 6719064739, 6719195839, 6719326949, 6719458037, - 6719589131, 6719720251, 6719851349, 6719982433, 6720113507, 6720244589, 6720375667, - 6720506761, 6720637867, 6720768947, 6720900041, 6721031117, 6721162223, 6721293307, - 6721424383, 6721555537, 6721686611, 6721817717, 6721948799, 6722079883, 6722210977, - 6722342057, 6722473171, 6722604299, 6722735429, 6722866517, 6722997629, 6723128717, - 6723259813, 6723390917, 6723522019, 6723653093, 6723784213, 6723915307, 6724046419, - 6724177517, 6724308599, 6724439671, 6724570751, 6724701829, 6724832929, 6724964041, - 6725095129, 6725226203, 6725357291, 6725488373, 6725619469, 6725750593, 6725881681, - 6726012767, 6726143863, 6726274939, 6726406109, 6726537199, 6726668281, 6726799421, - 6726930493, 6727061569, 6727192709, 6727323781, 6727454861, 6727585973, 6727717063, - 6727848139, 6727979213, 6728110289, 6728241397, 6728372501, 6728503583, 6728634683, - 6728765863, 6728896961, 6729028037, 6729159121, 6729290209, 6729421339, 6729552419, - 6729683497, 6729814571, 6729945679, 6730076783, 6730207919, 6730339003, 6730470091, - 6730601179, 6730732303, 6730863383, 6730994489, 6731125561, 6731256643, 6731387753, - 6731518847, 6731649979, 6731781053, 6731912141, 6732043243, 6732174377, 6732305453, - 6732436531, 6732567607, 6732698701, 6732829841, 6732960917, 6733091993, 6733223083, - 6733354171, 6733485251, 6733616381, 6733747457, 6733878539, 6734009671, 6734140789, - 6734271881, 6734402963, 6734534057, 6734665129, 6734796217, 6734927323, 6735058399, - 6735189499, 6735320573, 6735451649, 6735582727, 6735713849, 6735844949, 6735976021, - 6736107097, 6736238177, 6736369279, 6736500373, 6736631453, 6736762541, 6736893629, - 6737024717, 6737155801, 6737286929, 6737418041, 6737549141, 6737680219, 6737811319, - 6737942429, 6738073561, 6738204653, 6738335741, 6738466841, 6738597917, 6738728999, - 6738860071, 6738991157, 6739122233, 6739253329, 6739384411, 6739515487, 6739646567, - 6739777669, 6739908743, 6740039821, 6740170909, 6740301991, 6740433109, 6740564183, - 6740695267, 6740826401, 6740957501, 6741088579, 6741219691, 6741350771, 6741481849, - 6741612923, 6741744007, 6741875087, 6742006207, 6742137317, 6742268447, 6742399537, - 6742530623, 6742661699, 6742792781, 6742923881, 6743054957, 6743186029, 6743317117, - 6743448199, 6743579281, 6743710357, 6743841473, 6743972551, 6744103669, 6744234769, - 6744365843, 6744496933, 6744628019, 6744759101, 6744890183, 6745021307, 6745152413, - 6745283497, 6745414597, 6745545671, 6745676759, 6745807841, 6745938917, 6746070011, - 6746201141, 6746332217, 6746463289, 6746594389, 6746725507, 6746856581, 6746987671, - 6747118751, 6747249827, 6747380911, 6747512003, 6747643087, 6747774169, 6747905261, - 6748036363, 6748167443, 6748298561, 6748429661, 6748560743, 6748691861, 6748822939, - 6748954039, 6749085131, 6749216237, 6749347313, 6749478403, 6749609479, 6749740559, - 6749871649, 6750002723, 6750133807, 6750264893, 6750395983, 6750527089, 6750658183, - 6750789259, 6750920357, 6751051453, 6751182547, 6751313729, 6751444801, 6751575911, - 6751706989, 6751838069, 6751969141, 6752100221, 6752231383, 6752362469, 6752493557, - 6752624651, 6752755727, 6752886809, 6753017917, 6753149009, 6753280081, 6753411169, - 6753542251, 6753673327, 6753804401, 6753935501, 6754066577, 6754197721, 6754328813, - 6754459897, 6754591003, 6754722083, 6754853179, 6754984273, 6755115349, 6755246437, - 6755377511, 6755508589, 6755639663, 6755770783, 6755901907, 6756033017, 6756164099, - 6756295207, 6756426301, 6756557387, 6756688493, 6756819571, 6756950647, 6757081757, - 6757212851, 6757343953, 6757475029, 6757606109, 6757737191, 6757868269, 6757999351, - 6758130437, 6758261509, 6758392591, 6758523671, 6758654743, 6758785841, 6758916961, - 6759048053, 6759179131, 6759310237, 6759441313, 6759572399, 6759703487, 6759834577, - 6759965669, 6760096741, 6760227839, 6760358929, 6760490117, 6760621213, 6760752329, - 6760883447, 6761014523, 6761145641, 6761276777, 6761407859, 6761538937, 6761670061, - 6761801143, 6761932217, 6762063367, 6762194471, 6762325571, 6762456667, 6762587759, - 6762718843, 6762849923, 6762980999, 6763112087, 6763243163, 6763374251, 6763505339, - 6763636441, 6763767523, 6763898623, 6764029703, 6764160791, 6764291893, 6764422967, - 6764554057, 6764685143, 6764816263, 6764947337, 6765078449, 6765209533, 6765340613, - 6765471697, 6765602791, 6765733913, 6765865009, 6765996137, 6766127237, 6766258309, - 6766389407, 6766520479, 6766651579, 6766782679, 6766913761, 6767044847, 6767175937, - 6767307017, 6767438099, 6767569199, 6767700271, 6767831347, 6767962423, 6768093503, - 6768224587, 6768355681, 6768486799, 6768617953, 6768749027, 6768880099, 6769011181, - 6769142257, 6769273349, 6769404479, 6769535557, 6769666669, 6769797781, 6769928903, - 6770059981, 6770191063, 6770322137, 6770453231, 6770584349, 6770715421, 6770846501, - 6770977573, 6771108689, 6771239807, 6771370901, 6771501977, 6771633073, 6771764177, - 6771895253, 6772026361, 6772157453, 6772288547, 6772419631, 6772550711, 6772681787, - 6772812863, 6772943971, 6773075051, 6773206123, 6773337223, 6773468297, 6773599387, - 6773730473, 6773861561, 6773992633, 6774123709, 6774254783, 6774385883, 6774516971, - 6774648061, 6774779149, 6774910231, 6775041359, 6775172447, 6775303523, 6775434613, - 6775565707, 6775696787, 6775827859, 6775958939, 6776090029, 6776221117, 6776352227, - 6776483299, 6776614381, 6776745463, 6776876543, 6777007637, 6777138721, 6777269813, - 6777400919, 6777531991, 6777663121, 6777794251, 6777925387, 6778056463, 6778187557, - 6778318633, 6778449707, 6778580791, 6778711867, 6778842991, 6778974089, 6779105197, - 6779236273, 6779367347, 6779498437, 6779629513, 6779760587, 6779891681, 6780022787, - 6780153869, 6780284963, 6780416039, 6780547129, 6780678221, 6780809317, 6780940393, - 6781071509, 6781202609, 6781333717, 6781464793, 6781595879, 6781726957, 6781858037, - 6781989113, 6782120203, 6782251291, 6782382413, 6782513497, 6782644571, 6782775653, - 6782906737, 6783037841, 6783168919, 6783300011, 6783431111, 6783562189, 6783693269, - 6783824363, 6783955441, 6784086523, 6784217597, 6784348741, 6784479817, 6784610923, - 6784742017, 6784873099, 6785004179, 6785135281, 6785266417, 6785397503, 6785528627, - 6785659711, 6785790833, 6785921927, 6786053011, 6786184087, 6786315161, 6786446269, - 6786577367, 6786708443, 6786839567, 6786970649, 6787101733, 6787232833, 6787363907, - 6787495049, 6787626127, 6787757227, 6787888307, 6788019379, 6788150461, 6788281561, - 6788412637, 6788543731, 6788674861, 6788805941, 6788937037, 6789068119, 6789199213, - 6789330293, 6789461369, 6789592499, 6789723601, 6789854681, 6789985753, 6790116847, - 6790247921, 6790378993, 6790510127, 6790641199, 6790772321, 6790903423, 6791034517, - 6791165621, 6791296693, 6791427883, 6791558993, 6791690089, 6791821177, 6791952259, - 6792083341, 6792214423, 6792345509, 6792476597, 6792607697, 6792738769, 6792869851, - 6793000927, 6793132001, 6793263077, 6793394177, 6793525253, 6793656361, 6793787447, - 6793918529, 6794049667, 6794180741, 6794311861, 6794442983, 6794574091, 6794705167, - 6794836247, 6794967329, 6795098419, 6795229523, 6795360619, 6795491707, 6795622811, - 6795753907, 6795884999, 6796016081, 6796147199, 6796278271, 6796409353, 6796540441, - 6796671521, 6796802629, 6796933721, 6797064803, 6797195891, 6797327021, 6797458097, - 6797589173, 6797720291, 6797851363, 6797982439, 6798113533, 6798244627, 6798375737, - 6798506833, 6798637907, 6798768983, 6798900091, 6799031191, 6799162277, 6799293349, - 6799424483, 6799555577, 6799686683, 6799817851, 6799948943, 6800080037, 6800211151, - 6800342273, 6800473363, 6800604439, 6800735533, 6800866697, 6800997817, 6801128891, - 6801260017, 6801391123, 6801522229, 6801653351, 6801784427, 6801915503, 6802046591, - 6802177663, 6802308749, 6802439849, 6802570937, 6802702051, 6802833127, 6802964221, - 6803095361, 6803226499, 6803357599, 6803488673, 6803619763, 6803750843, 6803881957, - 6804013057, 6804144157, 6804275239, 6804406321, 6804537401, 6804668491, 6804799583, - 6804930661, 6805061743, 6805192853, 6805323929, 6805455001, 6805586153, 6805717229, - 6805848307, 6805979387, 6806110489, 6806241569, 6806372659, 6806503751, 6806634823, - 6806765909, 6806896997, 6807028069, 6807159167, 6807290251, 6807421337, 6807552421, - 6807683563, 6807814711, 6807945847, 6808076971, 6808208047, 6808339169, 6808470293, - 6808601369, 6808732453, 6808863533, 6808994609, 6809125681, 6809256781, 6809387861, - 6809518949, 6809650049, 6809781157, 6809912233, 6810043309, 6810174401, 6810305569, - 6810436673, 6810567749, 6810698897, 6810829997, 6810961099, 6811092173, 6811223267, - 6811354339, 6811485467, 6811616561, 6811747639, 6811878739, 6812009861, 6812140963, - 6812272039, 6812403113, 6812534191, 6812665267, 6812796373, 6812927449, 6813058559, - 6813189631, 6813320743, 6813451817, 6813582929, 6813714001, 6813845081, 6813976157, - 6814107319, 6814238393, 6814369483, 6814500607, 6814631723, 6814762819, 6814893931, - 6815025029, 6815156137, 6815287247, 6815418331, 6815549453, 6815680559, 6815811677, - 6815942779, 6816073861, 6816204937, 6816336029, 6816467107, 6816598181, 6816729281, - 6816860363, 6816991453, 6817122541, 6817253621, 6817384697, 6817515787, 6817646873, - 6817777963, 6817909037, 6818040137, 6818171281, 6818302411, 6818433493, 6818564579, - 6818695651, 6818826779, 6818957857, 6819088957, 6819220049, 6819351127, 6819482209, - 6819613289, 6819744391, 6819875471, 6820006549, 6820137677, 6820268761, 6820399849, - 6820530971, 6820662059, 6820793131, 6820924217, 6821055331, 6821186419, 6821317511, - 6821448589, 6821579663, 6821710741, 6821841827, 6821972917, 6822103999, 6822235081, - 6822366217, 6822497317, 6822628447, 6822759521, 6822890597, 6823021697, 6823152797, - 6823283911, 6823415003, 6823546141, 6823677241, 6823808357, 6823939439, 6824070523, - 6824201669, 6824332787, 6824463923, 6824595079, 6824726159, 6824857261, 6824988361, - 6825119437, 6825250577, 6825381679, 6825512777, 6825643907, 6825775007, 6825906083, - 6826037177, 6826168267, 6826299343, 6826430417, 6826561519, 6826692611, 6826823687, - 6826954763, 6827085841, 6827216927, 6827348027, 6827479147, 6827610247, 6827741339, - 6827872417, 6828003503, 6828134611, 6828265693, 6828396797, 6828527917, 6828659003, - 6828790079, 6828921161, 6829052233, 6829183307, 6829314379, 6829445477, 6829576597, - 6829707671, 6829838767, 6829969873, 6830100961, 6830232041, 6830363119, 6830494199, - 6830625289, 6830756363, 6830887471, 6831018617, 6831149713, 6831280787, 6831411859, - 6831542947, 6831674041, 6831805117, 6831936193, 6832067311, 6832198409, 6832329499, - 6832460573, 6832591651, 6832722733, 6832853827, 6832984903, 6833115997, 6833247097, - 6833378183, 6833509259, 6833640343, 6833771449, 6833902541, 6834033641, 6834164789, - 6834295873, 6834426953, 6834558067, 6834689179, 6834820261, 6834951373, 6835082459, - 6835213549, 6835344667, 6835475743, 6835606853, 6835737943, 6835869037, 6836000137, - 6836131219, 6836262319, 6836393461, 6836524579, 6836655671, 6836786753, 6836917837, - 6837048929, 6837180017, 6837311119, 6837442193, 6837573269, 6837704399, 6837835471, - 6837966547, 6838097641, 6838228777, 6838359881, 6838490977, 6838622057, 6838753133, - 6838884209, 6839015303, 6839146399, 6839277491, 6839408591, 6839539667, 6839670743, - 6839801821, 6839932921, 6840064003, 6840195077, 6840326149, 6840457231, 6840588323, - 6840719407, 6840850481, 6840981607, 6841112693, 6841243771, 6841374847, 6841505929, - 6841637009, 6841768091, 6841899179, 6842030281, 6842161367, 6842292439, 6842423557, - 6842554637, 6842685709, 6842816801, 6842947873, 6843078947, 6843210037, 6843341123, - 6843472217, 6843603289, 6843734377, 6843865459, 6843996553, 6844127671, 6844258747, - 6844389823, 6844520897, 6844651973, 6844783067, 6844914161, 6845045261, 6845176333, - 6845307409, 6845438491, 6845569589, 6845700691, 6845831767, 6845962847, 6846093923, - 6846225007, 6846356117, 6846487199, 6846618287, 6846749387, 6846880471, 6847011557, - 6847142657, 6847273739, 6847404829, 6847535909, 6847666981, 6847798123, 6847929199, - 6848060281, 6848191387, 6848322469, 6848453551, 6848584643, 6848715721, 6848846803, - 6848977897, 6849108977, 6849240049, 6849371159, 6849502267, 6849633359, 6849764437, - 6849895517, 6850026619, 6850157693, 6850288769, 6850419859, 6850550939, 6850682011, - 6850813091, 6850944181, 6851075269, 6851206361, 6851337443, 6851468521, 6851599603, - 6851730709, 6851861791, 6851992867, 6852123947, 6852255029, 6852386143, 6852517249, - 6852648343, 6852779477, 6852910567, 6853041641, 6853172717, 6853303801, 6853434877, - 6853565959, 6853697041, 6853828229, 6853959379, 6854090497, 6854221571, 6854352643, - 6854483737, 6854614831, 6854745923, 6854877011, 6855008117, 6855139271, 6855270347, - 6855401431, 6855532507, 6855663599, 6855794707, 6855925789, 6856056887, 6856187983, - 6856319089, 6856450163, 6856581241, 6856712327, 6856843423, 6856974517, 6857105597, - 6857236669, 6857367841, 6857498941, 6857630023, 6857761151, 6857892253, 6858023357, - 6858154439, 6858285583, 6858416659, 6858547741, 6858678829, 6858809911, 6858940987, - 6859072091, 6859203173, 6859334269, 6859465351, 6859596437, 6859727533, 6859858609, - 6859989707, 6860120797, 6860251877, 6860382959, 6860514043, 6860645119, 6860776211, - 6860907307, 6861038407, 6861169543, 6861300619, 6861431729, 6861562811, 6861693899, - 6861824999, 6861956081, 6862087171, 6862218247, 6862349321, 6862480409, 6862611487, - 6862742581, 6862873657, 6863004767, 6863135843, 6863266939, 6863398043, 6863529133, - 6863660213, 6863791331, 6863922421, 6864053503, 6864184687, 6864315761, 6864446843, - 6864577927, 6864709001, 6864840113, 6864971189, 6865102297, 6865233373, 6865364453, - 6865495601, 6865626673, 6865757771, 6865888847, 6866019943, 6866151023, 6866282147, - 6866413243, 6866544343, 6866675423, 6866806501, 6866937577, 6867068683, 6867199789, - 6867330889, 6867461971, 6867593053, 6867724183, 6867855277, 6867986453, 6868117537, - 6868248623, 6868379699, 6868510793, 6868641889, 6868773059, 6868904131, 6869035231, - 6869166331, 6869297417, 6869428513, 6869559637, 6869690713, 6869821793, 6869952871, - 6870083971, 6870215089, 6870346177, 6870477281, 6870608357, 6870739459, 6870870533, - 6871001611, 6871132687, 6871263769, 6871394843, 6871525933, 6871657019, 6871788109, - 6871919191, 6872050277, 6872181367, 6872312459, 6872443547, 6872574619, 6872705713, - 6872836799, 6872967901, 6873098983, 6873230059, 6873361177, 6873492253, 6873623327, - 6873754399, 6873885517, 6874016599, 6874147723, 6874278809, 6874409887, 6874540969, - 6874672081, 6874803157, 6874934237, 6875065343, 6875196439, 6875327551, 6875458663, - 6875589739, 6875720843, 6875851933, 6875983007, 6876114103, 6876245237, 6876376319, - 6876507427, 6876638521, 6876769597, 6876900671, 6877031747, 6877162849, 6877293953, - 6877425029, 6877556123, 6877687247, 6877818349, 6877949431, 6878080621, 6878211733, - 6878342831, 6878473913, 6878604989, 6878736083, 6878867189, 6878998267, 6879129347, - 6879260419, 6879391501, 6879522577, 6879653657, 6879784783, 6879915857, 6880046939, - 6880178017, 6880309103, 6880440241, 6880571351, 6880702441, 6880833599, 6880964689, - 6881095783, 6881226881, 6881357953, 6881489059, 6881620133, 6881751211, 6881882297, - 6882013373, 6882144473, 6882275549, 6882406649, 6882537791, 6882668873, 6882799949, - 6882931037, 6883062139, 6883193249, 6883324321, 6883455409, 6883586519, 6883717601, - 6883848677, 6883979749, 6884110823, 6884241967, 6884373047, 6884504119, 6884635193, - 6884766293, 6884897381, 6885028471, 6885159559, 6885290641, 6885421727, 6885552799, - 6885683881, 6885814967, 6885946049, 6886077139, 6886208227, 6886339331, 6886470407, - 6886601563, 6886732637, 6886863713, 6886994819, 6887125897, 6887256973, 6887388049, - 6887519129, 6887650201, 6887781281, 6887912411, 6888043511, 6888174583, 6888305659, - 6888436759, 6888567863, 6888698939, 6888830017, 6888961097, 6889092179, 6889223261, - 6889354361, 6889485451, 6889616527, 6889747649, 6889878763, 6890009851, 6890140931, - 6890272013, 6890403167, 6890534239, 6890665319, 6890796427, 6890927501, 6891058609, - 6891189749, 6891320827, 6891451907, 6891583001, 6891714097, 6891845179, 6891976313, - 6892107419, 6892238501, 6892369591, 6892500683, 6892631773, 6892762901, 6892894009, - 6893025127, 6893156219, 6893287307, 6893418391, 6893549483, 6893680559, 6893811671, - 6893942753, 6894073853, 6894204949, 6894336037, 6894467117, 6894598247, 6894729337, - 6894860437, 6894991531, 6895122631, 6895253707, 6895384789, 6895515881, 6895646959, - 6895778039, 6895909117, 6896040257, 6896171339, 6896302417, 6896433497, 6896564579, - 6896695691, 6896826787, 6896957861, 6897088943, 6897220019, 6897351091, 6897482171, - 6897613249, 6897744341, 6897875423, 6898006517, 6898137599, 6898268677, 6898399763, - 6898530841, 6898661923, 6898793009, 6898924091, 6899055167, 6899186249, 6899317333, - 6899448449, 6899579539, 6899710621, 6899841701, 6899972809, 6900103943, 6900235033, - 6900366107, 6900497189, 6900628289, 6900759413, 6900890539, 6901021643, 6901152719, - 6901283801, 6901414909, 6901546007, 6901677089, 6901808167, 6901939271, 6902070347, - 6902201419, 6902332501, 6902463593, 6902594669, 6902725769, 6902856841, 6902987933, - 6903119011, 6903250087, 6903381181, 6903512351, 6903643433, 6903774517, 6903905599, - 6904036693, 6904167839, 6904298939, 6904430021, 6904561099, 6904692173, 6904823281, - 6904954367, 6905085457, 6905216537, 6905347637, 6905478721, 6905609813, 6905740903, - 6905872007, 6906003103, 6906134219, 6906265297, 6906396379, 6906527461, 6906658541, - 6906789683, 6906920771, 6907051871, 6907182979, 6907314091, 6907445191, 6907576267, - 6907707371, 6907838449, 6907969531, 6908100607, 6908231689, 6908362763, 6908493859, - 6908624953, 6908756027, 6908887109, 6909018191, 6909149311, 6909280409, 6909411491, - 6909542573, 6909673663, 6909804761, 6909935833, 6910066931, 6910198013, 6910329103, - 6910460177, 6910591267, 6910722349, 6910853423, 6910984499, 6911115583, 6911246663, - 6911377747, 6911508823, 6911639897, 6911770991, 6911902117, 6912033229, 6912164323, - 6912295417, 6912426497, 6912557581, 6912688693, 6912819791, 6912950917, 6913082027, - 6913213121, 6913344197, 6913475269, 6913606367, 6913737487, 6913868639, 6913999723, - 6914130829, 6914261923, 6914392997, 6914524069, 6914655169, 6914786293, 6914917379, - 6915048457, 6915179533, 6915310613, 6915441721, 6915572821, 6915703901, 6915835019, - 6915966091, 6916097183, 6916228261, 6916359343, 6916490423, 6916621499, 6916752589, - 6916883689, 6917014777, 6917145853, 6917276929, 6917408009, 6917539081, 6917670163, - 6917801239, 6917932313, 6918063391, 6918194467, 6918325541, 6918456641, 6918587717, - 6918718813, 6918849887, 6918980963, 6919112041, 6919243141, 6919374223, 6919505323, - 6919636417, 6919767493, 6919898581, 6920029679, 6920160787, 6920291863, 6920422969, - 6920554051, 6920685131, 6920816207, 6920947303, 6921078379, 6921209461, 6921340567, - 6921471691, 6921602767, 6921733913, 6921864997, 6921996071, 6922127159, 6922258253, - 6922389329, 6922520413, 6922651487, 6922782569, 6922913651, 6923044741, 6923175869, - 6923306947, 6923438021, 6923569187, 6923700293, 6923831407, 6923962489, 6924093587, - 6924224693, 6924355777, 6924486853, 6924617929, 6924749011, 6924880093, 6925011179, - 6925142293, 6925273393, 6925404467, 6925535611, 6925666691, 6925797763, 6925928861, - 6926059963, 6926191067, 6926322173, 6926453263, 6926584361, 6926715451, 6926846527, - 6926977627, 6927108709, 6927239857, 6927370973, 6927502063, 6927633137, 6927764251, - 6927895367, 6928026451, 6928157531, 6928288607, 6928419709, 6928550791, 6928681909, - 6928812983, 6928944089, 6929075171, 6929206253, 6929337413, 6929468503, 6929599577, - 6929730659, 6929861801, 6929992889, 6930123961, 6930255041, 6930386129, 6930517219, - 6930648299, 6930779477, 6930910579, 6931041653, 6931172737, 6931303823, 6931434977, - 6931566049, 6931697141, 6931828237, 6931959319, 6932090401, 6932221501, 6932352593, - 6932483671, 6932614747, 6932745823, 6932876897, 6933007979, 6933139061, 6933270133, - 6933401213, 6933532301, 6933663397, 6933794503, 6933925577, 6934056667, 6934187747, - 6934318841, 6934449919, 6934581011, 6934712101, 6934843177, 6934974287, 6935105363, - 6935236453, 6935367539, 6935498621, 6935629697, 6935760773, 6935891861, 6936022957, - 6936154031, 6936285121, 6936416197, 6936547301, 6936678407, 6936809479, 6936940561, - 6937071641, 6937202729, 6937333841, 6937464923, 6937596023, 6937727129, 6937858229, - 6937989337, 6938120443, 6938251519, 6938382613, 6938513711, 6938644787, 6938775881, - 6938906957, 6939038059, 6939169141, 6939300217, 6939431321, 6939562393, 6939693479, - 6939824587, 6939955663, 6940086743, 6940217827, 6940348907, 6940479979, 6940611101, - 6940742251, 6940873343, 6941004451, 6941135561, 6941266639, 6941397719, 6941528813, - 6941659889, 6941790983, 6941922089, 6942053197, 6942184273, 6942315397, 6942446471, - 6942577549, 6942708649, 6942839741, 6942970829, 6943101917, 6943232993, 6943364137, - 6943495213, 6943626293, 6943757369, 6943888451, 6944019581, 6944150687, 6944281777, - 6944412869, 6944543941, 6944675027, 6944806111, 6944937191, 6945068281, 6945199361, - 6945330439, 6945461513, 6945592657, 6945723739, 6945854821, 6945985897, 6946116973, - 6946248091, 6946379171, 6946510289, 6946641389, 6946772461, 6946903559, 6947034637, - 6947165717, 6947296801, 6947427959, 6947559053, 6947690149, 6947821259, 6947952353, - 6948083431, 6948214523, 6948345629, 6948476701, 6948607859, 6948738931, 6948870029, - 6949001123, 6949132207, 6949263313, 6949394393, 6949525469, 6949656569, 6949787651, - 6949918727, 6950049809, 6950180891, 6950311987, 6950443061, 6950574133, 6950705213, - 6950836307, 6950967389, 6951098501, 6951229589, 6951360701, 6951491831, 6951622943, - 6951754027, 6951885107, 6952016207, 6952147283, 6952278433, 6952409533, 6952540627, - 6952671749, 6952802849, 6952933927, 6953065001, 6953196073, 6953327167, 6953458247, - 6953589329, 6953720401, 6953851483, 6953982557, 6954113651, 6954244727, 6954375833, - 6954506947, 6954638023, 6954769103, 6954900217, 6955031299, 6955162391, 6955293469, - 6955424543, 6955555639, 6955686761, 6955817837, 6955948921, 6956080007, 6956211191, - 6956342291, 6956473399, 6956604491, 6956735579, 6956866661, 6956997739, 6957128819, - 6957259891, 6957391031, 6957522109, 6957653221, 6957784307, 6957915383, 6958046477, - 6958177591, 6958308683, 6958439809, 6958570891, 6958701973, 6958833067, 6958964143, - 6959095217, 6959226293, 6959357381, 6959488453, 6959619529, 6959750621, 6959881693, - 6960012803, 6960143881, 6960274957, 6960406031, 6960537107, 6960668201, 6960799289, - 6960930413, 6961061507, 6961192603, 6961323689, 6961454761, 6961585859, 6961716947, - 6961848029, 6961979117, 6962110193, 6962241317, 6962372449, 6962503567, 6962634643, - 6962765717, 6962896817, 6963027901, 6963158977, 6963290099, 6963421183, 6963552263, - 6963683339, 6963814463, 6963945539, 6964076627, 6964207699, 6964338811, 6964469891, - 6964600963, 6964732039, 6964863133, 6964994233, 6965125309, 6965256457, 6965387537, - 6965518627, 6965649737, 6965780881, 6965912029, 6966043121, 6966174209, 6966305321, - 6966436439, 6966567511, 6966698633, 6966829763, 6966960857, 6967091941, 6967223017, - 6967354109, 6967485181, 6967616323, 6967747403, 6967878563, 6968009663, 6968140747, - 6968271823, 6968402923, 6968534011, 6968665087, 6968796167, 6968927239, 6969058331, - 6969189419, 6969320537, 6969451627, 6969582703, 6969713833, 6969844957, 6969976043, - 6970107119, 6970238201, 6970369277, 6970500367, 6970631471, 6970762571, 6970893653, - 6971024771, 6971155843, 6971286937, 6971418023, 6971549099, 6971680181, 6971811269, - 6971942371, 6972073447, 6972204539, 6972335633, 6972466757, 6972597829, 6972728923, - 6972860047, 6972991199, 6973122283, 6973253363, 6973384459, 6973515539, 6973646639, - 6973777787, 6973908863, 6974039957, 6974171041, 6974302123, 6974433211, 6974564291, - 6974695393, 6974826473, 6974957567, 6975088639, 6975219721, 6975350803, 6975481937, - 6975613019, 6975744091, 6975875167, 6976006243, 6976137317, 6976268389, 6976399483, - 6976530569, 6976661641, 6976792721, 6976923817, 6977054927, 6977186003, 6977317093, - 6977448187, 6977579269, 6977710417, 6977841509, 6977972629, 6978103703, 6978234797, - 6978365879, 6978496951, 6978628037, 6978759119, 6978890197, 6979021319, 6979152403, - 6979283483, 6979414627, 6979545847, 6979676947, 6979808021, 6979939093, 6980070193, - 6980201281, 6980332367, 6980463443, 6980594531, 6980725613, 6980856703, 6980987833, - 6981118987, 6981250093, 6981381191, 6981512311, 6981643387, 6981774469, 6981905543, - 6982036619, 6982167691, 6982298779, 6982429889, 6982560979, 6982692077, 6982823149, - 6982954229, 6983085311, 6983216393, 6983347507, 6983478581, 6983609671, 6983740807, - 6983871889, 6984002999, 6984134099, 6984265177, 6984396259, 6984527353, 6984658427, - 6984789527, 6984920603, 6985051691, 6985182769, 6985313857, 6985444957, 6985576049, - 6985707139, 6985838221, 6985969303, 6986100409, 6986231489, 6986362571, 6986493677, - 6986624753, 6986755837, 6986886911, 6987018007, 6987149089, 6987280163, 6987411251, - 6987542363, 6987673439, 6987804517, 6987935597, 6988066721, 6988197833, 6988328923, - 6988459997, 6988591079, 6988722161, 6988853257, 6988984361, 6989115433, 6989246557, - 6989377673, 6989508811, 6989639887, 6989770967, 6989902069, 6990033181, 6990164281, - 6990295357, 6990426433, 6990557507, 6990688597, 6990819673, 6990950753, 6991081829, - 6991212901, 6991343977, 6991475059, 6991606151, 6991737251, 6991868347, 6991999429, - 6992130503, 6992261597, 6992392697, 6992523803, 6992654881, 6992785963, 6992917069, - 6993048193, 6993179327, 6993310421, 6993441509, 6993572587, 6993703687, 6993834761, - 6993965857, 6994096981, 6994228103, 6994359259, 6994490339, 6994621433, 6994752551, - 6994883641, 6995014759, 6995145869, 6995276989, 6995408107, 6995539189, 6995670277, - 6995801353, 6995932441, 6996063583, 6996194701, 6996325811, 6996456889, 6996587999, - 6996719083, 6996850169, 6996981247, 6997112323, 6997243397, 6997374469, 6997505587, - 6997636697, 6997767797, 6997898891, 6998029967, 6998161097, 6998292181, 6998423261, - 6998554361, 6998685437, 6998816543, 6998947621, 6999078701, 6999209773, 6999340883, - 6999471961, 6999603049, 6999734129, 6999865211, 6999996299, 7000127377, 7000258471, - 7000389553, 7000520641, 7000651717, 7000782797, 7000913873, 7001044997, 7001176073, - 7001307161, 7001438233, 7001569307, 7001700379, 7001831453, 7001962543, 7002093689, - 7002224767, 7002355849, 7002486929, 7002618013, 7002749087, 7002880169, 7003011271, - 7003142357, 7003273439, 7003404521, 7003535621, 7003666697, 7003797793, 7003928917, - 7004059999, 7004191091, 7004322163, 7004453321, 7004584423, 7004715499, 7004846573, - 7004977663, 7005108779, 7005239887, 7005370969, 7005502061, 7005633137, 7005764221, - 7005895297, 7006026397, 7006157471, 7006288547, 7006419653, 7006550741, 7006681849, - 7006812937, 7006944047, 7007075171, 7007206247, 7007337329, 7007468401, 7007599531, - 7007730641, 7007861723, 7007992799, 7008123883, 7008254969, 7008386041, 7008517141, - 7008648221, 7008779293, 7008910379, 7009041451, 7009172543, 7009303627, 7009434703, - 7009565803, 7009696909, 7009828037, 7009959109, 7010090203, 7010221277, 7010352353, - 7010483429, 7010614529, 7010745601, 7010876693, 7011007849, 7011138923, 7011270001, - 7011401083, 7011532163, 7011663259, 7011794341, 7011925447, 7012056539, 7012187621, - 7012318693, 7012449803, 7012580879, 7012711987, 7012843081, 7012974169, 7013105249, - 7013236327, 7013367479, 7013498593, 7013629697, 7013760779, 7013891879, 7014022973, - 7014154051, 7014285139, 7014416251, 7014547363, 7014678443, 7014809521, 7014940601, - 7015071673, 7015202827, 7015333901, 7015464977, 7015596067, 7015727197, 7015858273, - 7015989371, 7016120459, 7016251553, 7016382629, 7016513711, 7016644783, 7016775901, - 7016907013, 7017038087, 7017169163, 7017300263, 7017431357, 7017562439, 7017693511, - 7017824603, 7017955741, 7018086821, 7018217951, 7018349027, 7018480127, 7018611217, - 7018742293, 7018873441, 7019004547, 7019135633, 7019266711, 7019397799, 7019528881, - 7019659957, 7019791043, 7019922157, 7020053237, 7020184333, 7020315437, 7020446539, - 7020577639, 7020708727, 7020839801, 7020970889, 7021101979, 7021233071, 7021364143, - 7021495237, 7021626317, 7021757411, 7021888513, 7022019617, 7022150699, 7022281781, - 7022412869, 7022543947, 7022675047, 7022806121, 7022937209, 7023068293, 7023199367, - 7023330469, 7023461563, 7023592651, 7023723761, 7023854863, 7023985957, 7024117031, - 7024248131, 7024379203, 7024510277, 7024641353, 7024772429, 7024903531, 7025034613, - 7025165723, 7025296813, 7025427953, 7025559041, 7025690131, 7025821207, 7025952281, - 7026083369, 7026214451, 7026345551, 7026476627, 7026607699, 7026738847, 7026869923, - 7027001011, 7027132127, 7027263203, 7027394281, 7027525387, 7027656487, 7027787561, - 7027918649, 7028049757, 7028180839, 7028311919, 7028443069, 7028574151, 7028705249, - 7028836327, 7028967427, 7029098509, 7029229589, 7029360697, 7029491773, 7029622861, - 7029753947, 7029885053, 7030016129, 7030147249, 7030278337, 7030409411, 7030540483, - 7030671581, 7030802711, 7030933807, 7031064917, 7031196013, 7031327101, 7031458177, - 7031589251, 7031720327, 7031851403, 7031982577, 7032113651, 7032244729, 7032375803, - 7032506927, 7032638101, 7032769217, 7032900307, 7033031381, 7033162457, 7033293539, - 7033424647, 7033555723, 7033686797, 7033817941, 7033949029, 7034080111, 7034211199, - 7034342303, 7034473399, 7034604509, 7034735599, 7034866681, 7034997793, 7035128897, - 7035259981, 7035391063, 7035522149, 7035653227, 7035784309, 7035915389, 7036046509, - 7036177607, 7036308679, 7036439771, 7036570883, 7036701967, 7036833071, 7036964167, - 7037095267, 7037226341, 7037357429, 7037488511, 7037619583, 7037750663, 7037881759, - 7038012841, 7038143933, 7038275021, 7038406117, 7038537193, 7038668297, 7038799373, - 7038930467, 7039061543, 7039192621, 7039323701, 7039454789, 7039585921, 7039717021, - 7039848103, 7039979201, 7040110289, 7040241367, 7040372483, 7040503577, 7040634659, - 7040765731, 7040896847, 7041027947, 7041159101, 7041290203, 7041421307, 7041552389, - 7041683489, 7041814567, 7041945641, 7042076737, 7042207819, 7042338959, 7042470037, - 7042601117, 7042732201, 7042863293, 7042994369, 7043125471, 7043256643, 7043387783, - 7043518877, 7043649979, 7043781067, 7043912179, 7044043271, 7044174353, 7044305431, - 7044436513, 7044567619, 7044698711, 7044829787, 7044960877, 7045091959, 7045223077, - 7045354153, 7045485229, 7045616359, 7045747433, 7045878529, 7046009617, 7046140697, - 7046271797, 7046402873, 7046533951, 7046665037, 7046796139, 7046927213, 7047058289, - 7047189407, 7047320557, 7047451637, 7047582719, 7047713801, 7047844889, 7047975971, - 7048107049, 7048238149, 7048369231, 7048500323, 7048631431, 7048762541, 7048893659, - 7049024737, 7049155811, 7049286883, 7049418031, 7049549161, 7049680237, 7049811341, - 7049942437, 7050073529, 7050204631, 7050335731, 7050466817, 7050597893, 7050728969, - 7050860051, 7050991133, 7051122209, 7051253327, 7051384399, 7051515481, 7051646611, - 7051777697, 7051908791, 7052039879, 7052170963, 7052302043, 7052433161, 7052564293, - 7052695379, 7052826481, 7052957609, 7053088687, 7053219769, 7053350849, 7053481927, - 7053613009, 7053744097, 7053875207, 7054006283, 7054137367, 7054268461, 7054399537, - 7054530611, 7054661693, 7054792813, 7054923899, 7055054999, 7055186093, 7055317189, - 7055448263, 7055579357, 7055710471, 7055841553, 7055972633, 7056103711, 7056234797, - 7056365923, 7056497027, 7056628099, 7056759173, 7056890257, 7057021331, 7057152419, - 7057283507, 7057414597, 7057545673, 7057676761, 7057807843, 7057938931, 7058070017, - 7058201147, 7058332241, 7058463317, 7058594401, 7058725523, 7058856601, 7058987723, - 7059118817, 7059249917, 7059381031, 7059512113, 7059643189, 7059774287, 7059905429, - 7060036513, 7060167589, 7060298669, 7060429787, 7060560863, 7060691951, 7060823023, - 7060954123, 7061085209, 7061216287, 7061347393, 7061478509, 7061609593, 7061740681, - 7061871847, 7062002933, 7062134017, 7062265099, 7062396181, 7062527279, 7062658357, - 7062789443, 7062920519, 7063051603, 7063182691, 7063313809, 7063444889, 7063575979, - 7063707073, 7063838203, 7063969291, 7064100367, 7064231501, 7064362573, 7064493739, - 7064624863, 7064755937, 7064887019, 7065018091, 7065149173, 7065280289, 7065411371, - 7065542443, 7065673519, 7065804601, 7065935713, 7066066907, 7066198031, 7066329107, - 7066460231, 7066591307, 7066722379, 7066853459, 7066984537, 7067115613, 7067246699, - 7067377777, 7067508857, 7067639947, 7067771023, 7067902103, 7068033191, 7068164297, - 7068295369, 7068426499, 7068557609, 7068688703, 7068819809, 7068950891, 7069081997, - 7069213069, 7069344169, 7069475311, 7069606441, 7069737523, 7069868623, 7069999723, - 7070130803, 7070261879, 7070392957, 7070524031, 7070655127, 7070786207, 7070917307, - 7071048389, 7071179471, 7071310553, 7071441647, 7071572771, 7071703871, 7071834961, - 7071966043, 7072097117, 7072228217, 7072359289, 7072490371, 7072621453, 7072752529, - 7072883611, 7073014699, 7073145797, 7073276911, 7073407997, 7073539091, 7073670193, - 7073801279, 7073932361, 7074063461, 7074194591, 7074325703, 7074456803, 7074587879, - 7074718993, 7074850171, 7074981281, 7075112393, 7075243493, 7075374637, 7075505711, - 7075636801, 7075767877, 7075898957, 7076030029, 7076161133, 7076292229, 7076423303, - 7076554379, 7076685461, 7076816543, 7076947681, 7077078773, 7077209861, 7077340939, - 7077472067, 7077603161, 7077734249, 7077865369, 7077996479, 7078127587, 7078258673, - 7078389749, 7078520821, 7078651901, 7078782973, 7078914067, 7079045143, 7079176217, - 7079307311, 7079438413, 7079569513, 7079700601, 7079831729, 7079962801, 7080093883, - 7080225001, 7080356077, 7080487151, 7080618229, 7080749353, 7080880447, 7081011533, - 7081142633, 7081273757, 7081404857, 7081535957, 7081667029, 7081798211, 7081929317, - 7082060389, 7082191469, 7082322547, 7082453647, 7082584759, 7082715839, 7082846933, - 7082978011, 7083109127, 7083240209, 7083371293, 7083502403, 7083633493, 7083764591, - 7083895673, 7084026757, 7084157837, 7084288921, 7084420001, 7084551079, 7084682161, - 7084813273, 7084944367, 7085075443, 7085206537, 7085337613, 7085468699, 7085599777, - 7085730871, 7085861947, 7085993041, 7086124121, 7086255203, 7086386297, 7086517391, - 7086648463, 7086779549, 7086910687, 7087041763, 7087172941, 7087304033, 7087435129, - 7087566247, 7087697327, 7087828403, 7087959493, 7088090587, 7088221667, 7088352749, - 7088483861, 7088614961, 7088746079, 7088877157, 7089008233, 7089139319, 7089270401, - 7089401477, 7089532577, 7089663671, 7089794783, 7089925883, 7090056983, 7090188071, - 7090319147, 7090450223, 7090581301, 7090712399, 7090843481, 7090974581, 7091105687, - 7091236771, 7091367901, 7091498993, 7091630069, 7091761141, 7091892233, 7092023317, - 7092154403, 7092285521, 7092416599, 7092547687, 7092678767, 7092809849, 7092940927, - 7093072093, 7093203193, 7093334267, 7093465363, 7093596449, 7093727567, 7093858649, - 7093989737, 7094120809, 7094251961, 7094383057, 7094514131, 7094645203, 7094776361, - 7094907433, 7095038513, 7095169603, 7095300691, 7095431767, 7095562879, 7095693953, - 7095825029, 7095956107, 7096087247, 7096218323, 7096349401, 7096480519, 7096611607, - 7096742699, 7096873801, 7097004907, 7097136043, 7097267171, 7097398249, 7097529349, - 7097660431, 7097791537, 7097922617, 7098053689, 7098184763, 7098315841, 7098447007, - 7098578093, 7098709171, 7098840271, 7098971381, 7099102453, 7099233563, 7099364641, - 7099495723, 7099626797, 7099757879, 7099889051, 7100020139, 7100151217, 7100282347, - 7100413427, 7100544523, 7100675597, 7100806679, 7100937751, 7101068851, 7101199943, - 7101331031, 7101462149, 7101593237, 7101724309, 7101855407, 7101986519, 7102117637, - 7102248719, 7102379917, 7102510993, 7102642069, 7102773157, 7102904239, 7103035333, - 7103166407, 7103297501, 7103428621, 7103559713, 7103690819, 7103821891, 7103952971, - 7104084067, 7104215143, 7104346231, 7104477313, 7104608389, 7104739471, 7104870547, - 7105001639, 7105132721, 7105263827, 7105394927, 7105526003, 7105657079, 7105788161, - 7105919251, 7106050333, 7106181413, 7106312491, 7106443577, 7106574659, 7106705731, - 7106836819, 7106967893, 7107099001, 7107230111, 7107361201, 7107492283, 7107623357, - 7107754447, 7107885527, 7108016611, 7108147693, 7108278797, 7108409897, 7108540981, - 7108672057, 7108803179, 7108934263, 7109065349, 7109196443, 7109327573, 7109458669, - 7109589763, 7109720843, 7109851921, 7109983007, 7110114083, 7110245171, 7110376243, - 7110507343, 7110638419, 7110769511, 7110900637, 7111031731, 7111162823, 7111293907, - 7111424981, 7111556071, 7111687169, 7111818253, 7111949387, 7112080487, 7112211559, - 7112342663, 7112473741, 7112604853, 7112735933, 7112867017, 7112998097, 7113129173, - 7113260257, 7113391333, 7113522407, 7113653537, 7113784621, 7113915703, 7114046783, - 7114177897, 7114308973, 7114440079, 7114571153, 7114702241, 7114833337, 7114964419, - 7115095529, 7115226637, 7115357737, 7115488819, 7115619899, 7115750977, 7115882051, - 7116013129, 7116144227, 7116275321, 7116406393, 7116537481, 7116668563, 7116799687, - 7116930763, 7117061837, 7117192909, 7117324003, 7117455089, 7117586171, 7117717249, - 7117848359, 7117979431, 7118110513, 7118241587, 7118372659, 7118503751, 7118634839, - 7118765921, 7118897041, 7119028151, 7119159259, 7119290357, 7119421451, 7119552533, - 7119683621, 7119814699, 7119945793, 7120076879, 7120207967, 7120339063, 7120470163, - 7120601261, 7120732351, 7120863427, 7120994533, 7121125651, 7121256773, 7121387863, - 7121518979, 7121650093, 7121781179, 7121912263, 7122043337, 7122174413, 7122305497, - 7122436583, 7122567689, 7122698761, 7122829849, 7122960973, 7123092049, 7123223137, - 7123354213, 7123485289, 7123616377, 7123747471, 7123878547, 7124009621, 7124140703, - 7124271809, 7124402933, 7124534033, 7124665111, 7124796191, 7124927267, 7125058361, - 7125189443, 7125320533, 7125451607, 7125582679, 7125713813, 7125844903, 7125975979, - 7126107067, 7126238209, 7126369297, 7126500401, 7126631507, 7126762579, 7126893667, - 7127024741, 7127155813, 7127286893, 7127417971, 7127549053, 7127680139, 7127811211, - 7127942299, 7128073373, 7128204469, 7128335549, 7128466637, 7128597779, 7128728851, - 7128859961, 7128991039, 7129122137, 7129253249, 7129384337, 7129515409, 7129646527, - 7129777609, 7129908683, 7130039759, 7130170871, 7130301953, 7130433071, 7130564143, - 7130695279, 7130826379, 7130957459, 7131088541, 7131219629, 7131350719, 7131481823, - 7131612941, 7131744019, 7131875227, 7132006309, 7132137391, 7132268491, 7132399583, - 7132530679, 7132661773, 7132792847, 7132923943, 7133055029, 7133186117, 7133317201, - 7133448323, 7133579441, 7133710513, 7133841641, 7133972723, 7134103799, 7134234901, - 7134365977, 7134497059, 7134628157, 7134759299, 7134890407, 7135021489, 7135152571, - 7135283689, 7135414817, 7135545899, 7135676981, 7135808077, 7135939169, 7136070257, - 7136201363, 7136332453, 7136463553, 7136594657, 7136725733, 7136856809, 7136987933, - 7137119009, 7137250091, 7137381203, 7137512287, 7137643363, 7137774473, 7137905561, - 7138036639, 7138167727, 7138298851, 7138429997, 7138561081, 7138692167, 7138823239, - 7138954327, 7139085439, 7139216533, 7139347619, 7139478719, 7139609797, 7139740871, - 7139871953, 7140003061, 7140134159, 7140265243, 7140396323, 7140527413, 7140658493, - 7140789613, 7140920707, 7141051781, 7141182871, 7141314029, 7141445123, 7141576243, - 7141707319, 7141838441, 7141969517, 7142100593, 7142231669, 7142362771, 7142493859, - 7142624971, 7142756059, 7142887133, 7143018247, 7143149329, 7143280483, 7143411581, - 7143542663, 7143673769, 7143804847, 7143935921, 7144066997, 7144198081, 7144329167, - 7144460243, 7144591319, 7144722401, 7144853501, 7144984579, 7145115667, 7145246753, - 7145377873, 7145508947, 7145640031, 7145771117, 7145902201, 7146033281, 7146164357, - 7146295451, 7146426607, 7146557681, 7146688771, 7146819857, 7146950999, 7147082093, - 7147213201, 7147344329, 7147475417, 7147606511, 7147737593, 7147868681, 7147999753, - 7148130839, 7148261957, 7148393029, 7148524111, 7148655187, 7148786299, 7148917379, - 7149048461, 7149179551, 7149310697, 7149441779, 7149572861, 7149703937, 7149835013, - 7149966151, 7150097237, 7150228321, 7150359407, 7150490483, 7150621613, 7150752709, - 7150883807, 7151014879, 7151145973, 7151277059, 7151408153, 7151539249, 7151670329, - 7151801429, 7151932507, 7152063587, 7152194689, 7152325769, 7152456877, 7152587951, - 7152719027, 7152850099, 7152981181, 7153112261, 7153243351, 7153374433, 7153505507, - 7153636579, 7153767667, 7153898761, 7154029859, 7154161009, 7154292109, 7154423189, - 7154554327, 7154685409, 7154816497, 7154947601, 7155078683, 7155209773, 7155340849, - 7155471923, 7155603017, 7155734099, 7155865187, 7155996311, 7156127383, 7156258463, - 7156389551, 7156520627, 7156651727, 7156782799, 7156913909, 7157044981, 7157176079, - 7157307151, 7157438251, 7157569333, 7157700413, 7157831501, 7157962597, 7158093689, - 7158224761, 7158355859, 7158486941, 7158618037, 7158749197, 7158880277, 7159011361, - 7159142437, 7159273547, 7159404641, 7159535723, 7159666823, 7159797899, 7159928977, - 7160060077, 7160191177, 7160322283, 7160453359, 7160584447, 7160715533, 7160846629, - 7160977709, 7161108803, 7161239879, 7161370967, 7161502079, 7161633151, 7161764227, - 7161895333, 7162026413, 7162157489, 7162288591, 7162419689, 7162550771, 7162681879, - 7162812959, 7162944037, 7163075111, 7163206201, 7163337287, 7163468383, 7163599463, - 7163730551, 7163861633, 7163992711, 7164123787, 7164254873, 7164385957, 7164517033, - 7164648107, 7164779213, 7164910289, 7165041409, 7165172519, 7165303603, 7165434701, - 7165565801, 7165696883, 7165827959, 7165959067, 7166090143, 7166221247, 7166352353, - 7166483459, 7166614561, 7166745643, 7166876723, 7167007801, 7167138877, 7167269953, - 7167401039, 7167532117, 7167663197, 7167794287, 7167925363, 7168056457, 7168187603, - 7168318699, 7168449773, 7168580849, 7168711937, 7168843009, 7168974143, 7169105243, - 7169236339, 7169367431, 7169498533, 7169629633, 7169760707, 7169891803, 7170022877, - 7170153953, 7170285043, 7170416117, 7170547193, 7170678269, 7170809341, 7170940463, - 7171071569, 7171202653, 7171333727, 7171464803, 7171595897, 7171726973, 7171858049, - 7171989127, 7172120231, 7172251327, 7172382403, 7172513483, 7172644597, 7172775679, - 7172906863, 7173037939, 7173169013, 7173300089, 7173431249, 7173562327, 7173693437, - 7173824521, 7173955619, 7174086697, 7174217773, 7174348849, 7174479943, 7174611151, - 7174742227, 7174873319, 7175004407, 7175135489, 7175266573, 7175397721, 7175528821, - 7175659913, 7175790997, 7175922077, 7176053177, 7176184261, 7176315347, 7176446423, - 7176577559, 7176708647, 7176839743, 7176970831, 7177101923, 7177232999, 7177364137, - 7177495211, 7177626289, 7177757383, 7177888499, 7178019571, 7178150741, 7178281843, - 7178412919, 7178544001, 7178675111, 7178806211, 7178937323, 7179068401, 7179199513, - 7179330629, 7179461741, 7179592831, 7179723913, 7179854989, 7179986063, 7180117151, - 7180248239, 7180379321, 7180510417, 7180641491, 7180772591, 7180903687, 7181034793, - 7181165909, 7181297003, 7181428127, 7181559199, 7181690291, 7181821399, 7181952473, - 7182083549, 7182214639, 7182345719, 7182476797, 7182607889, 7182738973, 7182870047, - 7183001141, 7183132217, 7183263293, 7183394371, 7183525463, 7183656551, 7183787627, - 7183918717, 7184049809, 7184180881, 7184311963, 7184443073, 7184574157, 7184705249, - 7184836367, 7184967473, 7185098581, 7185229691, 7185360781, 7185491861, 7185623009, - 7185754159, 7185885233, 7186016351, 7186147429, 7186278557, 7186409663, 7186540759, - 7186671857, 7186802969, 7186934047, 7187065121, 7187196197, 7187327311, 7187458429, - 7187589533, 7187720621, 7187851711, 7187982797, 7188113873, 7188244949, 7188376031, - 7188507107, 7188638179, 7188769267, 7188900343, 7189031441, 7189162529, 7189293667, - 7189424741, 7189555817, 7189686899, 7189817977, 7189949083, 7190080189, 7190211271, - 7190342371, 7190473447, 7190604521, 7190735639, 7190866741, 7190997829, 7191128941, - 7191260029, 7191391127, 7191522241, 7191653401, 7191784531, 7191915659, 7192046749, - 7192177823, 7192308901, 7192439993, 7192571093, 7192702207, 7192833289, 7192964411, - 7193095493, 7193226569, 7193357651, 7193488727, 7193619833, 7193750929, 7193882023, - 7194013147, 7194144281, 7194275357, 7194406451, 7194537527, 7194668599, 7194799691, - 7194930803, 7195061879, 7195193021, 7195324109, 7195455199, 7195586323, 7195717429, - 7195848523, 7195979597, 7196110687, 7196241799, 7196372879, 7196503987, 7196635093, - 7196766167, 7196897251, 7197028327, 7197159401, 7197290473, 7197421549, 7197552643, - 7197683719, 7197814801, 7197945889, 7198076993, 7198208131, 7198339217, 7198470317, - 7198601453, 7198732531, 7198863611, 7198994689, 7199125771, 7199256901, 7199387981, - 7199519137, 7199650219, 7199781361, 7199912501, 7200043603, 7200174691, 7200305771, - 7200436843, 7200567929, 7200699001, 7200830101, 7200961181, 7201092257, 7201223333, - 7201354453, 7201485527, 7201616701, 7201747807, 7201878881, 7202010041, 7202141113, - 7202272201, 7202403349, 7202534447, 7202665531, 7202796617, 7202927713, 7203058853, - 7203189971, 7203321077, 7203452203, 7203583291, 7203714377, 7203845501, 7203976607, - 7204107737, 7204238813, 7204369943, 7204501019, 7204632101, 7204763201, 7204894273, - 7205025361, 7205156437, 7205287541, 7205418673, 7205549761, 7205680841, 7205811919, - 7205943011, 7206074111, 7206205219, 7206336299, 7206467423, 7206598507, 7206729599, - 7206860681, 7206991789, 7207122889, 7207253969, 7207385047, 7207516133, 7207647263, - 7207778339, 7207909411, 7208040503, 7208171599, 7208302679, 7208433773, 7208564897, - 7208695987, 7208827081, 7208958157, 7209089243, 7209220367, 7209351439, 7209482513, - 7209613639, 7209744719, 7209875807, 7210006879, 7210137997, 7210269071, 7210400161, - 7210531241, 7210662313, 7210793413, 7210924499, 7211055587, 7211186659, 7211317733, - 7211448809, 7211579899, 7211710993, 7211842091, 7211973163, 7212104281, 7212235357, - 7212366463, 7212497557, 7212628651, 7212759751, 7212890837, 7213021913, 7213153033, - 7213284109, 7213415191, 7213546283, 7213677397, 7213808471, 7213939559, 7214070641, - 7214201747, 7214332837, 7214463911, 7214595023, 7214726107, 7214857183, 7214988257, - 7215119341, 7215250439, 7215381583, 7215512659, 7215643759, 7215774833, 7215905927, - 7216037009, 7216168087, 7216299163, 7216430239, 7216561337, 7216692433, 7216823513, - 7216954627, 7217085709, 7217216791, 7217347913, 7217479019, 7217610109, 7217741203, - 7217872289, 7218003371, 7218134477, 7218265553, 7218396671, 7218527803, 7218658877, - 7218789953, 7218921053, 7219052131, 7219183211, 7219314331, 7219445411, 7219576537, - 7219707617, 7219838701, 7219969789, 7220100863, 7220231989, 7220363077, 7220494187, - 7220625277, 7220756377, 7220887469, 7221018557, 7221149693, 7221280817, 7221411907, - 7221542981, 7221674059, 7221805153, 7221936251, 7222067383, 7222198463, 7222329559, - 7222460639, 7222591741, 7222722827, 7222853917, 7222984991, 7223116067, 7223247149, - 7223378221, 7223509303, 7223640401, 7223771507, 7223902579, 7224033667, 7224164771, - 7224295849, 7224426931, 7224558007, 7224689099, 7224820181, 7224951269, 7225082383, - 7225213477, 7225344563, 7225475669, 7225606741, 7225737823, 7225868963, 7226000053, - 7226131229, 7226262313, 7226393407, 7226524511, 7226655589, 7226786663, 7226917777, - 7227048863, 7227179959, 7227311033, 7227442109, 7227573187, 7227704269, 7227835367, - 7227966451, 7228097677, 7228228751, 7228359833, 7228490923, 7228622017, 7228753097, - 7228884197, 7229015279, 7229146403, 7229277533, 7229408617, 7229539727, 7229670821, - 7229801893, 7229932987, 7230064073, 7230195157, 7230326237, 7230457321, 7230588401, - 7230719491, 7230850589, 7230981683, 7231112821, 7231243919, 7231375031, 7231506127, - 7231637219, 7231768303, 7231899391, 7232030479, 7232161567, 7232292647, 7232423719, - 7232554843, 7232685931, 7232817013, 7232948123, 7233079211, 7233210289, 7233341371, - 7233472459, 7233603539, 7233734639, 7233865711, 7233996793, 7234127897, 7234259029, - 7234390127, 7234521211, 7234652303, 7234783421, 7234914499, 7235045581, 7235176661, - 7235307799, 7235438891, 7235570021, 7235701141, 7235832217, 7235963299, 7236094373, - 7236225463, 7236356539, 7236487637, 7236618713, 7236749791, 7236880867, 7237011959, - 7237143031, 7237274123, 7237405211, 7237536289, 7237667369, 7237798441, 7237929581, - 7238060653, 7238191769, 7238322841, 7238453923, 7238585017, 7238716103, 7238847179, - 7238978251, 7239109327, 7239240419, 7239371497, 7239502597, 7239633683, 7239764759, - 7239895843, 7240026919, 7240158007, 7240289081, 7240420181, 7240551257, 7240682357, - 7240813439, 7240944539, 7241075629, 7241206711, 7241337791, 7241468881, 7241599993, - 7241731097, 7241862169, 7241993249, 7242124363, 7242255469, 7242386551, 7242517627, - 7242648701, 7242779809, 7242910963, 7243042039, 7243173137, 7243304227, 7243435453, - 7243566541, 7243697621, 7243828703, 7243959791, 7244090869, 7244221961, 7244353043, - 7244484131, 7244615227, 7244746307, 7244877379, 7245008453, 7245139547, 7245270661, - 7245401749, 7245532829, 7245663907, 7245795019, 7245926123, 7246057199, 7246188277, - 7246319363, 7246450439, 7246581533, 7246712617, 7246843697, 7246974793, 7247105867, - 7247236963, 7247368043, 7247499169, 7247630249, 7247761321, 7247892403, 7248023483, - 7248154559, 7248285643, 7248416743, 7248547829, 7248678901, 7248809977, 7248941059, - 7249072151, 7249203239, 7249334317, 7249465403, 7249596479, 7249727561, 7249858663, - 7249989743, 7250120837, 7250251909, 7250382991, 7250514077, 7250645161, 7250776237, - 7250907317, 7251038401, 7251169487, 7251300559, 7251431633, 7251562709, 7251693781, - 7251824863, 7251955937, 7252087039, 7252218119, 7252349233, 7252480307, 7252611397, - 7252742473, 7252873547, 7253004677, 7253135777, 7253266849, 7253397923, 7253528999, - 7253660087, 7253791229, 7253922301, 7254053393, 7254184541, 7254315631, 7254446707, - 7254577787, 7254708869, 7254839941, 7254971021, 7255102093, 7255233169, 7255364251, - 7255495339, 7255626431, 7255757513, 7255888597, 7256019677, 7256150753, 7256281841, - 7256412931, 7256544041, 7256675119, 7256806223, 7256937313, 7257068453, 7257199559, - 7257330643, 7257461737, 7257592829, 7257723923, 7257855019, 7257986101, 7258117271, - 7258248407, 7258379549, 7258510661, 7258641743, 7258772839, 7258903913, 7259035027, - 7259166127, 7259297209, 7259428283, 7259559367, 7259690441, 7259821553, 7259952641, - 7260083713, 7260214807, 7260345881, 7260476957, 7260608029, 7260739103, 7260870181, - 7261001273, 7261132369, 7261263491, 7261394599, 7261525681, 7261656763, 7261787867, - 7261918949, 7262050031, 7262181127, 7262312201, 7262443351, 7262574463, 7262705579, - 7262836657, 7262967743, 7263098827, 7263229913, 7263360997, 7263492073, 7263623149, - 7263754241, 7263885319, 7264016401, 7264147493, 7264278587, 7264409681, 7264540757, - 7264671901, 7264802981, 7264934057, 7265065147, 7265196229, 7265327317, 7265458411, - 7265589497, 7265720611, 7265851699, 7265982821, 7266113947, 7266245047, 7266376121, - 7266507197, 7266638311, 7266769403, 7266900479, 7267031561, 7267162673, 7267293749, - 7267424833, 7267555931, 7267687043, 7267818119, 7267949207, 7268080283, 7268211371, - 7268342443, 7268473543, 7268604617, 7268735767, 7268866853, 7268997937, 7269129017, - 7269260111, 7269391183, 7269522263, 7269653351, 7269784447, 7269915559, 7270046657, - 7270177819, 7270308919, 7270439999, 7270571117, 7270702199, 7270833287, 7270964359, - 7271095439, 7271226517, 7271357593, 7271488669, 7271619757, 7271750861, 7271881949, - 7272013027, 7272144119, 7272275191, 7272406279, 7272537353, 7272668483, 7272799577, - 7272930703, 7273061777, 7273192853, 7273323929, 7273455017, 7273586113, 7273717193, - 7273848317, 7273979389, 7274110469, 7274241577, 7274372659, 7274503757, 7274634847, - 7274765947, 7274897029, 7275028129, 7275159247, 7275290389, 7275421477, 7275552587, - 7275683671, 7275814753, 7275945863, 7276076953, 7276208047, 7276339121, 7276470193, - 7276601279, 7276732369, 7276863443, 7276994531, 7277125613, 7277256689, 7277387773, - 7277518861, 7277649959, 7277781031, 7277912107, 7278043183, 7278174329, 7278305407, - 7278436493, 7278567601, 7278698677, 7278829771, 7278960851, 7279091923, 7279223041, - 7279354127, 7279485217, 7279616317, 7279747399, 7279878491, 7280009573, 7280140661, - 7280271751, 7280402827, 7280533913, 7280665057, 7280796139, 7280927221, 7281058331, - 7281189431, 7281320509, 7281451589, 7281582661, 7281713737, 7281844831, 7281975923, - 7282106999, 7282238071, 7282369163, 7282500257, 7282631333, 7282762423, 7282893503, - 7283024599, 7283155697, 7283286821, 7283417893, 7283548991, 7283680069, 7283811149, - 7283942227, 7284073331, 7284204457, 7284335549, 7284466627, 7284597709, 7284728783, - 7284859871, 7284990949, 7285122043, 7285253147, 7285384261, 7285515353, 7285646453, - 7285777549, 7285908629, 7286039711, 7286170789, 7286301877, 7286432953, 7286564039, - 7286695151, 7286826233, 7286957323, 7287088409, 7287219491, 7287350563, 7287481639, - 7287612719, 7287743807, 7287874931, 7288006079, 7288137221, 7288268303, 7288399421, - 7288530523, 7288661599, 7288792699, 7288923809, 7289054887, 7289185963, 7289317037, - 7289448109, 7289579183, 7289710283, 7289841371, 7289972477, 7290103553, 7290234643, - 7290365737, 7290496831, 7290627907, 7290759001, 7290890099, 7291021181, 7291152257, - 7291283353, 7291414453, 7291545533, 7291676621, 7291807703, 7291938779, 7292069857, - 7292200957, 7292332039, 7292463121, 7292594219, 7292725303, 7292856391, 7292987473, - 7293118549, 7293249629, 7293380713, 7293511811, 7293642887, 7293774029, 7293905123, - 7294036213, 7294167313, 7294298423, 7294429511, 7294560593, 7294691683, 7294822781, - 7294953863, 7295084947, 7295216021, 7295347093, 7295478187, 7295609323, 7295740411, - 7295871547, 7296002621, 7296133727, 7296264823, 7296395921, 7296526999, 7296658073, - 7296789161, 7296920237, 7297051357, 7297182437, 7297313521, 7297444657, 7297575811, - 7297706917, 7297838057, 7297969163, 7298100239, 7298231323, 7298362397, 7298493473, - 7298624549, 7298755687, 7298886767, 7299017839, 7299148933, 7299280007, 7299411079, - 7299542171, 7299673267, 7299804353, 7299935437, 7300066537, 7300197649, 7300328729, - 7300459867, 7300590961, 7300722059, 7300853141, 7300984217, 7301115337, 7301246417, - 7301377529, 7301508601, 7301639677, 7301770787, 7301901881, 7302032953, 7302164029, - 7302295103, 7302426223, 7302557323, 7302688397, 7302819551, 7302950651, 7303081769, - 7303212853, 7303343947, 7303475041, 7303606207, 7303737281, 7303868353, 7303999427, - 7304130517, 7304261603, 7304392687, 7304523791, 7304654887, 7304785987, 7304917127, - 7305048203, 7305179291, 7305310367, 7305441443, 7305572551, 7305703627, 7305834707, - 7305965819, 7306096891, 7306227967, 7306359077, 7306490167, 7306621261, 7306752367, - 7306883443, 7307014529, 7307145611, 7307276687, 7307407801, 7307538877, 7307669981, - 7307801087, 7307932183, 7308063277, 7308194357, 7308325447, 7308456527, 7308587603, - 7308718679, 7308849781, 7308980869, 7309111949, 7309243031, 7309374109, 7309505191, - 7309636331, 7309767403, 7309898483, 7310029561, 7310160661, 7310291777, 7310422849, - 7310553923, 7310685029, 7310816141, 7310947213, 7311078319, 7311209413, 7311340493, - 7311471599, 7311602723, 7311733853, 7311864991, 7311996077, 7312127161, 7312258241, - 7312389317, 7312520389, 7312651481, 7312782557, 7312913639, 7313044727, 7313175817, - 7313306909, 7313438003, 7313569093, 7313700259, 7313831359, 7313962433, 7314093559, - 7314224633, 7314355717, 7314486799, 7314617903, 7314748981, 7314880081, 7315011199, - 7315142281, 7315273393, 7315404517, 7315535597, 7315666693, 7315797773, 7315928863, - 7316059957, 7316191037, 7316322151, 7316453233, 7316584307, 7316715397, 7316846489, - 7316977573, 7317108647, 7317239723, 7317370873, 7317501991, 7317633067, 7317764183, - 7317895271, 7318026349, 7318157423, 7318288507, 7318419629, 7318550713, 7318681813, - 7318812913, 7318944037, 7319075123, 7319206253, 7319337353, 7319468459, 7319599537, - 7319730619, 7319861699, 7319992777, 7320123871, 7320254957, 7320386057, 7320517151, - 7320648227, 7320779327, 7320910451, 7321041523, 7321172623, 7321303699, 7321434793, - 7321565903, 7321696997, 7321828081, 7321959157, 7322090231, 7322221303, 7322352377, - 7322483453, 7322614543, 7322745623, 7322876707, 7323007781, 7323138857, 7323269939, - 7323401023, 7323532127, 7323663229, 7323794311, 7323925391, 7324056463, 7324187567, - 7324318643, 7324449721, 7324580819, 7324711943, 7324843027, 7324974113, 7325105213, - 7325236309, 7325367457, 7325498563, 7325629669, 7325760749, 7325891827, 7326022901, - 7326153977, 7326285049, 7326416129, 7326547219, 7326678299, 7326809381, 7326940469, - 7327071541, 7327202629, 7327333711, 7327464787, 7327595881, 7327726963, 7327858037, - 7327989113, 7328120213, 7328251321, 7328382401, 7328513473, 7328644573, 7328775647, - 7328906731, 7329037813, 7329168907, 7329300001, 7329431099, 7329562171, 7329693277, - 7329824401, 7329955481, 7330086557, 7330217647, 7330348747, 7330479823, 7330610909, - 7330741981, 7330873061, 7331004157, 7331135249, 7331266333, 7331397419, 7331528521, - 7331659613, 7331790703, 7331921777, 7332052873, 7332183959, 7332315031, 7332446113, - 7332577211, 7332708301, 7332839377, 7332970457, 7333101541, 7333232617, 7333363691, - 7333494769, 7333625861, 7333756943, 7333888061, 7334019157, 7334150267, 7334281343, - 7334412439, 7334543519, 7334674597, 7334805677, 7334936797, 7335067879, 7335198967, - 7335330059, 7335461171, 7335592249, 7335723359, 7335854447, 7335985529, 7336116617, - 7336247701, 7336378789, 7336509877, 7336640953, 7336772039, 7336903127, 7337034223, - 7337165327, 7337296427, 7337427557, 7337558629, 7337689717, 7337820793, 7337951899, - 7338082993, 7338214097, 7338345181, 7338476261, 7338607333, 7338738413, 7338869533, - 7339000607, 7339131689, 7339262767, 7339393847, 7339524967, 7339656043, 7339787123, - 7339918211, 7340049287, 7340180363, 7340311441, 7340442517, 7340573609, 7340704699, - 7340835781, 7340966921, 7341098033, 7341229111, 7341360193, 7341491273, 7341622369, - 7341753443, 7341884521, 7342015619, 7342146701, 7342277791, 7342408883, 7342539959, - 7342671031, 7342802143, 7342933217, 7343064293, 7343195381, 7343326453, 7343457533, - 7343588611, 7343719711, 7343850851, 7343981947, 7344113039, 7344244139, 7344375221, - 7344506317, 7344637427, 7344768499, 7344899579, 7345030717, 7345161809, 7345292891, - 7345423979, 7345555067, 7345686149, 7345817233, 7345948349, 7346079427, 7346210507, - 7346341603, 7346472691, 7346603767, 7346734847, 7346865941, 7346997013, 7347128137, - 7347259217, 7347390311, 7347521393, 7347652493, 7347783577, 7347914681, 7348045763, - 7348176839, 7348307933, 7348439039, 7348570121, 7348701221, 7348832297, 7348963397, - 7349094469, 7349225591, 7349356667, 7349487763, 7349618909, 7349749997, 7349881069, - 7350012151, 7350143233, 7350274307, 7350405407, 7350536491, 7350667603, 7350798727, - 7350929819, 7351060891, 7351191971, 7351323047, 7351454129, 7351585207, 7351716287, - 7351847359, 7351978519, 7352109617, 7352240717, 7352371801, 7352502901, 7352634031, - 7352765129, 7352896207, 7353027287, 7353158383, 7353289477, 7353420553, 7353551657, - 7353682759, 7353813911, 7353944989, 7354076071, 7354207163, 7354338241, 7354469321, - 7354600397, 7354731479, 7354862569, 7354993643, 7355124731, 7355255807, 7355386891, - 7355517989, 7355649079, 7355780191, 7355911273, 7356042349, 7356173431, 7356304511, - 7356435601, 7356566681, 7356697769, 7356828841, 7356959921, 7357091009, 7357222097, - 7357353173, 7357484297, 7357615379, 7357746467, 7357877543, 7358008639, 7358139751, - 7358270873, 7358401949, 7358533031, 7358664167, 7358795243, 7358926319, 7359057413, - 7359188503, 7359319607, 7359450697, 7359581849, 7359712933, 7359844061, 7359975167, - 7360106249, 7360237343, 7360368527, 7360499609, 7360630681, 7360761757, 7360892879, - 7361023961, 7361155033, 7361286113, 7361417221, 7361548303, 7361679397, 7361810479, - 7361941567, 7362072667, 7362203747, 7362334841, 7362465919, 7362596993, 7362728077, - 7362859177, 7362990277, 7363121371, 7363252459, 7363383541, 7363514629, 7363645721, - 7363776793, 7363907893, 7364038967, 7364170049, 7364301157, 7364432237, 7364563321, - 7364694433, 7364825519, 7364956601, 7365087673, 7365218747, 7365349891, 7365480971, - 7365612061, 7365743149, 7365874231, 7366005313, 7366136411, 7366267483, 7366398569, - 7366529671, 7366660831, 7366791911, 7366923001, 7367054081, 7367185159, 7367316241, - 7367447341, 7367578423, 7367709541, 7367840629, 7367971703, 7368102799, 7368233897, - 7368365021, 7368496123, 7368627199, 7368758317, 7368889417, 7369020511, 7369151591, - 7369282673, 7369413749, 7369544881, 7369675961, 7369807057, 7369938131, 7370069219, - 7370200297, 7370331427, 7370462503, 7370593577, 7370724649, 7370855749, 7370986823, - 7371117917, 7371248999, 7371380077, 7371511183, 7371642283, 7371773369, 7371904483, - 7372035557, 7372166629, 7372297799, 7372428907, 7372560011, 7372691089, 7372822181, - 7372953253, 7373084333, 7373215463, 7373346577, 7373477653, 7373608769, 7373739847, - 7373870929, 7374002033, 7374133121, 7374264193, 7374395299, 7374526391, 7374657497, - 7374788621, 7374919697, 7375050821, 7375181899, 7375312999, 7375444127, 7375575199, - 7375706291, 7375837433, 7375968521, 7376099593, 7376230721, 7376361793, 7376492891, - 7376623987, 7376755081, 7376886169, 7377017243, 7377148343, 7377279431, 7377410519, - 7377541601, 7377672689, 7377803773, 7377934919, 7378066009, 7378197083, 7378328179, - 7378459267, 7378590343, 7378721417, 7378852489, 7378983571, 7379114671, 7379245747, - 7379376853, 7379507953, 7379639027, 7379770109, 7379901181, 7380032263, 7380163361, - 7380294461, 7380425603, 7380556769, 7380687841, 7380818927, 7380950029, 7381081109, - 7381212191, 7381343351, 7381474439, 7381605521, 7381736603, 7381867679, 7381998751, - 7382129837, 7382260913, 7382392097, 7382523191, 7382654263, 7382785349, 7382916421, - 7383047543, 7383178619, 7383309697, 7383440777, 7383571861, 7383702967, 7383834067, - 7383965143, 7384096231, 7384227329, 7384358407, 7384489481, 7384620553, 7384751687, - 7384882763, 7385013859, 7385144939, 7385276023, 7385407129, 7385538227, 7385669323, - 7385800397, 7385931491, 7386062591, 7386193673, 7386324761, 7386455833, 7386587009, - 7386718117, 7386849199, 7386980287, 7387111363, 7387242461, 7387373549, 7387504633, - 7387635713, 7387766807, 7387897879, 7388028979, 7388160053, 7388291149, 7388422243, - 7388553323, 7388684461, 7388815537, 7388946619, 7389077719, 7389208901, 7389340001, - 7389471077, 7389602161, 7389733243, 7389864319, 7389995401, 7390126529, 7390257607, - 7390388683, 7390519771, 7390650887, 7390781987, 7390913077, 7391044163, 7391175269, - 7391306353, 7391437433, 7391568511, 7391699591, 7391830709, 7391961793, 7392092867, - 7392223957, 7392355031, 7392486107, 7392617231, 7392748313, 7392879391, 7393010467, - 7393141589, 7393272703, 7393403777, 7393534849, 7393665967, 7393797053, 7393928159, - 7394059261, 7394190337, 7394321437, 7394452511, 7394583583, 7394714737, 7394845831, - 7394976923, 7395108011, 7395239129, 7395370207, 7395501293, 7395632411, 7395763489, - 7395894577, 7396025683, 7396156763, 7396287887, 7396419001, 7396550093, 7396681199, - 7396812281, 7396943369, 7397074481, 7397205553, 7397336651, 7397467741, 7397598823, - 7397729947, 7397861027, 7397992103, 7398123179, 7398254251, 7398385327, 7398516401, - 7398647491, 7398778589, 7398909731, 7399040809, 7399171891, 7399302997, 7399434073, - 7399565149, 7399696223, 7399827319, 7399958399, 7400089507, 7400220587, 7400351659, - 7400482751, 7400613833, 7400744957, 7400876051, 7401007157, 7401138257, 7401269339, - 7401400423, 7401531497, 7401662573, 7401793661, 7401924757, 7402055839, 7402186921, - 7402317997, 7402449071, 7402580197, 7402711289, 7402842373, 7402973491, 7403104603, - 7403235683, 7403366767, 7403497847, 7403628941, 7403760017, 7403891113, 7404022211, - 7404153283, 7404284357, 7404415451, 7404546629, 7404677713, 7404808793, 7404939923, - 7405070999, 7405202081, 7405333181, 7405464277, 7405595359, 7405726457, 7405857551, - 7405988633, 7406119723, 7406250799, 7406381881, 7406512973, 7406644057, 7406775133, - 7406906263, 7407037397, 7407168473, 7407299579, 7407430663, 7407561737, 7407692821, - 7407823901, 7407955007, 7408086097, 7408217183, 7408348271, 7408479359, 7408610437, - 7408741511, 7408872599, 7409003671, 7409134751, 7409265823, 7409396957, 7409528029, - 7409659189, 7409790277, 7409921357, 7410052451, 7410183523, 7410314599, 7410445699, - 7410576773, 7410707873, 7410838949, 7410970043, 7411101143, 7411232221, 7411363303, - 7411494427, 7411625509, 7411756609, 7411887689, 7412018797, 7412149873, 7412280971, - 7412412089, 7412543179, 7412674261, 7412805347, 7412936423, 7413067513, 7413198587, - 7413329681, 7413460753, 7413591883, 7413722971, 7413854081, 7413985177, 7414116257, - 7414247353, 7414378457, 7414509551, 7414640677, 7414771759, 7414902841, 7415033921, - 7415164993, 7415296093, 7415427167, 7415558243, 7415689319, 7415820397, 7415951509, - 7416082613, 7416213691, 7416344777, 7416475849, 7416606931, 7416738013, 7416869099, - 7417000207, 7417131283, 7417262357, 7417393433, 7417524511, 7417655593, 7417786697, - 7417917769, 7418048851, 7418179931, 7418311013, 7418442089, 7418573167, 7418704291, - 7418835439, 7418966521, 7419097633, 7419228727, 7419359809, 7419490889, 7419621983, - 7419753083, 7419884167, 7420015283, 7420146397, 7420277483, 7420408559, 7420539631, - 7420670773, 7420801853, 7420932943, 7421064019, 7421195129, 7421326277, 7421457349, - 7421588441, 7421719519, 7421850613, 7421981689, 7422112793, 7422243887, 7422374963, - 7422506041, 7422637133, 7422768211, 7422899293, 7423030379, 7423161511, 7423292627, - 7423423699, 7423554797, 7423685879, 7423816951, 7423948057, 7424079181, 7424210257, - 7424341339, 7424472431, 7424603503, 7424734607, 7424865691, 7424996771, 7425127849, - 7425258937, 7425390017, 7425521093, 7425652237, 7425783349, 7425914423, 7426045513, - 7426176683, 7426307797, 7426438879, 7426570049, 7426701137, 7426832219, 7426963309, - 7427094383, 7427225497, 7427356571, 7427487643, 7427618729, 7427749829, 7427880913, - 7428012041, 7428143117, 7428274193, 7428405269, 7428536369, 7428667457, 7428798529, - 7428929633, 7429060729, 7429191827, 7429322909, 7429454009, 7429585127, 7429716211, - 7429847287, 7429978421, 7430109509, 7430240633, 7430371717, 7430502823, 7430633911, - 7430765003, 7430896141, 7431027217, 7431158291, 7431289409, 7431420487, 7431551563, - 7431682649, 7431813733, 7431944813, 7432075897, 7432206979, 7432338079, 7432469171, - 7432600249, 7432731329, 7432862431, 7432993531, 7433124619, 7433255699, 7433386771, - 7433517853, 7433648927, 7433780023, 7433911097, 7434042193, 7434173269, 7434304373, - 7434435457, 7434566543, 7434697619, 7434828691, 7434959797, 7435090903, 7435221979, - 7435353091, 7435484207, 7435615309, 7435746391, 7435877467, 7436008543, 7436139629, - 7436270707, 7436401793, 7436532893, 7436663977, 7436795083, 7436926157, 7437057289, - 7437188383, 7437319457, 7437450539, 7437581621, 7437712703, 7437843779, 7437974893, - 7438106003, 7438237087, 7438368167, 7438499239, 7438630333, 7438761409, 7438892537, - 7439023633, 7439154719, 7439285797, 7439416889, 7439547971, 7439679047, 7439810123, - 7439941199, 7440072281, 7440203363, 7440334439, 7440465521, 7440596609, 7440727681, - 7440858779, 7440989863, 7441120937, 7441252069, 7441383149, 7441514221, 7441645301, - 7441776389, 7441907483, 7442038577, 7442169673, 7442300759, 7442431831, 7442562971, - 7442694047, 7442825149, 7442956229, 7443087313, 7443218401, 7443349517, 7443480589, - 7443611663, 7443742753, 7443873869, 7444004987, 7444136071, 7444267153, 7444398259, - 7444529341, 7444660507, 7444791617, 7444922689, 7445053799, 7445184917, 7445316001, - 7445447077, 7445578187, 7445709281, 7445840357, 7445971433, 7446102509, 7446233581, - 7446364661, 7446495733, 7446626857, 7446757933, 7446889007, 7447020103, 7447151183, - 7447282277, 7447413367, 7447544441, 7447675523, 7447806623, 7447937719, 7448068801, - 7448199883, 7448330977, 7448462069, 7448593151, 7448724229, 7448855327, 7448986411, - 7449117491, 7449248603, 7449379741, 7449510839, 7449641917, 7449773011, 7449904093, - 7450035233, 7450166333, 7450297417, 7450428509, 7450559609, 7450690693, 7450821773, - 7450952849, 7451083931, 7451215003, 7451346083, 7451477183, 7451608267, 7451739367, - 7451870501, 7452001639, 7452132713, 7452263801, 7452394879, 7452525961, 7452657059, - 7452788131, 7452919207, 7453050281, 7453181377, 7453312453, 7453443581, 7453574663, - 7453705739, 7453836919, 7453967993, 7454099119, 7454230219, 7454361293, 7454492443, - 7454623529, 7454754617, 7454885719, 7455016799, 7455147883, 7455278977, 7455410087, - 7455541189, 7455672271, 7455803353, 7455934459, 7456065541, 7456196621, 7456327699, - 7456458797, 7456589879, 7456720987, 7456852087, 7456983161, 7457114233, 7457245319, - 7457376403, 7457507483, 7457638577, 7457769673, 7457900771, 7458031849, 7458162923, - 7458294071, 7458425179, 7458556277, 7458687361, 7458818447, 7458949523, 7459080631, - 7459211707, 7459342789, 7459473881, 7459605031, 7459736111, 7459867199, 7459998277, - 7460129371, 7460260463, 7460391551, 7460522669, 7460653777, 7460784893, 7460915981, - 7461047063, 7461178139, 7461309293, 7461440377, 7461571471, 7461702557, 7461833651, - 7461964723, 7462095841, 7462226971, 7462358083, 7462489157, 7462620247, 7462751333, - 7462882423, 7463013521, 7463144639, 7463275711, 7463406799, 7463537903, 7463668999, - 7463800073, 7463931149, 7464062251, 7464193351, 7464324431, 7464455513, 7464586609, - 7464717703, 7464848777, 7464979853, 7465110929, 7465242007, 7465373089, 7465504199, - 7465635277, 7465766389, 7465897471, 7466028611, 7466159689, 7466290781, 7466421863, - 7466552939, 7466684021, 7466815099, 7466946203, 7467077279, 7467208363, 7467339449, - 7467470531, 7467601619, 7467732691, 7467863771, 7467994873, 7468125947, 7468257031, - 7468388111, 7468519211, 7468650311, 7468781389, 7468912471, 7469043563, 7469174641, - 7469305717, 7469436797, 7469567909, 7469698991, 7469830111, 7469961199, 7470092297, - 7470223379, 7470354461, 7470485543, 7470616661, 7470747751, 7470878827, 7471009901, - 7471141003, 7471272079, 7471403153, 7471534229, 7471665329, 7471796407, 7471927513, - 7472058611, 7472189713, 7472320787, 7472451863, 7472582939, 7472714023, 7472845117, - 7472976191, 7473107263, 7473238397, 7473369479, 7473500557, 7473631631, 7473762707, - 7473893803, 7474024903, 7474155991, 7474287077, 7474418167, 7474549249, 7474680337, - 7474811411, 7474942499, 7475073643, 7475204731, 7475335807, 7475466907, 7475598029, - 7475729101, 7475860241, 7475991317, 7476122393, 7476253471, 7476384547, 7476515633, - 7476646729, 7476777817, 7476908891, 7477039987, 7477171069, 7477302149, 7477433237, - 7477564331, 7477695403, 7477826491, 7477957573, 7478088649, 7478219729, 7478350811, - 7478481919, 7478613013, 7478744089, 7478875181, 7479006263, 7479137363, 7479268441, - 7479399523, 7479530627, 7479661807, 7479792911, 7479923999, 7480055111, 7480186193, - 7480317277, 7480448369, 7480579481, 7480710553, 7480841647, 7480972747, 7481103829, - 7481234903, 7481365979, 7481497061, 7481628151, 7481759231, 7481890313, 7482021389, - 7482152473, 7482283553, 7482414631, 7482545737, 7482676841, 7482807953, 7482939031, - 7483070107, 7483201189, 7483332271, 7483463353, 7483594439, 7483725521, 7483856669, - 7483987751, 7484118841, 7484249953, 7484381059, 7484512151, 7484643223, 7484774303, - 7484905397, 7485036469, 7485167549, 7485298627, 7485429739, 7485560821, 7485691933, - 7485823013, 7485954089, 7486085161, 7486216261, 7486347371, 7486478443, 7486609517, - 7486740593, 7486871669, 7487002769, 7487133851, 7487264947, 7487396023, 7487527147, - 7487658221, 7487789293, 7487920397, 7488051469, 7488182557, 7488313633, 7488444721, - 7488575797, 7488706889, 7488837971, 7488969043, 7489100147, 7489231223, 7489362329, - 7489493419, 7489624531, 7489755653, 7489886731, 7490017813, 7490148893, 7490279989, - 7490411077, 7490542151, 7490673241, 7490804329, 7490935409, 7491066491, 7491197569, - 7491328657, 7491459749, 7491590831, 7491721957, 7491853051, 7491984187, 7492115263, - 7492246361, 7492377449, 7492508561, 7492639633, 7492770781, 7492901869, 7493032957, - 7493164057, 7493295133, 7493426251, 7493557327, 7493688409, 7493819483, 7493950573, - 7494081653, 7494212729, 7494343807, 7494474899, 7494605971, 7494737053, 7494868153, - 7494999227, 7495130333, 7495261441, 7495392529, 7495523611, 7495654709, 7495785799, - 7495916887, 7496047981, 7496179063, 7496310163, 7496441237, 7496572327, 7496703413, - 7496834497, 7496965571, 7497096643, 7497227723, 7497358801, 7497489877, 7497620981, - 7497752081, 7497883153, 7498014301, 7498145387, 7498276481, 7498407563, 7498538647, - 7498669721, 7498800811, 7498931927, 7499063009, 7499194121, 7499325221, 7499456303, - 7499587379, 7499718467, 7499849633, 7499980717, 7500111797, 7500242881, 7500373961, - 7500505049, 7500636139, 7500767231, 7500898309, 7501029407, 7501160483, 7501291657, - 7501422743, 7501553819, 7501684903, 7501815983, 7501947059, 7502078131, 7502209217, - 7502340311, 7502471443, 7502602519, 7502733599, 7502864687, 7502995769, 7503126871, - 7503257959, 7503389051, 7503520181, 7503651283, 7503782369, 7503913463, 7504044551, - 7504175687, 7504306781, 7504437901, 7504569011, 7504700149, 7504831231, 7504962343, - 7505093417, 7505224513, 7505355587, 7505486669, 7505617751, 7505748839, 7505879939, - 7506011011, 7506142129, 7506273223, 7506404317, 7506535397, 7506666481, 7506797633, - 7506928739, 7507059829, 7507190917, 7507322003, 7507453081, 7507584163, 7507715261, - 7507846343, 7507977439, 7508108521, 7508239631, 7508370707, 7508501789, 7508632861, - 7508763953, 7508895029, 7509026113, 7509157189, 7509288329, 7509419417, 7509550501, - 7509681587, 7509812669, 7509943751, 7510074833, 7510205933, 7510337011, 7510468087, - 7510599203, 7510730291, 7510861427, 7510992509, 7511123597, 7511254787, 7511385877, - 7511516953, 7511648029, 7511779123, 7511910199, 7512041281, 7512172357, 7512303479, - 7512434557, 7512565633, 7512696713, 7512827797, 7512958877, 7513089959, 7513221071, - 7513352159, 7513483231, 7513614307, 7513745429, 7513876507, 7514007587, 7514138683, - 7514269759, 7514400923, 7514532001, 7514663129, 7514794271, 7514925347, 7515056447, - 7515187543, 7515318617, 7515449699, 7515580781, 7515711869, 7515842941, 7515974041, - 7516105133, 7516236209, 7516367293, 7516498391, 7516629473, 7516760597, 7516891699, - 7517022811, 7517153893, 7517284981, 7517416073, 7517547161, 7517678237, 7517809337, - 7517940431, 7518071507, 7518202583, 7518333661, 7518464743, 7518595853, 7518726931, - 7518858013, 7518989089, 7519120163, 7519251247, 7519382323, 7519513433, 7519644511, - 7519775587, 7519906687, 7520037779, 7520168917, 7520299993, 7520431067, 7520562139, - 7520693231, 7520824309, 7520955389, 7521086477, 7521217553, 7521348631, 7521479717, - 7521610799, 7521741893, 7521872977, 7522004071, 7522135147, 7522266223, 7522397297, - 7522528397, 7522659499, 7522790591, 7522921667, 7523052739, 7523183831, 7523314919, - 7523445991, 7523577119, 7523708201, 7523839307, 7523970383, 7524101467, 7524232603, - 7524363689, 7524494821, 7524625919, 7524756997, 7524888083, 7525019171, 7525150247, - 7525281367, 7525412443, 7525543523, 7525674601, 7525805719, 7525936799, 7526067877, - 7526198957, 7526330029, 7526461133, 7526592217, 7526723299, 7526854409, 7526985511, - 7527116629, 7527247703, 7527378853, 7527509929, 7527641029, 7527772103, 7527903193, - 7528034273, 7528165409, 7528296511, 7528427591, 7528558663, 7528689757, 7528820837, - 7528951933, 7529083007, 7529214103, 7529345177, 7529476249, 7529607341, 7529738417, - 7529869493, 7530000581, 7530131671, 7530262763, 7530393847, 7530524927, 7530656009, - 7530787093, 7530918169, 7531049243, 7531180333, 7531311421, 7531442507, 7531573601, - 7531704703, 7531835807, 7531966889, 7532098001, 7532229091, 7532360167, 7532491261, - 7532622407, 7532753489, 7532884651, 7533015733, 7533146813, 7533277889, 7533408973, - 7533540073, 7533671149, 7533802223, 7533933331, 7534064411, 7534195483, 7534326559, - 7534457633, 7534588709, 7534719793, 7534850879, 7534981967, 7535113067, 7535244161, - 7535375233, 7535506313, 7535637397, 7535768473, 7535899559, 7536030631, 7536161779, - 7536292853, 7536423943, 7536555071, 7536686147, 7536817219, 7536948299, 7537079401, - 7537210487, 7537341583, 7537472687, 7537603789, 7537734863, 7537865939, 7537997017, - 7538128093, 7538259167, 7538390263, 7538521369, 7538652449, 7538783543, 7538914697, - 7539045769, 7539176857, 7539307933, 7539439007, 7539570097, 7539701203, 7539832297, - 7539963371, 7540094447, 7540225541, 7540356619, 7540487711, 7540618817, 7540749901, - 7540880983, 7541012107, 7541143273, 7541274437, 7541405519, 7541536609, 7541667691, - 7541798779, 7541929903, 7542061013, 7542192157, 7542323267, 7542454343, 7542585433, - 7542716537, 7542847651, 7542978733, 7543109863, 7543240951, 7543372027, 7543503127, - 7543634221, 7543765319, 7543896397, 7544027489, 7544158619, 7544289691, 7544420771, - 7544551853, 7544682953, 7544814031, 7544945129, 7545076219, 7545207343, 7545338443, - 7545469517, 7545600589, 7545731737, 7545862817, 7545993901, 7546124981, 7546256071, - 7546387151, 7546518227, 7546649303, 7546780379, 7546911479, 7547042567, 7547173639, - 7547304719, 7547435807, 7547566879, 7547697967, 7547829049, 7547960129, 7548091211, - 7548222299, 7548353381, 7548484477, 7548615637, 7548746747, 7548877823, 7549008911, - 7549139987, 7549271111, 7549402207, 7549533287, 7549664389, 7549795481, 7549926647, - 7550057741, 7550188813, 7550319899, 7550450993, 7550582069, 7550713141, 7550844221, - 7550975329, 7551106403, 7551237481, 7551368563, 7551499639, 7551630727, 7551761809, - 7551892913, 7552023989, 7552155073, 7552286149, 7552417247, 7552548319, 7552679447, - 7552810567, 7552941647, 7553072773, 7553203859, 7553334967, 7553466059, 7553597147, - 7553728249, 7553859347, 7553990453, 7554121537, 7554252619, 7554383713, 7554514861, - 7554645947, 7554777077, 7554908149, 7555039223, 7555170323, 7555301407, 7555432513, - 7555563601, 7555694687, 7555825789, 7555956883, 7556087969, 7556219051, 7556350127, - 7556481221, 7556612299, 7556743373, 7556874467, 7557005543, 7557136619, 7557267719, - 7557398791, 7557529871, 7557660967, 7557792059, 7557923137, 7558054271, 7558185353, - 7558316453, 7558447543, 7558578617, 7558709699, 7558840771, 7558971857, 7559102953, - 7559234041, 7559365153, 7559496299, 7559627377, 7559758471, 7559889553, 7560020659, - 7560151741, 7560282817, 7560413953, 7560545039, 7560676117, 7560807193, 7560938279, - 7561069387, 7561200469, 7561331543, 7561462633, 7561593709, 7561724813, 7561855919, - 7561987019, 7562118103, 7562249203, 7562380277, 7562511371, 7562642453, 7562773529, - 7562904653, 7563035759, 7563166837, 7563297923, 7563429017, 7563560107, 7563691181, - 7563822317, 7563953393, 7564084469, 7564215559, 7564346653, 7564477727, 7564608859, - 7564739953, 7564871053, 7565002141, 7565133281, 7565264353, 7565395429, 7565526523, - 7565657597, 7565788679, 7565919763, 7566050861, 7566181933, 7566313033, 7566444161, - 7566575243, 7566706363, 7566837493, 7566968573, 7567099651, 7567230731, 7567361807, - 7567492883, 7567623971, 7567755049, 7567886153, 7568017229, 7568148323, 7568279413, - 7568410519, 7568541601, 7568672687, 7568803763, 7568934851, 7569065923, 7569197033, - 7569328121, 7569459197, 7569590297, 7569721403, 7569852481, 7569983579, 7570114681, - 7570245763, 7570376861, 7570507957, 7570639061, 7570770139, 7570901213, 7571032307, - 7571163389, 7571294503, 7571425601, 7571556673, 7571687779, 7571818879, 7571950007, - 7572081089, 7572212189, 7572343267, 7572474347, 7572605437, 7572736511, 7572867593, - 7572998681, 7573129789, 7573260869, 7573391971, 7573523051, 7573654141, 7573785217, - 7573916291, 7574047367, 7574178467, 7574309563, 7574440691, 7574571779, 7574702851, - 7574833963, 7574965067, 7575096203, 7575227279, 7575358367, 7575489443, 7575620519, - 7575751621, 7575882697, 7576013813, 7576144903, 7576275983, 7576407067, 7576538147, - 7576669229, 7576800311, 7576931389, 7577062481, 7577193563, 7577324641, 7577455723, - 7577586799, 7577717899, 7577849011, 7577980117, 7578111253, 7578242333, 7578373433, - 7578504517, 7578635591, 7578766667, 7578897773, 7579028861, 7579159933, 7579291009, - 7579422089, 7579553171, 7579684249, 7579815367, 7579946477, 7580077553, 7580208653, - 7580339749, 7580470823, 7580601907, 7580732989, 7580864089, 7580995267, 7581126341, - 7581257441, 7581388603, 7581519683, 7581650759, 7581781849, 7581912929, 7582044011, - 7582175089, 7582306181, 7582437253, 7582568351, 7582699447, 7582830551, 7582961629, - 7583092703, 7583223821, 7583354893, 7583485969, 7583617081, 7583748167, 7583879243, - 7584010339, 7584141427, 7584272513, 7584403649, 7584534827, 7584665929, 7584797039, - 7584928129, 7585059211, 7585190297, 7585321439, 7585452551, 7585583623, 7585714723, - 7585845797, 7585976869, 7586107967, 7586239051, 7586370203, 7586501303, 7586632397, - 7586763497, 7586894573, 7587025669, 7587156791, 7587287891, 7587419003, 7587550097, - 7587681181, 7587812273, 7587943369, 7588074469, 7588205587, 7588336727, 7588467823, - 7588598911, 7588729987, 7588861067, 7588992139, 7589123219, 7589254301, 7589385407, - 7589516489, 7589647579, 7589778653, 7589909729, 7590040823, 7590171907, 7590303041, - 7590434147, 7590565223, 7590696329, 7590827411, 7590958483, 7591089557, 7591220653, - 7591351739, 7591482823, 7591613927, 7591745003, 7591876081, 7592007161, 7592138293, - 7592269369, 7592400443, 7592531539, 7592662639, 7592793739, 7592924831, 7593055913, - 7593187013, 7593318097, 7593449251, 7593580339, 7593711421, 7593842507, 7593973601, - 7594104703, 7594235791, 7594366867, 7594497943, 7594629017, 7594760137, 7594891217, - 7595022307, 7595153383, 7595284507, 7595415631, 7595546731, 7595677807, 7595808893, - 7595939971, 7596071059, 7596202139, 7596333229, 7596464303, 7596595427, 7596726517, - 7596857599, 7596988699, 7597119787, 7597250861, 7597381949, 7597513037, 7597644137, - 7597775257, 7597906363, 7598037449, 7598168549, 7598299669, 7598430751, 7598561827, - 7598692931, 7598824027, 7598955101, 7599086213, 7599217303, 7599348389, 7599479509, - 7599610607, 7599741763, 7599872851, 7600003937, 7600135021, 7600266103, 7600397177, - 7600528277, 7600659401, 7600790531, 7600921613, 7601052779, 7601183861, 7601314943, - 7601446049, 7601577127, 7601708207, 7601839283, 7601970391, 7602101471, 7602232553, - 7602363677, 7602494759, 7602625831, 7602756907, 7602887989, 7603019069, 7603150147, - 7603281239, 7603412329, 7603543477, 7603674569, 7603805641, 7603936807, 7604067883, - 7604198983, 7604330093, 7604461201, 7604592311, 7604723387, 7604854507, 7604985611, - 7605116683, 7605247757, 7605378841, 7605509917, 7605640993, 7605772091, 7605903163, - 7606034239, 7606165331, 7606296409, 7606427483, 7606558559, 7606689631, 7606820759, - 7606951837, 7607082913, 7607213993, 7607345093, 7607476169, 7607607247, 7607738329, - 7607869411, 7608000503, 7608131579, 7608262679, 7608393773, 7608524849, 7608655931, - 7608787003, 7608918091, 7609049243, 7609180349, 7609311431, 7609442507, 7609573589, - 7609704671, 7609835759, 7609966867, 7610097947, 7610229037, 7610360113, 7610491219, - 7610622293, 7610753401, 7610884481, 7611015569, 7611146651, 7611277727, 7611408799, - 7611539911, 7611671021, 7611802109, 7611933239, 7612064323, 7612195403, 7612326479, - 7612457551, 7612588649, 7612719743, 7612850827, 7612981927, 7613113019, 7613244091, - 7613375197, 7613506289, 7613637389, 7613768471, 7613899543, 7614030623, 7614161743, - 7614292817, 7614423911, 7614554993, 7614686071, 7614817181, 7614948259, 7615079371, - 7615210483, 7615341557, 7615472663, 7615603741, 7615734821, 7615865927, 7615997047, - 7616128141, 7616259239, 7616390333, 7616521417, 7616652509, 7616783609, 7616914703, - 7617045827, 7617176899, 7617307979, 7617439073, 7617570151, 7617701227, 7617832319, - 7617963401, 7618094509, 7618225583, 7618356689, 7618487761, 7618618919, 7618750033, - 7618881113, 7619012237, 7619143321, 7619274431, 7619405537, 7619536627, 7619667701, - 7619798773, 7619929861, 7620060947, 7620192029, 7620323107, 7620454189, 7620585283, - 7620716357, 7620847453, 7620978559, 7621109647, 7621240721, 7621371829, 7621502909, - 7621633997, 7621765201, 7621896281, 7622027353, 7622158459, 7622289547, 7622420677, - 7622551823, 7622682913, 7622813993, 7622945069, 7623076147, 7623207257, 7623338341, - 7623469417, 7623600511, 7623731603, 7623862679, 7623993761, 7624124863, 7624255939, - 7624387021, 7624518133, 7624649233, 7624780333, 7624911421, 7625042533, 7625173607, - 7625304679, 7625435761, 7625566847, 7625697931, 7625829017, 7625960143, 7626091223, - 7626222323, 7626353411, 7626484501, 7626615587, 7626746683, 7626877759, 7627008841, - 7627139951, 7627271059, 7627402151, 7627533247, 7627664377, 7627795451, 7627926533, - 7628057609, 7628188697, 7628319779, 7628450861, 7628581943, 7628713019, 7628844143, - 7628975257, 7629106351, 7629237443, 7629368521, 7629499639, 7629630727, 7629761807, - 7629892883, 7630023967, 7630155053, 7630286141, 7630417213, 7630548323, 7630679411, - 7630810483, 7630941611, 7631072737, 7631203841, 7631334913, 7631465993, 7631597069, - 7631728219, 7631859329, 7631990413, 7632121513, 7632252611, 7632383683, 7632514759, - 7632645833, 7632776911, 7632907987, 7633039069, 7633170151, 7633301231, 7633432307, - 7633563383, 7633694459, 7633825553, 7633956679, 7634087777, 7634218853, 7634349941, - 7634481031, 7634612131, 7634743213, 7634874307, 7635005387, 7635136469, 7635267557, - 7635398651, 7635529723, 7635660827, 7635791899, 7635922999, 7636054087, 7636185181, - 7636316263, 7636447337, 7636578413, 7636709489, 7636840567, 7636971649, 7637102723, - 7637233801, 7637364899, 7637495977, 7637627071, 7637758151, 7637889227, 7638020353, - 7638151427, 7638282521, 7638413623, 7638544709, 7638675787, 7638806863, 7638937961, - 7639069043, 7639200119, 7639331257, 7639462343, 7639593431, 7639724507, 7639855591, - 7639986691, 7640117767, 7640248849, 7640379937, 7640511023, 7640642099, 7640773177, - 7640904281, 7641035359, 7641166441, 7641297577, 7641428657, 7641559729, 7641690811, - 7641821911, 7641952987, 7642084117, 7642215223, 7642346297, 7642477379, 7642608481, - 7642739557, 7642870637, 7643001713, 7643132789, 7643263861, 7643394943, 7643526031, - 7643657123, 7643788199, 7643919289, 7644050369, 7644181453, 7644312593, 7644443687, - 7644574781, 7644705919, 7644837023, 7644968099, 7645099201, 7645230283, 7645361413, - 7645492487, 7645623563, 7645754653, 7645885727, 7646016853, 7646147959, 7646279063, - 7646410171, 7646541247, 7646672321, 7646803427, 7646934511, 7647065633, 7647196709, - 7647327797, 7647458921, 7647589993, 7647721093, 7647852193, 7647983279, 7648114351, - 7648245467, 7648376569, 7648507663, 7648638737, 7648769851, 7648900943, 7649032151, - 7649163233, 7649294309, 7649425397, 7649556493, 7649687569, 7649818651, 7649949743, - 7650080843, 7650211951, 7650343037, 7650474119, 7650605191, 7650736273, 7650867349, - 7650998473, 7651129547, 7651260653, 7651391729, 7651522819, 7651653899, 7651784971, - 7651916047, 7652047121, 7652178197, 7652309281, 7652440409, 7652571503, 7652702581, - 7652833673, 7652964751, 7653095843, 7653226939, 7653358021, 7653489101, 7653620189, - 7653751277, 7653882349, 7654013443, 7654144529, 7654275637, 7654406717, 7654537789, - 7654668869, 7654799941, 7654931017, 7655062091, 7655193163, 7655324267, 7655455349, - 7655586451, 7655717551, 7655848631, 7655979703, 7656110789, 7656241877, 7656372949, - 7656504101, 7656635191, 7656766283, 7656897371, 7657028459, 7657159541, 7657290649, - 7657421729, 7657552801, 7657683883, 7657814963, 7657946047, 7658077123, 7658208199, - 7658339281, 7658470357, 7658601443, 7658732519, 7658863631, 7658994703, 7659125849, - 7659256921, 7659387997, 7659519079, 7659650171, 7659781247, 7659912331, 7660043411, - 7660174523, 7660305607, 7660436683, 7660567757, 7660698853, 7660829971, 7660961053, - 7661092157, 7661223233, 7661354321, 7661485411, 7661616511, 7661747591, 7661878667, - 7662009743, 7662140869, 7662271951, 7662403043, 7662534179, 7662665333, 7662796429, - 7662927509, 7663058617, 7663189693, 7663320793, 7663451867, 7663582967, 7663714061, - 7663845139, 7663976231, 7664107309, 7664238383, 7664369459, 7664500553, 7664631641, - 7664762717, 7664893813, 7665024911, 7665155999, 7665287081, 7665418157, 7665549239, - 7665680317, 7665811429, 7665942523, 7666073663, 7666204739, 7666335829, 7666466911, - 7666597997, 7666729097, 7666860241, 7666991341, 7667122429, 7667253509, 7667384587, - 7667515703, 7667646797, 7667777879, 7667908951, 7668040027, 7668171101, 7668302203, - 7668433351, 7668564427, 7668695509, 7668826621, 7668957733, 7669088809, 7669219949, - 7669351031, 7669482113, 7669613201, 7669744273, 7669875347, 7670006429, 7670137507, - 7670268587, 7670399669, 7670530741, 7670661827, 7670792933, 7670924021, 7671055169, - 7671186277, 7671317369, 7671448457, 7671579557, 7671710633, 7671841711, 7671972787, - 7672103861, 7672234939, 7672366027, 7672497139, 7672628231, 7672759307, 7672890419, - 7673021501, 7673152573, 7673283647, 7673414759, 7673545843, 7673676919, 7673808019, - 7673939093, 7674070199, 7674201323, 7674332411, 7674463483, 7674594569, 7674725693, - 7674856817, 7674988007, 7675119119, 7675250197, 7675381279, 7675512353, 7675643471, - 7675774553, 7675905641, 7676036717, 7676167817, 7676298893, 7676430029, 7676561119, - 7676692211, 7676823283, 7676954357, 7677085441, 7677216539, 7677347633, 7677478709, - 7677609781, 7677740867, 7677871973, 7678003051, 7678134151, 7678265233, 7678396379, - 7678527487, 7678658641, 7678789733, 7678920811, 7679051899, 7679183021, 7679314169, - 7679445247, 7679576323, 7679707397, 7679838487, 7679969569, 7680100643, 7680231751, - 7680362831, 7680493907, 7680624989, 7680756067, 7680887153, 7681018249, 7681149353, - 7681280437, 7681411531, 7681542641, 7681673719, 7681804817, 7681935913, 7682066989, - 7682198087, 7682329169, 7682460271, 7682591351, 7682722451, 7682853539, 7682984611, - 7683115703, 7683246797, 7683377951, 7683509033, 7683640141, 7683771217, 7683902299, - 7684033387, 7684164469, 7684295551, 7684426637, 7684557709, 7684688783, 7684819873, - 7684950947, 7685082091, 7685213167, 7685344243, 7685475331, 7685606437, 7685737529, - 7685868601, 7685999701, 7686130811, 7686261883, 7686393007, 7686524093, 7686655183, - 7686786269, 7686917347, 7687048427, 7687179569, 7687310663, 7687441799, 7687572887, - 7687703963, 7687835039, 7687966127, 7688097211, 7688228293, 7688359369, 7688490449, - 7688621557, 7688752633, 7688883721, 7689014797, 7689145879, 7689276961, 7689408187, - 7689539269, 7689670357, 7689801481, 7689932561, 7690063649, 7690194731, 7690325807, - 7690456883, 7690587967, 7690719079, 7690850177, 7690981261, 7691112361, 7691243449, - 7691374543, 7691505629, 7691636707, 7691767789, 7691898917, 7692029999, 7692161117, - 7692292199, 7692423287, 7692554431, 7692685513, 7692816617, 7692947707, 7693078807, - 7693209907, 7693340987, 7693472063, 7693603163, 7693734253, 7693865327, 7693996399, - 7694127521, 7694258647, 7694389789, 7694520863, 7694651957, 7694783053, 7694914133, - 7695045221, 7695176297, 7695307369, 7695438479, 7695569551, 7695700627, 7695831701, - 7695962789, 7696093903, 7696224983, 7696356077, 7696487173, 7696618253, 7696749329, - 7696880413, 7697011529, 7697142641, 7697273713, 7697404831, 7697535947, 7697667023, - 7697798099, 7697929237, 7698060373, 7698191461, 7698322547, 7698453643, 7698584743, - 7698715819, 7698846913, 7698978013, 7699109179, 7699240261, 7699371373, 7699502467, - 7699633541, 7699764629, 7699895701, 7700026777, 7700157851, 7700288951, 7700420041, - 7700551141, 7700682217, 7700813303, 7700944439, 7701075511, 7701206609, 7701337681, - 7701468767, 7701599849, 7701730969, 7701862073, 7701993151, 7702124231, 7702255339, - 7702386467, 7702517551, 7702648663, 7702779803, 7702910911, 7703041991, 7703173067, - 7703304139, 7703435237, 7703566313, 7703697401, 7703828501, 7703959579, 7704090661, - 7704221761, 7704352853, 7704483937, 7704615011, 7704746123, 7704877211, 7705008287, - 7705139383, 7705270459, 7705401547, 7705532621, 7705663717, 7705794797, 7705925939, - 7706057017, 7706188097, 7706319223, 7706450329, 7706581417, 7706712521, 7706843653, - 7706974729, 7707105829, 7707236921, 7707368003, 7707499091, 7707630163, 7707761267, - 7707892349, 7708023451, 7708154527, 7708285661, 7708416757, 7708547831, 7708678907, - 7708810009, 7708941103, 7709072177, 7709203253, 7709334329, 7709465429, 7709596519, - 7709727601, 7709858693, 7709989789, 7710120871, 7710251947, 7710383053, 7710514151, - 7710645223, 7710776299, 7710907397, 7711038473, 7711169549, 7711300621, 7711431733, - 7711562819, 7711693921, 7711825061, 7711956137, 7712087209, 7712218289, 7712349367, - 7712480467, 7712611553, 7712742659, 7712873747, 7713004823, 7713135929, 7713267007, - 7713398087, 7713529169, 7713660271, 7713791363, 7713922439, 7714053517, 7714184593, - 7714315699, 7714446781, 7714577861, 7714708933, 7714840019, 7714971137, 7715102243, - 7715233319, 7715364401, 7715495479, 7715626573, 7715757677, 7715888767, 7716019853, - 7716150941, 7716282037, 7716413213, 7716544327, 7716675413, 7716806551, 7716937649, - 7717068743, 7717199837, 7717330937, 7717462037, 7717593131, 7717724213, 7717855297, - 7717986377, 7718117467, 7718248541, 7718379619, 7718510713, 7718641793, 7718772911, - 7718903989, 7719035101, 7719166177, 7719297293, 7719428377, 7719559451, 7719690523, - 7719821609, 7719952693, 7720083779, 7720214861, 7720345951, 7720477027, 7720608149, - 7720739239, 7720870319, 7721001413, 7721132491, 7721263591, 7721394697, 7721525789, - 7721656861, 7721787959, 7721919031, 7722050137, 7722181217, 7722312289, 7722443363, - 7722574477, 7722705569, 7722836657, 7722967787, 7723098869, 7723230001, 7723361083, - 7723492157, 7723623239, 7723754327, 7723885423, 7724016499, 7724147579, 7724278687, - 7724409787, 7724540861, 7724671957, 7724803049, 7724934163, 7725065263, 7725196337, - 7725327413, 7725458491, 7725589607, 7725720697, 7725851789, 7725982867, 7726113943, - 7726245061, 7726376153, 7726507247, 7726638319, 7726769417, 7726900529, 7727031619, - 7727162749, 7727293843, 7727424983, 7727556061, 7727687137, 7727818243, 7727949353, - 7728080441, 7728211523, 7728342619, 7728473713, 7728604799, 7728735871, 7728866947, - 7728998021, 7729129141, 7729260251, 7729391401, 7729522477, 7729653557, 7729784633, - 7729915729, 7730046809, 7730177909, 7730309023, 7730440097, 7730571179, 7730702261, - 7730833339, 7730964457, 7731095539, 7731226631, 7731357713, 7731488867, 7731619943, - 7731751019, 7731882113, 7732013203, 7732144283, 7732275361, 7732406449, 7732537523, - 7732668623, 7732799713, 7732930817, 7733061893, 7733192989, 7733324069, 7733455141, - 7733586233, 7733717323, 7733848429, 7733979503, 7734110621, 7734241693, 7734372809, - 7734503981, 7734635053, 7734766133, 7734897211, 7735028293, 7735159379, 7735290467, - 7735421543, 7735552633, 7735683719, 7735814813, 7735945907, 7736076989, 7736208097, - 7736339197, 7736470349, 7736601461, 7736732543, 7736863619, 7736994691, 7737125783, - 7737256907, 7737388003, 7737519091, 7737650171, 7737781273, 7737912349, 7738043449, - 7738174531, 7738305611, 7738436723, 7738567819, 7738698907, 7738829993, 7738961093, - 7739092199, 7739223277, 7739354351, 7739485459, 7739616539, 7739747627, 7739878709, - 7740009787, 7740140869, 7740271993, 7740403117, 7740534209, 7740665287, 7740796409, - 7740927497, 7741058569, 7741189763, 7741320857, 7741451933, 7741583021, 7741714093, - 7741845179, 7741976251, 7742107363, 7742238457, 7742369533, 7742500607, 7742631709, - 7742762791, 7742893877, 7743024953, 7743156041, 7743287117, 7743418217, 7743549367, - 7743680447, 7743811519, 7743942617, 7744073707, 7744204789, 7744335871, 7744466959, - 7744598041, 7744729127, 7744860217, 7744991297, 7745122369, 7745253443, 7745384551, - 7745515681, 7745646767, 7745777843, 7745908921, 7746039997, 7746171079, 7746302171, - 7746433267, 7746564367, 7746695443, 7746826517, 7746957607, 7747088707, 7747219801, - 7747350881, 7747481977, 7747613051, 7747744153, 7747875253, 7748006341, 7748137421, - 7748268499, 7748399579, 7748530663, 7748661737, 7748792809, 7748923961, 7749055043, - 7749186161, 7749317267, 7749448349, 7749579427, 7749710503, 7749841591, 7749972679, - 7750103773, 7750234847, 7750365929, 7750497037, 7750628129, 7750759207, 7750890283, - 7751021359, 7751152433, 7751283509, 7751414581, 7751545667, 7751676773, 7751807857, - 7751938963, 7752070037, 7752201139, 7752332213, 7752463289, 7752594391, 7752725501, - 7752856603, 7752987679, 7753118759, 7753249859, 7753380959, 7753512079, 7753643159, - 7753774247, 7753905329, 7754036467, 7754167543, 7754298623, 7754429699, 7754560777, - 7754691877, 7754822953, 7754954027, 7755085103, 7755216181, 7755347261, 7755478337, - 7755609427, 7755740501, 7755871589, 7756002689, 7756133767, 7756264853, 7756395931, - 7756527011, 7756658111, 7756789211, 7756920289, 7757051377, 7757182463, 7757313601, - 7757444699, 7757575789, 7757706877, 7757837951, 7757969027, 7758100187, 7758231281, - 7758362357, 7758493433, 7758624529, 7758755651, 7758886727, 7759017829, 7759148939, - 7759280017, 7759411109, 7759542181, 7759673279, 7759804373, 7759935461, 7760066579, - 7760197657, 7760328761, 7760459843, 7760590919, 7760722009, 7760853091, 7760984171, - 7761115253, 7761246349, 7761377479, 7761508561, 7761639649, 7761770747, 7761901859, - 7762032953, 7762164043, 7762295141, 7762426213, 7762557307, 7762688399, 7762819481, - 7762950557, 7763081633, 7763212729, 7763343803, 7763474893, 7763605981, 7763737063, - 7763868137, 7763999249, 7764130343, 7764261431, 7764392557, 7764523639, 7764654713, - 7764785857, 7764916933, 7765048021, 7765179139, 7765310221, 7765441297, 7765572407, - 7765703483, 7765834579, 7765965661, 7766096749, 7766227829, 7766358907, 7766489981, - 7766621069, 7766752159, 7766883233, 7767014429, 7767145523, 7767276613, 7767407693, - 7767538781, 7767669853, 7767800941, 7767932023, 7768063129, 7768194221, 7768325339, - 7768456447, 7768587577, 7768718693, 7768849787, 7768980881, 7769111957, 7769243047, - 7769374157, 7769505239, 7769636323, 7769767399, 7769898503, 7770029599, 7770160703, - 7770291791, 7770422867, 7770553943, 7770685061, 7770816139, 7770947221, 7771078309, - 7771209389, 7771340477, 7771471597, 7771602677, 7771733777, 7771864853, 7771995953, - 7772127047, 7772258159, 7772389253, 7772520337, 7772651429, 7772782547, 7772913649, - 7773044771, 7773175847, 7773306929, 7773438007, 7773569101, 7773700243, 7773831337, - 7773962429, 7774093519, 7774224637, 7774355711, 7774486793, 7774617869, 7774748953, - 7774880083, 7775011163, 7775142239, 7775273381, 7775404453, 7775535527, 7775666611, - 7775797691, 7775928763, 7776059849, 7776190921, 7776322003, 7776453077, 7776584161, - 7776715237, 7776846317, 7776977389, 7777108463, 7777239551, 7777370641, 7777501729, - 7777632829, 7777763911, 7777894987, 7778026093, 7778157187, 7778288263, 7778419349, - 7778550443, 7778681527, 7778812603, 7778943701, 7779074827, 7779205939, 7779337021, - 7779468097, 7779599183, 7779730303, 7779861409, 7779992533, 7780123613, 7780254707, - 7780385779, 7780516859, 7780647977, 7780779067, 7780910141, 7781041237, 7781172319, - 7781303399, 7781434487, 7781565559, 7781696641, 7781827717, 7781958817, 7782089923, - 7782221003, 7782352111, 7782483211, 7782614293, 7782745379, 7782876467, 7783007569, - 7783138667, 7783269751, 7783400827, 7783531901, 7783662973, 7783794071, 7783925143, - 7784056243, 7784187373, 7784318497, 7784449579, 7784580679, 7784711789, 7784842889, - 7784973979, 7785105061, 7785236141, 7785367223, 7785498359, 7785629431, 7785760523, - 7785891599, 7786022693, 7786153787, 7786284881, 7786415999, 7786547123, 7786678247, - 7786809337, 7786940459, 7787071601, 7787202673, 7787333753, 7787464831, 7787595917, - 7787727037, 7787858137, 7787989241, 7788120341, 7788251413, 7788382501, 7788513583, - 7788644657, 7788775733, 7788906821, 7789037909, 7789168999, 7789300081, 7789431157, - 7789562257, 7789693333, 7789824409, 7789955533, 7790086609, 7790217689, 7790348777, - 7790479897, 7790610973, 7790742053, 7790873131, 7791004211, 7791135311, 7791266387, - 7791397501, 7791528583, 7791659663, 7791790763, 7791921857, 7792052929, 7792184009, - 7792315081, 7792446157, 7792577237, 7792708321, 7792839401, 7792970489, 7793101567, - 7793232649, 7793363759, 7793494831, 7793625907, 7793756987, 7793888101, 7794019183, - 7794150269, 7794281347, 7794412441, 7794543539, 7794674621, 7794805717, 7794936859, - 7795067947, 7795199099, 7795330189, 7795461269, 7795592353, 7795723469, 7795854569, - 7795985641, 7796116721, 7796247829, 7796378911, 7796509999, 7796641087, 7796772163, - 7796903243, 7797034319, 7797165427, 7797296503, 7797427579, 7797558677, 7797689759, - 7797820871, 7797951949, 7798083061, 7798214153, 7798345241, 7798476313, 7798607389, - 7798738463, 7798869541, 7799000707, 7799131787, 7799262869, 7799393969, 7799525113, - 7799656261, 7799787367, 7799918449, 7800049541, 7800180613, 7800311719, 7800442831, - 7800573919, 7800704993, 7800836089, 7800967183, 7801098259, 7801229411, 7801360487, - 7801491559, 7801622641, 7801753717, 7801884799, 7802015917, 7802147021, 7802278093, - 7802409187, 7802540287, 7802671379, 7802802473, 7802933557, 7803064637, 7803195713, - 7803326801, 7803457897, 7803588979, 7803720073, 7803851147, 7803982259, 7804113377, - 7804244467, 7804375561, 7804506637, 7804637713, 7804768823, 7804899899, 7805030977, - 7805162059, 7805293163, 7805424239, 7805555347, 7805686439, 7805817559, 7805948663, - 7806079759, 7806210847, 7806341929, 7806473027, 7806604103, 7806735179, 7806866297, - 7806997391, 7807128479, 7807259561, 7807390637, 7807521721, 7807652807, 7807783897, - 7807914971, 7808046061, 7808177159, 7808308243, 7808439323, 7808570431, 7808701541, - 7808832631, 7808963711, 7809094817, 7809225911, 7809356987, 7809488069, 7809619183, - 7809750259, 7809881333, 7810012409, 7810143499, 7810274587, 7810405661, 7810536733, - 7810667831, 7810798909, 7810930009, 7811061109, 7811192227, 7811323313, 7811454403, - 7811585477, 7811716553, 7811847689, 7811978761, 7812109843, 7812240929, 7812372017, - 7812503123, 7812634241, 7812765313, 7812896449, 7813027529, 7813158601, 7813289683, - 7813420759, 7813551833, 7813682927, 7813814039, 7813945133, 7814076223, 7814207321, - 7814338409, 7814469493, 7814600567, 7814731663, 7814862749, 7814993869, 7815124987, - 7815256079, 7815387253, 7815518353, 7815649463, 7815780589, 7815911699, 7816042807, - 7816173899, 7816304989, 7816436063, 7816567141, 7816698223, 7816829303, 7816960379, - 7817091467, 7817222579, 7817353699, 7817484791, 7817615879, 7817746961, 7817878039, - 7818009119, 7818140191, 7818271267, 7818402379, 7818533453, 7818664547, 7818795619, - 7818926729, 7819057817, 7819188889, 7819320013, 7819451093, 7819582171, 7819713269, - 7819844341, 7819975421, 7820106493, 7820237573, 7820368651, 7820499751, 7820630849, - 7820761939, 7820893039, 7821024137, 7821155213, 7821286303, 7821417403, 7821548503, - 7821679577, 7821810671, 7821941753, 7822072831, 7822203919, 7822334999, 7822466087, - 7822597163, 7822728257, 7822859339, 7822990421, 7823121499, 7823252579, 7823383669, - 7823514761, 7823645867, 7823776967, 7823908087, 7824039161, 7824170239, 7824301333, - 7824432449, 7824563557, 7824694639, 7824825737, 7824956819, 7825087943, 7825219021, - 7825350103, 7825481177, 7825612273, 7825743361, 7825874437, 7826005543, 7826136629, - 7826267711, 7826398829, 7826529929, 7826661049, 7826792191, 7826923297, 7827054461, - 7827185533, 7827316631, 7827447709, 7827578797, 7827709871, 7827840947, 7827972029, - 7828103141, 7828234231, 7828365319, 7828496399, 7828627531, 7828758611, 7828889711, - 7829020831, 7829151971, 7829283079, 7829414167, 7829545249, 7829676329, 7829807437, - 7829938541, 7830069619, 7830200701, 7830331781, 7830462853, 7830593957, 7830725041, - 7830856141, 7830987251, 7831118341, 7831249421, 7831380523, 7831511621, 7831642727, - 7831773847, 7831904921, 7832036027, 7832167151, 7832298233, 7832429321, 7832560397, - 7832691521, 7832822611, 7832953717, 7833084793, 7833215903, 7833346993, 7833478091, - 7833609167, 7833740249, 7833871327, 7834002413, 7834133491, 7834264631, 7834395731, - 7834526809, 7834657937, 7834789013, 7834920091, 7835051167, 7835182259, 7835313361, - 7835444459, 7835575543, 7835706617, 7835837699, 7835968781, 7836099853, 7836230953, - 7836362057, 7836493163, 7836624259, 7836755351, 7836886451, 7837017557, 7837148651, - 7837279811, 7837410901, 7837541989, 7837673069, 7837804147, 7837935247, 7838066387, - 7838197483, 7838328557, 7838459641, 7838590759, 7838721893, 7838852981, 7838984057, - 7839115189, 7839246301, 7839377401, 7839508487, 7839639559, 7839770647, 7839901757, - 7840032847, 7840163927, 7840295009, 7840426103, 7840557181, 7840688267, 7840819361, - 7840950517, 7841081597, 7841212723, 7841343803, 7841474881, 7841605979, 7841737063, - 7841868149, 7841999233, 7842130337, 7842261437, 7842392527, 7842523607, 7842654689, - 7842785773, 7842916847, 7843047929, 7843179011, 7843310087, 7843441201, 7843572287, - 7843703381, 7843834477, 7843965581, 7844096657, 7844227733, 7844358827, 7844489921, - 7844621003, 7844752079, 7844883173, 7845014249, 7845145361, 7845276437, 7845407509, - 7845538601, 7845669697, 7845800791, 7845931871, 7846062943, 7846194017, 7846325107, - 7846456183, 7846587311, 7846718443, 7846849531, 7846980613, 7847111707, 7847242783, - 7847373889, 7847504983, 7847636059, 7847767139, 7847898211, 7848029333, 7848160423, - 7848291497, 7848422579, 7848553663, 7848684757, 7848815831, 7848946913, 7849078001, - 7849209113, 7849340189, 7849471271, 7849602359, 7849733431, 7849864549, 7849995623, - 7850126707, 7850257783, 7850388863, 7850519953, 7850651057, 7850782141, 7850913223, - 7851044317, 7851175411, 7851306511, 7851437597, 7851568687, 7851699769, 7851830849, - 7851961937, 7852093009, 7852224103, 7852355209, 7852486379, 7852617481, 7852748567, - 7852879651, 7853010793, 7853141869, 7853272949, 7853404057, 7853535191, 7853666269, - 7853797349, 7853928449, 7854059533, 7854190609, 7854321689, 7854452783, 7854583921, - 7854714997, 7854846071, 7854977147, 7855108237, 7855239349, 7855370423, 7855501529, - 7855632601, 7855763701, 7855894777, 7856025899, 7856156983, 7856288147, 7856419243, - 7856550329, 7856681401, 7856812477, 7856943569, 7857074707, 7857205801, 7857336887, - 7857467999, 7857599137, 7857730241, 7857861317, 7857992411, 7858123513, 7858254587, - 7858385671, 7858516759, 7858647833, 7858778909, 7858910039, 7859041121, 7859172239, - 7859303321, 7859434411, 7859565487, 7859696567, 7859827639, 7859958713, 7860089789, - 7860220909, 7860352001, 7860483077, 7860614171, 7860745279, 7860876377, 7861007489, - 7861138561, 7861269641, 7861400717, 7861531793, 7861662871, 7861793959, 7861925063, - 7862056141, 7862187247, 7862318323, 7862449409, 7862580491, 7862711587, 7862842661, - 7862973757, 7863104881, 7863235957, 7863367117, 7863498211, 7863629287, 7863760391, - 7863891463, 7864022581, 7864153657, 7864284739, 7864415857, 7864546931, 7864678007, - 7864809079, 7864940207, 7865071297, 7865202409, 7865333491, 7865464567, 7865595643, - 7865726717, 7865857799, 7865988917, 7866120013, 7866251087, 7866382169, 7866513251, - 7866644353, 7866775429, 7866906503, 7867037641, 7867168717, 7867299821, 7867430917, - 7867561993, 7867693117, 7867824193, 7867955269, 7868086349, 7868217437, 7868348531, - 7868479643, 7868610719, 7868741843, 7868872951, 7869004037, 7869135167, 7869266281, - 7869397357, 7869528439, 7869659513, 7869790589, 7869921701, 7870052789, 7870183883, - 7870314973, 7870446049, 7870577149, 7870708243, 7870839371, 7870970473, 7871101573, - 7871232659, 7871363777, 7871494849, 7871625929, 7871757011, 7871888083, 7872019163, - 7872150241, 7872281321, 7872412393, 7872543479, 7872674569, 7872805649, 7872936739, - 7873067821, 7873198913, 7873330001, 7873461077, 7873592149, 7873723229, 7873854337, - 7873985423, 7874116501, 7874247581, 7874378663, 7874509757, 7874640833, 7874771917, - 7874902993, 7875034073, 7875165217, 7875296309, 7875427409, 7875558487, 7875689579, - 7875820651, 7875951749, 7876082849, 7876213993, 7876345079, 7876476151, 7876607237, - 7876738313, 7876869419, 7877000501, 7877131579, 7877262671, 7877393761, 7877524841, - 7877655931, 7877787059, 7877918161, 7878049279, 7878180353, 7878311431, 7878442531, - 7878573613, 7878704693, 7878835781, 7878966889, 7879097983, 7879229081, 7879360201, - 7879491289, 7879622369, 7879753459, 7879884541, 7880015641, 7880146723, 7880277817, - 7880408903, 7880539999, 7880671081, 7880802169, 7880933293, 7881064369, 7881195451, - 7881326527, 7881457607, 7881588727, 7881719819, 7881850939, 7881982063, 7882113149, - 7882244263, 7882375343, 7882506427, 7882637513, 7882768601, 7882899709, 7883030789, - 7883161889, 7883292961, 7883424047, 7883555189, 7883686289, 7883817373, 7883948461, - 7884079573, 7884210679, 7884341767, 7884472859, 7884603949, 7884735029, 7884866113, - 7884997193, 7885128271, 7885259353, 7885390453, 7885521529, 7885652609, 7885783687, - 7885914779, 7886045861, 7886176951, 7886308043, 7886439131, 7886570207, 7886701283, - 7886832361, 7886963437, 7887094511, 7887225601, 7887356683, 7887487763, 7887618839, - 7887749941, 7887881033, 7888012133, 7888143269, 7888274341, 7888405423, 7888536497, - 7888667623, 7888798733, 7888929821, 7889060981, 7889192053, 7889323129, 7889454203, - 7889585309, 7889716397, 7889847499, 7889978573, 7890109673, 7890240767, 7890371887, - 7890502987, 7890634189, 7890765293, 7890896369, 7891027453, 7891158547, 7891289629, - 7891420721, 7891551809, 7891682941, 7891814041, 7891945121, 7892076229, 7892207311, - 7892338393, 7892469469, 7892600563, 7892731663, 7892862763, 7892993891, 7893124979, - 7893256067, 7893387163, 7893518261, 7893649339, 7893780421, 7893911561, 7894042649, - 7894173733, 7894304809, 7894435891, 7894566971, 7894698061, 7894829147, 7894960253, - 7895091353, 7895222449, 7895353541, 7895484629, 7895615771, 7895746861, 7895878009, - 7896009097, 7896140191, 7896271277, 7896402379, 7896533479, 7896664597, 7896795719, - 7896926801, 7897057937, 7897189009, 7897320103, 7897451179, 7897582279, 7897713353, - 7897844431, 7897975511, 7898106647, 7898237719, 7898368811, 7898499887, 7898630977, - 7898762077, 7898893159, 7899024239, 7899155317, 7899286427, 7899417521, 7899548633, - 7899679729, 7899810803, 7899941893, 7900072981, 7900204063, 7900335143, 7900466263, - 7900597361, 7900728439, 7900859521, 7900990597, 7901121689, 7901252789, 7901383873, - 7901514979, 7901646059, 7901777141, 7901908213, 7902039307, 7902170387, 7902301469, - 7902432547, 7902563621, 7902694693, 7902825767, 7902956851, 7903087931, 7903219003, - 7903350079, 7903481177, 7903612259, 7903743371, 7903874443, 7904005523, 7904136601, - 7904267711, 7904398783, 7904529881, 7904660977, 7904792059, 7904923139, 7905054239, - 7905185333, 7905316423, 7905447499, 7905578609, 7905709681, 7905840763, 7905971837, - 7906102927, 7906234019, 7906365127, 7906496327, 7906627439, 7906758527, 7906889611, - 7907020687, 7907151781, 7907282881, 7907413993, 7907545081, 7907676233, 7907807311, - 7907938387, 7908069467, 7908200551, 7908331637, 7908462721, 7908593821, 7908724927, - 7908856027, 7908987109, 7909118207, 7909249291, 7909380377, 7909511473, 7909642571, - 7909773671, 7909904771, 7910035849, 7910166947, 7910298049, 7910429159, 7910560237, - 7910691317, 7910822401, 7910953483, 7911084583, 7911215701, 7911346811, 7911477911, - 7911608989, 7911740069, 7911871151, 7912002281, 7912133393, 7912264537, 7912395637, - 7912526719, 7912657849, 7912788929, 7912920007, 7913051101, 7913182181, 7913313283, - 7913444389, 7913575469, 7913706569, 7913837653, 7913968729, 7914099827, 7914230899, - 7914361981, 7914493163, 7914624239, 7914755323, 7914886417, 7915017491, 7915148567, - 7915279651, 7915410733, 7915541807, 7915672901, 7915803977, 7915935089, 7916066161, - 7916197241, 7916328313, 7916459389, 7916590471, 7916721569, 7916852653, 7916983729, - 7917114839, 7917245911, 7917376991, 7917508099, 7917639241, 7917770317, 7917901391, - 7918032503, 7918163587, 7918294661, 7918425793, 7918556897, 7918688039, 7918819121, - 7918950199, 7919081273, 7919212373, 7919343451, 7919474557, 7919605657, 7919736733, - 7919867821, 7919998949, 7920130039, 7920261113, 7920392197, 7920523277, 7920654353, - 7920785429, 7920916561, 7921047661, 7921178809, 7921309889, 7921440979, 7921572077, - 7921703159, 7921834237, 7921965319, 7922096393, 7922227471, 7922358559, 7922489657, - 7922620747, 7922751839, 7922882923, 7923014089, 7923145169, 7923276253, 7923407339, - 7923538421, 7923669493, 7923800579, 7923931651, 7924062739, 7924193821, 7924324909, - 7924456039, 7924587163, 7924718237, 7924849313, 7924980421, 7925111497, 7925242573, - 7925373671, 7925504761, 7925635843, 7925766917, 7925898031, 7926029147, 7926160219, - 7926291311, 7926422407, 7926553487, 7926684587, 7926815669, 7926946751, 7927077853, - 7927208929, 7927340053, 7927471151, 7927602229, 7927733329, 7927864429, 7927995529, - 7928126623, 7928257721, 7928388827, 7928519903, 7928650993, 7928782117, 7928913193, - 7929044303, 7929175409, 7929306493, 7929437567, 7929568643, 7929699731, 7929830807, - 7929961891, 7930092967, 7930224079, 7930355159, 7930486261, 7930617361, 7930748443, - 7930879543, 7931010617, 7931141717, 7931272793, 7931403869, 7931534953, 7931666051, - 7931797141, 7931928217, 7932059321, 7932190457, 7932321577, 7932452659, 7932583783, - 7932714859, 7932845939, 7932977023, 7933108109, 7933239247, 7933370323, 7933501399, - 7933632491, 7933763597, 7933894673, 7934025751, 7934156831, 7934287909, 7934419001, - 7934550109, 7934681207, 7934812283, 7934943361, 7935074467, 7935205601, 7935336679, - 7935467783, 7935598859, 7935729961, 7935861127, 7935992203, 7936123309, 7936254407, - 7936385563, 7936516667, 7936647749, 7936778827, 7936909927, 7937041003, 7937172077, - 7937303149, 7937434273, 7937565347, 7937696449, 7937827529, 7937958601, 7938089729, - 7938220813, 7938351919, 7938483029, 7938614107, 7938745211, 7938876317, 7939007393, - 7939138469, 7939269551, 7939400633, 7939531711, 7939662793, 7939793879, 7939924957, - 7940056031, 7940187107, 7940318201, 7940449351, 7940580433, 7940711507, 7940842601, - 7940973679, 7941104783, 7941235859, 7941366941, 7941498013, 7941629089, 7941760181, - 7941891253, 7942022377, 7942153511, 7942284589, 7942415681, 7942546753, 7942677851, - 7942808957, 7942940051, 7943071127, 7943202209, 7943333327, 7943464409, 7943595493, - 7943726621, 7943857693, 7943988797, 7944119881, 7944250957, 7944382093, 7944513167, - 7944644261, 7944775351, 7944906427, 7945037521, 7945168601, 7945299683, 7945430771, - 7945561843, 7945692941, 7945824023, 7945955119, 7946086199, 7946217281, 7946348387, - 7946479477, 7946610563, 7946741639, 7946872763, 7947003839, 7947134929, 7947266003, - 7947397093, 7947528181, 7947659257, 7947790337, 7947921473, 7948052579, 7948183681, - 7948314757, 7948445833, 7948576943, 7948708123, 7948839211, 7948970311, 7949101387, - 7949232481, 7949363563, 7949494639, 7949625727, 7949756827, 7949887903, 7950018983, - 7950150083, 7950281159, 7950412237, 7950543311, 7950674399, 7950805517, 7950936619, - 7951067701, 7951198789, 7951329889, 7951460963, 7951592083, 7951723159, 7951854233, - 7951985333, 7952116421, 7952247521, 7952378611, 7952509699, 7952640799, 7952771873, - 7952902949, 7953034031, 7953165137, 7953296227, 7953427309, 7953558391, 7953689467, - 7953820541, 7953951613, 7954082713, 7954213801, 7954344877, 7954475981, 7954607057, - 7954738133, 7954869229, 7955000309, 7955131397, 7955262473, 7955393581, 7955524691, - 7955655779, 7955786873, 7955917969, 7956049091, 7956180209, 7956311281, 7956442453, - 7956573533, 7956704611, 7956835693, 7956966767, 7957097839, 7957228919, 7957360063, - 7957491203, 7957622279, 7957753361, 7957884479, 7958015551, 7958146633, 7958277721, - 7958408797, 7958539871, 7958670943, 7958802029, 7958933111, 7959064213, 7959195311, - 7959326413, 7959457507, 7959588583, 7959719711, 7959850783, 7959981877, 7960112959, - 7960244053, 7960375127, 7960506221, 7960637297, 7960768373, 7960899461, 7961030551, - 7961161639, 7961292727, 7961423801, 7961554889, 7961685961, 7961817053, 7961948129, - 7962079249, 7962210329, 7962341449, 7962472549, 7962603641, 7962734743, 7962865829, - 7962996931, 7963128023, 7963259149, 7963390243, 7963521329, 7963652401, 7963783493, - 7963914593, 7964045737, 7964176817, 7964307893, 7964438971, 7964570051, 7964701207, - 7964832287, 7964963371, 7965094447, 7965225539, 7965356629, 7965487723, 7965618799, - 7965749879, 7965880957, 7966012037, 7966143109, 7966274189, 7966405273, 7966536359, - 7966667441, 7966798549, 7966929643, 7967060723, 7967191807, 7967322943, 7967454037, - 7967585123, 7967716243, 7967847331, 7967978443, 7968109519, 7968240619, 7968371701, - 7968502783, 7968633859, 7968764933, 7968896017, 7969027103, 7969158191, 7969289299, - 7969420409, 7969551487, 7969682573, 7969813667, 7969944739, 7970075837, 7970206921, - 7970337997, 7970469113, 7970600191, 7970731267, 7970862343, 7970993453, 7971124529, - 7971255631, 7971386729, 7971517817, 7971648899, 7971779987, 7971911069, 7972042151, - 7972173233, 7972304323, 7972435409, 7972566487, 7972697563, 7972828639, 7972959737, - 7973090809, 7973221909, 7973353027, 7973484107, 7973615191, 7973746289, 7973877367, - 7974008443, 7974139543, 7974270653, 7974401731, 7974532829, 7974663901, 7974795001, - 7974926093, 7975057171, 7975188283, 7975319381, 7975450463, 7975581541, 7975712653, - 7975843727, 7975974821, 7976105911, 7976236991, 7976368067, 7976499143, 7976630267, - 7976761349, 7976892421, 7977023501, 7977154667, 7977285749, 7977416849, 7977547939, - 7977679019, 7977810109, 7977941197, 7978072343, 7978203437, 7978334519, 7978465603, - 7978596701, 7978727777, 7978858873, 7978989983, 7979121067, 7979252167, 7979383249, - 7979514373, 7979645449, 7979776529, 7979907601, 7980038699, 7980169789, 7980300877, - 7980431957, 7980563053, 7980694147, 7980825221, 7980956303, 7981087379, 7981218481, - 7981349581, 7981480669, 7981611767, 7981742849, 7981873961, 7982005043, 7982136143, - 7982267219, 7982398301, 7982529377, 7982660501, 7982791639, 7982922719, 7983053803, - 7983184897, 7983315983, 7983447067, 7983578143, 7983709249, 7983840323, 7983971417, - 7984102517, 7984233619, 7984364761, 7984495853, 7984626931, 7984758013, 7984889123, - 7985020201, 7985151301, 7985282387, 7985413459, 7985544563, 7985675651, 7985806753, - 7985937851, 7986068957, 7986200071, 7986331187, 7986462269, 7986593341, 7986724433, - 7986855529, 7986986621, 7987117711, 7987248803, 7987379887, 7987510961, 7987642037, - 7987773113, 7987904219, 7988035303, 7988166379, 7988297453, 7988428529, 7988559637, - 7988690761, 7988821901, 7988953019, 7989084107, 7989215183, 7989346259, 7989477343, - 7989608441, 7989739547, 7989870631, 7990001791, 7990132877, 7990263949, 7990395031, - 7990526123, 7990657211, 7990788293, 7990919369, 7991050453, 7991181553, 7991312627, - 7991443703, 7991574791, 7991705867, 7991836967, 7991968057, 7992099149, 7992230237, - 7992361331, 7992492419, 7992623567, 7992754657, 7992885737, 7993016809, 7993147913, - 7993278991, 7993410071, 7993541189, 7993672283, 7993803361, 7993934437, 7994065549, - 7994196697, 7994327773, 7994458853, 7994589937, 7994721023, 7994852143, 7994983223, - 7995114299, 7995245383, 7995376481, 7995507577, 7995638669, 7995769741, 7995900833, - 7996031917, 7996163009, 7996294087, 7996425161, 7996556261, 7996687337, 7996818437, - 7996949531, 7997080603, 7997211707, 7997342783, 7997473877, 7997604961, 7997736041, - 7997867123, 7997998241, 7998129329, 7998260423, 7998391507, 7998522589, 7998653671, - 7998784747, 7998915907, 7999046981, 7999178053, 7999309139, 7999440257, 7999571353, - 7999702463, 7999833547, 7999964629, 8000095729, 8000226847, 8000357941, 8000489041, - 8000620139, 8000751221, 8000882339, 8001013451, 8001144533, 8001275657, 8001406729, - 8001537809, 8001668887, 8001799969, 8001931051, 8002062137, 8002193209, 8002324301, - 8002455379, 8002586461, 8002717609, 8002848691, 8002979783, 8003110883, 8003241977, - 8003373073, 8003504149, 8003635223, 8003766301, 8003897399, 8004028481, 8004159557, - 8004290629, 8004421703, 8004552817, 8004683957, 8004815081, 8004946211, 8005077313, - 8005208417, 8005339501, 8005470607, 8005601693, 8005732793, 8005863911, 8005995017, - 8006126131, 8006257213, 8006388307, 8006519441, 8006650537, 8006781661, 8006912737, - 8007043817, 8007174893, 8007305981, 8007437057, 8007568139, 8007699223, 8007830309, - 8007961397, 8008092493, 8008223581, 8008354681, 8008485791, 8008616867, 8008747963, - 8008879079, 8009010161, 8009141237, 8009272309, 8009403383, 8009534461, 8009665589, - 8009796673, 8009927749, 8010058853, 8010189937, 8010321019, 8010452113, 8010583193, - 8010714269, 8010845351, 8010976451, 8011107553, 8011238639, 8011369721, 8011500817, - 8011631893, 8011762999, 8011894081, 8012025157, 8012156309, 8012287399, 8012418493, - 8012549591, 8012680667, 8012811743, 8012942831, 8013073903, 8013205001, 8013336109, - 8013467183, 8013598309, 8013729401, 8013860497, 8013991577, 8014122667, 8014253771, - 8014384843, 8014515919, 8014647007, 8014778087, 8014909171, 8015040259, 8015171347, - 8015302457, 8015433541, 8015564647, 8015695763, 8015826851, 8015957923, 8016089017, - 8016220097, 8016351169, 8016482321, 8016613427, 8016744511, 8016875627, 8017006729, - 8017137811, 8017268923, 8017400003, 8017531103, 8017662181, 8017793281, 8017924373, - 8018055509, 8018186623, 8018317717, 8018448793, 8018579887, 8018710963, 8018842037, - 8018973113, 8019104189, 8019235271, 8019366349, 8019497449, 8019628531, 8019759637, - 8019890789, 8020021901, 8020152979, 8020284079, 8020415209, 8020546283, 8020677359, - 8020808507, 8020939621, 8021070731, 8021201803, 8021332903, 8021463977, 8021595059, - 8021726161, 8021857237, 8021988313, 8022119393, 8022250487, 8022381569, 8022512711, - 8022643789, 8022774869, 8022906007, 8023037081, 8023168157, 8023299391, 8023430477, - 8023561549, 8023692637, 8023823711, 8023954849, 8024085929, 8024217017, 8024348089, - 8024479181, 8024610257, 8024741341, 8024872417, 8025003499, 8025134603, 8025265691, - 8025396767, 8025527863, 8025658951, 8025790051, 8025921131, 8026052249, 8026183349, - 8026314433, 8026445513, 8026576609, 8026707701, 8026838789, 8026969861, 8027100973, - 8027232067, 8027363189, 8027494261, 8027625391, 8027756533, 8027887607, 8028018679, - 8028149761, 8028280837, 8028411967, 8028543049, 8028674231, 8028805303, 8028936413, - 8029067503, 8029198603, 8029329689, 8029460783, 8029591877, 8029722959, 8029854067, - 8029985141, 8030116229, 8030247319, 8030378413, 8030509577, 8030640661, 8030771741, - 8030902819, 8031033911, 8031164989, 8031296089, 8031427171, 8031558257, 8031689371, - 8031820451, 8031951523, 8032082623, 8032213727, 8032344811, 8032475917, 8032606993, - 8032738069, 8032869151, 8033000233, 8033131307, 8033262427, 8033393513, 8033524627, - 8033655701, 8033786797, 8033917889, 8034048961, 8034180041, 8034311183, 8034442259, - 8034573353, 8034704453, 8034835531, 8034966607, 8035097687, 8035228807, 8035359881, - 8035491007, 8035622107, 8035753217, 8035884313, 8036015411, 8036146537, 8036277617, - 8036408707, 8036539811, 8036670911, 8036802029, 8036933137, 8037064223, 8037195319, - 8037326393, 8037457469, 8037588541, 8037719621, 8037850697, 8037981799, 8038112881, - 8038243991, 8038375073, 8038506169, 8038637267, 8038768357, 8038899431, 8039030507, - 8039161579, 8039292671, 8039423771, 8039554867, 8039685959, 8039817043, 8039948123, - 8040079207, 8040210289, 8040341377, 8040472471, 8040603551, 8040734623, 8040865697, - 8040996797, 8041127873, 8041258987, 8041390127, 8041521217, 8041652299, 8041783391, - 8041914473, 8042045549, 8042176669, 8042307743, 8042438861, 8042569961, 8042701033, - 8042832121, 8042963239, 8043094327, 8043225403, 8043356513, 8043487597, 8043618677, - 8043749783, 8043880903, 8044011991, 8044143077, 8044274209, 8044405301, 8044536389, - 8044667467, 8044798579, 8044929667, 8045060743, 8045191841, 8045322917, 8045454047, - 8045585143, 8045716219, 8045847301, 8045978383, 8046109459, 8046240541, 8046371629, - 8046502759, 8046633863, 8046764939, 8046896023, 8047027141, 8047158221, 8047289293, - 8047420387, 8047551487, 8047682593, 8047813691, 8047944769, 8048075863, 8048206961, - 8048338061, 8048469133, 8048600267, 8048731351, 8048862487, 8048993591, 8049124703, - 8049255791, 8049386881, 8049517981, 8049649057, 8049780139, 8049911239, 8050042313, - 8050173487, 8050304569, 8050435661, 8050566751, 8050697857, 8050828931, 8050960009, - 8051091133, 8051222213, 8051353301, 8051484373, 8051615447, 8051746519, 8051877593, - 8052008669, 8052139741, 8052270823, 8052401933, 8052533029, 8052664121, 8052795239, - 8052926339, 8053057421, 8053188497, 8053319587, 8053450679, 8053581761, 8053712833, - 8053843961, 8053975051, 8054106161, 8054237239, 8054368327, 8054499443, 8054630531, - 8054761613, 8054892731, 8055023813, 8055154957, 8055286033, 8055417107, 8055548191, - 8055679267, 8055810401, 8055941477, 8056072571, 8056203653, 8056334753, 8056465919, - 8056596991, 8056728073, 8056859149, 8056990247, 8057121343, 8057252417, 8057383553, - 8057514653, 8057645731, 8057776813, 8057907887, 8058038987, 8058170059, 8058301159, - 8058432253, 8058563369, 8058694451, 8058825529, 8058956617, 8059087723, 8059218803, - 8059349911, 8059480997, 8059612081, 8059743161, 8059874257, 8060005339, 8060136421, - 8060267519, 8060398597, 8060529689, 8060660779, 8060791877, 8060922949, 8061054041, - 8061185117, 8061316231, 8061447313, 8061578411, 8061709493, 8061840601, 8061971677, - 8062102751, 8062233841, 8062364953, 8062496047, 8062627127, 8062758211, 8062889309, - 8063020387, 8063151461, 8063282561, 8063413639, 8063544721, 8063675797, 8063806871, - 8063937967, 8064069061, 8064200147, 8064331267, 8064462379, 8064593461, 8064724543, - 8064855619, 8064986749, 8065117829, 8065248913, 8065380049, 8065511141, 8065642229, - 8065773319, 8065904419, 8066035499, 8066166571, 8066297651, 8066428751, 8066559833, - 8066690911, 8066821999, 8066953117, 8067084197, 8067215357, 8067346457, 8067477569, - 8067608707, 8067739787, 8067870883, 8068001983, 8068133057, 8068264129, 8068395233, - 8068526317, 8068657403, 8068788499, 8068919609, 8069050751, 8069181823, 8069312899, - 8069444023, 8069575123, 8069706269, 8069837353, 8069968427, 8070099511, 8070230587, - 8070361667, 8070492751, 8070623833, 8070754931, 8070886003, 8071017083, 8071148177, - 8071279253, 8071410343, 8071541437, 8071672517, 8071803613, 8071934687, 8072065759, - 8072196833, 8072327909, 8072458987, 8072590087, 8072721193, 8072852269, 8072983381, - 8073114463, 8073245561, 8073376681, 8073507763, 8073638899, 8073769987, 8073901061, - 8074032149, 8074163257, 8074294337, 8074425433, 8074556513, 8074687601, 8074818673, - 8074949749, 8075080823, 8075211899, 8075342971, 8075474051, 8075605129, 8075736209, - 8075867339, 8075998417, 8076129491, 8076260573, 8076391651, 8076522733, 8076653807, - 8076784907, 8076916007, 8077047107, 8077178191, 8077309267, 8077440361, 8077571459, - 8077702531, 8077833619, 8077964707, 8078095789, 8078226881, 8078357957, 8078489033, - 8078620111, 8078751209, 8078882309, 8079013403, 8079144487, 8079275579, 8079406679, - 8079537787, 8079668887, 8079799969, 8079931091, 8080062191, 8080193291, 8080324363, - 8080455437, 8080586509, 8080717583, 8080848691, 8080979779, 8081110901, 8081242019, - 8081373107, 8081504209, 8081635369, 8081766457, 8081897533, 8082028607, 8082159689, - 8082290779, 8082421873, 8082552971, 8082684067, 8082815161, 8082946241, 8083077319, - 8083208423, 8083339501, 8083470583, 8083601717, 8083732801, 8083863913, 8083995011, - 8084126123, 8084257201, 8084388287, 8084519363, 8084650463, 8084781539, 8084912629, - 8085043727, 8085174809, 8085305881, 8085436973, 8085568063, 8085699143, 8085830231, - 8085961327, 8086092407, 8086223491, 8086354603, 8086485683, 8086616803, 8086747883, - 8086878967, 8087010073, 8087141177, 8087272399, 8087403487, 8087534561, 8087665637, - 8087796713, 8087927789, 8088058861, 8088189937, 8088321061, 8088452213, 8088583291, - 8088714379, 8088845461, 8088976543, 8089107623, 8089238737, 8089369819, 8089500893, - 8089631981, 8089763119, 8089894231, 8090025347, 8090156429, 8090287511, 8090418587, - 8090549681, 8090680769, 8090811871, 8090942947, 8091074071, 8091205153, 8091336233, - 8091467311, 8091598387, 8091729497, 8091860597, 8091991697, 8092122799, 8092253933, - 8092385023, 8092516147, 8092647253, 8092778327, 8092909403, 8093040491, 8093171617, - 8093302691, 8093433769, 8093564849, 8093695921, 8093827033, 8093958107, 8094089189, - 8094220327, 8094351403, 8094482519, 8094613609, 8094744727, 8094875801, 8095006873, - 8095137971, 8095269047, 8095400123, 8095531207, 8095662283, 8095793359, 8095924451, - 8096055559, 8096186639, 8096317787, 8096448863, 8096579941, 8096711017, 8096842097, - 8096973223, 8097104321, 8097235441, 8097366547, 8097497641, 8097628727, 8097759833, - 8097890909, 8098022003, 8098153081, 8098284157, 8098415257, 8098546363, 8098677467, - 8098808563, 8098939661, 8099070737, 8099201819, 8099332937, 8099464171, 8099595289, - 8099726377, 8099857487, 8099988583, 8100119663, 8100250757, 8100381859, 8100512969, - 8100644077, 8100775157, 8100906259, 8101037339, 8101168417, 8101299497, 8101430587, - 8101561661, 8101692743, 8101823837, 8101954933, 8102086021, 8102217121, 8102348197, - 8102479289, 8102610371, 8102741473, 8102872573, 8103003751, 8103134863, 8103265943, - 8103397061, 8103528137, 8103659233, 8103790319, 8103921391, 8104052471, 8104183547, - 8104314623, 8104445749, 8104576841, 8104707943, 8104839037, 8104970123, 8105101231, - 8105232349, 8105363429, 8105494513, 8105625589, 8105756663, 8105887763, 8106018871, - 8106149999, 8106281089, 8106412229, 8106543311, 8106674419, 8106805507, 8106936583, - 8107067659, 8107198739, 8107329817, 8107460899, 8107591997, 8107723097, 8107854187, - 8107985297, 8108116381, 8108247467, 8108378539, 8108509657, 8108640733, 8108771833, - 8108902927, 8109034009, 8109165089, 8109296171, 8109427247, 8109558329, 8109689407, - 8109820487, 8109951601, 8110082681, 8110213759, 8110344911, 8110476019, 8110607101, - 8110738189, 8110869287, 8111000467, 8111131541, 8111262613, 8111393701, 8111524777, - 8111655857, 8111786989, 8111918107, 8112049189, 8112180269, 8112311351, 8112442427, - 8112573503, 8112704641, 8112835729, 8112966803, 8113097879, 8113228951, 8113360049, - 8113491121, 8113622197, 8113753339, 8113884413, 8114015513, 8114146619, 8114277707, - 8114408791, 8114539883, 8114670961, 8114802089, 8114933171, 8115064247, 8115195331, - 8115326407, 8115457487, 8115588563, 8115719657, 8115850733, 8115981817, 8116112923, - 8116243997, 8116375159, 8116506239, 8116637377, 8116768459, 8116899533, 8117030609, - 8117161681, 8117292811, 8117423917, 8117554997, 8117686111, 8117817187, 8117948309, - 8118079423, 8118210509, 8118341599, 8118472711, 8118603809, 8118734887, 8118865973, - 8118997109, 8119128187, 8119259261, 8119390361, 8119521437, 8119652543, 8119783621, - 8119914701, 8120045821, 8120176901, 8120307973, 8120439071, 8120570191, 8120701271, - 8120832347, 8120963419, 8121094493, 8121225583, 8121356689, 8121487769, 8121618859, - 8121749959, 8121881039, 8122012111, 8122143191, 8122274269, 8122405373, 8122536449, - 8122667533, 8122798609, 8122929691, 8123060773, 8123191849, 8123322979, 8123454077, - 8123585153, 8123716243, 8123847323, 8123978399, 8124109541, 8124240659, 8124371767, - 8124502849, 8124633949, 8124765043, 8124896141, 8125027223, 8125158359, 8125289449, - 8125420529, 8125551601, 8125682683, 8125813757, 8125944829, 8126075921, 8126206993, - 8126338111, 8126469187, 8126600267, 8126731367, 8126862451, 8126993549, 8127124637, - 8127255733, 8127386837, 8127517961, 8127649039, 8127780127, 8127911201, 8128042283, - 8128173437, 8128304531, 8128435663, 8128566739, 8128697833, 8128828921, 8128960009, - 8129091109, 8129222183, 8129353259, 8129484359, 8129615437, 8129746519, 8129877611, - 8130008687, 8130139783, 8130270899, 8130401977, 8130533063, 8130664163, 8130795271, - 8130926381, 8131057453, 8131188539, 8131319617, 8131450709, 8131581833, 8131712917, - 8131843997, 8131975073, 8132106163, 8132237251, 8132368331, 8132499409, 8132630483, - 8132761633, 8132892739, 8133023819, 8133154901, 8133285983, 8133417059, 8133548131, - 8133679217, 8133810323, 8133941411, 8134072537, 8134203611, 8134334699, 8134465817, - 8134596919, 8134728013, 8134859087, 8134990177, 8135121251, 8135252327, 8135383433, - 8135514553, 8135645633, 8135776711, 8135907797, 8136038909, 8136169981, 8136301081, - 8136432163, 8136563261, 8136694339, 8136825427, 8136956501, 8137087577, 8137218679, - 8137349771, 8137480853, 8137611947, 8137743049, 8137874149, 8138005243, 8138136329, - 8138267411, 8138398487, 8138529563, 8138660641, 8138791729, 8138922809, 8139053887, - 8139184967, 8139316051, 8139447133, 8139578221, 8139709337, 8139840463, 8139971549, - 8140102627, 8140233701, 8140364819, 8140495943, 8140627051, 8140758163, 8140889257, - 8141020337, 8141151413, 8141282497, 8141413597, 8141544673, 8141675749, 8141806837, - 8141937913, 8142068989, 8142200071, 8142331147, 8142462259, 8142593339, 8142724411, - 8142855541, 8142986627, 8143117721, 8143248793, 8143379911, 8143510987, 8143642063, - 8143773137, 8143904227, 8144035307, 8144166391, 8144297479, 8144428597, 8144559691, - 8144690767, 8144821843, 8144952941, 8145084023, 8145215153, 8145346229, 8145477367, - 8145608441, 8145739517, 8145870617, 8146001767, 8146132843, 8146263919, 8146395013, - 8146526107, 8146657241, 8146788319, 8146919393, 8147050487, 8147181619, 8147312707, - 8147443807, 8147574913, 8147705987, 8147837083, 8147968159, 8148099233, 8148230333, - 8148361421, 8148492533, 8148623611, 8148754693, 8148885779, 8149016881, 8149147997, - 8149279097, 8149410187, 8149541269, 8149672343, 8149803427, 8149934519, 8150065667, - 8150196739, 8150327819, 8150458909, 8150589991, 8150721067, 8150852197, 8150983279, - 8151114353, 8151245437, 8151376511, 8151507589, 8151638717, 8151769837, 8151900917, - 8152031989, 8152163069, 8152294151, 8152425223, 8152556303, 8152687397, 8152818473, - 8152949549, 8153080651, 8153211767, 8153342839, 8153473967, 8153605039, 8153736113, - 8153867207, 8153998291, 8154129367, 8154260459, 8154391573, 8154522653, 8154653729, - 8154784801, 8154915877, 8155047001, 8155178077, 8155309163, 8155440253, 8155571327, - 8155702403, 8155833481, 8155964587, 8156095669, 8156226769, 8156357843, 8156488979, - 8156620079, 8156751151, 8156882231, 8157013313, 8157144449, 8157275543, 8157406639, - 8157537769, 8157668843, 8157799921, 8157931009, 8158062131, 8158193207, 8158324289, - 8158455407, 8158586489, 8158717577, 8158848679, 8158979761, 8159110847, 8159241947, - 8159373043, 8159504167, 8159635261, 8159766341, 8159897413, 8160028489, 8160159563, - 8160290647, 8160421721, 8160552833, 8160683929, 8160815011, 8160946099, 8161077181, - 8161208269, 8161339391, 8161470467, 8161601549, 8161732627, 8161863751, 8161994837, - 8162125913, 8162256989, 8162388061, 8162519147, 8162650229, 8162781323, 8162912399, - 8163043477, 8163174553, 8163305639, 8163436753, 8163567827, 8163698953, 8163830027, - 8163961133, 8164092221, 8164223303, 8164354403, 8164485481, 8164616561, 8164747639, - 8164878737, 8165009833, 8165140961, 8165272039, 8165403157, 8165534233, 8165665331, - 8165796413, 8165927501, 8166058603, 8166189697, 8166320777, 8166451871, 8166582943, - 8166714043, 8166845123, 8166976231, 8167107313, 8167238399, 8167369477, 8167500577, - 8167631653, 8167762747, 8167893829, 8168024903, 8168156023, 8168287139, 8168418217, - 8168549299, 8168680423, 8168811499, 8168942599, 8169073723, 8169204811, 8169335971, - 8169467057, 8169598153, 8169729251, 8169860351, 8169991471, 8170122557, 8170253629, - 8170384727, 8170515803, 8170646923, 8170778023, 8170909129, 8171040221, 8171171317, - 8171302423, 8171433511, 8171564623, 8171695723, 8171826797, 8171957869, 8172089021, - 8172220109, 8172351203, 8172482299, 8172613373, 8172744449, 8172875521, 8173006607, - 8173137751, 8173268867, 8173399957, 8173531033, 8173662113, 8173793191, 8173924267, - 8174055347, 8174186443, 8174317573, 8174448647, 8174579723, 8174710801, 8174841947, - 8174973031, 8175104131, 8175235259, 8175366343, 8175497423, 8175628523, 8175759661, - 8175890759, 8176021877, 8176152967, 8176284049, 8176415129, 8176546223, 8176677329, - 8176808401, 8176939483, 8177070611, 8177201699, 8177332777, 8177463857, 8177594933, - 8177726017, 8177857099, 8177988187, 8178119267, 8178250373, 8178381457, 8178512533, - 8178643607, 8178774689, 8178905783, 8179036891, 8179168021, 8179299101, 8179430173, - 8179561259, 8179692347, 8179823429, 8179954609, 8180085691, 8180216767, 8180347849, - 8180478953, 8180610041, 8180741123, 8180872201, 8181003343, 8181134447, 8181265549, - 8181396623, 8181527707, 8181658783, 8181789877, 8181920953, 8182052029, 8182183111, - 8182314247, 8182445329, 8182576421, 8182707527, 8182838659, 8182969783, 8183100971, - 8183232059, 8183363161, 8183494271, 8183625347, 8183756423, 8183887519, 8184018593, - 8184149681, 8184280763, 8184411857, 8184542929, 8184674009, 8184805147, 8184936269, - 8185067353, 8185198451, 8185329569, 8185460653, 8185591741, 8185722833, 8185853909, - 8185985009, 8186116087, 8186247161, 8186378257, 8186509337, 8186640431, 8186771507, - 8186902579, 8187033653, 8187164729, 8187295807, 8187426883, 8187557981, 8187689089, - 8187820187, 8187951259, 8188082333, 8188213433, 8188344529, 8188475611, 8188606687, - 8188737763, 8188868837, 8188999957, 8189131033, 8189262119, 8189393207, 8189524289, - 8189655371, 8189786443, 8189917517, 8190048589, 8190179677, 8190310811, 8190441901, - 8190573019, 8190704099, 8190835189, 8190966269, 8191097347, 8191228427, 8191359523, - 8191490599, 8191621679, 8191752761, 8191883863, 8192014951, 8192146033, 8192277109, - 8192408219, 8192539307, 8192670383, 8192801467, 8192932591, 8193063667, 8193194743, - 8193325817, 8193456889, 8193587977, 8193719059, 8193850141, 8193981217, 8194112291, - 8194243363, 8194374443, 8194505519, 8194636613, 8194767731, 8194898837, 8195029937, - 8195161019, 8195292137, 8195423209, 8195554357, 8195685467, 8195816539, 8195947651, - 8196078739, 8196209851, 8196340937, 8196472091, 8196603169, 8196734257, 8196865349, - 8196996503, 8197127591, 8197258681, 8197389757, 8197520833, 8197651921, 8197783037, - 8197914113, 8198045237, 8198176333, 8198307419, 8198438519, 8198569661, 8198700733, - 8198831843, 8198962949, 8199094063, 8199225149, 8199356233, 8199487313, 8199618407, - 8199749483, 8199880561, 8200011637, 8200142771, 8200273843, 8200404923, 8200536023, - 8200667099, 8200798211, 8200929313, 8201060419, 8201191499, 8201322587, 8201453671, - 8201584751, 8201715833, 8201846909, 8201977991, 8202109067, 8202240161, 8202371273, - 8202502387, 8202633463, 8202764561, 8202895633, 8203026721, 8203157801, 8203288883, - 8203420009, 8203551113, 8203682203, 8203813291, 8203944389, 8204075483, 8204206567, - 8204337703, 8204468803, 8204599919, 8204730997, 8204862103, 8204993183, 8205124261, - 8205255337, 8205386443, 8205517519, 8205648599, 8205779677, 8205910763, 8206041859, - 8206172981, 8206304069, 8206435151, 8206566257, 8206697333, 8206828429, 8206959571, - 8207090653, 8207221793, 8207352869, 8207483953, 8207615047, 8207746133, 8207877259, - 8208008339, 8208139447, 8208270529, 8208401627, 8208532723, 8208663829, 8208794911, - 8208926027, 8209057117, 8209188193, 8209319273, 8209450351, 8209581437, 8209712543, - 8209843651, 8209974757, 8210105837, 8210236919, 8210368003, 8210499091, 8210630167, - 8210761241, 8210892317, 8211023423, 8211154499, 8211285571, 8211416651, 8211547733, - 8211678817, 8211809917, 8211941009, 8212072087, 8212203163, 8212334237, 8212465337, - 8212596421, 8212727521, 8212858603, 8212989677, 8213120753, 8213251829, 8213382911, - 8213514013, 8213645093, 8213776183, 8213907259, 8214038347, 8214169459, 8214300539, - 8214431647, 8214562729, 8214693803, 8214824887, 8214955963, 8215087073, 8215218149, - 8215349221, 8215480297, 8215611373, 8215742449, 8215873531, 8216004619, 8216135713, - 8216266811, 8216397899, 8216529059, 8216660131, 8216791223, 8216922323, 8217053419, - 8217184499, 8217315583, 8217446683, 8217577777, 8217708871, 8217839953, 8217971039, - 8218102117, 8218233203, 8218364279, 8218495379, 8218626457, 8218757543, 8218888621, - 8219019701, 8219150783, 8219281879, 8219412953, 8219544031, 8219675111, 8219806223, - 8219937343, 8220068449, 8220199531, 8220330611, 8220461699, 8220592819, 8220723913, - 8220854987, 8220986113, 8221117187, 8221248311, 8221379399, 8221510523, 8221641619, - 8221772707, 8221903831, 8222034937, 8222166031, 8222297107, 8222428213, 8222559299, - 8222690381, 8222821459, 8222952533, 8223083623, 8223214697, 8223345773, 8223476881, - 8223607957, 8223739067, 8223870143, 8224001231, 8224132303, 8224263391, 8224394471, - 8224525553, 8224656637, 8224787713, 8224918787, 8225049887, 8225180981, 8225312083, - 8225443181, 8225574257, 8225705353, 8225836441, 8225967557, 8226098633, 8226229741, - 8226360833, 8226491909, 8226623029, 8226754157, 8226885229, 8227016309, 8227147447, - 8227278529, 8227409609, 8227540681, 8227671769, 8227802867, 8227933939, 8228065019, - 8228196101, 8228327227, 8228458321, 8228589401, 8228720483, 8228851601, 8228982677, - 8229113759, 8229244867, 8229375943, 8229507017, 8229638117, 8229769199, 8229900299, - 8230031371, 8230162453, 8230293557, 8230424687, 8230555771, 8230686847, 8230817939, - 8230949011, 8231080129, 8231211221, 8231342293, 8231473373, 8231604449, 8231735531, - 8231866639, 8231997713, 8232128857, 8232259943, 8232391019, 8232522121, 8232653201, - 8232784283, 8232915359, 8233046431, 8233177529, 8233308619, 8233439737, 8233570811, - 8233701893, 8233832983, 8233964077, 8234095157, 8234226283, 8234357387, 8234488469, - 8234619541, 8234750681, 8234881817, 8235012913, 8235144059, 8235275179, 8235406261, - 8235537391, 8235668477, 8235799553, 8235930631, 8236061711, 8236192799, 8236323911, - 8236455013, 8236586117, 8236717193, 8236848281, 8236979353, 8237110457, 8237241563, - 8237372659, 8237503759, 8237634857, 8237765929, 8237897021, 8238028109, 8238159211, - 8238290293, 8238421381, 8238552463, 8238683549, 8238814627, 8238945703, 8239076779, - 8239207859, 8239338931, 8239470013, 8239601087, 8239732177, 8239863299, 8239994377, - 8240125477, 8240256551, 8240387627, 8240518703, 8240649779, 8240780851, 8240911927, - 8241043001, 8241174077, 8241305153, 8241436267, 8241567353, 8241698453, 8241829529, - 8241960647, 8242091801, 8242222889, 8242353961, 8242485049, 8242616143, 8242747223, - 8242878313, 8243009429, 8243140517, 8243271601, 8243402759, 8243533843, 8243664917, - 8243796007, 8243927093, 8244058177, 8244189263, 8244320351, 8244451463, 8244582559, - 8244713639, 8244844721, 8244975803, 8245106911, 8245237997, 8245369091, 8245500269, - 8245631351, 8245762463, 8245893559, 8246024669, 8246155759, 8246286833, 8246417951, - 8246549029, 8246680111, 8246811187, 8246942281, 8247073399, 8247204487, 8247335597, - 8247466697, 8247597773, 8247728893, 8247859993, 8247991091, 8248122163, 8248253383, - 8248384457, 8248515533, 8248646611, 8248777687, 8248908791, 8249039921, 8249171003, - 8249302081, 8249433173, 8249564249, 8249695331, 8249826421, 8249957509, 8250088619, - 8250219739, 8250350821, 8250481901, 8250612977, 8250744077, 8250875179, 8251006289, - 8251137379, 8251268497, 8251399601, 8251530713, 8251661833, 8251792937, 8251924111, - 8252055211, 8252186309, 8252317391, 8252448557, 8252579639, 8252710721, 8252841799, - 8252972891, 8253103981, 8253235069, 8253366169, 8253497269, 8253628373, 8253759457, - 8253890531, 8254021609, 8254152701, 8254283797, 8254414871, 8254545947, 8254677083, - 8254808183, 8254939307, 8255070413, 8255201489, 8255332609, 8255463703, 8255594819, - 8255725897, 8255856971, 8255988043, 8256119129, 8256250213, 8256381299, 8256512389, - 8256643469, 8256774551, 8256905633, 8257036727, 8257167799, 8257298879, 8257429981, - 8257561061, 8257692169, 8257823261, 8257954373, 8258085481, 8258216609, 8258347711, - 8258478859, 8258609999, 8258741107, 8258872201, 8259003281, 8259134357, 8259265457, - 8259396553, 8259527641, 8259658717, 8259789793, 8259920899, 8260051973, 8260183051, - 8260314133, 8260445243, 8260576319, 8260707401, 8260838473, 8260969573, 8261100677, - 8261231761, 8261362859, 8261493943, 8261625019, 8261756117, 8261887189, 8262018293, - 8262149377, 8262280463, 8262411539, 8262542611, 8262673723, 8262804829, 8262935911, - 8263066991, 8263198067, 8263329167, 8263460243, 8263591331, 8263722449, 8263853567, - 8263984643, 8264115731, 8264246827, 8264377903, 8264508977, 8264640053, 8264771143, - 8264902229, 8265033319, 8265164393, 8265295483, 8265426557, 8265557639, 8265688771, - 8265819967, 8265951077, 8266082197, 8266213309, 8266344389, 8266475501, 8266606573, - 8266737649, 8266868761, 8266999847, 8267130943, 8267262023, 8267393119, 8267524231, - 8267655311, 8267786411, 8267917501, 8268048577, 8268179657, 8268310747, 8268441821, - 8268572941, 8268704039, 8268835117, 8268966191, 8269097359, 8269228439, 8269359529, - 8269490699, 8269621777, 8269752857, 8269883929, 8270015009, 8270146091, 8270277163, - 8270408261, 8270539357, 8270670461, 8270801551, 8270932661, 8271063743, 8271194831, - 8271325957, 8271457037, 8271588161, 8271719233, 8271850319, 8271981391, 8272112477, - 8272243561, 8272374659, 8272505737, 8272636819, 8272767917, 8272899017, 8273030119, - 8273161223, 8273292331, 8273423407, 8273554517, 8273685617, 8273816689, 8273947763, - 8274078853, 8274210001, 8274341083, 8274472163, 8274603251, 8274734323, 8274865409, - 8274996547, 8275127633, 8275258781, 8275389883, 8275520989, 8275652069, 8275783151, - 8275914239, 8276045329, 8276176451, 8276307551, 8276438623, 8276569703, 8276700781, - 8276831869, 8276962961, 8277094057, 8277225137, 8277356237, 8277487333, 8277618439, - 8277749533, 8277880609, 8278011683, 8278142783, 8278273877, 8278404971, 8278536047, - 8278667153, 8278798247, 8278929319, 8279060417, 8279191507, 8279322587, 8279453717, - 8279584801, 8279715877, 8279846969, 8279978041, 8280109139, 8280240211, 8280371287, - 8280502369, 8280633457, 8280764551, 8280895627, 8281026703, 8281157789, 8281288867, - 8281419989, 8281551077, 8281682161, 8281813273, 8281944347, 8282075423, 8282206531, - 8282337617, 8282468729, 8282599817, 8282730943, 8282862061, 8282993161, 8283124237, - 8283255311, 8283386387, 8283517483, 8283648577, 8283779729, 8283910847, 8284041919, - 8284172993, 8284304071, 8284435177, 8284566299, 8284697381, 8284828463, 8284959563, - 8285090647, 8285221723, 8285352811, 8285483887, 8285614963, 8285746037, 8285877109, - 8286008219, 8286139291, 8286270401, 8286401483, 8286532561, 8286663647, 8286794731, - 8286925807, 8287056919, 8287188079, 8287319191, 8287450289, 8287581373, 8287712497, - 8287843579, 8287974701, 8288105789, 8288236897, 8288367973, 8288499049, 8288630123, - 8288761223, 8288892347, 8289023419, 8289154493, 8289285593, 8289416687, 8289547807, - 8289678889, 8289809971, 8289941069, 8290072159, 8290203247, 8290334323, 8290465397, - 8290596469, 8290727551, 8290858627, 8290989703, 8291120777, 8291251867, 8291383003, - 8291514097, 8291645179, 8291776261, 8291907341, 8292038413, 8292169511, 8292300593, - 8292431669, 8292562741, 8292693821, 8292824923, 8292956003, 8293087081, 8293218161, - 8293349249, 8293480337, 8293611427, 8293742507, 8293873603, 8294004707, 8294135791, - 8294266873, 8294397953, 8294529037, 8294660119, 8294791199, 8294922281, 8295053369, - 8295184463, 8295315541, 8295446617, 8295577729, 8295708851, 8295839941, 8295971059, - 8296102147, 8296233221, 8296364387, 8296495463, 8296626563, 8296757653, 8296888757, - 8297019851, 8297150923, 8297282011, 8297413087, 8297544163, 8297675261, 8297806339, - 8297937437, 8298068549, 8298199627, 8298330727, 8298461819, 8298592943, 8298724037, - 8298855119, 8298986191, 8299117313, 8299248409, 8299379483, 8299510559, 8299641653, - 8299772743, 8299903837, 8300034913, 8300165999, 8300297099, 8300428183, 8300559283, - 8300690393, 8300821511, 8300952589, 8301083671, 8301214759, 8301345859, 8301476959, - 8301608059, 8301739139, 8301870251, 8302001327, 8302132411, 8302263509, 8302394593, - 8302525747, 8302656829, 8302787923, 8302919071, 8303050159, 8303181247, 8303312323, - 8303443427, 8303574527, 8303705609, 8303836819, 8303967899, 8304099007, 8304230083, - 8304361183, 8304492271, 8304623347, 8304754433, 8304885529, 8305016669, 8305147757, - 8305278829, 8305409911, 8305540993, 8305672091, 8305803167, 8305934243, 8306065331, - 8306196407, 8306327509, 8306458583, 8306589677, 8306720753, 8306851859, 8306982947, - 8307114077, 8307245171, 8307376243, 8307507337, 8307638419, 8307769501, 8307900577, - 8308031707, 8308162789, 8308293869, 8308424959, 8308556051, 8308687147, 8308818247, - 8308949347, 8309080457, 8309211529, 8309342623, 8309473759, 8309604857, 8309735953, - 8309867029, 8309998171, 8310129257, 8310260353, 8310391429, 8310522533, 8310653621, - 8310784733, 8310915827, 8311046903, 8311177981, 8311309067, 8311440227, 8311571329, - 8311702439, 8311833571, 8311964657, 8312095733, 8312226817, 8312357891, 8312488973, - 8312620051, 8312751127, 8312882209, 8313013297, 8313144401, 8313275473, 8313406559, - 8313537637, 8313668717, 8313799817, 8313930901, 8314061983, 8314193123, 8314324201, - 8314455283, 8314586377, 8314717457, 8314848547, 8314979689, 8315110781, 8315241859, - 8315372939, 8315504063, 8315635151, 8315766241, 8315897339, 8316028421, 8316159493, - 8316290569, 8316421741, 8316552883, 8316683957, 8316815041, 8316946117, 8317077191, - 8317208303, 8317339379, 8317470461, 8317601603, 8317732693, 8317863779, 8317994911, - 8318125997, 8318257111, 8318388191, 8318519299, 8318650381, 8318781517, 8318912597, - 8319043679, 8319174803, 8319305881, 8319436969, 8319568079, 8319699151, 8319830231, - 8319961369, 8320092463, 8320223663, 8320354751, 8320485881, 8320616959, 8320748069, - 8320879159, 8321010239, 8321141327, 8321272423, 8321403509, 8321534593, 8321665669, - 8321796781, 8321927881, 8322059003, 8322190087, 8322321181, 8322452261, 8322583333, - 8322714461, 8322845539, 8322976621, 8323107697, 8323238797, 8323369871, 8323500959, - 8323632133, 8323763209, 8323894283, 8324025361, 8324156483, 8324287597, 8324418703, - 8324549791, 8324680879, 8324811953, 8324943059, 8325074137, 8325205223, 8325336311, - 8325467383, 8325598469, 8325729541, 8325860617, 8325991717, 8326122853, 8326253927, - 8326385017, 8326516109, 8326647211, 8326778287, 8326909369, 8327040467, 8327171569, - 8327302667, 8327433743, 8327564831, 8327695903, 8327827063, 8327958137, 8328089249, - 8328220333, 8328351419, 8328482497, 8328613571, 8328744647, 8328875743, 8329006823, - 8329137923, 8329269029, 8329400119, 8329531207, 8329662317, 8329793419, 8329924507, - 8330055599, 8330186671, 8330317789, 8330448877, 8330579953, 8330711069, 8330842141, - 8330973227, 8331104317, 8331235403, 8331366481, 8331497563, 8331628637, 8331759719, - 8331890813, 8332021889, 8332152977, 8332284049, 8332415159, 8332546241, 8332677317, - 8332808399, 8332939499, 8333070589, 8333201693, 8333332769, 8333463841, 8333594923, - 8333726081, 8333857153, 8333988239, 8334119341, 8334250423, 8334381533, 8334512609, - 8334643687, 8334774787, 8334905879, 8335036987, 8335168063, 8335299149, 8335430227, - 8335561303, 8335692377, 8335823449, 8335954567, 8336085689, 8336216771, 8336347843, - 8336478937, 8336610067, 8336741141, 8336872213, 8337003289, 8337134371, 8337265459, - 8337396577, 8337527663, 8337658739, 8337789833, 8337920909, 8338052029, 8338183109, - 8338314263, 8338445377, 8338576457, 8338707541, 8338838621, 8338969697, 8339100793, - 8339231881, 8339362957, 8339494043, 8339625143, 8339756219, 8339887301, 8340018397, - 8340149471, 8340280547, 8340411619, 8340542699, 8340673799, 8340804917, 8340936001, - 8341067083, 8341198157, 8341329229, 8341460317, 8341591397, 8341722481, 8341853579, - 8341984657, 8342115731, 8342246821, 8342377907, 8342509001, 8342640149, 8342771263, - 8342902349, 8343033421, 8343164513, 8343295589, 8343426667, 8343557749, 8343688853, - 8343819937, 8343951029, 8344082107, 8344213183, 8344344287, 8344475369, 8344606453, - 8344737551, 8344868633, 8344999753, 8345130851, 8345261923, 8345393033, 8345524163, - 8345655277, 8345786357, 8345917451, 8346048551, 8346179641, 8346310727, 8346441841, - 8346572917, 8346704057, 8346835153, 8346966227, 8347097303, 8347228457, 8347359557, - 8347490629, 8347621739, 8347752823, 8347883903, 8348014993, 8348146069, 8348277143, - 8348408219, 8348539301, 8348670413, 8348801537, 8348932619, 8349063703, 8349194779, - 8349325891, 8349457001, 8349588119, 8349719207, 8349850291, 8349981389, 8350112471, - 8350243543, 8350374623, 8350505699, 8350636849, 8350767959, 8350899079, 8351030221, - 8351161307, 8351292409, 8351423497, 8351554583, 8351685679, 8351816761, 8351947847, - 8352078953, 8352210029, 8352341149, 8352472223, 8352603299, 8352734393, 8352865483, - 8352996559, 8353127639, 8353258759, 8353389871, 8353520957, 8353652077, 8353783157, - 8353914241, 8354045317, 8354176433, 8354307527, 8354438623, 8354569721, 8354700917, - 8354832023, 8354963101, 8355094199, 8355225349, 8355356423, 8355487501, 8355618577, - 8355749651, 8355880727, 8356011817, 8356142933, 8356274029, 8356405121, 8356536211, - 8356667309, 8356798393, 8356929491, 8357060581, 8357191681, 8357322761, 8357453891, - 8357584969, 8357716049, 8357847187, 8357978261, 8358109393, 8358240493, 8358371569, - 8358502673, 8358633749, 8358764849, 8358895999, 8359027081, 8359158229, 8359289329, - 8359420411, 8359551493, 8359682599, 8359813681, 8359944779, 8360075861, 8360206937, - 8360338037, 8360469113, 8360600189, 8360731261, 8360862359, 8360993437, 8361124517, - 8361255593, 8361386669, 8361517757, 8361648847, 8361779941, 8361911017, 8362042103, - 8362173199, 8362304303, 8362435391, 8362566467, 8362697593, 8362828667, 8362959739, - 8363090831, 8363221903, 8363353049, 8363484139, 8363615237, 8363746319, 8363877419, - 8364008501, 8364139577, 8364270721, 8364401797, 8364532921, 8364664051, 8364795143, - 8364926233, 8365057313, 8365188407, 8365319483, 8365450573, 8365581659, 8365712753, - 8365843859, 8365974937, 8366106029, 8366237119, 8366368217, 8366499299, 8366630417, - 8366761499, 8366892587, 8367023683, 8367154759, 8367285853, 8367416933, 8367548027, - 8367679141, 8367810233, 8367941353, 8368072439, 8368203521, 8368334603, 8368465681, - 8368596763, 8368727849, 8368858931, 8368990037, 8369121133, 8369252209, 8369383291, - 8369514401, 8369645489, 8369776561, 8369907659, 8370038773, 8370169877, 8370300977, - 8370432071, 8370563153, 8370694229, 8370825319, 8370956411, 8371087493, 8371218617, - 8371349719, 8371480801, 8371611889, 8371742987, 8371874087, 8372005189, 8372136277, - 8372267359, 8372398483, 8372529559, 8372660657, 8372791781, 8372922853, 8373053947, - 8373185021, 8373316099, 8373447191, 8373578263, 8373709349, 8373840421, 8373971519, - 8374102603, 8374233689, 8374364807, 8374495889, 8374626973, 8374758083, 8374889161, - 8375020243, 8375151331, 8375282417, 8375413517, 8375544613, 8375675717, 8375806801, - 8375937883, 8376068957, 8376200029, 8376331121, 8376462239, 8376593321, 8376724399, - 8376855479, 8376986573, 8377117657, 8377248739, 8377379837, 8377510919, 8377642057, - 8377773133, 8377904231, 8378035321, 8378166403, 8378297483, 8378428561, 8378559641, - 8378690731, 8378821819, 8378952929, 8379084019, 8379215093, 8379346169, 8379477241, - 8379608353, 8379739439, 8379870511, 8380001587, 8380132681, 8380263767, 8380394873, - 8380525969, 8380657049, 8380788137, 8380919221, 8381050313, 8381181427, 8381312519, - 8381443621, 8381574731, 8381705803, 8381836901, 8381967989, 8382099073, 8382230189, - 8382361277, 8382492361, 8382623489, 8382754577, 8382885659, 8383016737, 8383147811, - 8383278887, 8383409963, 8383541059, 8383672163, 8383803349, 8383934431, 8384065513, - 8384196599, 8384327671, 8384458781, 8384589853, 8384720941, 8384852017, 8384983091, - 8385114191, 8385245279, 8385376427, 8385507511, 8385638629, 8385769771, 8385900851, - 8386031923, 8386162999, 8386294073, 8386425167, 8386556261, 8386687357, 8386818439, - 8386949537, 8387080619, 8387211697, 8387342783, 8387473901, 8387605013, 8387736101, - 8387867177, 8387998277, 8388129391, 8388260473, 8388391559, 8388522641, 8388653717, - 8388784823, 8388915943, 8389047041, 8389178123, 8389309237, 8389440337, 8389571461, - 8389702543, 8389833623, 8389964753, 8390095841, 8390226913, 8390358001, 8390489143, - 8390620241, 8390751349, 8390882431, 8391013517, 8391144607, 8391275687, 8391406769, - 8391537851, 8391668939, 8391800069, 8391931151, 8392062227, 8392193309, 8392324441, - 8392455521, 8392586611, 8392717693, 8392848799, 8392979879, 8393110981, 8393242073, - 8393373199, 8393504321, 8393635409, 8393766481, 8393897563, 8394028637, 8394159727, - 8394290813, 8394421933, 8394553049, 8394684149, 8394815227, 8394946319, 8395077497, - 8395208581, 8395339663, 8395470749, 8395601833, 8395732909, 8395863989, 8395995067, - 8396126143, 8396257231, 8396388307, 8396519393, 8396650499, 8396781583, 8396912683, - 8397043769, 8397174847, 8397305927, 8397437003, 8397568103, 8397699179, 8397830251, - 8397961333, 8398092413, 8398223501, 8398354577, 8398485653, 8398616741, 8398747843, - 8398878931, 8399010013, 8399141119, 8399272199, 8399403277, 8399534357, 8399665429, - 8399796523, 8399927611, 8400058753, 8400189857, 8400321031, 8400452129, 8400583223, - 8400714313, 8400845389, 8400976477, 8401107551, 8401238641, 8401369733, 8401500823, - 8401631899, 8401762973, 8401894049, 8402025127, 8402156201, 8402287273, 8402418347, - 8402549453, 8402680543, 8402811623, 8402942701, 8403073781, 8403204853, 8403335971, - 8403467071, 8403598183, 8403729263, 8403860347, 8403991471, 8404122553, 8404253651, - 8404384753, 8404515857, 8404646951, 8404778023, 8404909111, 8405040191, 8405171279, - 8405302361, 8405433461, 8405564561, 8405695673, 8405826761, 8405957839, 8406088939, - 8406220013, 8406351139, 8406482237, 8406613357, 8406744439, 8406875593, 8407006721, - 8407137797, 8407268869, 8407399951, 8407531039, 8407662139, 8407793213, 8407924307, - 8408055413, 8408186491, 8408317583, 8408448707, 8408579807, 8408710879, 8408841953, - 8408973047, 8409104147, 8409235267, 8409366359, 8409497431, 8409628559, 8409759661, - 8409890737, 8410021811, 8410152887, 8410283963, 8410415051, 8410546127, 8410677203, - 8410808309, 8410939423, 8411070529, 8411201609, 8411332687, 8411463769, 8411594843, - 8411725937, 8411857021, 8411988173, 8412119251, 8412250331, 8412381413, 8412512489, - 8412643571, 8412774743, 8412905827, 8413036921, 8413168087, 8413299211, 8413430293, - 8413561367, 8413692493, 8413823567, 8413954673, 8414085769, 8414216843, 8414347937, - 8414479027, 8414610121, 8414741201, 8414872289, 8415003409, 8415134501, 8415265577, - 8415396667, 8415527773, 8415658859, 8415789961, 8415921061, 8416052159, 8416183331, - 8416314419, 8416445501, 8416576579, 8416707757, 8416838849, 8416969927, 8417101019, - 8417232101, 8417363173, 8417494259, 8417625373, 8417756449, 8417887531, 8418018641, - 8418149713, 8418280817, 8418411889, 8418542983, 8418674081, 8418805201, 8418936277, - 8419067383, 8419198561, 8419329641, 8419460723, 8419591811, 8419722911, 8419853987, - 8419985081, 8420116169, 8420247247, 8420378353, 8420509429, 8420640509, 8420771627, - 8420902759, 8421033839, 8421164923, 8421296027, 8421427123, 8421558217, 8421689299, - 8421820397, 8421951493, 8422082567, 8422213649, 8422344727, 8422475827, 8422606901, - 8422737997, 8422869073, 8423000191, 8423131267, 8423262359, 8423393441, 8423524513, - 8423655589, 8423786681, 8423917763, 8424048863, 8424179963, 8424311069, 8424442151, - 8424573263, 8424704347, 8424835459, 8424966541, 8425097623, 8425228751, 8425359841, - 8425490917, 8425622047, 8425753123, 8425884197, 8426015317, 8426146403, 8426277481, - 8426408563, 8426539643, 8426670719, 8426801819, 8426932931, 8427064003, 8427195097, - 8427326213, 8427457289, 8427588391, 8427719471, 8427850553, 8427981629, 8428112743, - 8428243891, 8428374973, 8428506103, 8428637219, 8428768291, 8428899373, 8429030453, - 8429161589, 8429292661, 8429423749, 8429554829, 8429685907, 8429816987, 8429948089, - 8430079211, 8430210287, 8430341389, 8430472481, 8430603553, 8430734657, 8430865753, - 8430996857, 8431127959, 8431259033, 8431390111, 8431521191, 8431652293, 8431783411, - 8431914499, 8432045579, 8432176651, 8432307731, 8432438813, 8432569897, 8432700977, - 8432832059, 8432963171, 8433094297, 8433225391, 8433356471, 8433487549, 8433618637, - 8433749711, 8433880799, 8434011877, 8434143017, 8434274117, 8434405201, 8434536347, - 8434667431, 8434798511, 8434929599, 8435060693, 8435191771, 8435322869, 8435453951, - 8435585023, 8435716097, 8435847181, 8435978267, 8436109343, 8436240457, 8436371539, - 8436502619, 8436633701, 8436764801, 8436895891, 8437026971, 8437158083, 8437289167, - 8437420261, 8437551337, 8437682467, 8437813561, 8437944637, 8438075719, 8438206801, - 8438337877, 8438468957, 8438600081, 8438731153, 8438862227, 8438993309, 8439124399, - 8439255509, 8439386591, 8439517739, 8439648853, 8439779939, 8439911021, 8440042109, - 8440173199, 8440304291, 8440435363, 8440566437, 8440697519, 8440828607, 8440959679, - 8441090809, 8441221909, 8441352989, 8441484071, 8441615159, 8441746259, 8441877331, - 8442008437, 8442139513, 8442270611, 8442401687, 8442532759, 8442663833, 8442794953, - 8442926047, 8443057127, 8443188239, 8443319317, 8443450417, 8443581499, 8443712593, - 8443843673, 8443974767, 8444105861, 8444236961, 8444368063, 8444499163, 8444630261, - 8444761333, 8444892413, 8445023519, 8445154603, 8445285713, 8445416827, 8445547921, - 8445679001, 8445810073, 8445941149, 8446072231, 8446203307, 8446334381, 8446465463, - 8446596539, 8446727651, 8446858727, 8446989853, 8447120933, 8447252029, 8447383123, - 8447514227, 8447645317, 8447776399, 8447907499, 8448038593, 8448169729, 8448300803, - 8448431881, 8448562963, 8448694039, 8448825169, 8448956273, 8449087349, 8449218431, - 8449349521, 8449480631, 8449611739, 8449742837, 8449873909, 8450005009, 8450136103, - 8450267209, 8450398289, 8450529379, 8450660497, 8450791571, 8450922653, 8451053731, - 8451184873, 8451315953, 8451447041, 8451578123, 8451709213, 8451840289, 8451971371, - 8452102459, 8452233539, 8452364611, 8452495739, 8452626821, 8452757953, 8452889033, - 8453020117, 8453151193, 8453282269, 8453413351, 8453544443, 8453675533, 8453806639, - 8453937721, 8454068837, 8454199913, 8454331009, 8454462103, 8454593201, 8454724273, - 8454855359, 8454986443, 8455117529, 8455248623, 8455379707, 8455510781, 8455641881, - 8455772971, 8455904063, 8456035157, 8456166233, 8456297329, 8456428433, 8456559511, - 8456690591, 8456821679, 8456952773, 8457083851, 8457214937, 8457346021, 8457477113, - 8457608191, 8457739271, 8457870353, 8458001429, 8458132531, 8458263617, 8458394689, - 8458525781, 8458656853, 8458787927, 8458918999, 8459050079, 8459181151, 8459312227, - 8459443313, 8459574457, 8459705533, 8459836607, 8459967701, 8460098797, 8460229879, - 8460360989, 8460492077, 8460623161, 8460754273, 8460885359, 8461016449, 8461147523, - 8461278599, 8461409777, 8461540891, 8461672001, 8461803101, 8461934177, 8462065267, - 8462196343, 8462327429, 8462458541, 8462589637, 8462720729, 8462851849, 8462982923, - 8463114043, 8463245129, 8463376213, 8463507289, 8463638363, 8463769453, 8463900527, - 8464031599, 8464162709, 8464293797, 8464424869, 8464555991, 8464687151, 8464818251, - 8464949323, 8465080427, 8465211529, 8465342603, 8465473699, 8465604799, 8465735899, - 8465866991, 8465998109, 8466129197, 8466260269, 8466391397, 8466522473, 8466653549, - 8466784649, 8466915799, 8467046891, 8467177973, 8467309063, 8467440143, 8467571227, - 8467702343, 8467833419, 8467964569, 8468095673, 8468226749, 8468357839, 8468488981, - 8468620067, 8468751191, 8468882269, 8469013387, 8469144491, 8469275599, 8469406691, - 8469537773, 8469668873, 8469800011, 8469931087, 8470062173, 8470193257, 8470324337, - 8470455439, 8470586513, 8470717589, 8470848671, 8470979743, 8471110849, 8471241923, - 8471373059, 8471504131, 8471635213, 8471766323, 8471897443, 8472028519, 8472159607, - 8472290681, 8472421777, 8472552863, 8472683939, 8472815023, 8472946109, 8473077181, - 8473208309, 8473339423, 8473470517, 8473601593, 8473732679, 8473863767, 8473994869, - 8474125969, 8474257063, 8474388179, 8474519279, 8474650381, 8474781487, 8474912581, - 8475043669, 8475174761, 8475305837, 8475436919, 8475568001, 8475699073, 8475830149, - 8475961229, 8476092341, 8476223461, 8476354553, 8476485649, 8476616723, 8476747801, - 8476878881, 8477009971, 8477141083, 8477272157, 8477403229, 8477534363, 8477665447, - 8477796533, 8477927609, 8478058733, 8478189809, 8478320911, 8478451997, 8478583109, - 8478714203, 8478845303, 8478976399, 8479107499, 8479238611, 8479369697, 8479500833, - 8479631939, 8479763011, 8479894097, 8480025179, 8480156261, 8480287349, 8480418421, - 8480549513, 8480680613, 8480811721, 8480942801, 8481073873, 8481204997, 8481336113, - 8481467213, 8481598429, 8481729533, 8481860633, 8481991733, 8482122871, 8482253947, - 8482385057, 8482516151, 8482647241, 8482778347, 8482909433, 8483040521, 8483171639, - 8483302717, 8483433841, 8483564917, 8483696033, 8483827111, 8483958229, 8484089303, - 8484220411, 8484351487, 8484482563, 8484613637, 8484744721, 8484875807, 8485006927, - 8485138019, 8485269119, 8485400239, 8485531319, 8485662391, 8485793473, 8485924547, - 8486055637, 8486186749, 8486317823, 8486448899, 8486579987, 8486711069, 8486842207, - 8486973283, 8487104369, 8487235447, 8487366533, 8487497611, 8487628691, 8487759773, - 8487890867, 8488021999, 8488153073, 8488284163, 8488415237, 8488546321, 8488677497, - 8488808569, 8488939649, 8489070731, 8489201827, 8489332903, 8489463989, 8489595061, - 8489726171, 8489857283, 8489988359, 8490119471, 8490250583, 8490381659, 8490512747, - 8490643841, 8490774917, 8490906001, 8491037111, 8491168207, 8491299283, 8491430359, - 8491561459, 8491692533, 8491823633, 8491954711, 8492085787, 8492216867, 8492347949, - 8492479027, 8492610121, 8492741219, 8492872303, 8493003377, 8493134459, 8493265541, - 8493396617, 8493527719, 8493658853, 8493789947, 8493921019, 8494052117, 8494183189, - 8494314271, 8494445357, 8494576429, 8494707503, 8494838593, 8494969667, 8495100763, - 8495231851, 8495362937, 8495494009, 8495625109, 8495756201, 8495887277, 8496018373, - 8496149461, 8496280543, 8496411617, 8496542711, 8496673793, 8496804871, 8496935957, - 8497067063, 8497198139, 8497329221, 8497460327, 8497591409, 8497722487, 8497853627, - 8497984741, 8498115817, 8498246947, 8498378023, 8498509099, 8498640193, 8498771279, - 8498902351, 8499033449, 8499164521, 8499295709, 8499426797, 8499557903, 8499688987, - 8499820081, 8499951157, 8500082237, 8500213343, 8500344427, 8500475513, 8500606603, - 8500737727, 8500868833, 8500999907, 8501130991, 8501262079, 8501393203, 8501524279, - 8501655401, 8501786507, 8501917579, 8502048703, 8502179797, 8502310871, 8502441943, - 8502573029, 8502704123, 8502835249, 8502966323, 8503097399, 8503228507, 8503359583, - 8503490683, 8503621771, 8503752863, 8503883951, 8504015027, 8504146117, 8504277211, - 8504408317, 8504539451, 8504670547, 8504801623, 8504932769, 8505063857, 8505194947, - 8505326023, 8505457111, 8505588187, 8505719269, 8505850349, 8505981439, 8506112513, - 8506243591, 8506374707, 8506505783, 8506636861, 8506767947, 8506899019, 8507030093, - 8507161171, 8507292257, 8507423363, 8507554439, 8507685517, 8507816621, 8507947771, - 8508078847, 8508209923, 8508341011, 8508472153, 8508603253, 8508734327, 8508865427, - 8508996521, 8509127593, 8509258669, 8509389781, 8509520911, 8509652003, 8509783129, - 8509914211, 8510045311, 8510176393, 8510307473, 8510438569, 8510569643, 8510700749, - 8510831837, 8510962937, 8511094027, 8511225103, 8511356197, 8511487279, 8511618373, - 8511749459, 8511880543, 8512011617, 8512142711, 8512273799, 8512404893, 8512536013, - 8512667089, 8512798169, 8512929247, 8513060323, 8513191417, 8513322523, 8513453621, - 8513584693, 8513715797, 8513846879, 8513977951, 8514109027, 8514240109, 8514371183, - 8514502279, 8514633371, 8514764471, 8514895547, 8515026629, 8515157719, 8515288799, - 8515419877, 8515550951, 8515682033, 8515813109, 8515944197, 8516075287, 8516206397, - 8516337497, 8516468581, 8516599687, 8516730793, 8516861879, 8516992973, 8517124069, - 8517255151, 8517386309, 8517517397, 8517648479, 8517779581, 8517910657, 8518041739, - 8518172837, 8518303909, 8518435073, 8518566149, 8518697227, 8518828319, 8518959457, - 8519090539, 8519221649, 8519352739, 8519483837, 8519614913, 8519745989, 8519877061, - 8520008149, 8520139223, 8520270323, 8520401447, 8520532519, 8520663607, 8520794687, - 8520925813, 8521056917, 8521187993, 8521319117, 8521450199, 8521581281, 8521712389, - 8521843471, 8521974553, 8522105639, 8522236771, 8522367851, 8522498923, 8522630003, - 8522761099, 8522892223, 8523023317, 8523154397, 8523285473, 8523416557, 8523547639, - 8523678763, 8523809863, 8523940951, 8524072027, 8524203101, 8524334177, 8524465277, - 8524596359, 8524727501, 8524858579, 8524989701, 8525120777, 8525251907, 8525383081, - 8525514157, 8525645251, 8525776411, 8525907527, 8526038639, 8526169711, 8526300823, - 8526431899, 8526562973, 8526694061, 8526825169, 8526956257, 8527087333, 8527218419, - 8527349497, 8527480583, 8527611661, 8527742761, 8527873841, 8528004913, 8528135989, - 8528267071, 8528398181, 8528529263, 8528660353, 8528791487, 8528922587, 8529053677, - 8529184771, 8529315853, 8529446927, 8529578003, 8529709093, 8529840169, 8529971243, - 8530102327, 8530233401, 8530364473, 8530495573, 8530626677, 8530757761, 8530888897, - 8531019977, 8531151061, 8531282161, 8531413271, 8531544347, 8531675441, 8531806523, - 8531937619, 8532068771, 8532199861, 8532330997, 8532462073, 8532593161, 8532724247, - 8532855337, 8532986417, 8533117529, 8533248601, 8533379677, 8533510763, 8533641859, - 8533772941, 8533904033, 8534035109, 8534166187, 8534297263, 8534428337, 8534559409, - 8534690497, 8534821579, 8534952659, 8535083819, 8535214913, 8535345989, 8535477107, - 8535608197, 8535739297, 8535870373, 8536001447, 8536132523, 8536263629, 8536394719, - 8536525819, 8536656893, 8536788019, 8536919123, 8537050199, 8537181271, 8537312353, - 8537443433, 8537574533, 8537705663, 8537836771, 8537967853, 8538098941, 8538230047, - 8538361121, 8538492203, 8538623279, 8538754351, 8538885449, 8539016527, 8539147621, - 8539278739, 8539409821, 8539540903, 8539671983, 8539803071, 8539934171, 8540065309, - 8540196383, 8540327489, 8540458567, 8540589643, 8540720717, 8540851793, 8540982899, - 8541114013, 8541245113, 8541376189, 8541507269, 8541638359, 8541769441, 8541900527, - 8542031611, 8542162687, 8542293761, 8542424857, 8542555991, 8542687067, 8542818157, - 8542949251, 8543080327, 8543211419, 8543342491, 8543473571, 8543604649, 8543735723, - 8543866873, 8543997983, 8544129067, 8544260141, 8544391243, 8544522347, 8544653471, - 8544784597, 8544915677, 8545046767, 8545177847, 8545309027, 8545440149, 8545571227, - 8545702331, 8545833493, 8545964591, 8546095667, 8546226751, 8546357837, 8546488913, - 8546620007, 8546751097, 8546882299, 8547013373, 8547144449, 8547275563, 8547406643, - 8547537731, 8547668819, 8547799891, 8547930977, 8548062097, 8548193209, 8548324331, - 8548455431, 8548586503, 8548717591, 8548848673, 8548979753, 8549110837, 8549241913, - 8549372989, 8549504069, 8549635183, 8549766289, 8549897383, 8550028457, 8550159533, - 8550290611, 8550421687, 8550552761, 8550683893, 8550814969, 8550946069, 8551077203, - 8551208311, 8551339393, 8551470469, 8551601557, 8551732681, 8551863757, 8551994837, - 8552125913, 8552257001, 8552388079, 8552519159, 8552650247, 8552781319, 8552912429, - 8553043507, 8553174613, 8553305737, 8553436819, 8553567923, 8553699001, 8553830099, - 8553961181, 8554092269, 8554223347, 8554354447, 8554485523, 8554616641, 8554747741, - 8554878847, 8555009929, 8555141009, 8555272091, 8555403167, 8555534279, 8555665379, - 8555796451, 8555927543, 8556058631, 8556189703, 8556320777, 8556451867, 8556582961, - 8556714043, 8556845117, 8556976213, 8557107329, 8557238407, 8557369481, 8557500577, - 8557631653, 8557762727, 8557893833, 8558024971, 8558156059, 8558287139, 8558418223, - 8558549323, 8558680399, 8558811479, 8558942591, 8559073667, 8559204743, 8559335833, - 8559466907, 8559597989, 8559729071, 8559860161, 8559991241, 8560122371, 8560253453, - 8560384531, 8560515611, 8560646723, 8560777829, 8560908901, 8561039987, 8561171071, - 8561302157, 8561433229, 8561564311, 8561695391, 8561826463, 8561957539, 8562088631, - 8562219719, 8562350801, 8562481877, 8562612953, 8562744031, 8562875117, 8563006201, - 8563137293, 8563268369, 8563399451, 8563530529, 8563661657, 8563792813, 8563923889, - 8564054969, 8564186047, 8564317141, 8564448253, 8564579333, 8564710423, 8564841497, - 8564972579, 8565103661, 8565234749, 8565365863, 8565496949, 8565628031, 8565759119, - 8565890219, 8566021291, 8566152377, 8566283519, 8566414657, 8566545737, 8566676819, - 8566807937, 8566939009, 8567070091, 8567201171, 8567332247, 8567463323, 8567594417, - 8567725493, 8567856581, 8567987663, 8568118739, 8568249821, 8568380893, 8568511967, - 8568643049, 8568774157, 8568905237, 8569036313, 8569167389, 8569298503, 8569429577, - 8569560667, 8569691743, 8569822817, 8569953901, 8570084987, 8570216111, 8570347183, - 8570478283, 8570609363, 8570740481, 8570871559, 8571002633, 8571133771, 8571264869, - 8571395951, 8571527051, 8571658129, 8571789221, 8571920297, 8572051379, 8572182601, - 8572313677, 8572444781, 8572575859, 8572706959, 8572838041, 8572969127, 8573100229, - 8573231311, 8573362397, 8573493469, 8573624551, 8573755627, 8573886707, 8574017819, - 8574148901, 8574279991, 8574411089, 8574542173, 8574673259, 8574804349, 8574935431, - 8575066537, 8575197637, 8575328711, 8575459801, 8575590883, 8575721989, 8575853093, - 8575984187, 8576115281, 8576246387, 8576377483, 8576508557, 8576639647, 8576770723, - 8576901821, 8577032921, 8577163993, 8577295081, 8577426167, 8577557249, 8577688363, - 8577819449, 8577950531, 8578081613, 8578212689, 8578343821, 8578474903, 8578605983, - 8578737067, 8578868149, 8578999223, 8579130311, 8579261423, 8579392513, 8579523613, - 8579654701, 8579785783, 8579916883, 8580047963, 8580179057, 8580310129, 8580441239, - 8580572317, 8580703393, 8580834469, 8580965551, 8581096627, 8581227727, 8581358801, - 8581489901, 8581620979, 8581752061, 8581883147, 8582014237, 8582145323, 8582276399, - 8582407489, 8582538571, 8582669651, 8582800747, 8582931869, 8583062953, 8583194041, - 8583325129, 8583456239, 8583587321, 8583718397, 8583849479, 8583980563, 8584111643, - 8584242739, 8584373857, 8584504937, 8584636009, 8584767109, 8584898207, 8585029309, - 8585160383, 8585291459, 8585422579, 8585553653, 8585684729, 8585815807, 8585946881, - 8586077989, 8586209087, 8586340163, 8586471253, 8586602327, 8586733417, 8586864497, - 8586995569, 8587126643, 8587257733, 8587388807, 8587519879, 8587650983, 8587782061, - 8587913153, 8588044261, 8588175353, 8588306431, 8588437531, 8588568607, 8588699687, - 8588830769, 8588961947, 8589093109, 8589224183, 8589355261, 8589486337, 8589617431, - 8589748511, 8589879583, 8590010701, 8590141789, 8590272863, 8590403971, 8590535089, - 8590666169, 8590797253, 8590928341, 8591059417, 8591190511, 8591321587, 8591452711, - 8591583787, 8591714867, 8591845949, 8591977049, 8592108121, 8592239203, 8592370277, - 8592501349, 8592632429, 8592763511, 8592894593, 8593025681, 8593156763, 8593287839, - 8593418923, 8593550011, 8593681121, 8593812211, 8593943291, 8594074367, 8594205463, - 8594336537, 8594467627, 8594598703, 8594729807, 8594860889, 8594991989, 8595123079, - 8595254159, 8595385237, 8595516313, 8595647387, 8595778501, 8595909587, 8596040659, - 8596171733, 8596302823, 8596433897, 8596565009, 8596696093, 8596827167, 8596958243, - 8597089357, 8597220449, 8597351527, 8597482601, 8597613683, 8597744759, 8597875837, - 8598006917, 8598138013, 8598269093, 8598400193, 8598531313, 8598662431, 8598793519, - 8598924611, 8599055687, 8599186759, 8599317851, 8599448941, 8599580021, 8599711111, - 8599842193, 8599973273, 8600104397, 8600235473, 8600366557, 8600497643, 8600628721, - 8600759801, 8600890919, 8601021991, 8601153091, 8601284213, 8601415301, 8601546379, - 8601677489, 8601808603, 8601939679, 8602070767, 8602201877, 8602332961, 8602464053, - 8602595159, 8602726241, 8602857313, 8602988389, 8603119463, 8603250547, 8603381681, - 8603512769, 8603643857, 8603774941, 8603906039, 8604037111, 8604168211, 8604299293, - 8604430369, 8604561451, 8604692531, 8604823603, 8604954689, 8605085771, 8605216883, - 8605348027, 8605479121, 8605610213, 8605741321, 8605872421, 8606003501, 8606134591, - 8606265667, 8606396753, 8606527837, 8606658989, 8606790079, 8606921179, 8607052253, - 8607183373, 8607314453, 8607445621, 8607576701, 8607707851, 8607838927, 8607970001, - 8608101077, 8608232153, 8608363241, 8608494319, 8608625407, 8608756487, 8608887559, - 8609018641, 8609149721, 8609280793, 8609411887, 8609542993, 8609674069, 8609805163, - 8609936267, 8610067339, 8610198431, 8610329587, 8610460669, 8610591757, 8610722873, - 8610853961, 8610985037, 8611116113, 8611247221, 8611378313, 8611509481, 8611640621, - 8611771811, 8611902883, 8612034091, 8612165183, 8612296291, 8612427449, 8612558531, - 8612689619, 8612820691, 8612951777, 8613082867, 8613213953, 8613345047, 8613476119, - 8613607199, 8613738277, 8613869351, 8614000459, 8614131553, 8614262639, 8614393721, - 8614524803, 8614655893, 8614786991, 8614918097, 8615049173, 8615180269, 8615311343, - 8615442481, 8615573567, 8615704673, 8615835763, 8615966857, 8616097939, 8616229033, - 8616360113, 8616491209, 8616622331, 8616753407, 8616884489, 8617015571, 8617146649, - 8617277737, 8617408837, 8617539913, 8617671017, 8617802107, 8617933183, 8618064271, - 8618195347, 8618326421, 8618457493, 8618588567, 8618719649, 8618850761, 8618981857, - 8619112961, 8619244079, 8619375151, 8619506299, 8619637373, 8619768499, 8619899581, - 8620030667, 8620161751, 8620292827, 8620423919, 8620554991, 8620686083, 8620817159, - 8620948241, 8621079319, 8621210407, 8621341483, 8621472569, 8621603677, 8621734763, - 8621865871, 8621996953, 8622128029, 8622259103, 8622390187, 8622521269, 8622652343, - 8622783439, 8622914519, 8623045603, 8623176677, 8623307753, 8623438849, 8623569937, - 8623701071, 8623832149, 8623963273, 8624094359, 8624225453, 8624356549, 8624487631, - 8624618741, 8624749817, 8624880911, 8625012001, 8625143143, 8625274253, 8625405343, - 8625536431, 8625667543, 8625798631, 8625929717, 8626060811, 8626191943, 8626323031, - 8626454117, 8626585193, 8626716277, 8626847357, 8626978429, 8627109523, 8627240647, - 8627371757, 8627502841, 8627633921, 8627765009, 8627896087, 8628027173, 8628158293, - 8628289379, 8628420457, 8628551531, 8628682613, 8628813703, 8628944827, 8629075933, - 8629207043, 8629338119, 8629469207, 8629600283, 8629731367, 8629862443, 8629993531, - 8630124623, 8630255731, 8630386813, 8630517901, 8630648987, 8630780069, 8630911141, - 8631042229, 8631173303, 8631304391, 8631435467, 8631566543, 8631697639, 8631828719, - 8631959801, 8632090897, 8632222021, 8632353127, 8632484209, 8632615307, 8632746401, - 8632877479, 8633008567, 8633139667, 8633270783, 8633401859, 8633532983, 8633664131, - 8633795227, 8633926303, 8634057433, 8634188527, 8634319607, 8634450817, 8634581897, - 8634712979, 8634844079, 8634975161, 8635106239, 8635237343, 8635368439, 8635499519, - 8635630667, 8635761749, 8635892843, 8636023931, 8636155027, 8636286103, 8636417201, - 8636548289, 8636679413, 8636810489, 8636941661, 8637072793, 8637203881, 8637335059, - 8637466151, 8637597259, 8637728381, 8637859481, 8637990601, 8638121761, 8638252871, - 8638383947, 8638515113, 8638646189, 8638777283, 8638908359, 8639039441, 8639170513, - 8639301701, 8639432783, 8639563861, 8639694937, 8639826059, 8639957189, 8640088273, - 8640219361, 8640350441, 8640481519, 8640612613, 8640743687, 8640874819, 8641005913, - 8641137019, 8641268159, 8641399231, 8641530323, 8641661417, 8641792501, 8641923583, - 8642054657, 8642185729, 8642316811, 8642447899, 8642578979, 8642710057, 8642841161, - 8642972237, 8643103321, 8643234407, 8643365503, 8643496613, 8643627689, 8643758771, - 8643889871, 8644020961, 8644152037, 8644283147, 8644414237, 8644545323, 8644676419, - 8644807537, 8644938613, 8645069689, 8645200789, 8645331869, 8645462941, 8645594017, - 8645725189, 8645856313, 8645987387, 8646118487, 8646249569, 8646380641, 8646511781, - 8646642859, 8646773957, 8646905063, 8647036159, 8647167241, 8647298347, 8647429421, - 8647560499, 8647691573, 8647822717, 8647953803, 8648084899, 8648215973, 8648347051, - 8648478133, 8648609209, 8648740307, 8648871379, 8649002459, 8649133589, 8649264691, - 8649395819, 8649526931, 8649658009, 8649789089, 8649920197, 8650051271, 8650182349, - 8650313423, 8650444499, 8650575581, 8650706681, 8650837801, 8650968899, 8651099983, - 8651231059, 8651362147, 8651493229, 8651624321, 8651755423, 8651886497, 8652017599, - 8652148711, 8652279809, 8652410909, 8652541987, 8652673061, 8652804161, 8652935267, - 8653066339, 8653197419, 8653328527, 8653459637, 8653590713, 8653721789, 8653852927, - 8653984007, 8654115089, 8654246191, 8654377301, 8654508403, 8654639561, 8654770637, - 8654901713, 8655032791, 8655163901, 8655295001, 8655426107, 8655557203, 8655688303, - 8655819397, 8655950477, 8656081583, 8656212659, 8656343743, 8656474829, 8656605929, - 8656737013, 8656868107, 8656999193, 8657130299, 8657261377, 8657392501, 8657523593, - 8657654713, 8657785813, 8657916901, 8658047977, 8658179063, 8658310147, 8658441221, - 8658572309, 8658703387, 8658834493, 8658965569, 8659096681, 8659227767, 8659358857, - 8659489933, 8659621039, 8659752119, 8659883257, 8660014333, 8660145407, 8660276491, - 8660407583, 8660538673, 8660669747, 8660800823, 8660931913, 8661063007, 8661194123, - 8661325213, 8661456301, 8661587447, 8661718523, 8661849607, 8661980729, 8662111807, - 8662242889, 8662373977, 8662505087, 8662636201, 8662767293, 8662898417, 8663029489, - 8663160617, 8663291719, 8663422829, 8663553917, 8663685029, 8663816173, 8663947247, - 8664078439, 8664209539, 8664340627, 8664471743, 8664602819, 8664733897, 8664864979, - 8664996061, 8665127143, 8665258249, 8665389347, 8665520419, 8665651493, 8665782571, - 8665913653, 8666044769, 8666175841, 8666306917, 8666437993, 8666569103, 8666700187, - 8666831263, 8666962393, 8667093499, 8667224603, 8667355687, 8667486769, 8667617869, - 8667748963, 8667880037, 8668011113, 8668142243, 8668273321, 8668404449, 8668535597, - 8668666681, 8668797757, 8668928833, 8669059913, 8669191007, 8669322097, 8669453203, - 8669584283, 8669715359, 8669846441, 8669977597, 8670108677, 8670239759, 8670370853, - 8670501929, 8670633019, 8670764093, 8670895183, 8671026269, 8671157351, 8671288459, - 8671419553, 8671550627, 8671681699, 8671812827, 8671943909, 8672074987, 8672206063, - 8672337173, 8672468257, 8672599361, 8672730457, 8672861563, 8672992703, 8673123799, - 8673254873, 8673385949, 8673517031, 8673648103, 8673779227, 8673910337, 8674041421, - 8674172537, 8674303619, 8674434721, 8674565819, 8674696907, 8674827979, 8674959091, - 8675090201, 8675221273, 8675352377, 8675483473, 8675614579, 8675745697, 8675876819, - 8676007891, 8676139037, 8676270137, 8676401213, 8676532289, 8676663383, 8676794491, - 8676925603, 8677056709, 8677187797, 8677318907, 8677450007, 8677581091, 8677712191, - 8677843271, 8677974373, 8678105473, 8678236549, 8678367647, 8678498743, 8678629879, - 8678760991, 8678892127, 8679023219, 8679154303, 8679285379, 8679416479, 8679547561, - 8679678649, 8679809783, 8679940939, 8680072039, 8680203187, 8680334263, 8680465337, - 8680596413, 8680727519, 8680858603, 8680989697, 8681120801, 8681251883, 8681382973, - 8681514047, 8681645149, 8681776289, 8681907391, 8682038503, 8682169583, 8682300661, - 8682431773, 8682562877, 8682693953, 8682825071, 8682956143, 8683087219, 8683218293, - 8683349377, 8683480489, 8683611623, 8683742707, 8683873789, 8684004869, 8684135969, - 8684267069, 8684398147, 8684529229, 8684660351, 8684791433, 8684922527, 8685053599, - 8685184681, 8685315773, 8685446849, 8685577961, 8685709063, 8685840143, 8685971219, - 8686102309, 8686233433, 8686364507, 8686495591, 8686626671, 8686757743, 8686888919, - 8687019997, 8687151073, 8687282147, 8687413277, 8687544367, 8687675509, 8687806591, - 8687937667, 8688068749, 8688199867, 8688330943, 8688462043, 8688593129, 8688724201, - 8688855283, 8688986359, 8689117453, 8689248527, 8689379623, 8689510727, 8689641823, - 8689772929, 8689904033, 8690035147, 8690166239, 8690297327, 8690428457, 8690559539, - 8690690621, 8690821693, 8690952769, 8691083861, 8691214993, 8691346123, 8691477203, - 8691608329, 8691739423, 8691870497, 8692001603, 8692132693, 8692263791, 8692394891, - 8692525993, 8692657093, 8692788253, 8692919363, 8693050439, 8693181547, 8693312647, - 8693443741, 8693574823, 8693705903, 8693837003, 8693968097, 8694099181, 8694230263, - 8694361349, 8694492437, 8694623527, 8694754681, 8694885757, 8695016879, 8695147957, - 8695279037, 8695410109, 8695541209, 8695672283, 8695803367, 8695934447, 8696065523, - 8696196623, 8696327699, 8696458787, 8696589859, 8696720933, 8696852009, 8696983109, - 8697114191, 8697245267, 8697376357, 8697507473, 8697638557, 8697769637, 8697900709, - 8698031803, 8698162877, 8698293953, 8698425041, 8698556131, 8698687213, 8698818313, - 8698949411, 8699080499, 8699211643, 8699342719, 8699473799, 8699604877, 8699735951, - 8699867051, 8699998123, 8700129197, 8700260273, 8700391367, 8700522443, 8700653519, - 8700784613, 8700915697, 8701046779, 8701177931, 8701309051, 8701440149, 8701571267, - 8701702381, 8701833479, 8701964561, 8702095669, 8702226763, 8702357893, 8702488979, - 8702620051, 8702751131, 8702882203, 8703013279, 8703144353, 8703275453, 8703406559, - 8703537631, 8703668711, 8703799787, 8703930889, 8704061987, 8704193077, 8704324151, - 8704455223, 8704586353, 8704717429, 8704848557, 8704979663, 8705110753, 8705241847, - 8705372939, 8705504023, 8705635121, 8705766217, 8705897293, 8706028369, 8706159481, - 8706290603, 8706421681, 8706552763, 8706683857, 8706814943, 8706946019, 8707077121, - 8707208197, 8707339283, 8707470383, 8707601477, 8707732567, 8707863649, 8707994731, - 8708125817, 8708256911, 8708388049, 8708519167, 8708650259, 8708781343, 8708912417, - 8709043489, 8709174569, 8709305641, 8709436717, 8709567809, 8709698897, 8709829969, - 8709961049, 8710092121, 8710223201, 8710354291, 8710485389, 8710616461, 8710747559, - 8710878637, 8711009711, 8711140813, 8711271911, 8711402989, 8711534063, 8711665153, - 8711796241, 8711927363, 8712058447, 8712189547, 8712320647, 8712451733, 8712582817, - 8712713963, 8712845039, 8712976121, 8713107199, 8713238279, 8713369351, 8713500427, - 8713631513, 8713762591, 8713893701, 8714024797, 8714155897, 8714286979, 8714418071, - 8714549147, 8714680231, 8714811307, 8714942471, 8715073583, 8715204661, 8715335737, - 8715466813, 8715597899, 8715728981, 8715860077, 8715991177, 8716122253, 8716253327, - 8716384403, 8716515527, 8716646669, 8716777753, 8716908829, 8717039909, 8717170991, - 8717302117, 8717433191, 8717564263, 8717695367, 8717826451, 8717957537, 8718088619, - 8718219709, 8718350801, 8718481883, 8718612961, 8718744101, 8718875233, 8719006321, - 8719137409, 8719268489, 8719399561, 8719530641, 8719661719, 8719792801, 8719923889, - 8720054963, 8720186053, 8720317141, 8720448223, 8720579317, 8720710403, 8720841511, - 8720972593, 8721103679, 8721234833, 8721365927, 8721497009, 8721628093, 8721759217, - 8721890293, 8722021367, 8722152443, 8722283519, 8722414601, 8722545703, 8722676827, - 8722807903, 8722938979, 8723070101, 8723201183, 8723332271, 8723463361, 8723594437, - 8723725519, 8723856613, 8723987707, 8724118787, 8724249871, 8724380957, 8724512033, - 8724643121, 8724774209, 8724905311, 8725036387, 8725167481, 8725298563, 8725429649, - 8725560751, 8725691837, 8725822939, 8725954037, 8726085133, 8726216209, 8726347319, - 8726478407, 8726609483, 8726740637, 8726871733, 8727002813, 8727133901, 8727265013, - 8727396101, 8727527189, 8727658267, 8727789373, 8727920473, 8728051547, 8728182637, - 8728313729, 8728444811, 8728575899, 8728706999, 8728838099, 8728969187, 8729100299, - 8729231411, 8729362493, 8729493587, 8729624671, 8729755747, 8729886857, 8730017941, - 8730149023, 8730280123, 8730411197, 8730542297, 8730673381, 8730804469, 8730935569, - 8731066651, 8731197743, 8731328833, 8731459963, 8731591049, 8731722127, 8731853203, - 8731984321, 8732115401, 8732246473, 8732377559, 8732508641, 8732639731, 8732770807, - 8732901893, 8733032969, 8733164059, 8733295133, 8733426211, 8733557297, 8733688393, - 8733819487, 8733950569, 8734081669, 8734212787, 8734343881, 8734474981, 8734606057, - 8734737161, 8734868249, 8734999337, 8735130413, 8735261501, 8735392573, 8735523683, - 8735654779, 8735785879, 8735916953, 8736048037, 8736179131, 8736310237, 8736441323, - 8736572431, 8736703537, 8736834629, 8736965723, 8737096847, 8737227973, 8737359077, - 8737490149, 8737621231, 8737752313, 8737883393, 8738014469, 8738145569, 8738276647, - 8738407729, 8738538811, 8738669917, 8738801009, 8738932109, 8739063217, 8739194323, - 8739325409, 8739456493, 8739587569, 8739718693, 8739849791, 8739980881, 8740111957, - 8740243069, 8740374157, 8740505233, 8740636319, 8740767403, 8740898501, 8741029573, - 8741160661, 8741291771, 8741422847, 8741553937, 8741685019, 8741816099, 8741947183, - 8742078259, 8742209341, 8742340433, 8742471559, 8742602633, 8742733763, 8742864841, - 8742995917, 8743126993, 8743258067, 8743389209, 8743520297, 8743651393, 8743782503, - 8743913597, 8744044691, 8744175773, 8744306899, 8744437979, 8744569061, 8744700143, - 8744831243, 8744962339, 8745093421, 8745224549, 8745355621, 8745486713, 8745617789, - 8745748883, 8745879997, 8746011103, 8746142183, 8746273259, 8746404343, 8746535477, - 8746666589, 8746797671, 8746928753, 8747059831, 8747190937, 8747322019, 8747453107, - 8747584199, 8747715331, 8747846423, 8747977519, 8748108619, 8748239701, 8748370801, - 8748501893, 8748632999, 8748764117, 8748895193, 8749026287, 8749157359, 8749288447, - 8749419583, 8749550657, 8749681757, 8749812859, 8749943941, 8750075021, 8750206111, - 8750337187, 8750468267, 8750599357, 8750730449, 8750861531, 8750992637, 8751123727, - 8751254801, 8751385913, 8751517001, 8751648089, 8751779161, 8751910253, 8752041329, - 8752172431, 8752303513, 8752434589, 8752565671, 8752696753, 8752827829, 8752959029, - 8753090131, 8753221223, 8753352313, 8753483393, 8753614489, 8753745599, 8753876683, - 8754007771, 8754138919, 8754269999, 8754401077, 8754532183, 8754663263, 8754794353, - 8754925427, 8755056521, 8755187657, 8755318739, 8755449811, 8755580929, 8755712003, - 8755843079, 8755974209, 8756105287, 8756236373, 8756367461, 8756498561, 8756629649, - 8756760737, 8756891831, 8757022907, 8757153989, 8757285071, 8757416147, 8757547231, - 8757678323, 8757809399, 8757940487, 8758071571, 8758202669, 8758333747, 8758464823, - 8758595897, 8758726979, 8758858063, 8758989163, 8759120243, 8759251331, 8759382473, - 8759513549, 8759644637, 8759775721, 8759906803, 8760037889, 8760168979, 8760300067, - 8760431159, 8760562249, 8760693349, 8760824431, 8760955529, 8761086601, 8761217683, - 8761348793, 8761479931, 8761611013, 8761742123, 8761873217, 8762004301, 8762135381, - 8762266489, 8762397619, 8762528701, 8762659777, 8762790851, 8762921953, 8763053077, - 8763184153, 8763315229, 8763446333, 8763577439, 8763708517, 8763839599, 8763970727, - 8764101839, 8764232959, 8764364053, 8764495127, 8764626251, 8764757327, 8764888411, - 8765019533, 8765150609, 8765281687, 8765412763, 8765543837, 8765674933, 8765806031, - 8765937119, 8766068191, 8766199279, 8766330367, 8766461447, 8766592567, 8766723643, - 8766854737, 8766985817, 8767116899, 8767247989, 8767379081, 8767510159, 8767641277, - 8767772381, 8767903489, 8768034607, 8768165711, 8768296819, 8768427919, 8768559017, - 8768690089, 8768821163, 8768952271, 8769083371, 8769214469, 8769345547, 8769476627, - 8769607723, 8769738821, 8769869923, 8770000997, 8770132109, 8770263191, 8770394263, - 8770525349, 8770656421, 8770787503, 8770918589, 8771049673, 8771180773, 8771311847, - 8771442931, 8771574023, 8771705143, 8771836217, 8771967307, 8772098389, 8772229511, - 8772360593, 8772491669, 8772622741, 8772753851, 8772884957, 8773016059, 8773147151, - 8773278223, 8773409321, 8773540393, 8773671499, 8773802599, 8773933697, 8774064787, - 8774195867, 8774326973, 8774458079, 8774589179, 8774720263, 8774851387, 8774982467, - 8775113563, 8775244661, 8775375779, 8775506851, 8775637933, 8775769033, 8775900149, - 8776031249, 8776162327, 8776293419, 8776424497, 8776555573, 8776686671, 8776817747, - 8776948847, 8777079967, 8777211043, 8777342173, 8777473267, 8777604343, 8777735419, - 8777866501, 8777997589, 8778128683, 8778259781, 8778390877, 8778521963, 8778653047, - 8778784123, 8778915221, 8779046329, 8779177471, 8779308583, 8779439657, 8779570739, - 8779701863, 8779832951, 8779964029, 8780095127, 8780226229, 8780357329, 8780488433, - 8780619539, 8780750623, 8780881717, 8781012803, 8781143947, 8781275071, 8781406147, - 8781537227, 8781668309, 8781799387, 8781930467, 8782061581, 8782192663, 8782323751, - 8782454831, 8782585909, 8782717001, 8782848119, 8782979201, 8783110291, 8783241407, - 8783372513, 8783503669, 8783634751, 8783765827, 8783896907, 8784027979, 8784159061, - 8784290257, 8784421333, 8784552479, 8784683569, 8784814681, 8784945769, 8785076921, - 8785208021, 8785339093, 8785470179, 8785601281, 8785732363, 8785863439, 8785994531, - 8786125681, 8786256767, 8786387887, 8786518967, 8786650043, 8786781169, 8786912243, - 8787043333, 8787174439, 8787305521, 8787436631, 8787567713, 8787698791, 8787829867, - 8787960947, 8788092029, 8788223107, 8788354199, 8788485317, 8788616399, 8788747481, - 8788878557, 8789009629, 8789140727, 8789271817, 8789402903, 8789533979, 8789665051, - 8789796139, 8789927249, 8790058379, 8790189467, 8790320549, 8790451639, 8790582719, - 8790713797, 8790844883, 8790975989, 8791107071, 8791238161, 8791369243, 8791500323, - 8791631423, 8791762547, 8791893637, 8792024711, 8792155787, 8792286863, 8792417971, - 8792549053, 8792680187, 8792811259, 8792942363, 8793073439, 8793204527, 8793335647, - 8793466723, 8793597823, 8793728947, 8793860029, 8793991139, 8794122257, 8794253381, - 8794384519, 8794515601, 8794646713, 8794777799, 8794908907, 8795039983, 8795171059, - 8795302147, 8795433223, 8795564333, 8795695411, 8795826493, 8795957567, 8796088663, - 8796219739, 8796350831, 8796481913, 8796612997, 8796744071, 8796875183, 8797006291, - 8797137379, 8797268497, 8797399571, 8797530647, 8797661723, 8797792811, 8797923949, - 8798055023, 8798186101, 8798317183, 8798448257, 8798579329, 8798710409, 8798841517, - 8798972639, 8799103727, 8799234827, 8799365947, 8799497029, 8799628109, 8799759191, - 8799890263, 8800021357, 8800152443, 8800283533, 8800414631, 8800545731, 8800676839, - 8800807919, 8800939019, 8801070137, 8801201209, 8801332307, 8801463379, 8801594497, - 8801725573, 8801856677, 8801987749, 8802118823, 8802249913, 8802381011, 8802512083, - 8802643189, 8802774269, 8802905351, 8803036447, 8803167547, 8803298659, 8803429793, - 8803560907, 8803691987, 8803823059, 8803954139, 8804085229, 8804216329, 8804347411, - 8804478521, 8804609629, 8804740727, 8804871851, 8805002923, 8805134029, 8805265121, - 8805396217, 8805527323, 8805658427, 8805789521, 8805920603, 8806051703, 8806182809, - 8806313891, 8806444987, 8806576061, 8806707139, 8806838269, 8806969361, 8807100473, - 8807231551, 8807362639, 8807493733, 8807624821, 8807755921, 8807887001, 8808018101, - 8808149183, 8808280303, 8808411383, 8808542467, 8808673541, 8808804629, 8808935717, - 8809066793, 8809197889, 8809328971, 8809460053, 8809591171, 8809722247, 8809853321, - 8809984397, 8810115481, 8810246573, 8810377663, 8810508781, 8810639863, 8810770939, - 8810902013, 8811033089, 8811164183, 8811295267, 8811426341, 8811557423, 8811688499, - 8811819613, 8811950699, 8812081823, 8812212917, 8812344011, 8812475141, 8812606219, - 8812737313, 8812868431, 8812999513, 8813130617, 8813261689, 8813392781, 8813523857, - 8813654951, 8813786057, 8813917129, 8814048223, 8814179299, 8814310391, 8814441497, - 8814572579, 8814703673, 8814834757, 8814965837, 8815096919, 8815227997, 8815359079, - 8815490153, 8815621261, 8815752389, 8815883467, 8816014553, 8816145643, 8816276719, - 8816407793, 8816538877, 8816669951, 8816801053, 8816932127, 8817063217, 8817194297, - 8817325399, 8817456481, 8817587567, 8817718643, 8817849737, 8817980813, 8818111909, - 8818243013, 8818374091, 8818505173, 8818636291, 8818767421, 8818898497, 8819029577, - 8819160653, 8819291737, 8819422811, 8819553889, 8819684971, 8819816077, 8819947151, - 8820078251, 8820209351, 8820340489, 8820471563, 8820602641, 8820733729, 8820864827, - 8820995899, 8821127047, 8821258133, 8821389221, 8821520293, 8821651387, 8821782491, - 8821913609, 8822044681, 8822175763, 8822306851, 8822437999, 8822569073, 8822700151, - 8822831239, 8822962319, 8823093407, 8823224483, 8823355621, 8823486697, 8823617837, - 8823748919, 8823879997, 8824011073, 8824142147, 8824273247, 8824404331, 8824535441, - 8824666517, 8824797677, 8824928773, 8825059853, 8825190929, 8825322007, 8825453081, - 8825584199, 8825715287, 8825846423, 8825977529, 8826108623, 8826239711, 8826370793, - 8826501869, 8826632981, 8826764087, 8826895171, 8827026259, 8827157387, 8827288493, - 8827419641, 8827550723, 8827681801, 8827812883, 8827943959, 8828075033, 8828206109, - 8828337187, 8828468279, 8828599387, 8828730461, 8828861563, 8828992643, 8829123727, - 8829254807, 8829385883, 8829516991, 8829648077, 8829779159, 8829910231, 8830041313, - 8830172389, 8830303519, 8830434601, 8830565677, 8830696753, 8830827853, 8830958953, - 8831090057, 8831221153, 8831352319, 8831483407, 8831614481, 8831745583, 8831876671, - 8832007783, 8832138857, 8832269977, 8832401077, 8832532153, 8832663227, 8832794323, - 8832925397, 8833056481, 8833187639, 8833318721, 8833449797, 8833580963, 8833712053, - 8833843163, 8833974239, 8834105333, 8834236417, 8834367499, 8834498573, 8834629669, - 8834760743, 8834891839, 8835022919, 8835154021, 8835285103, 8835416197, 8835547289, - 8835678421, 8835809519, 8835940601, 8836071697, 8836202783, 8836333871, 8836464953, - 8836596047, 8836727129, 8836858211, 8836989307, 8837120389, 8837251463, 8837382539, - 8837513617, 8837644721, 8837775797, 8837906879, 8838037963, 8838169051, 8838300131, - 8838431249, 8838562351, 8838693439, 8838824551, 8838955633, 8839086719, 8839217819, - 8839348909, 8839480043, 8839611149, 8839742257, 8839873363, 8840004451, 8840135527, - 8840266607, 8840397701, 8840528803, 8840659879, 8840790961, 8840922037, 8841053149, - 8841184223, 8841315323, 8841446401, 8841577519, 8841708607, 8841839693, 8841970789, - 8842101881, 8842232983, 8842364101, 8842495213, 8842626319, 8842757393, 8842888489, - 8843019587, 8843150683, 8843281763, 8843412863, 8843543957, 8843675033, 8843806133, - 8843937211, 8844068297, 8844199373, 8844330497, 8844461569, 8844592699, 8844723781, - 8844854897, 8844985973, 8845117049, 8845248149, 8845379251, 8845510337, 8845641437, - 8845772513, 8845903589, 8846034679, 8846165759, 8846296841, 8846427913, 8846558989, - 8846690119, 8846821201, 8846952293, 8847083383, 8847214457, 8847345541, 8847476623, - 8847607723, 8847738811, 8847869893, 8848000981, 8848132067, 8848263157, 8848394293, - 8848525379, 8848656463, 8848787573, 8848918651, 8849049733, 8849180917, 8849312027, - 8849443103, 8849574191, 8849705303, 8849836381, 8849967499, 8850098573, 8850229651, - 8850360751, 8850491827, 8850622903, 8850754001, 8850885077, 8851016159, 8851147237, - 8851278311, 8851409449, 8851540541, 8851671623, 8851802741, 8851933817, 8852064913, - 8852195993, 8852327083, 8852458157, 8852589259, 8852720341, 8852851421, 8852982497, - 8853113569, 8853244643, 8853375827, 8853506923, 8853638011, 8853769123, 8853900221, - 8854031297, 8854162397, 8854293491, 8854424603, 8854555681, 8854686769, 8854817857, - 8854948951, 8855080043, 8855211137, 8855342227, 8855473309, 8855604409, 8855735521, - 8855866609, 8855997719, 8856128797, 8856259877, 8856390967, 8856522043, 8856653119, - 8856784193, 8856915269, 8857046383, 8857177489, 8857308619, 8857439693, 8857570789, - 8857701887, 8857832969, 8857964051, 8858095139, 8858226229, 8858357309, 8858488391, - 8858619463, 8858750539, 8858881627, 8859012703, 8859143789, 8859274871, 8859405977, - 8859537059, 8859668227, 8859799301, 8859930377, 8860061459, 8860192543, 8860323617, - 8860454717, 8860585817, 8860716947, 8860848043, 8860979143, 8861110217, 8861241289, - 8861372393, 8861503477, 8861634553, 8861765629, 8861896721, 8862027833, 8862158909, - 8862289991, 8862421063, 8862552161, 8862683233, 8862814313, 8862945397, 8863076479, - 8863207559, 8863338647, 8863469737, 8863600819, 8863731967, 8863863089, 8863994177, - 8864125267, 8864256361, 8864387449, 8864518583, 8864649707, 8864780789, 8864911901, - 8865043007, 8865174091, 8865305179, 8865436253, 8865567341, 8865698467, 8865829541, - 8865960613, 8866091743, 8866222853, 8866353959, 8866485127, 8866616221, 8866747297, - 8866878413, 8867009497, 8867140589, 8867271661, 8867402741, 8867533813, 8867664889, - 8867795971, 8867927099, 8868058187, 8868189283, 8868320389, 8868451499, 8868582599, - 8868713671, 8868844819, 8868975893, 8869106989, 8869238083, 8869369163, 8869500271, - 8869631363, 8869762441, 8869893523, 8870024629, 8870155727, 8870286823, 8870417911, - 8870548987, 8870680073, 8870811203, 8870942287, 8871073397, 8871204499, 8871335597, - 8871466691, 8871597767, 8871728869, 8871860027, 8871991103, 8872122199, 8872253279, - 8872384363, 8872515439, 8872646537, 8872777609, 8872908703, 8873039831, 8873170903, - 8873302007, 8873433091, 8873564173, 8873695247, 8873826389, 8873957473, 8874088591, - 8874219701, 8874350789, 8874481877, 8874612959, 8874744037, 8874875131, 8875006211, - 8875137289, 8875268393, 8875399469, 8875530563, 8875661693, 8875792777, 8875923851, - 8876054927, 8876186057, 8876317139, 8876448223, 8876579303, 8876710379, 8876841503, - 8876972581, 8877103661, 8877234763, 8877365837, 8877496933, 8877628009, 8877759097, - 8877890191, 8878021267, 8878152407, 8878283483, 8878414561, 8878545653, 8878676749, - 8878807831, 8878938919, 8879070017, 8879201101, 8879332211, 8879463419, 8879594491, - 8879725577, 8879856649, 8879987737, 8880118823, 8880249899, 8880380981, 8880512057, - 8880643153, 8880774239, 8880905329, 8881036441, 8881167521, 8881298653, 8881429729, - 8881560817, 8881691933, 8881823039, 8881954127, 8882085221, 8882216323, 8882347423, - 8882478499, 8882609581, 8882740661, 8882871743, 8883002827, 8883134003, 8883265081, - 8883396161, 8883527239, 8883658331, 8883789419, 8883920491, 8884051613, 8884182689, - 8884313773, 8884444861, 8884575943, 8884707017, 8884838099, 8884969189, 8885100281, - 8885231353, 8885362441, 8885493517, 8885624599, 8885755691, 8885886767, 8886017843, - 8886148927, 8886280009, 8886411091, 8886542191, 8886673273, 8886804373, 8886935501, - 8887066583, 8887197659, 8887328759, 8887459837, 8887590919, 8887722007, 8887853083, - 8887984159, 8888115251, 8888246351, 8888377447, 8888508521, 8888639647, 8888770721, - 8888901797, 8889032869, 8889163979, 8889295091, 8889426197, 8889557273, 8889688349, - 8889819437, 8889950549, 8890081633, 8890212707, 8890343807, 8890474907, 8890606061, - 8890737133, 8890868219, 8890999321, 8891130421, 8891261513, 8891392597, 8891523691, - 8891654797, 8891785871, 8891916967, 8892048041, 8892179161, 8892310247, 8892441331, - 8892572419, 8892703499, 8892834583, 8892965657, 8893096747, 8893227829, 8893358983, - 8893490129, 8893621259, 8893752379, 8893883459, 8894014541, 8894145649, 8894276731, - 8894407829, 8894538911, 8894669983, 8894801057, 8894932133, 8895063241, 8895194323, - 8895325423, 8895456497, 8895587573, 8895718649, 8895849733, 8895980839, 8896111933, - 8896243007, 8896374083, 8896505183, 8896636267, 8896767343, 8896898441, 8897029513, - 8897160593, 8897291699, 8897422777, 8897553883, 8897684959, 8897816093, 8897947199, - 8898078281, 8898209363, 8898340523, 8898471641, 8898602717, 8898733801, 8898864881, - 8898995953, 8899127057, 8899258129, 8899389223, 8899520297, 8899651379, 8899782461, - 8899913599, 8900044679, 8900175769, 8900306851, 8900437933, 8900569021, 8900700181, - 8900831263, 8900962339, 8901093413, 8901224491, 8901355577, 8901486689, 8901617779, - 8901748883, 8901879971, 8902011047, 8902142189, 8902273267, 8902404341, 8902535417, - 8902666519, 8902797619, 8902928693, 8903059793, 8903190869, 8903321963, 8903453047, - 8903584141, 8903715217, 8903846309, 8903977393, 8904108511, 8904239593, 8904370681, - 8904501761, 8904632881, 8904764009, 8904895081, 8905026157, 8905157267, 8905288339, - 8905419437, 8905550587, 8905681667, 8905812743, 8905943843, 8906074921, 8906206003, - 8906337091, 8906468203, 8906599283, 8906730359, 8906861471, 8906992553, 8907123629, - 8907254723, 8907385813, 8907516899, 8907647971, 8907779047, 8907910147, 8908041281, - 8908172419, 8908303517, 8908434607, 8908565713, 8908696829, 8908828001, 8908959097, - 8909090191, 8909221291, 8909352371, 8909483447, 8909614529, 8909745671, 8909876753, - 8910007831, 8910138929, 8910270007, 8910401189, 8910532297, 8910663379, 8910794483, - 8910925579, 8911056659, 8911187749, 8911318831, 8911449907, 8911580981, 8911712123, - 8911843217, 8911974299, 8912105393, 8912236481, 8912367553, 8912498627, 8912629699, - 8912760809, 8912891899, 8913023003, 8913154093, 8913285179, 8913416261, 8913547333, - 8913678407, 8913809497, 8913940577, 8914071713, 8914202789, 8914333871, 8914464961, - 8914596049, 8914727123, 8914858217, 8914989289, 8915120377, 8915251453, 8915382527, - 8915513617, 8915644691, 8915775773, 8915906861, 8916037967, 8916169051, 8916300139, - 8916431239, 8916562337, 8916693497, 8916824591, 8916955669, 8917086769, 8917217843, - 8917348943, 8917480021, 8917611113, 8917742201, 8917873297, 8918004371, 8918135531, - 8918266661, 8918397743, 8918528819, 8918659903, 8918790989, 8918922079, 8919053161, - 8919184243, 8919315343, 8919446467, 8919577543, 8919708619, 8919839707, 8919970819, - 8920101899, 8920232987, 8920364071, 8920495169, 8920626263, 8920757347, 8920888517, - 8921019589, 8921150677, 8921281757, 8921412859, 8921543941, 8921675041, 8921806121, - 8921937209, 8922068321, 8922199393, 8922330467, 8922461591, 8922592691, 8922723763, - 8922854851, 8922985949, 8923117051, 8923248143, 8923379243, 8923510331, 8923641457, - 8923772537, 8923903627, 8924034737, 8924165813, 8924296921, 8924428091, 8924559187, - 8924690309, 8924821429, 8924952503, 8925083581, 8925214673, 8925345791, 8925476863, - 8925607961, 8925739111, 8925870197, 8926001269, 8926132381, 8926263487, 8926394563, - 8926525637, 8926656719, 8926787809, 8926918919, 8927050001, 8927181077, 8927312197, - 8927443309, 8927574427, 8927705509, 8927836613, 8927967689, 8928098791, 8928229867, - 8928360949, 8928492031, 8928623129, 8928754201, 8928885283, 8929016359, 8929147441, - 8929278517, 8929409609, 8929540687, 8929671763, 8929802839, 8929933913, 8930065007, - 8930196089, 8930327179, 8930458267, 8930589401, 8930720479, 8930851619, 8930982701, - 8931113801, 8931244877, 8931375989, 8931507119, 8931638203, 8931769279, 8931900371, - 8932031453, 8932162531, 8932293611, 8932424687, 8932555787, 8932686863, 8932817939, - 8932949023, 8933080129, 8933211223, 8933342371, 8933473487, 8933604569, 8933735683, - 8933866763, 8933997857, 8934128939, 8934260039, 8934391111, 8934522187, 8934653281, - 8934784379, 8934915469, 8935046557, 8935177649, 8935308763, 8935439867, 8935570939, - 8935702019, 8935833107, 8935964183, 8936095261, 8936226391, 8936357489, 8936488567, - 8936619641, 8936750737, 8936881871, 8937012947, 8937144053, 8937275131, 8937406207, - 8937537283, 8937668393, 8937799489, 8937930569, 8938061647, 8938192723, 8938323811, - 8938454887, 8938585969, 8938717057, 8938848143, 8938979237, 8939110387, 8939241473, - 8939372549, 8939503631, 8939634731, 8939765869, 8939896949, 8940028039, 8940159113, - 8940290221, 8940421361, 8940552443, 8940683527, 8940814621, 8940945709, 8941076801, - 8941207883, 8941338961, 8941470077, 8941601167, 8941732321, 8941863421, 8941994539, - 8942125649, 8942256731, 8942387827, 8942518913, 8942650043, 8942781131, 8942912213, - 8943043297, 8943174389, 8943305477, 8943436549, 8943567623, 8943698707, 8943829781, - 8943960871, 8944091951, 8944223047, 8944354151, 8944485223, 8944616309, 8944747423, - 8944878497, 8945009627, 8945140709, 8945271781, 8945402881, 8945533991, 8945665097, - 8945796173, 8945927281, 8946058361, 8946189437, 8946320521, 8946451597, 8946582713, - 8946713833, 8946844927, 8946976013, 8947107101, 8947238173, 8947369253, 8947500377, - 8947631461, 8947762547, 8947893673, 8948024777, 8948155861, 8948286937, 8948418013, - 8948549101, 8948680187, 8948811259, 8948942333, 8949073409, 8949204599, 8949335671, - 8949466763, 8949597857, 8949729037, 8949860141, 8949991231, 8950122343, 8950253489, - 8950384567, 8950515767, 8950646867, 8950777939, 8950909021, 8951040113, 8951171191, - 8951302273, 8951433371, 8951564509, 8951695609, 8951826683, 8951957797, 8952088897, - 8952219973, 8952351053, 8952482153, 8952613279, 8952744371, 8952875453, 8953006571, - 8953137671, 8953268783, 8953399907, 8953531003, 8953662083, 8953793171, 8953924253, - 8954055343, 8954186429, 8954317513, 8954448593, 8954579671, 8954710759, 8954841839, - 8954972941, 8955104071, 8955235151, 8955366253, 8955497333, 8955628411, 8955759487, - 8955890563, 8956021637, 8956152713, 8956283797, 8956414871, 8956545967, 8956677097, - 8956808227, 8956939301, 8957070379, 8957201471, 8957332547, 8957463631, 8957594719, - 8957725793, 8957856911, 8957987989, 8958119101, 8958250183, 8958381283, 8958512357, - 8958643433, 8958774523, 8958905609, 8959036721, 8959167839, 8959298917, 8959430023, - 8959561099, 8959692197, 8959823291, 8959954387, 8960085479, 8960216561, 8960347633, - 8960478707, 8960609783, 8960740861, 8960871937, 8961003047, 8961134131, 8961265211, - 8961396287, 8961527363, 8961658471, 8961789623, 8961920711, 8962051783, 8962182857, - 8962313999, 8962445071, 8962576151, 8962707239, 8962838317, 8962969391, 8963100521, - 8963231597, 8963362679, 8963493779, 8963624893, 8963755981, 8963887061, 8964018139, - 8964149231, 8964280309, 8964411397, 8964542471, 8964673547, 8964804623, 8964935701, - 8965066777, 8965197851, 8965328927, 8965459999, 8965591099, 8965722173, 8965853251, - 8965984373, 8966115451, 8966246551, 8966377633, 8966508773, 8966639849, 8966770927, - 8966902001, 8967033121, 8967164201, 8967295283, 8967426427, 8967557527, 8967688619, - 8967819701, 8967950773, 8968081847, 8968212919, 8968344001, 8968475081, 8968606183, - 8968737329, 8968868407, 8968999493, 8969130673, 8969261753, 8969392837, 8969523917, - 8969654989, 8969786069, 8969917169, 8970048253, 8970179329, 8970310429, 8970441503, - 8970572591, 8970703663, 8970834767, 8970965863, 8971096961, 8971228033, 8971359127, - 8971490249, 8971621349, 8971752437, 8971883509, 8972014589, 8972145671, 8972276743, - 8972407823, 8972538907, 8972669999, 8972801191, 8972932289, 8973063401, 8973194509, - 8973325619, 8973456691, 8973587789, 8973718861, 8973849979, 8973981053, 8974112131, - 8974243211, 8974374349, 8974505459, 8974636589, 8974767671, 8974898749, 8975029837, - 8975160911, 8975292013, 8975423089, 8975554163, 8975685239, 8975816327, 8975947411, - 8976078533, 8976209617, 8976340691, 8976471787, 8976602867, 8976733949, 8976865033, - 8976996107, 8977127189, 8977258291, 8977389373, 8977520491, 8977651589, 8977782661, - 8977913759, 8978044861, 8978175961, 8978307067, 8978438173, 8978569253, 8978700329, - 8978831431, 8978962523, 8979093619, 8979224701, 8979355829, 8979486917, 8979618073, - 8979749147, 8979880219, 8980011301, 8980142393, 8980273507, 8980404583, 8980535699, - 8980666771, 8980797871, 8980928951, 8981060027, 8981191099, 8981322179, 8981453267, - 8981584357, 8981715433, 8981846509, 8981977583, 8982108689, 8982239809, 8982370889, - 8982501967, 8982633041, 8982764129, 8982895211, 8983026307, 8983157389, 8983288463, - 8983419539, 8983550621, 8983681723, 8983812841, 8983943929, 8984075029, 8984206103, - 8984337181, 8984468281, 8984599361, 8984730463, 8984861563, 8984992637, 8985123709, - 8985254801, 8985385889, 8985516971, 8985648079, 8985779171, 8985910249, 8986041409, - 8986172521, 8986303597, 8986434671, 8986565747, 8986696841, 8986827953, 8986959041, - 8987090113, 8987221193, 8987352289, 8987483399, 8987614499, 8987745583, 8987876669, - 8988007771, 8988138877, 8988269957, 8988401029, 8988532117, 8988663209, 8988794281, - 8988925417, 8989056491, 8989187569, 8989318673, 8989449757, 8989580867, 8989711987, - 8989843063, 8989974151, 8990105237, 8990236427, 8990367509, 8990498639, 8990629717, - 8990760791, 8990891863, 8991022973, 8991154049, 8991285131, 8991416249, 8991547337, - 8991678457, 8991809531, 8991940609, 8992071773, 8992202867, 8992333951, 8992465033, - 8992596113, 8992727209, 8992858291, 8992989367, 8993120519, 8993251601, 8993382709, - 8993513801, 8993644883, 8993775977, 8993907071, 8994038161, 8994169237, 8994300319, - 8994431393, 8994562477, 8994693551, 8994824651, 8994955729, 8995086811, 8995217887, - 8995348979, 8995480051, 8995611143, 8995742233, 8995873331, 8996004443, 8996135539, - 8996266633, 8996397713, 8996528791, 8996659873, 8996791009, 8996922113, 8997053201, - 8997184297, 8997315377, 8997446461, 8997577541, 8997708637, 8997839749, 8997970867, - 8998101949, 8998233043, 8998364131, 8998495223, 8998626317, 8998757413, 8998888501, - 8999019697, 8999150777, 8999281873, 8999412953, 8999544053, 8999675137, 8999806223, - 8999937311, 9000068387, 9000199459, 9000330569, 9000461641, 9000592747, 9000723829, - 9000854911, 9000985993, 9001117079, 9001248173, 9001379251, 9001510327, 9001641401, - 9001772477, 9001903549, 9002034637, 9002165719, 9002296799, 9002427883, 9002558989, - 9002690077, 9002821169, 9002952251, 9003083381, 9003214469, 9003345541, 9003476617, - 9003607721, 9003738811, 9003869911, 9004001147, 9004132223, 9004263311, 9004394417, - 9004525489, 9004656587, 9004787689, 9004918763, 9005049847, 9005180941, 9005312021, - 9005443093, 9005574241, 9005705321, 9005836409, 9005967521, 9006098599, 9006229679, - 9006360751, 9006491843, 9006622943, 9006754049, 9006885131, 9007016203, 9007147283, - 9007278407, 9007409513, 9007540603, 9007671679, 9007802759, 9007933843, 9008065013, - 9008196103, 9008327179, 9008458301, 9008589409, 9008720509, 9008851583, 9008982709, - 9009113783, 9009244859, 9009375941, 9009507019, 9009638107, 9009769187, 9009900269, - 9010031347, 9010162451, 9010293541, 9010424617, 9010555709, 9010686887, 9010818017, - 9010949089, 9011080241, 9011211317, 9011342413, 9011473487, 9011604577, 9011735653, - 9011866727, 9011997871, 9012128953, 9012260027, 9012391117, 9012522203, 9012653347, - 9012784427, 9012915521, 9013046597, 9013177711, 9013308853, 9013439951, 9013571027, - 9013702111, 9013833209, 9013964291, 9014095403, 9014226479, 9014357567, 9014488723, - 9014619799, 9014750971, 9014882059, 9015013141, 9015144221, 9015275371, 9015406627, - 9015537709, 9015668819, 9015799943, 9015931019, 9016062091, 9016193167, 9016324259, - 9016455407, 9016586489, 9016717631, 9016848721, 9016979819, 9017110933, 9017242021, - 9017373109, 9017504219, 9017635331, 9017766449, 9017897543, 9018028633, 9018159707, - 9018290783, 9018421873, 9018552971, 9018684071, 9018815161, 9018946247, 9019077323, - 9019208411, 9019339489, 9019470571, 9019601659, 9019732769, 9019863857, 9019994933, - 9020126047, 9020257157, 9020388319, 9020519411, 9020650487, 9020781571, 9020912689, - 9021043771, 9021174847, 9021305929, 9021437011, 9021568121, 9021699199, 9021830299, - 9021961381, 9022092463, 9022223543, 9022354657, 9022485743, 9022616821, 9022747897, - 9022878971, 9023010067, 9023141147, 9023272241, 9023403341, 9023534417, 9023665489, - 9023796611, 9023927687, 9024058811, 9024189887, 9024320993, 9024452113, 9024583187, - 9024714331, 9024845407, 9024976483, 9025107557, 9025238671, 9025369799, 9025500871, - 9025631983, 9025763113, 9025894193, 9026025341, 9026156431, 9026287531, 9026418613, - 9026549689, 9026680769, 9026811847, 9026942923, 9027074009, 9027205087, 9027336169, - 9027467249, 9027598331, 9027729427, 9027860509, 9027991639, 9028122713, 9028253803, - 9028384909, 9028516019, 9028647119, 9028778237, 9028909313, 9029040389, 9029171467, - 9029302553, 9029433641, 9029564737, 9029695819, 9029826917, 9029958013, 9030089111, - 9030220247, 9030351347, 9030482437, 9030613513, 9030744599, 9030875681, 9031006753, - 9031137839, 9031268923, 9031399997, 9031531111, 9031662317, 9031793413, 9031924519, - 9032055629, 9032186729, 9032317807, 9032448883, 9032579977, 9032711053, 9032842127, - 9032973199, 9033104273, 9033235361, 9033366467, 9033497563, 9033628661, 9033759743, - 9033890837, 9034021921, 9034153043, 9034284167, 9034415263, 9034546363, 9034677439, - 9034808513, 9034939597, 9035070673, 9035201761, 9035332853, 9035463971, 9035595067, - 9035726177, 9035857261, 9035988341, 9036119419, 9036250493, 9036381593, 9036512671, - 9036643753, 9036774833, 9036905959, 9037037041, 9037168139, 9037299223, 9037430317, - 9037561397, 9037692497, 9037823657, 9037954741, 9038085841, 9038216917, 9038348023, - 9038479111, 9038610211, 9038741287, 9038872361, 9039003439, 9039134543, 9039265657, - 9039396761, 9039527843, 9039658987, 9039790127, 9039921217, 9040052291, 9040183367, - 9040314461, 9040445543, 9040576631, 9040707733, 9040838813, 9040969909, 9041101063, - 9041232149, 9041363267, 9041494391, 9041625479, 9041756557, 9041887643, 9042018749, - 9042149903, 9042280981, 9042412087, 9042543161, 9042674233, 9042805313, 9042936389, - 9043067479, 9043198553, 9043329667, 9043460747, 9043591819, 9043722971, 9043854047, - 9043985173, 9044116247, 9044247337, 9044378419, 9044509553, 9044640629, 9044771719, - 9044902813, 9045033887, 9045164969, 9045296059, 9045427169, 9045558241, 9045689327, - 9045820403, 9045951479, 9046082561, 9046213639, 9046344719, 9046475843, 9046606949, - 9046738049, 9046869173, 9047000267, 9047131339, 9047262421, 9047393497, 9047524573, - 9047655647, 9047786729, 9047917807, 9048048887, 9048179971, 9048311053, 9048442127, - 9048573223, 9048704311, 9048835391, 9048966463, 9049097537, 9049228609, 9049359701, - 9049490797, 9049621871, 9049752947, 9049884029, 9050015129, 9050146213, 9050277287, - 9050408369, 9050539447, 9050670527, 9050801623, 9050932717, 9051063797, 9051194909, - 9051326003, 9051457117, 9051588269, 9051719401, 9051850499, 9051981623, 9052112731, - 9052243819, 9052374893, 9052506019, 9052637117, 9052768189, 9052899269, 9053030351, - 9053161433, 9053292509, 9053423591, 9053554723, 9053685829, 9053816903, 9053947993, - 9054079081, 9054210169, 9054341269, 9054472367, 9054603443, 9054734519, 9054865627, - 9054996721, 9055127819, 9055258897, 9055390087, 9055521191, 9055652267, 9055783357, - 9055914481, 9056045561, 9056176639, 9056307731, 9056438803, 9056569897, 9056700973, - 9056832067, 9056963147, 9057094223, 9057225319, 9057356393, 9057487493, 9057618571, - 9057749677, 9057880829, 9058011901, 9058142981, 9058274083, 9058405163, 9058536247, - 9058667357, 9058798429, 9058929559, 9059060639, 9059191747, 9059322859, 9059453951, - 9059585057, 9059716147, 9059847241, 9059978327, 9060109441, 9060240521, 9060371627, - 9060502721, 9060633809, 9060764887, 9060895967, 9061027043, 9061158143, 9061289227, - 9061420327, 9061551413, 9061682503, 9061813699, 9061944779, 9062075851, 9062206939, - 9062338027, 9062469113, 9062600191, 9062731267, 9062862349, 9062993449, 9063124537, - 9063255613, 9063386687, 9063517759, 9063648857, 9063779929, 9063911011, 9064042123, - 9064173199, 9064304279, 9064435351, 9064566449, 9064697527, 9064828607, 9064959749, - 9065090833, 9065221931, 9065353021, 9065484097, 9065615171, 9065746243, 9065877349, - 9066008447, 9066139531, 9066270659, 9066401737, 9066532823, 9066663901, 9066795007, - 9066926107, 9067057189, 9067188269, 9067319351, 9067450477, 9067581563, 9067712669, - 9067843747, 9067974833, 9068105947, 9068237021, 9068368109, 9068499197, 9068630269, - 9068761357, 9068892449, 9069023531, 9069154603, 9069285677, 9069416771, 9069547843, - 9069678923, 9069810031, 9069941113, 9070072229, 9070203301, 9070334389, 9070465463, - 9070596541, 9070727629, 9070858711, 9070989799, 9071120897, 9071251979, 9071383093, - 9071514173, 9071645251, 9071776361, 9071907491, 9072038579, 9072169661, 9072300817, - 9072431899, 9072562987, 9072694073, 9072825173, 9072956261, 9073087343, 9073218419, - 9073349491, 9073480579, 9073611653, 9073742791, 9073873867, 9074004941, 9074136013, - 9074267093, 9074398187, 9074529311, 9074660383, 9074791459, 9074922539, 9075053629, - 9075184709, 9075315787, 9075446867, 9075577939, 9075709031, 9075840113, 9075971197, - 9076102279, 9076233391, 9076364471, 9076495553, 9076626631, 9076757707, 9076888787, - 9077019881, 9077150959, 9077282033, 9077413123, 9077544209, 9077675371, 9077806447, - 9077937527, 9078068599, 9078199679, 9078330761, 9078461851, 9078592961, 9078724087, - 9078855161, 9078986233, 9079117321, 9079248433, 9079379579, 9079510717, 9079641797, - 9079772881, 9079903957, 9080035033, 9080166119, 9080297197, 9080428303, 9080559409, - 9080690503, 9080821583, 9080952689, 9081083807, 9081214903, 9081346067, 9081477161, - 9081608243, 9081739321, 9081870403, 9082001497, 9082132597, 9082263679, 9082394753, - 9082525841, 9082656917, 9082788007, 9082919107, 9083050231, 9083181323, 9083312411, - 9083443513, 9083574601, 9083705689, 9083836841, 9083967931, 9084099007, 9084230081, - 9084361163, 9084492251, 9084623341, 9084754421, 9084885499, 9085016617, 9085147733, - 9085278809, 9085409887, 9085540969, 9085672051, 9085803149, 9085934251, 9086065349, - 9086196421, 9086327507, 9086458603, 9086589679, 9086720767, 9086851841, 9086982923, - 9087114067, 9087245173, 9087376253, 9087507349, 9087638449, 9087769589, 9087900677, - 9088031789, 9088162877, 9088293953, 9088425041, 9088556117, 9088687193, 9088818287, - 9088949369, 9089080471, 9089211557, 9089342651, 9089473727, 9089604817, 9089735891, - 9089866967, 9089998079, 9090129203, 9090260303, 9090391391, 9090522503, 9090653591, - 9090784673, 9090915787, 9091046903, 9091177999, 9091309133, 9091440223, 9091571297, - 9091702379, 9091833497, 9091964573, 9092095667, 9092226743, 9092357819, 9092489023, - 9092620127, 9092751259, 9092882341, 9093013421, 9093144493, 9093275567, 9093406681, - 9093537809, 9093668887, 9093800017, 9093931097, 9094062199, 9094193287, 9094324373, - 9094455449, 9094586537, 9094717673, 9094848767, 9094979867, 9095110949, 9095242021, - 9095373107, 9095504263, 9095635337, 9095766409, 9095897501, 9096028577, 9096159697, - 9096290783, 9096421871, 9096552973, 9096684059, 9096815171, 9096946273, 9097077371, - 9097208489, 9097339567, 9097470647, 9097601741, 9097732873, 9097863953, 9097995029, - 9098126129, 9098257229, 9098388311, 9098519383, 9098650513, 9098781631, 9098912729, - 9099043831, 9099174961, 9099306037, 9099437141, 9099568213, 9099699337, 9099830419, - 9099961513, 9100092587, 9100223663, 9100354829, 9100485929, 9100617011, 9100748099, - 9100879171, 9101010257, 9101141333, 9101272409, 9101403527, 9101534627, 9101665711, - 9101796853, 9101927953, 9102059027, 9102190109, 9102321187, 9102452279, 9102583387, - 9102714463, 9102845617, 9102976691, 9103107787, 9103238867, 9103369963, 9103501049, - 9103632137, 9103763219, 9103894321, 9104025397, 9104156513, 9104287603, 9104418677, - 9104549759, 9104680859, 9104811931, 9104943041, 9105074141, 9105205223, 9105336311, - 9105467383, 9105598459, 9105729551, 9105860629, 9105991703, 9106122787, 9106253903, - 9106385003, 9106516093, 9106647181, 9106778257, 9106909349, 9107040421, 9107171543, - 9107302619, 9107433691, 9107564779, 9107695859, 9107826977, 9107958059, 9108089149, - 9108220223, 9108351299, 9108482389, 9108613483, 9108744607, 9108875683, 9109006763, - 9109137857, 9109268939, 9109400011, 9109531103, 9109662179, 9109793279, 9109924363, - 9110055439, 9110186521, 9110317613, 9110448689, 9110579771, 9110710859, 9110841941, - 9110973017, 9111104129, 9111235223, 9111366317, 9111497389, 9111628541, 9111759623, - 9111890701, 9112021813, 9112152913, 9112284073, 9112415161, 9112546237, 9112677311, - 9112808387, 9112939469, 9113070553, 9113201641, 9113332721, 9113463797, 9113594869, - 9113725967, 9113857043, 9113988131, 9114119221, 9114250309, 9114381389, 9114512467, - 9114643553, 9114774631, 9114905707, 9115036783, 9115167871, 9115298977, 9115430059, - 9115561157, 9115692233, 9115823369, 9115954447, 9116085551, 9116216633, 9116347711, - 9116478827, 9116609989, 9116741069, 9116872147, 9117003239, 9117134311, 9117265429, - 9117396517, 9117527591, 9117658681, 9117789773, 9117920873, 9118051967, 9118183099, - 9118314173, 9118445291, 9118576403, 9118707511, 9118838593, 9118969723, 9119100799, - 9119231873, 9119362981, 9119494063, 9119625139, 9119756231, 9119887333, 9120018431, - 9120149531, 9120280639, 9120411847, 9120542923, 9120673997, 9120805097, 9120936173, - 9121067279, 9121198351, 9121329431, 9121460521, 9121591613, 9121722703, 9121853779, - 9121984889, 9122115971, 9122247049, 9122378137, 9122509217, 9122640301, 9122771407, - 9122902483, 9123033583, 9123164671, 9123295763, 9123426841, 9123557941, 9123689083, - 9123820169, 9123951257, 9124082329, 9124213403, 9124344571, 9124475651, 9124606739, - 9124737851, 9124868927, 9125000041, 9125131117, 9125262191, 9125393269, 9125524361, - 9125655463, 9125786543, 9125917631, 9126048719, 9126179801, 9126310873, 9126441967, - 9126573041, 9126704149, 9126835259, 9126966337, 9127097423, 9127228501, 9127359613, - 9127490707, 9127621813, 9127752917, 9127884019, 9128015161, 9128146273, 9128277383, - 9128408477, 9128539559, 9128670667, 9128801749, 9128932861, 9129063947, 9129195043, - 9129326117, 9129457247, 9129588323, 9129719399, 9129850489, 9129981643, 9130112737, - 9130243861, 9130374971, 9130506071, 9130637161, 9130768279, 9130899389, 9131030471, - 9131161573, 9131292647, 9131423723, 9131554807, 9131685887, 9131816999, 9131948107, - 9132079219, 9132210301, 9132341381, 9132472501, 9132603577, 9132734657, 9132865739, - 9132996839, 9133127951, 9133259063, 9133390141, 9133521223, 9133652299, 9133783397, - 9133914469, 9134045551, 9134176697, 9134307797, 9134438909, 9134569993, 9134701111, - 9134832221, 9134963297, 9135094387, 9135225481, 9135356561, 9135487661, 9135618743, - 9135749827, 9135880931, 9136012009, 9136143089, 9136274171, 9136405259, 9136536341, - 9136667429, 9136798501, 9136929617, 9137060693, 9137191771, 9137322863, 9137453939, - 9137585027, 9137716139, 9137847221, 9137978293, 9138109367, 9138240457, 9138371533, - 9138502619, 9138633719, 9138764813, 9138895897, 9139026971, 9139158047, 9139289141, - 9139420243, 9139551349, 9139682437, 9139813559, 9139944637, 9140075713, 9140206819, - 9140337893, 9140468969, 9140600057, 9140731133, 9140862259, 9140993333, 9141124453, - 9141255527, 9141386599, 9141517673, 9141648751, 9141779831, 9141910919, 9142041991, - 9142173077, 9142304161, 9142435259, 9142566379, 9142697479, 9142828559, 9142959641, - 9143090717, 9143221793, 9143352871, 9143483957, 9143615051, 9143746133, 9143877269, - 9144008359, 9144139453, 9144270529, 9144401611, 9144532687, 9144663799, 9144794881, - 9144925987, 9145057073, 9145188149, 9145319231, 9145450319, 9145581421, 9145712501, - 9145843573, 9145974683, 9146105797, 9146236889, 9146367977, 9146499059, 9146630137, - 9146761219, 9146892301, 9147023407, 9147154481, 9147285571, 9147416659, 9147547751, - 9147678823, 9147809897, 9147940981, 9148072061, 9148203133, 9148334269, 9148465343, - 9148596439, 9148727513, 9148858619, 9148989727, 9149120887, 9149251961, 9149383037, - 9149514109, 9149645201, 9149776297, 9149907383, 9150038467, 9150169657, 9150300743, - 9150431827, 9150562909, 9150693983, 9150825157, 9150956239, 9151087313, 9151218389, - 9151349489, 9151480577, 9151611719, 9151742797, 9151873879, 9152004959, 9152136041, - 9152267123, 9152398201, 9152529283, 9152660371, 9152791523, 9152922599, 9153053687, - 9153184771, 9153315863, 9153446957, 9153578029, 9153709127, 9153840229, 9153971303, - 9154102379, 9154233463, 9154364543, 9154495633, 9154626731, 9154757809, 9154888891, - 9155019971, 9155151053, 9155282131, 9155413217, 9155544313, 9155675411, 9155806483, - 9155937577, 9156068653, 9156199771, 9156330877, 9156461983, 9156593113, 9156724249, - 9156855359, 9156986441, 9157117523, 9157248613, 9157379687, 9157510771, 9157641847, - 9157772927, 9157903999, 9158035079, 9158166161, 9158297263, 9158428337, 9158559409, - 9158690501, 9158821619, 9158952707, 9159083797, 9159215017, 9159346099, 9159477179, - 9159608267, 9159739339, 9159870427, 9160001507, 9160132601, 9160263691, 9160394809, - 9160525919, 9160656991, 9160788139, 9160919227, 9161050313, 9161181397, 9161312477, - 9161443553, 9161574629, 9161705719, 9161836799, 9161967901, 9162098987, 9162230083, - 9162361199, 9162492271, 9162623347, 9162754423, 9162885497, 9163016593, 9163147667, - 9163278743, 9163409831, 9163540907, 9163672003, 9163803101, 9163934173, 9164065291, - 9164196403, 9164327489, 9164458571, 9164589649, 9164720749, 9164851841, 9164982913, - 9165114029, 9165245113, 9165376211, 9165507289, 9165638407, 9165769489, 9165900577, - 9166031713, 9166162813, 9166293887, 9166424959, 9166556051, 9166687183, 9166818263, - 9166949381, 9167080477, 9167211583, 9167342663, 9167473741, 9167604839, 9167735959, - 9167867039, 9167998129, 9168129211, 9168260287, 9168391361, 9168522437, 9168653521, - 9168784621, 9168915751, 9169046827, 9169177937, 9169309013, 9169440131, 9169571221, - 9169702331, 9169833457, 9169964567, 9170095643, 9170226721, 9170357797, 9170488883, - 9170619967, 9170751053, 9170882131, 9171013213, 9171144287, 9171275371, 9171406477, - 9171537589, 9171668677, 9171799807, 9171930881, 9172061959, 9172193083, 9172324207, - 9172455301, 9172586399, 9172717481, 9172848613, 9172979723, 9173110799, 9173241911, - 9173373007, 9173504117, 9173635213, 9173766311, 9173897387, 9174028459, 9174159539, - 9174290611, 9174421687, 9174552767, 9174683839, 9174814951, 9174946049, 9175077127, - 9175208201, 9175339289, 9175470413, 9175601489, 9175732561, 9175863647, 9175994731, - 9176125811, 9176256911, 9176387989, 9176519081, 9176650169, 9176781281, 9176912387, - 9177043483, 9177174557, 9177305629, 9177436721, 9177567803, 9177698923, 9177830009, - 9177961099, 9178092191, 9178223281, 9178354463, 9178485559, 9178616633, 9178747717, - 9178878791, 9179009881, 9179140969, 9179272051, 9179403127, 9179534261, 9179665343, - 9179796427, 9179927507, 9180058583, 9180189673, 9180320753, 9180451837, 9180582973, - 9180714071, 9180845153, 9180976229, 9181107307, 9181238431, 9181369543, 9181500637, - 9181631713, 9181762823, 9181893923, 9182025001, 9182156119, 9182287193, 9182418299, - 9182549381, 9182680453, 9182811527, 9182942603, 9183073717, 9183204809, 9183335881, - 9183466961, 9183598051, 9183729131, 9183860251, 9183991339, 9184122419, 9184253543, - 9184384631, 9184515707, 9184646803, 9184777907, 9184908989, 9185040061, 9185171173, - 9185302277, 9185433377, 9185564449, 9185695627, 9185826707, 9185957821, 9186088903, - 9186219979, 9186351061, 9186482143, 9186613283, 9186744401, 9186875507, 9187006603, - 9187137683, 9187268777, 9187399849, 9187530929, 9187662017, 9187793093, 9187924171, - 9188055257, 9188186339, 9188317421, 9188448497, 9188579629, 9188710711, 9188841817, - 9188972909, 9189103981, 9189235091, 9189366181, 9189497279, 9189628381, 9189759487, - 9189890581, 9190021691, 9190152779, 9190283873, 9190414963, 9190546039, 9190677163, - 9190808293, 9190939391, 9191070463, 9191201549, 9191332621, 9191463707, 9191594813, - 9191725901, 9191856983, 9191988097, 9192119191, 9192250273, 9192381347, 9192512449, - 9192643531, 9192774673, 9192905759, 9193036849, 9193167941, 9193299013, 9193430089, - 9193561187, 9193692323, 9193823399, 9193954481, 9194085553, 9194216659, 9194347739, - 9194478833, 9194609909, 9194740991, 9194872067, 9195003161, 9195134237, 9195265319, - 9195396391, 9195527501, 9195658583, 9195789721, 9195920803, 9196051901, 9196182977, - 9196314053, 9196445147, 9196576247, 9196707329, 9196838429, 9196969511, 9197100593, - 9197231677, 9197362753, 9197493853, 9197624941, 9197756021, 9197887121, 9198018211, - 9198149321, 9198280417, 9198411503, 9198542593, 9198673723, 9198804833, 9198935953, - 9199067027, 9199198111, 9199329193, 9199460267, 9199591351, 9199722451, 9199853527, - 9199984603, 9200115703, 9200246777, 9200377853, 9200508959, 9200640049, 9200771131, - 9200902213, 9201033293, 9201164377, 9201295459, 9201426539, 9201557611, 9201688697, - 9201819793, 9201950867, 9202081949, 9202213081, 9202344169, 9202475273, 9202606417, - 9202737559, 9202868641, 9202999717, 9203130791, 9203261869, 9203392943, 9203524069, - 9203655161, 9203786239, 9203917313, 9204048407, 9204179531, 9204310681, 9204441769, - 9204572873, 9204703951, 9204835039, 9204966139, 9205097261, 9205228339, 9205359421, - 9205490507, 9205621603, 9205752727, 9205883807, 9206014901, 9206145973, 9206277077, - 9206408161, 9206539271, 9206670371, 9206801467, 9206932541, 9207063623, 9207194707, - 9207325789, 9207456889, 9207587993, 9207719071, 9207850147, 9207981241, 9208112317, - 9208243393, 9208374473, 9208505557, 9208636649, 9208767721, 9208898801, 9209029873, - 9209160953, 9209292041, 9209423117, 9209554199, 9209685283, 9209816359, 9209947433, - 9210078529, 9210209611, 9210340691, 9210471779, 9210602857, 9210733957, 9210865043, - 9210996143, 9211127243, 9211258337, 9211389419, 9211520491, 9211651627, 9211782709, - 9211913807, 9212044879, 9212175967, 9212307059, 9212438161, 9212569237, 9212700313, - 9212831387, 9212962481, 9213093557, 9213224633, 9213355729, 9213486803, 9213617893, - 9213748967, 9213880043, 9214011127, 9214142209, 9214273339, 9214404457, 9214535567, - 9214666661, 9214797733, 9214928809, 9215059921, 9215191031, 9215322133, 9215453209, - 9215584283, 9215715391, 9215846467, 9215977549, 9216108623, 9216239713, 9216370789, - 9216501863, 9216632947, 9216764027, 9216895153, 9217026253, 9217157329, 9217288439, - 9217419527, 9217550611, 9217681703, 9217812797, 9217943909, 9218075011, 9218206091, - 9218337169, 9218468243, 9218599331, 9218730419, 9218861537, 9218992609, 9219123691, - 9219254767, 9219385841, 9219516913, 9219648059, 9219779131, 9219910223, 9220041329, - 9220172443, 9220303559, 9220434637, 9220565713, 9220696811, 9220827929, 9220959017, - 9221090111, 9221221193, 9221352281, 9221483353, 9221614439, 9221745517, 9221876591, - 9222007673, 9222138769, 9222269843, 9222400927, 9222532003, 9222663077, 9222794201, - 9222925301, 9223056431, 9223187507, 9223318609, 9223449691, 9223580777, 9223711853, - 9223842931, 9223974007, 9224105119, 9224236201, 9224367283, 9224498359, 9224629439, - 9224760569, 9224891651, 9225022733, 9225153811, 9225284897, 9225415999, 9225547087, - 9225678199, 9225809273, 9225940351, 9226071467, 9226202563, 9226333661, 9226464769, - 9226595857, 9226726979, 9226858057, 9226989151, 9227120249, 9227251337, 9227382413, - 9227513573, 9227644681, 9227775779, 9227906911, 9228037993, 9228169103, 9228300181, - 9228431273, 9228562351, 9228693437, 9228824509, 9228955609, 9229086703, 9229217779, - 9229348871, 9229479953, 9229611043, 9229742117, 9229873193, 9230004271, 9230135357, - 9230266429, 9230397521, 9230528653, 9230659733, 9230790823, 9230921911, 9231053009, - 9231184111, 9231315239, 9231446311, 9231577409, 9231708527, 9231839599, 9231970673, - 9232101757, 9232232833, 9232363909, 9232494983, 9232626059, 9232757141, 9232888243, - 9233019317, 9233150389, 9233281487, 9233412569, 9233543663, 9233674759, 9233805851, - 9233936941, 9234068021, 9234199099, 9234330179, 9234461261, 9234592333, 9234723409, - 9234854501, 9234985597, 9235116679, 9235247761, 9235378883, 9235509973, 9235641059, - 9235772137, 9235903231, 9236034323, 9236165429, 9236296513, 9236427601, 9236558699, - 9236689789, 9236820863, 9236951947, 9237083021, 9237214111, 9237345191, 9237476267, - 9237607343, 9237738427, 9237869561, 9238000633, 9238131709, 9238262797, 9238393891, - 9238524973, 9238656067, 9238787141, 9238918219, 9239049293, 9239180381, 9239311489, - 9239442577, 9239573683, 9239704757, 9239835889, 9239966963, 9240098041, 9240229121, - 9240360197, 9240491303, 9240622441, 9240753523, 9240884603, 9241015687, 9241146763, - 9241277863, 9241408949, 9241540057, 9241671137, 9241802221, 9241933307, 9242064389, - 9242195471, 9242326543, 9242457667, 9242588767, 9242719859, 9242850937, 9242982017, - 9243113111, 9243244187, 9243375259, 9243506347, 9243637421, 9243768593, 9243899681, - 9244030769, 9244161877, 9244292957, 9244424081, 9244555207, 9244686299, 9244817371, - 9244948477, 9245079581, 9245210699, 9245341801, 9245472881, 9245603953, 9245735041, - 9245866151, 9245997317, 9246128413, 9246259493, 9246390589, 9246521689, 9246652799, - 9246783877, 9246914953, 9247046033, 9247177111, 9247308193, 9247439287, 9247570361, - 9247701439, 9247832521, 9247963619, 9248094703, 9248225797, 9248356889, 9248488001, - 9248619101, 9248750239, 9248881333, 9249012449, 9249143543, 9249274621, 9249405707, - 9249536789, 9249667877, 9249798953, 9249930047, 9250061147, 9250192219, 9250323293, - 9250454407, 9250585483, 9250716557, 9250847647, 9250978721, 9251109797, 9251240917, - 9251372027, 9251503109, 9251634187, 9251765261, 9251896343, 9252027443, 9252158581, - 9252289693, 9252420803, 9252551879, 9252682961, 9252814057, 9252945137, 9253076221, - 9253207373, 9253338461, 9253469569, 9253600703, 9253731791, 9253862873, 9253993951, - 9254125039, 9254256131, 9254387213, 9254518387, 9254649463, 9254780543, 9254911651, - 9255042751, 9255173833, 9255304937, 9255436019, 9255567119, 9255698239, 9255829343, - 9255960451, 9256091527, 9256222667, 9256353739, 9256484813, 9256615897, 9256746973, - 9256878047, 9257009129, 9257140231, 9257271329, 9257402419, 9257533499, 9257664623, - 9257795731, 9257926817, 9258057889, 9258188977, 9258320063, 9258451183, 9258582259, - 9258713339, 9258844411, 9258975527, 9259106651, 9259237733, 9259368823, 9259499947, - 9259631039, 9259762111, 9259893193, 9260024269, 9260155439, 9260286571, 9260417659, - 9260548733, 9260679809, 9260810891, 9260941997, 9261073069, 9261204157, 9261335233, - 9261466307, 9261597409, 9261728549, 9261859667, 9261990767, 9262121857, 9262252931, - 9262384031, 9262515103, 9262646203, 9262777283, 9262908503, 9263039587, 9263170663, - 9263301757, 9263432837, 9263563919, 9263694991, 9263826073, 9263957147, 9264088219, - 9264219299, 9264350371, 9264481463, 9264612541, 9264743633, 9264874709, 9265005781, - 9265136869, 9265267943, 9265399019, 9265530107, 9265661179, 9265792267, 9265923353, - 9266054429, 9266185549, 9266316673, 9266447777, 9266578861, 9266709943, 9266841041, - 9266972129, 9267103229, 9267234331, 9267365407, 9267496489, 9267627623, 9267758707, - 9267889781, 9268020859, 9268151951, 9268283039, 9268414139, 9268545259, 9268676353, - 9268807441, 9268938533, 9269069627, 9269200729, 9269331817, 9269462897, 9269593987, - 9269725081, 9269856157, 9269987261, 9270118369, 9270249449, 9270380549, 9270511631, - 9270642713, 9270773791, 9270904873, 9271035947, 9271167019, 9271298093, 9271429169, - 9271560253, 9271691329, 9271822421, 9271953533, 9272084609, 9272215697, 9272346773, - 9272477849, 9272608937, 9272740021, 9272871109, 9273002183, 9273133273, 9273264349, - 9273395431, 9273526513, 9273657599, 9273788683, 9273919763, 9274050839, 9274181911, - 9274313011, 9274444099, 9274575197, 9274706279, 9274837357, 9274968433, 9275099563, - 9275230637, 9275361713, 9275492813, 9275623891, 9275754973, 9275886073, 9276017183, - 9276148283, 9276279379, 9276410477, 9276541559, 9276672637, 9276803771, 9276934859, - 9277065947, 9277197031, 9277328117, 9277459201, 9277590277, 9277721359, 9277852477, - 9277983553, 9278114689, 9278245787, 9278376883, 9278507969, 9278639077, 9278770181, - 9278901283, 9279032401, 9279163477, 9279294631, 9279425717, 9279556817, 9279687917, - 9279819001, 9279950083, 9280081157, 9280212233, 9280343323, 9280474409, 9280605511, - 9280736623, 9280867703, 9280998823, 9281129911, 9281260987, 9281392073, 9281523151, - 9281654227, 9281785319, 9281916421, 9282047503, 9282178579, 9282309691, 9282440777, - 9282571853, 9282702941, 9282834013, 9282965093, 9283096169, 9283227259, 9283358341, - 9283489417, 9283620551, 9283751627, 9283882711, 9284013811, 9284144893, 9284275967, - 9284407063, 9284538139, 9284669213, 9284800289, 9284931373, 9285062453, 9285193529, - 9285324613, 9285455717, 9285586799, 9285717887, 9285848969, 9285980059, 9286111171, - 9286242253, 9286373363, 9286504471, 9286635551, 9286766639, 9286897723, 9287028851, - 9287159933, 9287291081, 9287422163, 9287553251, 9287684323, 9287815417, 9287946511, - 9288077593, 9288208697, 9288339769, 9288470909, 9288601981, 9288733061, 9288864251, - 9288995327, 9289126447, 9289257541, 9289388639, 9289519717, 9289650793, 9289781909, - 9289912993, 9290044069, 9290175179, 9290306273, 9290437349, 9290568421, 9290699513, - 9290830613, 9290961697, 9291092771, 9291223913, 9291354997, 9291486079, 9291617191, - 9291748289, 9291879383, 9292010473, 9292141567, 9292272727, 9292403837, 9292534919, - 9292665997, 9292797103, 9292928179, 9293059271, 9293190353, 9293321461, 9293452573, - 9293583671, 9293714779, 9293845927, 9293977009, 9294108091, 9294239173, 9294370291, - 9294501379, 9294632489, 9294763579, 9294894659, 9295025737, 9295156831, 9295287913, - 9295419013, 9295550107, 9295681181, 9295812259, 9295943333, 9296074409, 9296205521, - 9296336641, 9296467721, 9296598803, 9296729891, 9296860997, 9296992073, 9297123151, - 9297254243, 9297385327, 9297516409, 9297647501, 9297778583, 9297909659, 9298040767, - 9298171871, 9298302991, 9298434137, 9298565219, 9298696301, 9298827379, 9298958497, - 9299089577, 9299220709, 9299351791, 9299482883, 9299614013, 9299745109, 9299876219, - 9300007307, 9300138391, 9300269467, 9300400567, 9300531679, 9300662771, 9300793877, - 9300925019, 9301056097, 9301187177, 9301318291, 9301449403, 9301580531, 9301711631, - 9301842731, 9301973819, 9302104891, 9302235977, 9302367097, 9302498201, 9302629321, - 9302760403, 9302891497, 9303022583, 9303153683, 9303284801, 9303415879, 9303546971, - 9303678047, 9303809131, 9303940207, 9304071281, 9304202377, 9304333463, 9304464539, - 9304595611, 9304726709, 9304857787, 9304988863, 9305119963, 9305251037, 9305382169, - 9305513251, 9305644333, 9305775419, 9305906527, 9306037619, 9306168691, 9306299771, - 9306430873, 9306561959, 9306693037, 9306824117, 9306955199, 9307086287, 9307217363, - 9307348451, 9307479539, 9307610633, 9307741747, 9307872841, 9308003941, 9308135021, - 9308266103, 9308397181, 9308528261, 9308659357, 9308790433, 9308921507, 9309052601, - 9309183679, 9309314753, 9309445843, 9309576917, 9309708013, 9309839087, 9309970171, - 9310101263, 9310232339, 9310363411, 9310494493, 9310625609, 9310756687, 9310887791, - 9311018867, 9311149993, 9311281069, 9311412163, 9311543239, 9311674319, 9311805409, - 9311936497, 9312067603, 9312198683, 9312329771, 9312460897, 9312591971, 9312723047, - 9312854147, 9312985219, 9313116359, 9313247441, 9313378517, 9313509593, 9313640671, - 9313771751, 9313902859, 9314033969, 9314165051, 9314296151, 9314427229, 9314558317, - 9314689399, 9314820481, 9314951557, 9315082649, 9315213749, 9315344827, 9315475909, - 9315607019, 9315738101, 9315869191, 9316000271, 9316131343, 9316262437, 9316393511, - 9316524677, 9316655749, 9316786867, 9316917977, 9317049073, 9317180221, 9317311301, - 9317442391, 9317573467, 9317704549, 9317835629, 9317966737, 9318097891, 9318228971, - 9318360043, 9318491123, 9318622213, 9318753313, 9318884411, 9319015523, 9319146611, - 9319277761, 9319408849, 9319539953, 9319671059, 9319802143, 9319933297, 9320064373, - 9320195453, 9320326541, 9320457617, 9320588689, 9320719769, 9320850863, 9320981941, - 9321113017, 9321244091, 9321375211, 9321506303, 9321637433, 9321768523, 9321899597, - 9322030693, 9322161811, 9322292891, 9322423987, 9322555079, 9322686193, 9322817269, - 9322948351, 9323079431, 9323210509, 9323341589, 9323472679, 9323603759, 9323734867, - 9323865961, 9323997037, 9324128123, 9324259199, 9324390281, 9324521359, 9324652451, - 9324783529, 9324914611, 9325045759, 9325176841, 9325307921, 9325438999, 9325570081, - 9325701179, 9325832251, 9325963327, 9326094419, 9326225501, 9326356573, 9326487659, - 9326618789, 9326749867, 9326880947, 9327012029, 9327143117, 9327274193, 9327405281, - 9327536369, 9327667463, 9327798569, 9327929641, 9328060733, 9328191827, 9328322959, - 9328454033, 9328585127, 9328716239, 9328847321, 9328978409, 9329109523, 9329240617, - 9329371699, 9329502781, 9329633869, 9329764979, 9329896057, 9330027131, 9330158203, - 9330289291, 9330420391, 9330551491, 9330682597, 9330813671, 9330944759, 9331075849, - 9331206931, 9331338019, 9331469093, 9331600171, 9331731263, 9331862357, 9331993453, - 9332124533, 9332255663, 9332386751, 9332517841, 9332648917, 9332780027, 9332911111, - 9333042203, 9333173329, 9333304429, 9333435509, 9333566591, 9333697669, 9333828787, - 9333959863, 9334090937, 9334222019, 9334353139, 9334484221, 9334615307, 9334746401, - 9334877473, 9335008577, 9335139661, 9335270743, 9335401847, 9335532977, 9335664049, - 9335795137, 9335926211, 9336057293, 9336188371, 9336319453, 9336450547, 9336581621, - 9336712733, 9336843889, 9336974981, 9337106111, 9337237303, 9337368407, 9337499519, - 9337630591, 9337761691, 9337892789, 9338023883, 9338154989, 9338286091, 9338417171, - 9338548291, 9338679373, 9338810501, 9338941589, 9339072703, 9339203831, 9339334913, - 9339466027, 9339597103, 9339728191, 9339859283, 9339990371, 9340121467, 9340252561, - 9340383667, 9340514767, 9340645859, 9340776931, 9340908007, 9341039083, 9341170169, - 9341301247, 9341432369, 9341563447, 9341694521, 9341825621, 9341956709, 9342087787, - 9342218861, 9342349943, 9342481037, 9342612161, 9342743233, 9342874319, 9343005391, - 9343136497, 9343267597, 9343398671, 9343529761, 9343660861, 9343791943, 9343923041, - 9344054113, 9344185211, 9344316307, 9344447389, 9344578469, 9344709547, 9344840633, - 9344971763, 9345102881, 9345234001, 9345365077, 9345496151, 9345627229, 9345758363, - 9345889439, 9346020517, 9346151603, 9346282697, 9346413781, 9346544863, 9346675957, - 9346807049, 9346938121, 9347069201, 9347200283, 9347331361, 9347462447, 9347593597, - 9347724689, 9347855767, 9347986847, 9348117959, 9348249037, 9348380123, 9348511213, - 9348642293, 9348773381, 9348904459, 9349035581, 9349166681, 9349297759, 9349428841, - 9349559959, 9349691051, 9349822123, 9349953203, 9350084287, 9350215363, 9350346457, - 9350477551, 9350608633, 9350739707, 9350870819, 9351001939, 9351133039, 9351264113, - 9351395197, 9351526291, 9351657373, 9351788447, 9351919541, 9352050613, 9352181687, - 9352312763, 9352443857, 9352574983, 9352706057, 9352837129, 9352968203, 9353099297, - 9353230387, 9353361463, 9353492549, 9353623627, 9353754763, 9353885867, 9354016951, - 9354148049, 9354279131, 9354410213, 9354541297, 9354672421, 9354803519, 9354934591, - 9355065691, 9355196779, 9355327867, 9355458943, 9355590067, 9355721171, 9355852271, - 9355983349, 9356114429, 9356245513, 9356376593, 9356507681, 9356638783, 9356769871, - 9356900951, 9357032039, 9357163133, 9357294223, 9357425321, 9357556421, 9357687503, - 9357818579, 9357949723, 9358080829, 9358211953, 9358343047, 9358474123, 9358605199, - 9358736287, 9358867369, 9358998443, 9359129543, 9359260643, 9359391793, 9359522897, - 9359653969, 9359785051, 9359916127, 9360047243, 9360178319, 9360309403, 9360440477, - 9360571553, 9360702647, 9360833747, 9360964829, 9361095901, 9361226989, 9361358077, - 9361489169, 9361620259, 9361751339, 9361882427, 9362013499, 9362144591, 9362275679, - 9362406761, 9362537837, 9362668921, 9362800001, 9362931077, 9363062161, 9363193243, - 9363324343, 9363455441, 9363586513, 9363717631, 9363848707, 9363979799, 9364110887, - 9364241959, 9364373047, 9364504139, 9364635211, 9364766329, 9364897417, 9365028499, - 9365159581, 9365290679, 9365421787, 9365552891, 9365683963, 9365815057, 9365946131, - 9366077297, 9366208393, 9366339491, 9366470563, 9366601661, 9366732761, 9366863833, - 9366994933, 9367126009, 9367257083, 9367388159, 9367519279, 9367650353, 9367781431, - 9367912517, 9368043677, 9368174773, 9368305853, 9368436937, 9368568023, 9368699101, - 9368830217, 9368961317, 9369092393, 9369223469, 9369354557, 9369485633, 9369616721, - 9369747817, 9369878891, 9370009963, 9370141091, 9370272167, 9370403249, 9370534321, - 9370665449, 9370796537, 9370927637, 9371058713, 9371189827, 9371320921, 9371452007, - 9371583083, 9371714189, 9371845277, 9371976353, 9372107449, 9372238537, 9372369641, - 9372500729, 9372631819, 9372762923, 9372894023, 9373025219, 9373156291, 9373287377, - 9373418471, 9373549543, 9373680691, 9373811779, 9373942867, 9374073953, 9374205053, - 9374336141, 9374467229, 9374598349, 9374729501, 9374860591, 9374991671, 9375122749, - 9375253841, 9375384917, 9375515993, 9375647081, 9375778157, 9375909229, 9376040329, - 9376171439, 9376302527, 9376433609, 9376564777, 9376695851, 9376826929, 9376958057, - 9377089151, 9377220253, 9377351327, 9377482409, 9377613493, 9377744573, 9377875669, - 9378006749, 9378137837, 9378268927, 9378400007, 9378531139, 9378662213, 9378793297, - 9378924371, 9379055453, 9379186559, 9379317671, 9379448761, 9379579841, 9379710919, - 9379842047, 9379973177, 9380104249, 9380235331, 9380366407, 9380497501, 9380628721, - 9380759821, 9380890903, 9381022009, 9381153121, 9381284221, 9381415333, 9381546409, - 9381677489, 9381808567, 9381939641, 9382070729, 9382201811, 9382332889, 9382464017, - 9382595149, 9382726229, 9382857373, 9382988453, 9383119637, 9383250743, 9383381827, - 9383512913, 9383644013, 9383775109, 9383906237, 9384037381, 9384168467, 9384299549, - 9384430621, 9384561727, 9384692809, 9384823891, 9384954967, 9385086071, 9385217161, - 9385348307, 9385479379, 9385610477, 9385741571, 9385872653, 9386003741, 9386134831, - 9386265919, 9386396993, 9386528077, 9386659171, 9386790263, 9386921351, 9387052439, - 9387183521, 9387314639, 9387445741, 9387576827, 9387707939, 9387839011, 9387970087, - 9388101161, 9388232261, 9388363357, 9388494433, 9388625527, 9388756633, 9388887719, - 9389018797, 9389149871, 9389280959, 9389412073, 9389543257, 9389674337, 9389805413, - 9389936497, 9390067571, 9390198683, 9390329771, 9390460897, 9390591983, 9390723103, - 9390854191, 9390985273, 9391116359, 9391247447, 9391378547, 9391509619, 9391640711, - 9391771799, 9391902889, 9392033971, 9392165047, 9392296213, 9392427293, 9392558393, - 9392689483, 9392820571, 9392951647, 9393082733, 9393213827, 9393344911, 9393475997, - 9393607081, 9393738191, 9393869281, 9394000367, 9394131451, 9394262533, 9394393709, - 9394524781, 9394655857, 9394786979, 9394918061, 9395049179, 9395180279, 9395311351, - 9395442437, 9395573519, 9395704597, 9395835679, 9395966791, 9396097877, 9396228949, - 9396360041, 9396491147, 9396622223, 9396753329, 9396884401, 9397015499, 9397146571, - 9397277657, 9397408729, 9397539911, 9397671047, 9397802129, 9397933211, 9398064301, - 9398195377, 9398326453, 9398457553, 9398588651, 9398719723, 9398850817, 9398981897, - 9399112993, 9399244177, 9399375269, 9399506383, 9399637517, 9399768641, 9399899797, - 9400030883, 9400161959, 9400293041, 9400424147, 9400555231, 9400686329, 9400817401, - 9400948477, 9401079587, 9401210669, 9401341757, 9401472841, 9401603927, 9401734999, - 9401866081, 9401997191, 9402128269, 9402259367, 9402390443, 9402521519, 9402652613, - 9402783697, 9402914777, 9403045853, 9403176947, 9403308023, 9403439113, 9403570219, - 9403701299, 9403832401, 9403963477, 9404094577, 9404225669, 9404356781, 9404487853, - 9404618929, 9404750029, 9404881103, 9405012247, 9405143327, 9405274423, 9405405509, - 9405536627, 9405667709, 9405798793, 9405929867, 9406060967, 9406192043, 9406323139, - 9406454231, 9406585343, 9406716463, 9406847543, 9406978649, 9407109763, 9407240891, - 9407371969, 9407503069, 9407634149, 9407765261, 9407896357, 9408027439, 9408158537, - 9408289609, 9408420689, 9408551767, 9408682849, 9408813989, 9408945083, 9409076263, - 9409207387, 9409338461, 9409469557, 9409600631, 9409731739, 9409862821, 9409993897, - 9410124973, 9410256047, 9410387167, 9410518261, 9410649343, 9410780447, 9410911547, - 9411042629, 9411173711, 9411304783, 9411435857, 9411566929, 9411698033, 9411829109, - 9411960193, 9412091341, 9412222427, 9412353571, 9412484671, 9412615759, 9412746869, - 9412877983, 9413009057, 9413140133, 9413271227, 9413402347, 9413533447, 9413664527, - 9413795663, 9413926787, 9414057893, 9414188983, 9414320057, 9414451129, 9414582209, - 9414713291, 9414844363, 9414975439, 9415106527, 9415237603, 9415368707, 9415499833, - 9415630909, 9415761989, 9415893079, 9416024183, 9416155267, 9416286343, 9416417441, - 9416548513, 9416679611, 9416810713, 9416941811, 9417072893, 9417203977, 9417335087, - 9417466211, 9417597283, 9417728393, 9417859471, 9417990553, 9418121639, 9418252769, - 9418383841, 9418514929, 9418646023, 9418777103, 9418908179, 9419039263, 9419170349, - 9419301421, 9419432501, 9419563607, 9419694703, 9419825797, 9419956877, 9420087961, - 9420219049, 9420350123, 9420481223, 9420612307, 9420743383, 9420874457, 9421005547, - 9421136629, 9421267711, 9421398797, 9421529893, 9421660973, 9421792063, 9421923143, - 9422054221, 9422185361, 9422316433, 9422447539, 9422578621, 9422709707, 9422840821, - 9422971907, 9423102989, 9423234077, 9423365201, 9423496273, 9423627359, 9423758431, - 9423889513, 9424020623, 9424151731, 9424282823, 9424413919, 9424544999, 9424676083, - 9424807169, 9424938251, 9425069363, 9425200451, 9425331523, 9425462597, 9425593673, - 9425724769, 9425855891, 9425986979, 9426118057, 9426249139, 9426380239, 9426511319, - 9426642427, 9426773527, 9426904661, 9427035733, 9427166807, 9427297897, 9427428973, - 9427560083, 9427691179, 9427822253, 9427953329, 9428084423, 9428215523, 9428346601, - 9428477741, 9428608859, 9428739979, 9428871097, 9429002171, 9429133247, 9429264329, - 9429395429, 9429526507, 9429657617, 9429788713, 9429919787, 9430050871, 9430181983, - 9430313129, 9430444201, 9430575277, 9430706387, 9430837483, 9430968557, 9431099677, - 9431230763, 9431361851, 9431492923, 9431624057, 9431755129, 9431886209, 9432017281, - 9432148391, 9432279463, 9432410539, 9432541637, 9432672727, 9432803879, 9432934967, - 9433066057, 9433197187, 9433328291, 9433459379, 9433590457, 9433721533, 9433852633, - 9433983739, 9434114819, 9434245901, 9434377003, 9434508077, 9434639171, 9434770259, - 9434901331, 9435032413, 9435163511, 9435294599, 9435425689, 9435556849, 9435687959, - 9435819053, 9435950129, 9436081201, 9436212293, 9436343381, 9436474519, 9436605601, - 9436736689, 9436867789, 9436998929, 9437130011, 9437261089, 9437392187, 9437523301, - 9437654383, 9437785493, 9437916581, 9438047747, 9438178829, 9438309943, 9438441079, - 9438572161, 9438703247, 9438834341, 9438965447, 9439096531, 9439227613, 9439358699, - 9439489771, 9439620847, 9439751927, 9439883017, 9440014091, 9440145167, 9440276309, - 9440407387, 9440538463, 9440669561, 9440800661, 9440931737, 9441062831, 9441193921, - 9441325007, 9441456127, 9441587201, 9441718283, 9441849371, 9441980491, 9442111571, - 9442242653, 9442373761, 9442504853, 9442635967, 9442767067, 9442898167, 9443029261, - 9443160359, 9443291437, 9443422553, 9443553659, 9443684749, 9443815837, 9443946931, - 9444078037, 9444209167, 9444340249, 9444471359, 9444602449, 9444733523, 9444864599, - 9444995689, 9445126763, 9445257853, 9445388947, 9445520033, 9445651139, 9445782211, - 9445913293, 9446044411, 9446175493, 9446306647, 9446437733, 9446568811, 9446699887, - 9446830969, 9446962073, 9447093167, 9447224261, 9447355349, 9447486481, 9447617561, - 9447748669, 9447879743, 9448010857, 9448141939, 9448273027, 9448404107, 9448535183, - 9448666259, 9448797331, 9448928441, 9449059523, 9449190601, 9449321677, 9449452751, - 9449583839, 9449714941, 9449846047, 9449977129, 9450108221, 9450239297, 9450370409, - 9450501481, 9450632591, 9450763703, 9450894797, 9451025891, 9451156991, 9451288109, - 9451419181, 9451550279, 9451681361, 9451812437, 9451943513, 9452074591, 9452205689, - 9452336791, 9452467873, 9452598973, 9452730073, 9452861161, 9452992253, 9453123347, - 9453254429, 9453385511, 9453516601, 9453647681, 9453778753, 9453909827, 9454040899, - 9454171997, 9454303093, 9454434229, 9454565321, 9454696429, 9454827517, 9454958599, - 9455089691, 9455220779, 9455351897, 9455482969, 9455614099, 9455745217, 9455876299, - 9456007397, 9456138469, 9456269573, 9456400651, 9456531739, 9456662849, 9456793961, - 9456925033, 9457056209, 9457187293, 9457318369, 9457449467, 9457580549, 9457711691, - 9457842787, 9457973891, 9458104969, 9458236057, 9458367131, 9458498207, 9458629291, - 9458760371, 9458891447, 9459022561, 9459153647, 9459284743, 9459415853, 9459546959, - 9459678037, 9459809207, 9459940327, 9460071403, 9460202497, 9460333579, 9460464659, - 9460595743, 9460726817, 9460857919, 9460989007, 9461120093, 9461251187, 9461382263, - 9461513351, 9461644427, 9461775503, 9461906579, 9462037657, 9462168761, 9462299881, - 9462430963, 9462562091, 9462693179, 9462824251, 9462955391, 9463086473, 9463217549, - 9463348637, 9463479721, 9463610831, 9463741909, 9463872991, 9464004103, 9464135179, - 9464266289, 9464397373, 9464528449, 9464659531, 9464790607, 9464921681, 9465052771, - 9465183899, 9465315001, 9465446093, 9465577171, 9465708277, 9465839417, 9465970511, - 9466101647, 9466232719, 9466363799, 9466494929, 9466626019, 9466757101, 9466888177, - 9467019253, 9467150333, 9467281457, 9467412547, 9467543629, 9467674703, 9467805799, - 9467936893, 9468067991, 9468199121, 9468330239, 9468461341, 9468592417, 9468723491, - 9468854569, 9468985657, 9469116751, 9469247833, 9469378943, 9469510049, 9469641239, - 9469772321, 9469903393, 9470034493, 9470165569, 9470296663, 9470427749, 9470558827, - 9470689901, 9470820973, 9470952067, 9471083143, 9471214237, 9471345311, 9471476393, - 9471607487, 9471738571, 9471869669, 9472000763, 9472131839, 9472262927, 9472394011, - 9472525109, 9472656181, 9472787263, 9472918337, 9473049461, 9473180543, 9473311633, - 9473442707, 9473573783, 9473704879, 9473835967, 9473967059, 9474098173, 9474229273, - 9474360347, 9474491449, 9474622583, 9474753737, 9474884827, 9475015919, 9475146991, - 9475278139, 9475409219, 9475540297, 9475671371, 9475802443, 9475933543, 9476064623, - 9476195699, 9476326777, 9476457931, 9476589019, 9476720111, 9476851211, 9476982289, - 9477113381, 9477244487, 9477375563, 9477506657, 9477637733, 9477768857, 9477899939, - 9478031021, 9478162097, 9478293263, 9478424353, 9478555453, 9478686571, 9478817651, - 9478948751, 9479079853, 9479210929, 9479342017, 9479473093, 9479604179, 9479735263, - 9479866343, 9479997421, 9480128513, 9480259603, 9480390679, 9480521779, 9480652891, - 9480784003, 9480915083, 9481046161, 9481177241, 9481308329, 9481439411, 9481570493, - 9481701577, 9481832653, 9481963727, 9482094841, 9482225927, 9482357021, 9482488109, - 9482619191, 9482750327, 9482881409, 9483012491, 9483143569, 9483274651, 9483405727, - 9483536807, 9483667909, 9483798997, 9483930083, 9484061159, 9484192231, 9484323353, - 9484454489, 9484585577, 9484716677, 9484847773, 9484978849, 9485109937, 9485241019, - 9485372101, 9485503189, 9485634269, 9485765357, 9485896477, 9486027553, 9486158639, - 9486289721, 9486420799, 9486551887, 9486682979, 9486814063, 9486945203, 9487076341, - 9487207421, 9487338557, 9487469639, 9487600799, 9487731887, 9487862987, 9487994059, - 9488125177, 9488256301, 9488387387, 9488518469, 9488649581, 9488780699, 9488911813, - 9489042889, 9489173987, 9489305101, 9489436189, 9489567277, 9489698353, 9489829441, - 9489960539, 9490091629, 9490222801, 9490353883, 9490484977, 9490616059, 9490747151, - 9490878223, 9491009303, 9491140381, 9491271499, 9491402681, 9491533759, 9491664851, - 9491795953, 9491927069, 9492058141, 9492189257, 9492320329, 9492451511, 9492582601, - 9492713683, 9492844789, 9492975911, 9493107053, 9493238137, 9493369271, 9493500361, - 9493631471, 9493762559, 9493893637, 9494024717, 9494155877, 9494287043, 9494418127, - 9494549203, 9494680303, 9494811377, 9494942473, 9495073559, 9495204643, 9495335753, - 9495466837, 9495597931, 9495729037, 9495860123, 9495991201, 9496122281, 9496253359, - 9496384459, 9496515577, 9496646651, 9496777727, 9496908803, 9497039891, 9497170967, - 9497302063, 9497433149, 9497564221, 9497695301, 9497826391, 9497957467, 9498088549, - 9498219629, 9498350707, 9498481789, 9498612863, 9498743951, 9498875047, 9499006151, - 9499137223, 9499268321, 9499399421, 9499530503, 9499661653, 9499792733, 9499923821, - 9500054897, 9500185969, 9500317051, 9500448157, 9500579243, 9500710319, 9500841407, - 9500972479, 9501103559, 9501234637, 9501365749, 9501496891, 9501627983, 9501759133, - 9501890239, 9502021337, 9502152437, 9502283513, 9502414631, 9502545713, 9502676801, - 9502807889, 9502938967, 9503070067, 9503201159, 9503332243, 9503463331, 9503594407, - 9503725481, 9503856559, 9503987671, 9504118769, 9504249871, 9504380947, 9504512021, - 9504643129, 9504774229, 9504905317, 9505036417, 9505167521, 9505298599, 9505429679, - 9505560767, 9505691879, 9505822961, 9505954033, 9506085107, 9506216197, 9506347303, - 9506478439, 9506609537, 9506740637, 9506871793, 9507002881, 9507133963, 9507265043, - 9507396139, 9507527251, 9507658339, 9507789413, 9507920491, 9508051607, 9508182689, - 9508313783, 9508444901, 9508575977, 9508707059, 9508838147, 9508969219, 9509100299, - 9509231371, 9509362451, 9509493523, 9509624617, 9509755711, 9509886811, 9510017903, - 9510148987, 9510280061, 9510411137, 9510542233, 9510673331, 9510804403, 9510935477, - 9511066567, 9511197673, 9511328747, 9511459819, 9511590917, 9511722019, 9511853111, - 9511984201, 9512115377, 9512246461, 9512377543, 9512508617, 9512639707, 9512770783, - 9512901887, 9513032959, 9513164051, 9513295123, 9513426203, 9513557309, 9513688411, - 9513819487, 9513950599, 9514081699, 9514212791, 9514343887, 9514474969, 9514606043, - 9514737137, 9514868243, 9514999321, 9515130407, 9515261507, 9515392597, 9515523673, - 9515654747, 9515785843, 9515916919, 9516047999, 9516179081, 9516310169, 9516441247, - 9516572323, 9516703429, 9516834521, 9516965609, 9517096697, 9517227781, 9517358933, - 9517490027, 9517621109, 9517752197, 9517883303, 9518014423, 9518145547, 9518276627, - 9518407721, 9518538811, 9518669917, 9518800997, 9518932091, 9519063187, 9519194261, - 9519325351, 9519456439, 9519587533, 9519718609, 9519849683, 9519980777, 9520111849, - 9520242943, 9520374079, 9520505213, 9520636297, 9520767371, 9520898459, 9521029541, - 9521160629, 9521291737, 9521422817, 9521553967, 9521685049, 9521816147, 9521947249, - 9522078347, 9522209441, 9522340519, 9522471601, 9522602689, 9522733783, 9522864863, - 9522995939, 9523127017, 9523258153, 9523389233, 9523520351, 9523651427, 9523782571, - 9523913653, 9524044727, 9524175827, 9524306903, 9524437987, 9524569063, 9524700139, - 9524831219, 9524962327, 9525093401, 9525224479, 9525355603, 9525486679, 9525617753, - 9525748847, 9525879931, 9526011037, 9526142141, 9526273231, 9526404317, 9526535401, - 9526666507, 9526797583, 9526928657, 9527059733, 9527190817, 9527321891, 9527452981, - 9527584109, 9527715191, 9527846291, 9527977373, 9528108461, 9528239537, 9528370633, - 9528501727, 9528632819, 9528763901, 9528895001, 9529026077, 9529157149, 9529288231, - 9529419307, 9529550399, 9529681481, 9529812661, 9529943741, 9530074819, 9530205931, - 9530337043, 9530468119, 9530599213, 9530730329, 9530861401, 9530992481, 9531123599, - 9531254693, 9531385807, 9531516889, 9531647981, 9531779057, 9531910159, 9532041263, - 9532172341, 9532303441, 9532434551, 9532565629, 9532696709, 9532827791, 9532958867, - 9533089967, 9533221043, 9533352119, 9533483203, 9533614291, 9533745407, 9533876479, - 9534007583, 9534138667, 9534269753, 9534400873, 9534531947, 9534663053, 9534794147, - 9534925219, 9535056299, 9535187381, 9535318477, 9535449559, 9535580657, 9535711751, - 9535842857, 9535973929, 9536105009, 9536236081, 9536367179, 9536498261, 9536629351, - 9536760439, 9536891513, 9537022597, 9537153671, 9537284773, 9537415847, 9537546923, - 9537678037, 9537809137, 9537940211, 9538071299, 9538202389, 9538333477, 9538464571, - 9538595699, 9538726787, 9538857893, 9538989001, 9539120083, 9539251159, 9539382247, - 9539513323, 9539644397, 9539775473, 9539906549, 9540037643, 9540168719, 9540299807, - 9540430937, 9540562021, 9540693103, 9540824177, 9540955321, 9541086419, 9541217501, - 9541348577, 9541479659, 9541610731, 9541741823, 9541872917, 9542003993, 9542135081, - 9542266157, 9542397329, 9542528423, 9542659531, 9542790619, 9542921699, 9543052777, - 9543183901, 9543314999, 9543446071, 9543577187, 9543708259, 9543839369, 9543970463, - 9544101557, 9544232639, 9544363733, 9544494811, 9544625887, 9544757003, 9544888091, - 9545019179, 9545150257, 9545281373, 9545412449, 9545543521, 9545674631, 9545805707, - 9545936779, 9546067871, 9546198947, 9546330023, 9546461161, 9546592247, 9546723343, - 9546854423, 9546985519, 9547116617, 9547247693, 9547378783, 9547509883, 9547640969, - 9547772071, 9547903147, 9548034233, 9548165309, 9548296393, 9548427491, 9548558563, - 9548689643, 9548820751, 9548951831, 9549082957, 9549214039, 9549345217, 9549476291, - 9549607451, 9549738533, 9549869617, 9550000693, 9550131791, 9550262863, 9550393939, - 9550525051, 9550656133, 9550787219, 9550918301, 9551049379, 9551180453, 9551311529, - 9551442611, 9551573747, 9551704831, 9551835919, 9551967041, 9552098113, 9552229187, - 9552360281, 9552491363, 9552622477, 9552753559, 9552884633, 9553015711, 9553146791, - 9553277887, 9553409009, 9553540091, 9553671163, 9553802287, 9553933397, 9554064517, - 9554195597, 9554326693, 9554457821, 9554588909, 9554720003, 9554851087, 9554982167, - 9555113257, 9555244373, 9555375457, 9555506531, 9555637613, 9555768707, 9555899783, - 9556030859, 9556161947, 9556293037, 9556424179, 9556555273, 9556686353, 9556817443, - 9556948547, 9557079641, 9557210713, 9557341861, 9557472937, 9557604137, 9557735249, - 9557866363, 9557997487, 9558128579, 9558259651, 9558390773, 9558521851, 9558652949, - 9558784033, 9558915133, 9559046209, 9559177301, 9559308373, 9559439453, 9559570549, - 9559701631, 9559832743, 9559963873, 9560094949, 9560226089, 9560357161, 9560488241, - 9560619331, 9560750413, 9560881487, 9561012563, 9561143699, 9561274831, 9561405961, - 9561537047, 9561668119, 9561799199, 9561930271, 9562061371, 9562192459, 9562323569, - 9562454659, 9562585733, 9562716811, 9562847887, 9562978961, 9563110043, 9563241131, - 9563372209, 9563503291, 9563634391, 9563765467, 9563896571, 9564027673, 9564158753, - 9564289831, 9564420953, 9564552077, 9564683189, 9564814277, 9564945349, 9565076429, - 9565207517, 9565338619, 9565469737, 9565600813, 9565731911, 9565862983, 9565994071, - 9566125157, 9566256257, 9566387351, 9566518441, 9566649527, 9566780621, 9566911693, - 9567042767, 9567173839, 9567304927, 9567436013, 9567567109, 9567698201, 9567829273, - 9567960379, 9568091461, 9568222537, 9568353617, 9568484689, 9568615781, 9568746857, - 9568877957, 9569009057, 9569140153, 9569271227, 9569402303, 9569533403, 9569664539, - 9569795621, 9569926693, 9570057767, 9570188843, 9570319919, 9570451003, 9570582079, - 9570713177, 9570844259, 9570975341, 9571106423, 9571237537, 9571368623, 9571499701, - 9571630781, 9571761863, 9571892969, 9572024051, 9572155127, 9572286223, 9572417329, - 9572548423, 9572679497, 9572810579, 9572941681, 9573072767, 9573203879, 9573334957, - 9573466033, 9573597109, 9573728237, 9573859369, 9573990449, 9574121533, 9574252663, - 9574383751, 9574514837, 9574645931, 9574777021, 9574908097, 9575039171, 9575170249, - 9575301343, 9575432423, 9575563499, 9575694577, 9575825659, 9575956751, 9576087827, - 9576218917, 9576350009, 9576481087, 9576612167, 9576743269, 9576874357, 9577005457, - 9577136549, 9577267657, 9577398737, 9577529833, 9577660909, 9577792019, 9577923101, - 9578054177, 9578185283, 9578316367, 9578447443, 9578578531, 9578709607, 9578840683, - 9578971757, 9579102887, 9579233999, 9579365111, 9579496259, 9579627367, 9579758473, - 9579889567, 9580020641, 9580151759, 9580282841, 9580413943, 9580545043, 9580676117, - 9580807231, 9580938359, 9581069473, 9581200591, 9581331667, 9581462741, 9581593829, - 9581724907, 9581855981, 9581987141, 9582118223, 9582249317, 9582380407, 9582511483, - 9582642583, 9582773663, 9582904763, 9583035863, 9583166947, 9583298029, 9583429127, - 9583560227, 9583691417, 9583822489, 9583953593, 9584084669, 9584215741, 9584346829, - 9584477909, 9584609017, 9584740093, 9584871173, 9585002249, 9585133391, 9585264473, - 9585395653, 9585526729, 9585657811, 9585788911, 9585919997, 9586051081, 9586182197, - 9586313299, 9586444393, 9586575469, 9586706579, 9586837679, 9586968793, 9587099909, - 9587230999, 9587362093, 9587493187, 9587624279, 9587755363, 9587886437, 9588017597, - 9588148673, 9588279749, 9588410837, 9588541927, 9588673033, 9588804143, 9588935243, - 9589066339, 9589197461, 9589328579, 9589459669, 9589590749, 9589721831, 9589853003, - 9589984081, 9590115173, 9590246311, 9590377421, 9590508493, 9590639593, 9590770687, - 9590901773, 9591032921, 9591164003, 9591295099, 9591426211, 9591557291, 9591688363, - 9591819437, 9591950657, 9592081747, 9592212827, 9592343923, 9592475003, 9592606087, - 9592737181, 9592868281, 9592999363, 9593130461, 9593261539, 9593392663, 9593523773, - 9593654881, 9593785973, 9593917049, 9594048127, 9594179281, 9594310387, 9594441481, - 9594572569, 9594703673, 9594834749, 9594965873, 9595096949, 9595228037, 9595359139, - 9595490231, 9595621309, 9595752401, 9595883477, 9596014573, 9596145649, 9596276749, - 9596407831, 9596538923, 9596670001, 9596801113, 9596932207, 9597063323, 9597194413, - 9597325499, 9597456577, 9597587669, 9597718763, 9597849853, 9597980933, 9598112023, - 9598243139, 9598374221, 9598505297, 9598636379, 9598767469, 9598898593, 9599029703, - 9599160799, 9599291873, 9599422949, 9599554037, 9599685119, 9599816201, 9599947297, - 9600078421, 9600209497, 9600340579, 9600471679, 9600602807, 9600733913, 9600865007, - 9600996079, 9601127191, 9601258267, 9601389341, 9601520449, 9601651523, 9601782623, - 9601913729, 9602044819, 9602175893, 9602306977, 9602438051, 9602569129, 9602700209, - 9602831299, 9602962417, 9603093499, 9603224611, 9603355717, 9603486797, 9603617909, - 9603749003, 9603880133, 9604011223, 9604142357, 9604273451, 9604404533, 9604535617, - 9604666741, 9604797817, 9604928891, 9605059973, 9605191081, 9605322157, 9605453233, - 9605584321, 9605715401, 9605846479, 9605977567, 9606108641, 9606239729, 9606370801, - 9606501881, 9606632953, 9606764033, 9606895127, 9607026199, 9607157299, 9607288381, - 9607419461, 9607550549, 9607681711, 9607812791, 9607943881, 9608074963, 9608206037, - 9608337113, 9608468227, 9608599303, 9608730409, 9608861497, 9608992571, 9609123703, - 9609254827, 9609385909, 9609516991, 9609648079, 9609779171, 9609910267, 9610041361, - 9610172441, 9610303513, 9610434637, 9610565711, 9610696783, 9610827887, 9610958977, - 9611090059, 9611221159, 9611352269, 9611483353, 9611614427, 9611745523, 9611876597, - 9612007681, 9612138799, 9612269921, 9612400999, 9612532087, 9612663163, 9612794237, - 9612925339, 9613056413, 9613187491, 9613318591, 9613449673, 9613580747, 9613711829, - 9613842929, 9613974001, 9614105153, 9614236231, 9614367313, 9614498419, 9614629499, - 9614760583, 9614891659, 9615022759, 9615153833, 9615284909, 9615415987, 9615547121, - 9615678203, 9615809323, 9615940457, 9616071533, 9616202621, 9616333693, 9616464769, - 9616595851, 9616726927, 9616858001, 9616989089, 9617120171, 9617251243, 9617382331, - 9617513417, 9617644501, 9617775599, 9617906671, 9618037769, 9618168869, 9618299983, - 9618431057, 9618562133, 9618693221, 9618824297, 9618955369, 9619086443, 9619217557, - 9619348631, 9619479703, 9619610779, 9619741877, 9619872971, 9620004049, 9620135123, - 9620266247, 9620397337, 9620528413, 9620659493, 9620790601, 9620921699, 9621052823, - 9621183917, 9621314993, 9621446069, 9621577151, 9621708241, 9621839329, 9621970409, - 9622101491, 9622232621, 9622363711, 9622494787, 9622625893, 9622756987, 9622888087, - 9623019181, 9623150263, 9623281337, 9623412431, 9623543543, 9623674639, 9623805731, - 9623936809, 9624067907, 9624199043, 9624330127, 9624461261, 9624592337, 9624723413, - 9624854513, 9624985613, 9625116701, 9625247837, 9625378921, 9625509997, 9625641071, - 9625772201, 9625903303, 9626034403, 9626165557, 9626296637, 9626427709, 9626558803, - 9626689889, 9626820971, 9626952043, 9627083117, 9627214199, 9627345271, 9627476387, - 9627607499, 9627738581, 9627869681, 9628000757, 9628131829, 9628262911, 9628394003, - 9628525099, 9628656173, 9628787251, 9628918361, 9629049461, 9629180557, 9629311631, - 9629442707, 9629573791, 9629704879, 9629835977, 9629967059, 9630098201, 9630229291, - 9630360401, 9630491473, 9630622559, 9630753673, 9630884759, 9631015841, 9631146913, - 9631277993, 9631409077, 9631540151, 9631671227, 9631802303, 9631933433, 9632064539, - 9632195611, 9632326703, 9632457859, 9632588963, 9632720063, 9632851139, 9632982223, - 9633113317, 9633244393, 9633375487, 9633506593, 9633637681, 9633768757, 9633899837, - 9634030937, 9634162061, 9634293133, 9634424209, 9634555291, 9634686377, 9634817459, - 9634948537, 9635079659, 9635210731, 9635341811, 9635472893, 9635603983, 9635735063, - 9635866181, 9635997281, 9636128357, 9636259513, 9636390611, 9636521701, 9636652811, - 9636783887, 9636915011, 9637046099, 9637177189, 9637308277, 9637439351, 9637570427, - 9637701511, 9637832639, 9637963717, 9638094797, 9638225873, 9638356961, 9638488037, - 9638619127, 9638750201, 9638881297, 9639012371, 9639143447, 9639274529, 9639405653, - 9639536737, 9639667867, 9639798977, 9639930059, 9640061161, 9640192249, 9640323367, - 9640454501, 9640585639, 9640716713, 9640847803, 9640978883, 9641109967, 9641241047, - 9641372201, 9641503273, 9641634347, 9641765431, 9641896529, 9642027613, 9642158737, - 9642289831, 9642420923, 9642551999, 9642683107, 9642814187, 9642945311, 9643076389, - 9643207489, 9643338569, 9643469681, 9643600787, 9643731859, 9643862933, 9643994023, - 9644125121, 9644256203, 9644387321, 9644518409, 9644649481, 9644780567, 9644911667, - 9645042791, 9645173891, 9645304987, 9645436063, 9645567143, 9645698233, 9645829327, - 9645960449, 9646091561, 9646222639, 9646353757, 9646484833, 9646615907, 9646747027, - 9646878103, 9647009179, 9647140259, 9647271353, 9647402431, 9647533547, 9647664643, - 9647795723, 9647926861, 9648057943, 9648189041, 9648320119, 9648451213, 9648582301, - 9648713377, 9648844463, 9648975541, 9649106657, 9649237729, 9649368809, 9649499891, - 9649631011, 9649762117, 9649893241, 9650024387, 9650155513, 9650286601, 9650417687, - 9650548759, 9650679851, 9650810933, 9650942009, 9651073127, 9651204217, 9651335293, - 9651466387, 9651597469, 9651728543, 9651859649, 9651990739, 9652121837, 9652252919, - 9652384061, 9652515149, 9652646231, 9652777399, 9652908493, 9653039567, 9653170643, - 9653301731, 9653432857, 9653563973, 9653695063, 9653826163, 9653957237, 9654088331, - 9654219499, 9654350611, 9654481729, 9654612809, 9654743897, 9654874997, 9655006091, - 9655137203, 9655268281, 9655399357, 9655530431, 9655661503, 9655792591, 9655923731, - 9656054843, 9656185961, 9656317037, 9656448163, 9656579237, 9656710339, 9656841419, - 9656972491, 9657103567, 9657234661, 9657365747, 9657496819, 9657627899, 9657758983, - 9657890093, 9658021169, 9658152271, 9658283351, 9658414477, 9658545581, 9658676663, - 9658807751, 9658938823, 9659069897, 9659200979, 9659332063, 9659463179, 9659594251, - 9659725331, 9659856407, 9659987521, 9660118621, 9660249719, 9660380803, 9660511879, - 9660642961, 9660774091, 9660905171, 9661036327, 9661167403, 9661298483, 9661429559, - 9661560631, 9661691713, 9661822921, 9661954013, 9662085193, 9662216273, 9662347421, - 9662478571, 9662609669, 9662740817, 9662871901, 9663003011, 9663134123, 9663265201, - 9663396277, 9663527369, 9663658441, 9663789523, 9663920599, 9664051699, 9664182779, - 9664313851, 9664444927, 9664576039, 9664707121, 9664838213, 9664969313, 9665100427, - 9665231507, 9665362601, 9665493727, 9665624833, 9665755927, 9665887009, 9666018097, - 9666149177, 9666280249, 9666411407, 9666542497, 9666673571, 9666804647, 9666935783, - 9667066859, 9667197959, 9667329037, 9667460137, 9667591237, 9667722349, 9667853441, - 9667984577, 9668115649, 9668246773, 9668377877, 9668509001, 9668640073, 9668771201, - 9668902277, 9669033379, 9669164459, 9669295543, 9669426631, 9669557707, 9669688783, - 9669819877, 9669950963, 9670082063, 9670213159, 9670344239, 9670475317, 9670606399, - 9670737491, 9670868609, 9670999711, 9671130809, 9671261893, 9671392967, 9671524103, - 9671655211, 9671786303, 9671917379, 9672048457, 9672179533, 9672310643, 9672441721, - 9672572803, 9672703897, 9672834991, 9672966067, 9673097191, 9673228303, 9673359383, - 9673490459, 9673621567, 9673752733, 9673883819, 9674014897, 9674145983, 9674277061, - 9674408141, 9674539213, 9674670289, 9674801369, 9674932453, 9675063527, 9675194603, - 9675325727, 9675456839, 9675587917, 9675719017, 9675850123, 9675981233, 9676112359, - 9676243463, 9676374541, 9676505647, 9676636727, 9676767847, 9676898927, 9677030021, - 9677161099, 9677292187, 9677423267, 9677554339, 9677685443, 9677816527, 9677947621, - 9678078703, 9678209791, 9678340871, 9678471947, 9678603029, 9678734101, 9678865213, - 9678996289, 9679127363, 9679258441, 9679389527, 9679520647, 9679651721, 9679782811, - 9679913891, 9680044973, 9680176081, 9680307167, 9680438263, 9680569351, 9680700433, - 9680831513, 9680962589, 9681093661, 9681224747, 9681355861, 9681486979, 9681618073, - 9681749149, 9681880297, 9682011407, 9682142527, 9682273603, 9682404763, 9682535839, - 9682666921, 9682798019, 9682929097, 9683060201, 9683191283, 9683322377, 9683453459, - 9683584541, 9683715619, 9683846701, 9683977829, 9684108911, 9684239989, 9684371063, - 9684502187, 9684633289, 9684764371, 9684895457, 9685026529, 9685157633, 9685288729, - 9685419823, 9685550951, 9685682029, 9685813133, 9685944227, 9686075309, 9686206391, - 9686337481, 9686468557, 9686599693, 9686730773, 9686861867, 9686992949, 9687124043, - 9687255173, 9687386249, 9687517339, 9687648431, 9687779513, 9687910613, 9688041733, - 9688172807, 9688303897, 9688435021, 9688566119, 9688697201, 9688828277, 9688959349, - 9689090459, 9689221567, 9689352643, 9689483729, 9689614807, 9689745889, 9689876969, - 9690008047, 9690139171, 9690270259, 9690401339, 9690532441, 9690663517, 9690794621, - 9690925757, 9691056829, 9691187903, 9691318981, 9691450079, 9691581157, 9691712293, - 9691843411, 9691974503, 9692105641, 9692236717, 9692367803, 9692498909, 9692629981, - 9692761093, 9692892241, 9693023339, 9693154417, 9693285491, 9693416573, 9693547651, - 9693678751, 9693809849, 9693940937, 9694072013, 9694203091, 9694334179, 9694465259, - 9694596377, 9694727467, 9694858597, 9694989691, 9695120783, 9695251879, 9695383007, - 9695514079, 9695645189, 9695776283, 9695907373, 9696038449, 9696169529, 9696300611, - 9696431683, 9696562769, 9696693907, 9696824981, 9696956063, 9697087189, 9697218313, - 9697349393, 9697480469, 9697611577, 9697742699, 9697873781, 9698004881, 9698135957, - 9698267093, 9698398169, 9698529241, 9698660329, 9698791411, 9698922521, 9699053597, - 9699184681, 9699315781, 9699446893, 9699577969, 9699709051, 9699840151, 9699971279, - 9700102387, 9700233493, 9700364627, 9700495711, 9700626787, 9700757867, 9700888961, - 9701020037, 9701151121, 9701282207, 9701413279, 9701544367, 9701675441, 9701806529, - 9701937601, 9702068681, 9702199753, 9702330839, 9702461911, 9702592993, 9702724079, - 9702855161, 9702986243, 9703117327, 9703248413, 9703379519, 9703510613, 9703641697, - 9703772779, 9703903861, 9704034941, 9704166041, 9704297123, 9704428213, 9704559287, - 9704690371, 9704821507, 9704952599, 9705083671, 9705214787, 9705345889, 9705476969, - 9705608051, 9705739123, 9705870203, 9706001399, 9706132481, 9706263559, 9706394669, - 9706525769, 9706656851, 9706787989, 9706919077, 9707050151, 9707181269, 9707312359, - 9707443439, 9707574571, 9707705681, 9707836769, 9707967859, 9708098951, 9708230023, - 9708361123, 9708492251, 9708623333, 9708754409, 9708885481, 9709016609, 9709147697, - 9709278769, 9709409851, 9709540927, 9709672001, 9709803097, 9709934177, 9710065297, - 9710196407, 9710327503, 9710458579, 9710589659, 9710720741, 9710851819, 9710982923, - 9711114019, 9711245107, 9711376201, 9711507283, 9711638393, 9711769477, 9711900551, - 9712031663, 9712162741, 9712293823, 9712424963, 9712556107, 9712687189, 9712818263, - 9712949339, 9713080411, 9713211503, 9713342579, 9713473661, 9713604737, 9713735809, - 9713866889, 9713997989, 9714129109, 9714260203, 9714391279, 9714522361, 9714653467, - 9714784577, 9714915713, 9715046819, 9715177903, 9715308983, 9715440061, 9715571137, - 9715702211, 9715833289, 9715964407, 9716095507, 9716226581, 9716357671, 9716488753, - 9716619827, 9716750903, 9716882051, 9717013129, 9717144221, 9717275297, 9717406373, - 9717537457, 9717668533, 9717799613, 9717930697, 9718061797, 9718192873, 9718323947, - 9718455037, 9718586147, 9718717237, 9718848317, 9718979401, 9719110487, 9719241577, - 9719372653, 9719503733, 9719634811, 9719765921, 9719897017, 9720028127, 9720159203, - 9720290299, 9720421379, 9720552463, 9720683569, 9720814661, 9720945733, 9721076821, - 9721207919, 9721339013, 9721470113, 9721601243, 9721732333, 9721863449, 9721994521, - 9722125601, 9722256721, 9722387861, 9722518973, 9722650109, 9722781221, 9722912299, - 9723043373, 9723174457, 9723305549, 9723436627, 9723567703, 9723698779, 9723829873, - 9723960973, 9724092071, 9724223209, 9724354301, 9724485427, 9724616509, 9724747639, - 9724878721, 9725009821, 9725140969, 9725272049, 9725403143, 9725534227, 9725665331, - 9725796449, 9725927527, 9726058603, 9726189701, 9726320803, 9726451877, 9726582967, - 9726714059, 9726845189, 9726976271, 9727107359, 9727238501, 9727369579, 9727500677, - 9727631801, 9727762931, 9727894013, 9728025103, 9728156203, 9728287291, 9728418379, - 9728549497, 9728680571, 9728811679, 9728942759, 9729073859, 9729204931, 9729336013, - 9729467089, 9729598171, 9729729257, 9729860341, 9729991423, 9730122497, 9730253587, - 9730384661, 9730515763, 9730646839, 9730777913, 9730908989, 9731040083, 9731171171, - 9731302267, 9731433347, 9731564441, 9731695513, 9731826667, 9731957761, 9732088837, - 9732219911, 9732350989, 9732482069, 9732613151, 9732744233, 9732875311, 9733006453, - 9733137529, 9733268603, 9733399723, 9733530803, 9733661879, 9733792961, 9733924043, - 9734055151, 9734186239, 9734317321, 9734448419, 9734579497, 9734710589, 9734841661, - 9734972771, 9735103849, 9735234923, 9735366007, 9735497131, 9735628211, 9735759307, - 9735890389, 9736021481, 9736152581, 9736283657, 9736414733, 9736545821, 9736676903, - 9736807981, 9736939097, 9737070169, 9737201281, 9737332387, 9737463467, 9737594641, - 9737725721, 9737856809, 9737987899, 9738119047, 9738250127, 9738381227, 9738512321, - 9738643403, 9738774503, 9738905597, 9739036751, 9739167827, 9739298903, 9739430027, - 9739561099, 9739692233, 9739823321, 9739954453, 9740085527, 9740216641, 9740347741, - 9740478833, 9740609941, 9740741029, 9740872103, 9741003199, 9741134323, 9741265397, - 9741396479, 9741527569, 9741658649, 9741789721, 9741920803, 9742051903, 9742183027, - 9742314103, 9742445183, 9742576289, 9742707371, 9742838471, 9742969559, 9743100667, - 9743231767, 9743362883, 9743493959, 9743625041, 9743756123, 9743887199, 9744018281, - 9744149353, 9744280451, 9744411527, 9744542617, 9744673691, 9744804763, 9744935843, - 9745066943, 9745198051, 9745329161, 9745460251, 9745591363, 9745722439, 9745853519, - 9745984613, 9746115689, 9746246843, 9746377951, 9746509039, 9746640151, 9746771227, - 9746902331, 9747033427, 9747164527, 9747295601, 9747426673, 9747557861, 9747688943, - 9747820067, 9747951193, 9748082287, 9748213373, 9748344451, 9748475567, 9748606663, - 9748737743, 9748868863, 9748999961, 9749131037, 9749262139, 9749393233, 9749524373, - 9749655451, 9749786531, 9749917607, 9750048713, 9750179807, 9750310909, 9750441989, - 9750573067, 9750704153, 9750835229, 9750966319, 9751097393, 9751228493, 9751359571, - 9751490687, 9751621793, 9751752887, 9751883959, 9752015033, 9752146111, 9752277191, - 9752408279, 9752539397, 9752670497, 9752801581, 9752932663, 9753063739, 9753194821, - 9753325903, 9753456997, 9753588077, 9753719153, 9753850231, 9753981311, 9754112399, - 9754243519, 9754374599, 9754505671, 9754636751, 9754767833, 9754898939, 9755030017, - 9755161121, 9755292193, 9755423267, 9755554349, 9755685553, 9755816641, 9755947741, - 9756078817, 9756209909, 9756341057, 9756472207, 9756603301, 9756734399, 9756865483, - 9756996581, 9757127683, 9757258787, 9757389883, 9757520977, 9757652071, 9757783163, - 9757914251, 9758045333, 9758176411, 9758307487, 9758438603, 9758569679, 9758700773, - 9758831879, 9758962957, 9759094039, 9759225143, 9759356227, 9759487307, 9759618391, - 9759749491, 9759880583, 9760011673, 9760142747, 9760273877, 9760404949, 9760536067, - 9760667149, 9760798247, 9760929319, 9761060429, 9761191507, 9761322587, 9761453659, - 9761584733, 9761715827, 9761846903, 9761977993, 9762109109, 9762240181, 9762371257, - 9762502349, 9762633473, 9762764549, 9762895621, 9763026733, 9763157813, 9763288943, - 9763420019, 9763551121, 9763682251, 9763813391, 9763944517, 9764075597, 9764206681, - 9764337763, 9764468843, 9764599921, 9764731019, 9764862097, 9764993207, 9765124289, - 9765255373, 9765386453, 9765517547, 9765648643, 9765779753, 9765910829, 9766041907, - 9766173019, 9766304123, 9766435219, 9766566391, 9766697497, 9766828613, 9766959703, - 9767090887, 9767221991, 9767353069, 9767484173, 9767615269, 9767746363, 9767877439, - 9768008533, 9768139639, 9768270719, 9768401813, 9768532897, 9768663979, 9768795097, - 9768926177, 9769057267, 9769188439, 9769319579, 9769450651, 9769581739, 9769712831, - 9769843913, 9769975001, 9770106107, 9770237207, 9770368297, 9770499391, 9770630479, - 9770761573, 9770892661, 9771023777, 9771154903, 9771285977, 9771417049, 9771548131, - 9771679223, 9771810299, 9771941371, 9772072451, 9772203523, 9772334603, 9772465679, - 9772596763, 9772727849, 9772858957, 9772990049, 9773121131, 9773252219, 9773383297, - 9773514371, 9773645443, 9773776553, 9773907653, 9774038741, 9774169817, 9774300917, - 9774432023, 9774563111, 9774694207, 9774825301, 9774956383, 9775087457, 9775218547, - 9775349681, 9775480783, 9775611893, 9775742989, 9775874071, 9776005147, 9776136221, - 9776267311, 9776398393, 9776529481, 9776660599, 9776791679, 9776922763, 9777053849, - 9777184951, 9777316037, 9777447181, 9777578257, 9777709363, 9777840467, 9777971563, - 9778102643, 9778233727, 9778364837, 9778495957, 9778627057, 9778758161, 9778889249, - 9779020327, 9779151427, 9779282503, 9779413613, 9779544689, 9779675761, 9779806849, - 9779937967, 9780069073, 9780200159, 9780331237, 9780462311, 9780593399, 9780724477, - 9780855569, 9780986659, 9781117733, 9781248817, 9781379899, 9781510987, 9781642103, - 9781773179, 9781904287, 9782035369, 9782166461, 9782297549, 9782428633, 9782559737, - 9782690831, 9782821903, 9782952979, 9783084131, 9783215237, 9783346343, 9783477419, - 9783608503, 9783739601, 9783870721, 9784001819, 9784132907, 9784264013, 9784395149, - 9784526267, 9784657361, 9784788449, 9784919533, 9785050619, 9785181701, 9785312773, - 9785443847, 9785574937, 9785706023, 9785837107, 9785968243, 9786099347, 9786230473, - 9786361567, 9786492643, 9786623719, 9786754799, 9786885877, 9787016957, 9787148051, - 9787279127, 9787410203, 9787541293, 9787672399, 9787803503, 9787934581, 9788065663, - 9788196749, 9788327893, 9788458993, 9788590067, 9788721181, 9788852327, 9788983409, - 9789114527, 9789245621, 9789376693, 9789507809, 9789638891, 9789770027, 9789901103, - 9790032209, 9790163281, 9790294361, 9790425461, 9790556551, 9790687649, 9790818749, - 9790949849, 9791080921, 9791212003, 9791343097, 9791474191, 9791605279, 9791736377, - 9791867461, 9791998597, 9792129673, 9792260747, 9792391823, 9792522919, 9792654013, - 9792785087, 9792916163, 9793047259, 9793178363, 9793309447, 9793440521, 9793571621, - 9793702733, 9793833809, 9793964899, 9794096009, 9794227087, 9794358187, 9794489273, - 9794620349, 9794751451, 9794882533, 9795013619, 9795144701, 9795275779, 9795406853, - 9795537943, 9795669017, 9795800089, 9795931163, 9796062247, 9796193333, 9796324441, - 9796455517, 9796586609, 9796717739, 9796848881, 9796979953, 9797111029, 9797242111, - 9797373191, 9797504317, 9797635429, 9797766569, 9797897651, 9798028739, 9798159823, - 9798290947, 9798422021, 9798553097, 9798684229, 9798815311, 9798946397, 9799077473, - 9799208557, 9799339637, 9799470713, 9799601803, 9799732883, 9799863961, 9799995053, - 9800126137, 9800257211, 9800388317, 9800519429, 9800650511, 9800781607, 9800912687, - 9801043781, 9801174869, 9801305977, 9801437077, 9801568163, 9801699239, 9801830329, - 9801961489, 9802092569, 9802223689, 9802354769, 9802485881, 9802616963, 9802748041, - 9802879181, 9803010253, 9803141329, 9803272459, 9803403539, 9803534693, 9803665777, - 9803796901, 9803927983, 9804059059, 9804190153, 9804321281, 9804452353, 9804583441, - 9804714523, 9804845623, 9804976697, 9805107791, 9805238879, 9805369991, 9805501163, - 9805632241, 9805763339, 9805894447, 9806025539, 9806156617, 9806287697, 9806418781, - 9806549873, 9806680963, 9806812039, 9806943121, 9807074197, 9807205307, 9807336391, - 9807467491, 9807598579, 9807729689, 9807860771, 9807991847, 9808122931, 9808254007, - 9808385087, 9808516177, 9808647253, 9808778327, 9808909421, 9809040541, 9809171633, - 9809302721, 9809433793, 9809564899, 9809696021, 9809827121, 9809958211, 9810089299, - 9810220417, 9810351503, 9810482597, 9810613699, 9810744781, 9810875881, 9811006993, - 9811138111, 9811269217, 9811400309, 9811531409, 9811662517, 9811793597, 9811924673, - 9812055751, 9812186827, 9812317903, 9812449001, 9812580083, 9812711189, 9812842267, - 9812973343, 9813104423, 9813235507, 9813366593, 9813497719, 9813628817, 9813759913, - 9813891011, 9814022147, 9814153309, 9814284397, 9814415473, 9814546561, 9814677637, - 9814808719, 9814939837, 9815070997, 9815202073, 9815333147, 9815464223, 9815595311, - 9815726413, 9815857487, 9815988619, 9816119693, 9816250783, 9816381917, 9816513017, - 9816644093, 9816775193, 9816906283, 9817037383, 9817168477, 9817299623, 9817430761, - 9817561867, 9817692943, 9817824047, 9817955131, 9818086237, 9818217313, 9818348479, - 9818479553, 9818610629, 9818741741, 9818872829, 9819003917, 9819134989, 9819266069, - 9819397141, 9819528233, 9819659329, 9819790411, 9819921493, 9820052579, 9820183651, - 9820314769, 9820445851, 9820576939, 9820708013, 9820839107, 9820970179, 9821101261, - 9821232347, 9821363467, 9821494591, 9821625683, 9821756771, 9821887843, 9822018959, - 9822150043, 9822281143, 9822412231, 9822543317, 9822674447, 9822805541, 9822936653, - 9823067767, 9823198849, 9823329931, 9823461031, 9823592111, 9823723183, 9823854269, - 9823985341, 9824116453, 9824247527, 9824378647, 9824509727, 9824640803, 9824771893, - 9824902979, 9825034061, 9825165151, 9825296269, 9825427343, 9825558427, 9825689509, - 9825820597, 9825951671, 9826082753, 9826213849, 9826344989, 9826476083, 9826607171, - 9826738283, 9826869361, 9827000437, 9827131543, 9827262617, 9827393729, 9827524867, - 9827655941, 9827787019, 9827918123, 9828049213, 9828180317, 9828311411, 9828442511, - 9828573607, 9828704777, 9828835879, 9828966977, 9829098113, 9829229197, 9829360273, - 9829491349, 9829622423, 9829753523, 9829884629, 9830015707, 9830146811, 9830277913, - 9830408999, 9830540087, 9830671159, 9830802239, 9830933381, 9831064469, 9831195589, - 9831326669, 9831457777, 9831588859, 9831719941, 9831851023, 9831982133, 9832113227, - 9832244311, 9832375387, 9832506473, 9832637597, 9832768691, 9832899781, 9833030873, - 9833161951, 9833293087, 9833424173, 9833555267, 9833686339, 9833817421, 9833948497, - 9834079579, 9834210667, 9834341753, 9834472847, 9834603929, 9834735011, 9834866113, - 9834997213, 9835128287, 9835259387, 9835390471, 9835521571, 9835652653, 9835783729, - 9835914811, 9836045909, 9836177063, 9836308147, 9836439281, 9836570369, 9836701447, - 9836832529, 9836963629, 9837094711, 9837225791, 9837356869, 9837487943, 9837619031, - 9837750133, 9837881227, 9838012307, 9838143443, 9838274539, 9838405639, 9838536731, - 9838667807, 9838798897, 9838930051, 9839061131, 9839192227, 9839323303, 9839454377, - 9839585453, 9839716553, 9839847631, 9839978711, 9840109817, 9840240901, 9840372043, - 9840503131, 9840634211, 9840765317, 9840896389, 9841027517, 9841158629, 9841289713, - 9841420801, 9841551877, 9841682971, 9841814093, 9841945177, 9842076259, 9842207351, - 9842338427, 9842469523, 9842600623, 9842731733, 9842862833, 9842993939, 9843125023, - 9843256117, 9843387199, 9843518297, 9843649373, 9843780451, 9843911537, 9844042631, - 9844173707, 9844304779, 9844435879, 9844567027, 9844698103, 9844829207, 9844960283, - 9845091367, 9845222447, 9845353523, 9845484599, 9845615683, 9845746783, 9845877869, - 9846008951, 9846140047, 9846271121, 9846402229, 9846533371, 9846664483, 9846795557, - 9846926629, 9847057709, 9847188809, 9847319927, 9847450999, 9847582093, 9847713191, - 9847844263, 9847975391, 9848106523, 9848237621, 9848368693, 9848499769, 9848630851, - 9848761927, 9848893051, 9849024149, 9849155227, 9849286331, 9849417421, 9849548537, - 9849679627, 9849810703, 9849941779, 9850072861, 9850203943, 9850335127, 9850466251, - 9850597333, 9850728469, 9850859569, 9850990673, 9851121757, 9851252839, 9851383933, - 9851515007, 9851646121, 9851777203, 9851908307, 9852039437, 9852170509, 9852301603, - 9852432683, 9852563767, 9852694847, 9852825937, 9852957011, 9853088083, 9853219199, - 9853350323, 9853481399, 9853612513, 9853743619, 9853874731, 9854005823, 9854136899, - 9854267971, 9854399069, 9854530141, 9854661233, 9854792327, 9854923417, 9855054527, - 9855185611, 9855316699, 9855447781, 9855578857, 9855709933, 9855841013, 9855972097, - 9856103177, 9856234253, 9856365331, 9856496471, 9856627553, 9856758631, 9856889759, - 9857020843, 9857151917, 9857283013, 9857414087, 9857545163, 9857676239, 9857807317, - 9857938399, 9858069493, 9858200581, 9858331657, 9858462749, 9858593827, 9858724903, - 9858855989, 9858987113, 9859118207, 9859249303, 9859380389, 9859511461, 9859642549, - 9859773631, 9859904713, 9860035793, 9860166871, 9860297957, 9860429057, 9860560153, - 9860691229, 9860822359, 9860953447, 9861084529, 9861215603, 9861346679, 9861477751, - 9861608837, 9861739919, 9861871013, 9862002091, 9862133167, 9862264253, 9862395401, - 9862526473, 9862657549, 9862788623, 9862919743, 9863050859, 9863181943, 9863313107, - 9863444197, 9863575273, 9863706361, 9863837443, 9863968549, 9864099647, 9864230743, - 9864361853, 9864492943, 9864624019, 9864755113, 9864886193, 9865017287, 9865148393, - 9865279471, 9865410547, 9865541629, 9865672709, 9865803803, 9865934917, 9866066083, - 9866197169, 9866328247, 9866459347, 9866590423, 9866721499, 9866852573, 9866983661, - 9867114757, 9867245833, 9867376949, 9867508069, 9867639149, 9867770233, 9867901319, - 9868032407, 9868163483, 9868294571, 9868425647, 9868556723, 9868687817, 9868818889, - 9868949969, 9869081051, 9869212153, 9869343283, 9869474357, 9869605429, 9869736509, - 9869867653, 9869998741, 9870129839, 9870260921, 9870392053, 9870523129, 9870654251, - 9870785329, 9870916421, 9871047493, 9871178567, 9871309667, 9871440749, 9871571861, - 9871702969, 9871834043, 9871965149, 9872096243, 9872227363, 9872358449, 9872489527, - 9872620601, 9872751719, 9872882797, 9873013919, 9873145021, 9873276097, 9873407177, - 9873538291, 9873669367, 9873800527, 9873931603, 9874062691, 9874193773, 9874324847, - 9874455923, 9874587001, 9874718089, 9874849199, 9874980407, 9875111503, 9875242607, - 9875373721, 9875504813, 9875635897, 9875766991, 9875898073, 9876029161, 9876160249, - 9876291343, 9876422417, 9876553499, 9876684589, 9876815699, 9876946789, 9877077907, - 9877208983, 9877340089, 9877471207, 9877602299, 9877733377, 9877864483, 9877995559, - 9878126647, 9878257721, 9878388809, 9878519899, 9878650993, 9878782073, 9878913151, - 9879044251, 9879175331, 9879306419, 9879437551, 9879568627, 9879699701, 9879830783, - 9879961873, 9880092949, 9880224023, 9880355099, 9880486177, 9880617287, 9880748377, - 9880879469, 9881010541, 9881141623, 9881272711, 9881403787, 9881534863, 9881665943, - 9881797049, 9881928151, 9882059249, 9882190361, 9882321437, 9882452533, 9882583609, - 9882714691, 9882845771, 9882976919, 9883107991, 9883239073, 9883370173, 9883501247, - 9883632457, 9883763551, 9883894663, 9884025763, 9884156851, 9884287967, 9884419043, - 9884550131, 9884681203, 9884812277, 9884943353, 9885074429, 9885205501, 9885336577, - 9885467677, 9885598759, 9885729851, 9885860951, 9885992041, 9886123123, 9886254221, - 9886385293, 9886516369, 9886647469, 9886778549, 9886909631, 9887040719, 9887171803, - 9887302883, 9887433961, 9887565073, 9887696153, 9887827247, 9887958331, 9888089411, - 9888220487, 9888351569, 9888482677, 9888613751, 9888744863, 9888875939, 9889007027, - 9889138099, 9889269191, 9889400291, 9889531381, 9889662457, 9889793591, 9889924673, - 9890055781, 9890186879, 9890317999, 9890449099, 9890580179, 9890711251, 9890842349, - 9890973427, 9891104507, 9891235589, 9891366671, 9891497773, 9891628847, 9891759923, - 9891891007, 9892022081, 9892153153, 9892284247, 9892415321, 9892546409, 9892677533, - 9892808609, 9892939691, 9893070779, 9893201861, 9893332951, 9893464039, 9893595121, - 9893726233, 9893857321, 9893988397, 9894119471, 9894250621, 9894381697, 9894512833, - 9894643937, 9894775039, 9894906149, 9895037237, 9895168321, 9895299397, 9895430509, - 9895561619, 9895692713, 9895823831, 9895954931, 9896086021, 9896217131, 9896348221, - 9896479321, 9896610431, 9896741513, 9896872597, 9897003703, 9897134801, 9897265877, - 9897396953, 9897528029, 9897659111, 9897790187, 9897921263, 9898052363, 9898183453, - 9898314529, 9898445647, 9898576729, 9898707803, 9898838879, 9898969957, 9899101039, - 9899232121, 9899363213, 9899494307, 9899625409, 9899756509, 9899887583, 9900018677, - 9900149771, 9900280843, 9900411919, 9900543017, 9900674089, 9900805199, 9900936277, - 9901067353, 9901198441, 9901329551, 9901460627, 9901591709, 9901722781, 9901853861, - 9901984969, 9902116043, 9902247139, 9902378231, 9902509307, 9902640389, 9902771531, - 9902902643, 9903033727, 9903164813, 9903295903, 9903426983, 9903558061, 9903689137, - 9903820219, 9903951313, 9904082393, 9904213493, 9904344607, 9904475681, 9904606757, - 9904737851, 9904868923, 9905000009, 9905131081, 9905262163, 9905393243, 9905524327, - 9905655439, 9905786519, 9905917591, 9906048673, 9906179753, 9906310831, 9906441917, - 9906572989, 9906704107, 9906835189, 9906966271, 9907097381, 9907228453, 9907359551, - 9907490641, 9907621721, 9907752817, 9907883893, 9908014967, 9908146081, 9908277163, - 9908408243, 9908539339, 9908670419, 9908801491, 9908932567, 9909063643, 9909194723, - 9909325813, 9909456899, 9909588037, 9909719123, 9909850211, 9909981307, 9910112389, - 9910243471, 9910374571, 9910505651, 9910636751, 9910767833, 9910898917, 9911029993, - 9911161093, 9911292169, 9911423243, 9911554321, 9911685479, 9911816567, 9911947709, - 9912078791, 9912209899, 9912340979, 9912472061, 9912603137, 9912734243, 9912865343, - 9912996421, 9913127531, 9913258651, 9913389743, 9913520819, 9913651921, 9913783001, - 9913914091, 9914045177, 9914176303, 9914307391, 9914438467, 9914569549, 9914700683, - 9914831803, 9914962877, 9915093949, 9915225029, 9915356159, 9915487277, 9915618359, - 9915749447, 9915880523, 9916011647, 9916142729, 9916273813, 9916404919, 9916536041, - 9916667113, 9916798187, 9916929307, 9917060399, 9917191481, 9917322581, 9917453653, - 9917584741, 9917715881, 9917846969, 9917978053, 9918109147, 9918240221, 9918371299, - 9918502387, 9918633467, 9918764561, 9918895669, 9919026743, 9919157819, 9919288921, - 9919420001, 9919551107, 9919682191, 9919813307, 9919944389, 9920075479, 9920206561, - 9920337649, 9920468731, 9920599807, 9920730923, 9920862019, 9920993107, 9921124193, - 9921255287, 9921386393, 9921517511, 9921648623, 9921779701, 9921910783, 9922041869, - 9922172977, 9922304069, 9922435147, 9922566233, 9922697327, 9922828403, 9922959499, - 9923090609, 9923221723, 9923352797, 9923483881, 9923614957, 9923746103, 9923877281, - 9924008371, 9924139447, 9924270533, 9924401609, 9924532687, 9924663781, 9924794879, - 9924925951, 9925057027, 9925188101, 9925319189, 9925450307, 9925581397, 9925712473, - 9925843547, 9925974629, 9926105711, 9926236807, 9926367883, 9926498957, 9926630029, - 9926761111, 9926892187, 9927023291, 9927154381, 9927285463, 9927416669, 9927547759, - 9927678841, 9927809929, 9927941017, 9928072103, 9928203203, 9928334281, 9928465357, - 9928596437, 9928727513, 9928858607, 9928989683, 9929120777, 9929251879, 9929382959, - 9929514043, 9929645137, 9929776217, 9929907329, 9930038401, 9930169499, 9930300571, - 9930431669, 9930562769, 9930693863, 9930824999, 9930956117, 9931087213, 9931218307, - 9931349383, 9931480513, 9931611587, 9931742699, 9931873789, 9932004869, 9932135951, - 9932267027, 9932398111, 9932529247, 9932660321, 9932791397, 9932922479, 9933053551, - 9933184633, 9933315719, 9933446797, 9933577883, 9933708979, 9933840071, 9933971197, - 9934102273, 9934233377, 9934364483, 9934495559, 9934626661, 9934757759, 9934888837, - 9935019917, 9935151011, 9935282083, 9935413217, 9935544337, 9935675443, 9935806549, - 9935937629, 9936068717, 9936199807, 9936330881, 9936461957, 9936593033, 9936724117, - 9936855211, 9936986299, 9937117451, 9937248553, 9937379687, 9937510771, 9937642051, - 9937773127, 9937904201, 9938035277, 9938166349, 9938297431, 9938428523, 9938559619, - 9938690759, 9938821883, 9938953043, 9939084121, 9939215197, 9939346271, 9939477389, - 9939608473, 9939739549, 9939870631, 9940001717, 9940132823, 9940263913, 9940394999, - 9940526107, 9940657267, 9940788343, 9940919419, 9941050499, 9941181583, 9941312713, - 9941443817, 9941574889, 9941706011, 9941837083, 9941968159, 9942099241, 9942230327, - 9942361411, 9942492487, 9942623591, 9942754667, 9942885739, 9943016827, 9943147937, - 9943279009, 9943410097, 9943541177, 9943672261, 9943803341, 9943934417, 9944065553, - 9944196629, 9944327707, 9944458781, 9944589859, 9944720963, 9944852039, 9944983129, - 9945114229, 9945245329, 9945376403, 9945507491, 9945638579, 9945769651, 9945900761, - 9946031833, 9946162913, 9946293997, 9946425077, 9946556153, 9946687229, 9946818311, - 9946949401, 9947080523, 9947211619, 9947342731, 9947473817, 9947604923, 9947735999, - 9947867077, 9947998153, 9948129227, 9948260341, 9948391417, 9948522503, 9948653639, - 9948784721, 9948915881, 9949046963, 9949178053, 9949309129, 9949440203, 9949571309, - 9949702391, 9949833473, 9949964597, 9950095679, 9950226751, 9950357887, 9950488963, - 9950620051, 9950751133, 9950882251, 9951013343, 9951144433, 9951275561, 9951406639, - 9951537737, 9951668813, 9951799903, 9951930977, 9952062097, 9952193171, 9952324301, - 9952455389, 9952586467, 9952717561, 9952848677, 9952979791, 9953110877, 9953242001, - 9953373083, 9953504177, 9953635277, 9953766391, 9953897489, 9954028627, 9954159713, - 9954290791, 9954421871, 9954552943, 9954684059, 9954815131, 9954946231, 9955077313, - 9955208399, 9955339487, 9955470559, 9955601641, 9955732733, 9955863851, 9955994941, - 9956126023, 9956257097, 9956388179, 9956519269, 9956650367, 9956781449, 9956912527, - 9957043627, 9957174701, 9957305833, 9957436927, 9957568037, 9957699121, 9957830227, - 9957961301, 9958092401, 9958223489, 9958354579, 9958485679, 9958616753, 9958747847, - 9958878931, 9959010007, 9959141089, 9959272171, 9959403277, 9959534357, 9959665433, - 9959796521, 9959927599, 9960058699, 9960189779, 9960320861, 9960451981, 9960583097, - 9960714173, 9960845261, 9960976351, 9961107433, 9961238537, 9961369661, 9961500743, - 9961631833, 9961762913, 9961894003, 9962025089, 9962156161, 9962287253, 9962418373, - 9962549477, 9962680573, 9962811647, 9962942747, 9963073847, 9963204919, 9963335999, - 9963467081, 9963598159, 9963729241, 9963860341, 9963991441, 9964122523, 9964253599, - 9964384673, 9964515773, 9964646969, 9964778053, 9964909237, 9965040311, 9965171387, - 9965302517, 9965433593, 9965564671, 9965695763, 9965826847, 9965957941, 9966089041, - 9966220153, 9966351229, 9966482321, 9966613399, 9966744503, 9966875603, 9967006697, - 9967137769, 9967268863, 9967399951, 9967531039, 9967662121, 9967793197, 9967924327, - 9968055463, 9968186551, 9968317651, 9968448751, 9968579837, 9968710919, 9968842003, - 9968973083, 9969104161, 9969235247, 9969366373, 9969497491, 9969628573, 9969759659, - 9969890803, 9970021877, 9970152949, 9970284043, 9970415131, 9970546211, 9970677317, - 9970808389, 9970939463, 9971070559, 9971201663, 9971332741, 9971463839, 9971594911, - 9971725987, 9971857117, 9971988203, 9972119299, 9972250391, 9972381479, 9972512581, - 9972643657, 9972774811, 9972905893, 9973036967, 9973168057, 9973299131, 9973430231, - 9973561337, 9973692433, 9973823513, 9973954607, 9974085679, 9974216767, 9974347843, - 9974478923, 9974610013, 9974741093, 9974872183, 9975003263, 9975134341, 9975265441, - 9975396517, 9975527609, 9975658727, 9975789799, 9975920881, 9976051991, 9976183097, - 9976314191, 9976445279, 9976576367, 9976707443, 9976838519, 9976969621, 9977100719, - 9977231791, 9977362877, 9977493979, 9977625089, 9977756177, 9977887279, 9978018353, - 9978149453, 9978280537, 9978411629, 9978542711, 9978673801, 9978804893, 9978935999, - 9979067071, 9979198153, 9979329259, 9979460353, 9979591439, 9979722539, 9979853627, - 9979984699, 9980115779, 9980246863, 9980377951, 9980509043, 9980640133, 9980771221, - 9980902313, 9981033397, 9981164483, 9981295591, 9981426713, 9981557801, 9981688883, - 9981820021, 9981951107, 9982082191, 9982213271, 9982344371, 9982475443, 9982606523, - 9982737619, 9982868729, 9982999849, 9983130943, 9983262043, 9983393137, 9983524211, - 9983655299, 9983786383, 9983917477, 9984048551, 9984179627, 9984310717, 9984441821, - 9984572933, 9984704063, 9984835139, 9984966223, 9985097357, 9985228471, 9985359577, - 9985490653, 9985621727, 9985752823, 9985883909, 9986015047, 9986146129, 9986277209, - 9986408281, 9986539391, 9986670511, 9986801611, 9986932691, 9987063767, 9987194857, - 9987325963, 9987457061, 9987588137, 9987719233, 9987850309, 9987981433, 9988112531, - 9988243607, 9988374679, 9988505773, 9988636901, 9988767973, 9988899061, 9989030137, - 9989161243, 9989292319, 9989423419, 9989554517, 9989685623, 9989816729, 9989947817, - 9990078893, 9990209989, 9990341069, 9990472237, 9990603323, 9990734401, 9990865517, - 9990996607, 9991127683, 9991258757, 9991389833, 9991520909, 9991652059, 9991783199, - 9991914281, 9992045363, 9992176459, 9992307551, 9992438623, 9992569747, 9992700821, - 9992831929, 9992963017, 9993094103, 9993225191, 9993356281, 9993487363, 9993618451, - 9993749611, 9993880697, 9994011809, 9994142881, 9994273987, 9994405159, 9994536239, - 9994667327, 9994798427, 9994929517, 9995060617, 9995191697, 9995322797, 9995453869, - 9995584943, 9995716033, 9995847137, 9995978221, 9996109301, 9996240391, 9996371479, - 9996502561, 9996633697, 9996764797, 9996895871, 9997026989, 9997158071, 9997289143, - 9997420229, 9997551307, 9997682381, 9997813453, 9997944547, 9998075629, 9998206709, - 9998337821, 9998468899, 9998600009, 9998731091, 9998862163, 9998993243, 9999124337, - 9999255433, 9999386533, 9999517631, 9999648707, 9999779809, 9999910883, 10000042001, - 10000173089, 10000304161, 10000435261, 10000566361, 10000697449, 10000828601, 10000959673, - 10001090747, 10001221849, 10001352941, 10001484019, 10001615093, 10001746211, 10001877299, - 10002008417, 10002139507, 10002270599, 10002401701, 10002532829, 10002663907, 10002794981, - 10002926117, 10003057199, 10003188329, 10003319437, 10003450517, 10003581589, 10003712671, - 10003843763, 10003974899, 10004105977, 10004237051, 10004368123, 10004499217, 10004630327, - 10004761447, 10004892533, 10005023659, 10005154759, 10005285839, 10005416947, 10005548027, - 10005679127, 10005810203, 10005941293, 10006072423, 10006203497, 10006334579, 10006465661, - 10006596737, 10006727821, 10006858921, 10006990027, 10007121133, 10007252209, 10007383291, - 10007514367, 10007645441, 10007776553, 10007907631, 10008038723, 10008169811, 10008300971, - 10008432047, 10008563129, 10008694229, 10008825317, 10008956389, 10009087469, 10009218547, - 10009349629, 10009480709, 10009611811, 10009742903, 10009874009, 10010005091, 10010136179, - 10010267269, 10010398397, 10010529481, 10010660563, 10010791657, 10010922731, 10011053809, - 10011184889, 10011315983, 10011447109, 10011578197, 10011709289, 10011840367, 10011971447, - 10012102601, 10012233739, 10012364819, 10012495937, 10012627019, 10012758097, 10012889171, - 10013020249, 10013151353, 10013282471, 10013413583, 10013544703, 10013675803, 10013806877, - 10013937953, 10014069029, 10014200123, 10014331211, 10014462317, 10014593401, 10014724481, - 10014855553, 10014986627, 10015117699, 10015248773, 10015379849, 10015510933, 10015642009, - 10015773101, 10015904177, 10016035261, 10016166353, 10016297453, 10016428553, 10016559643, - 10016690759, 10016821847, 10016952919, 10017084023, 10017215107, 10017346217, 10017477313, - 10017608473, 10017739561, 10017870637, 10018001729, 10018132801, 10018263919, 10018394999, - 10018526081, 10018657163, 10018788281, 10018919381, 10019050463, 10019181539, 10019312657, - 10019443781, 10019574853, 10019705953, 10019837053, 10019968129, 10020099211, 10020230303, - 10020361469, 10020492557, 10020623677, 10020754753, 10020885871, 10021016953, 10021148029, - 10021279109, 10021410181, 10021541303, 10021672387, 10021803469, 10021934551, 10022065723, - 10022196803, 10022327881, 10022458969, 10022590049, 10022721143, 10022852219, 10022983291, - 10023114373, 10023245461, 10023376541, 10023507629, 10023638701, 10023769793, 10023900883, - 10024031959, 10024163087, 10024294211, 10024425311, 10024556387, 10024687459, 10024818539, - 10024949633, 10025080717, 10025211793, 10025342897, 10025473987, 10025605067, 10025736139, - 10025867213, 10025998289, 10026129367, 10026260479, 10026391553, 10026522629, 10026653743, - 10026784837, 10026915937, 10027047011, 10027178087, 10027309163, 10027440251, 10027571377, - 10027702499, 10027833649, 10027964747, 10028095849, 10028226931, 10028358031, 10028489113, - 10028620201, 10028751277, 10028882371, 10029013499, 10029144581, 10029275653, 10029406727, - 10029537851, 10029668923, 10029799999, 10029931091, 10030062179, 10030193267, 10030324361, - 10030455437, 10030586509, 10030717591, 10030848671, 10030979753, 10031110841, 10031241923, - 10031373007, 10031504089, 10031635183, 10031766259, 10031897333, 10032028453, 10032159551, - 10032290623, 10032421697, 10032552773, 10032683861, 10032814937, 10032946019, 10033077107, - 10033208209, 10033339297, 10033470407, 10033601509, 10033732603, 10033863701, 10033994777, - 10034125879, 10034256997, 10034388079, 10034519167, 10034650261, 10034781397, 10034912477, - 10035043621, 10035174733, 10035305809, 10035436903, 10035568033, 10035699133, 10035830213, - 10035961391, 10036092509, 10036223597, 10036354693, 10036485791, 10036616899, 10036747979, - 10036879051, 10037010127, 10037141201, 10037272307, 10037403403, 10037534501, 10037665577, - 10037796649, 10037927741, 10038058813, 10038189893, 10038320983, 10038452069, 10038583193, - 10038714271, 10038845353, 10038976427, 10039107523, 10039238597, 10039369673, 10039500767, - 10039631851, 10039762939, 10039894037, 10040025133, 10040156239, 10040287321, 10040418407, - 10040549501, 10040680589, 10040811673, 10040942777, 10041073859, 10041204961, 10041336037, - 10041467119, 10041598247, 10041729329, 10041860419, 10041991507, 10042122617, 10042253699, - 10042384771, 10042515863, 10042646993, 10042778077, 10042909157, 10043040263, 10043171363, - 10043302453, 10043433527, 10043564599, 10043695687, 10043826761, 10043957863, 10044088961, - 10044220051, 10044351131, 10044482207, 10044613301, 10044744397, 10044875473, 10045006549, - 10045137623, 10045268731, 10045399843, 10045530917, 10045661993, 10045793123, 10045924219, - 10046055301, 10046186377, 10046317483, 10046448583, 10046579657, 10046710763, 10046841839, - 10046972911, 10047103991, 10047235087, 10047366211, 10047497311, 10047628441, 10047759541, - 10047890621, 10048021721, 10048152811, 10048283941, 10048415017, 10048546111, 10048677229, - 10048808309, 10048939423, 10049070497, 10049201579, 10049332669, 10049463821, 10049594957, - 10049726047, 10049857133, 10049988217, 10050119311, 10050250403, 10050381527, 10050512609, - 10050643699, 10050774791, 10050905863, 10051036979, 10051168069, 10051299157, 10051430273, - 10051561379, 10051692467, 10051823599, 10051954681, 10052085773, 10052216897, 10052347999, - 10052479081, 10052610203, 10052741299, 10052872381, 10053003469, 10053134563, 10053265667, - 10053396739, 10053527831, 10053658919, 10053790001, 10053921077, 10054052189, 10054183267, - 10054314353, 10054445431, 10054576517, 10054707599, 10054838693, 10054969807, 10055100907, - 10055231981, 10055363057, 10055494139, 10055625211, 10055756287, 10055887363, 10056018457, - 10056149557, 10056280643, 10056411731, 10056542819, 10056673897, 10056804973, 10056936049, - 10057067123, 10057198223, 10057329367, 10057460489, 10057591589, 10057722671, 10057853801, - 10057984877, 10058115973, 10058247077, 10058378167, 10058509243, 10058640349, 10058771467, - 10058902571, 10059033643, 10059164743, 10059295817, 10059426913, 10059558043, 10059689117, - 10059820213, 10059951287, 10060082377, 10060213517, 10060344607, 10060475731, 10060606807, - 10060737959, 10060869061, 10061000149, 10061131243, 10061262361, 10061393453, 10061524541, - 10061655619, 10061786729, 10061917819, 10062048959, 10062180071, 10062311159, 10062442249, - 10062573349, 10062704459, 10062835561, 10062966659, 10063097743, 10063228817, 10063359907, - 10063491079, 10063622183, 10063753267, 10063884367, 10064015441, 10064146567, 10064277679, - 10064408759, 10064539843, 10064670929, 10064802019, 10064933129, 10065064259, 10065195331, - 10065326449, 10065457543, 10065588619, 10065719693, 10065850829, 10065981907, 10066112989, - 10066244107, 10066375213, 10066506319, 10066637419, 10066768493, 10066899569, 10067030647, - 10067161739, 10067292817, 10067423893, 10067554999, 10067686099, 10067817173, 10067948249, - 10068079331, 10068210403, 10068341489, 10068472567, 10068603653, 10068734737, 10068865811, - 10068996923, 10069128023, 10069259117, 10069390189, 10069521271, 10069652371, 10069783459, - 10069914551, 10070045639, 10070176811, 10070307887, 10070438981, 10070570077, 10070701159, - 10070832241, 10070963317, 10071094391, 10071225469, 10071356557, 10071487639, 10071618719, - 10071749819, 10071880891, 10072011973, 10072143061, 10072274141, 10072405271, 10072536361, - 10072667441, 10072798523, 10072929613, 10073060717, 10073191841, 10073322947, 10073454073, - 10073585147, 10073716243, 10073847359, 10073978437, 10074109511, 10074240587, 10074371663, - 10074502747, 10074633827, 10074764899, 10074896009, 10075027087, 10075158161, 10075289251, - 10075420373, 10075551457, 10075682549, 10075813633, 10075944721, 10076075833, 10076206913, - 10076338007, 10076469083, 10076600167, 10076731243, 10076862329, 10076993461, 10077124553, - 10077255641, 10077386713, 10077517811, 10077648923, 10077780007, 10077911099, 10078042207, - 10078173349, 10078304461, 10078435547, 10078566629, 10078697701, 10078828801, 10078959883, - 10079091017, 10079222093, 10079353183, 10079484307, 10079615411, 10079746483, 10079877589, - 10080008693, 10080139777, 10080270857, 10080401959, 10080533051, 10080664141, 10080795217, - 10080926293, 10081057367, 10081188497, 10081319623, 10081450723, 10081581817, 10081712891, - 10081843969, 10081975051, 10082106127, 10082237257, 10082368333, 10082499457, 10082630531, - 10082761613, 10082892691, 10083023767, 10083154847, 10083286009, 10083417163, 10083548263, - 10083679337, 10083810413, 10083941501, 10084072573, 10084203673, 10084334761, 10084465877, - 10084596953, 10084728089, 10084859171, 10084990243, 10085121317, 10085252399, 10085383471, - 10085514553, 10085645651, 10085776769, 10085907857, 10086038933, 10086170011, 10086301091, - 10086432217, 10086563321, 10086694399, 10086825499, 10086956573, 10087087693, 10087218773, - 10087349903, 10087480979, 10087612103, 10087743209, 10087874297, 10088005373, 10088136463, - 10088267543, 10088398643, 10088529719, 10088660849, 10088791963, 10088923063, 10089054137, - 10089185233, 10089316339, 10089447437, 10089578533, 10089709649, 10089840779, 10089971861, - 10090102937, 10090234013, 10090365107, 10090496179, 10090627289, 10090758383, 10090889467, - 10091020543, 10091151619, 10091282723, 10091413831, 10091544907, 10091676031, 10091807107, - 10091938189, 10092069277, 10092200387, 10092331463, 10092462553, 10092593639, 10092724717, - 10092855797, 10092986879, 10093117967, 10093249043, 10093380151, 10093511231, 10093642313, - 10093773401, 10093904477, 10094035561, 10094166637, 10094297737, 10094428811, 10094559883, - 10094690959, 10094822047, 10094953147, 10095084227, 10095215303, 10095346379, 10095477479, - 10095608563, 10095739657, 10095870779, 10096001887, 10096132967, 10096264039, 10096395121, - 10096526201, 10096657279, 10096788367, 10096919479, 10097050571, 10097181649, 10097312759, - 10097443871, 10097574953, 10097706029, 10097837107, 10097968201, 10098099283, 10098230369, - 10098361451, 10098492529, 10098623621, 10098754697, 10098885821, 10099016899, 10099147979, - 10099279061, 10099410179, 10099541261, 10099672367, 10099803449, 10099934521, 10100065597, - 10100196671, 10100327767, 10100458847, 10100589931, 10100721017, 10100852089, 10100983171, - 10101114271, 10101245359, 10101376457, 10101507601, 10101638689, 10101769787, 10101900917, - 10102032001, 10102163083, 10102294177, 10102425283, 10102556413, 10102687489, 10102818577, - 10102949653, 10103080753, 10103211857, 10103342941, 10103474023, 10103605097, 10103736169, - 10103867273, 10103998349, 10104129439, 10104260531, 10104391603, 10104522683, 10104653759, - 10104784861, 10104915941, 10105047019, 10105178117, 10105309219, 10105440329, 10105571407, - 10105702489, 10105833581, 10105964699, 10106095771, 10106226859, 10106357953, 10106489033, - 10106620151, 10106751229, 10106882321, 10107013429, 10107144511, 10107275609, 10107406681, - 10107537757, 10107668911, 10107799991, 10107931109, 10108062199, 10108193327, 10108324439, - 10108455517, 10108586639, 10108717721, 10108848811, 10108979897, 10109110981, 10109242057, - 10109373133, 10109504219, 10109635313, 10109766413, 10109897509, 10110028589, 10110159679, - 10110290753, 10110421829, 10110552913, 10110684037, 10110815123, 10110946217, 10111077289, - 10111208389, 10111339499, 10111470583, 10111601657, 10111732747, 10111863841, 10111994917, - 10112126009, 10112257091, 10112388191, 10112519299, 10112650393, 10112781491, 10112912569, - 10113043643, 10113174763, 10113305843, 10113436919, 10113568081, 10113699181, 10113830263, - 10113961343, 10114092419, 10114223519, 10114354597, 10114485673, 10114616749, 10114747823, - 10114878919, 10115010023, 10115141123, 10115272199, 10115403271, 10115534371, 10115665453, - 10115796529, 10115927603, 10116058681, 10116189781, 10116320857, 10116451931, 10116583019, - 10116714107, 10116845281, 10116976393, 10117107487, 10117238567, 10117369643, 10117500739, - 10117631813, 10117762909, 10117893991, 10118025077, 10118156201, 10118287327, 10118418407, - 10118549479, 10118680571, 10118811653, 10118942731, 10119073841, 10119204937, 10119336061, - 10119467143, 10119598231, 10119729331, 10119860449, 10119991537, 10120122637, 10120253711, - 10120384783, 10120515857, 10120646929, 10120778029, 10120909111, 10121040187, 10121171261, - 10121302349, 10121433431, 10121564561, 10121695651, 10121826751, 10121957827, 10122088913, - 10122219997, 10122351097, 10122482179, 10122613271, 10122744347, 10122875429, 10123006513, - 10123137587, 10123268663, 10123399771, 10123530853, 10123662013, 10123793089, 10123924177, - 10124055289, 10124186363, 10124317457, 10124448571, 10124579657, 10124710781, 10124841869, - 10124972959, 10125104039, 10125235117, 10125366203, 10125497287, 10125628391, 10125759467, - 10125890569, 10126021649, 10126152721, 10126283813, 10126414891, 10126546037, 10126677109, - 10126808227, 10126939327, 10127070403, 10127201477, 10127332549, 10127463649, 10127594731, - 10127725831, 10127856917, 10127987993, 10128119077, 10128250159, 10128381259, 10128512333, - 10128643409, 10128774497, 10128905593, 10129036669, 10129167743, 10129298849, 10129429951, - 10129561037, 10129692119, 10129823203, 10129954309, 10130085397, 10130216501, 10130347573, - 10130478689, 10130609771, 10130740889, 10130871983, 10131003083, 10131134171, 10131265247, - 10131396343, 10131527423, 10131658499, 10131789589, 10131920663, 10132051757, 10132182829, - 10132313921, 10132444997, 10132576081, 10132707157, 10132838267, 10132969361, 10133100433, - 10133231519, 10133362597, 10133493677, 10133624771, 10133755871, 10133886947, 10134018031, - 10134149107, 10134280181, 10134411281, 10134542381, 10134673459, 10134804577, 10134935677, - 10135066757, 10135197841, 10135328927, 10135460021, 10135591133, 10135722229, 10135853359, - 10135984483, 10136115557, 10136246629, 10136377709, 10136508817, 10136639899, 10136771011, - 10136902093, 10137033187, 10137164287, 10137295367, 10137426443, 10137557537, 10137688657, - 10137819737, 10137950831, 10138081939, 10138213027, 10138344107, 10138475189, 10138606267, - 10138737347, 10138868423, 10138999501, 10139130581, 10139261653, 10139392759, 10139523847, - 10139654927, 10139786009, 10139917111, 10140048221, 10140179299, 10140310381, 10140441463, - 10140572537, 10140703613, 10140834701, 10140965803, 10141096883, 10141227959, 10141359047, - 10141490171, 10141621253, 10141752337, 10141883413, 10142014489, 10142145571, 10142276647, - 10142407739, 10142538907, 10142670053, 10142801131, 10142932277, 10143063367, 10143194443, - 10143325529, 10143456667, 10143587749, 10143718927, 10143850001, 10143981077, 10144112161, - 10144243273, 10144374367, 10144505461, 10144636547, 10144767671, 10144898749, 10145029831, - 10145160917, 10145292013, 10145423089, 10145554169, 10145685241, 10145816321, 10145947397, - 10146078473, 10146209599, 10146340679, 10146471757, 10146602831, 10146733903, 10146864983, - 10146996077, 10147127183, 10147258271, 10147389361, 10147520441, 10147651583, 10147782661, - 10147913759, 10148044867, 10148175977, 10148307073, 10148438159, 10148569253, 10148700329, - 10148831419, 10148962501, 10149093583, 10149224681, 10149355757, 10149486833, 10149617911, - 10149749009, 10149880087, 10150011161, 10150142243, 10150273319, 10150404401, 10150535501, - 10150666597, 10150797673, 10150928761, 10151059861, 10151190937, 10151322019, 10151453111, - 10151584211, 10151715307, 10151846417, 10151977513, 10152108587, 10152239663, 10152370747, - 10152501823, 10152632911, 10152764033, 10152895111, 10153026193, 10153157359, 10153288447, - 10153419571, 10153550717, 10153681793, 10153812917, 10153944041, 10154075117, 10154206207, - 10154337311, 10154468399, 10154599471, 10154730563, 10154861653, 10154992753, 10155123877, - 10155254951, 10155386027, 10155517111, 10155648193, 10155779279, 10155910351, 10156041499, - 10156172627, 10156303739, 10156434811, 10156565891, 10156696967, 10156828049, 10156959121, - 10157090197, 10157221271, 10157352379, 10157483473, 10157614549, 10157745671, 10157876749, - 10158007823, 10158138917, 10158270013, 10158401093, 10158532169, 10158663289, 10158794417, - 10158925489, 10159056679, 10159187771, 10159318843, 10159449977, 10159581109, 10159712203, - 10159843303, 10159974397, 10160105477, 10160236549, 10160367631, 10160498743, 10160629849, - 10160760931, 10160892059, 10161023149, 10161154319, 10161285397, 10161416471, 10161547573, - 10161678647, 10161809719, 10161940807, 10162071893, 10162202993, 10162334089, 10162465169, - 10162596259, 10162727431, 10162858507, 10162989581, 10163120711, 10163251817, 10163382907, - 10163513989, 10163645069, 10163776159, 10163907301, 10164038449, 10164169553, 10164300631, - 10164431731, 10164562817, 10164693893, 10164824981, 10164956057, 10165087129, 10165218211, - 10165349297, 10165480373, 10165611503, 10165742591, 10165873693, 10166004767, 10166135869, - 10166266969, 10166398049, 10166529169, 10166660249, 10166791331, 10166922413, 10167053509, - 10167184591, 10167315673, 10167446767, 10167577841, 10167708917, 10167839993, 10167971137, - 10168102229, 10168233343, 10168364419, 10168495517, 10168626599, 10168757681, 10168888771, - 10169019899, 10169151043, 10169282153, 10169413231, 10169544367, 10169675447, 10169806529, - 10169937601, 10170068791, 10170199873, 10170330949, 10170462037, 10170593117, 10170724199, - 10170855271, 10170986369, 10171117471, 10171248551, 10171379663, 10171510829, 10171641901, - 10171773019, 10171904101, 10172035183, 10172166271, 10172297351, 10172428439, 10172559533, - 10172690623, 10172821721, 10172952809, 10173083923, 10173215027, 10173346121, 10173477217, - 10173608293, 10173739379, 10173870479, 10174001557, 10174132663, 10174263769, 10174394849, - 10174525931, 10174657019, 10174788137, 10174919233, 10175050321, 10175181403, 10175312479, - 10175443609, 10175574701, 10175705779, 10175836871, 10175967943, 10176099019, 10176230117, - 10176361189, 10176492307, 10176623399, 10176754513, 10176885599, 10177016687, 10177147763, - 10177278841, 10177409933, 10177541029, 10177672111, 10177803187, 10177934281, 10178065379, - 10178196487, 10178327623, 10178458699, 10178589787, 10178720873, 10178851973, 10178983051, - 10179114161, 10179245273, 10179376357, 10179507461, 10179638593, 10179769679, 10179900767, - 10180031879, 10180162957, 10180294049, 10180425127, 10180556249, 10180687351, 10180818433, - 10180949533, 10181080619, 10181211701, 10181342797, 10181473889, 10181604967, 10181736041, - 10181867123, 10181998231, 10182129319, 10182260401, 10182391481, 10182522557, 10182653707, - 10182784823, 10182915943, 10183047029, 10183178107, 10183309187, 10183440287, 10183571369, - 10183702469, 10183833547, 10183964639, 10184095721, 10184226809, 10184357891, 10184488967, - 10184620057, 10184751169, 10184882243, 10185013343, 10185144419, 10185275509, 10185406597, - 10185537679, 10185668833, 10185799913, 10185930991, 10186062067, 10186193209, 10186324321, - 10186455397, 10186586483, 10186717573, 10186848673, 10186979767, 10187110883, 10187241973, - 10187373061, 10187504141, 10187635247, 10187766353, 10187897437, 10188028517, 10188159601, - 10188290677, 10188421751, 10188552833, 10188683927, 10188815009, 10188946081, 10189077163, - 10189208251, 10189339327, 10189470407, 10189601479, 10189732559, 10189863637, 10189994761, - 10190125843, 10190256961, 10190388071, 10190519149, 10190650231, 10190781331, 10190912419, - 10191043543, 10191174659, 10191305777, 10191436859, 10191567941, 10191699031, 10191830167, - 10191961253, 10192092343, 10192223417, 10192354553, 10192485637, 10192616741, 10192747813, - 10192878919, 10193009999, 10193141083, 10193272169, 10193403247, 10193534341, 10193665451, - 10193796523, 10193927629, 10194058711, 10194189821, 10194320921, 10194452017, 10194583097, - 10194714193, 10194845279, 10194976387, 10195107469, 10195238549, 10195369631, 10195500781, - 10195631861, 10195762939, 10195894039, 10196025113, 10196156189, 10196287261, 10196418347, - 10196549423, 10196680513, 10196811589, 10196942687, 10197073763, 10197204887, 10197335971, - 10197467083, 10197598163, 10197729247, 10197860333, 10197991469, 10198122551, 10198253623, - 10198384717, 10198515793, 10198646869, 10198777987, 10198909099, 10199040179, 10199171273, - 10199302357, 10199433437, 10199564539, 10199695619, 10199826709, 10199957797, 10200088901, - 10200219989, 10200351061, 10200482143, 10200613243, 10200744319, 10200875411, 10201006531, - 10201137631, 10201268713, 10201399807, 10201530893, 10201661989, 10201793111, 10201924211, - 10202055313, 10202186417, 10202317513, 10202448587, 10202579669, 10202710787, 10202841877, - 10202972953, 10203104029, 10203235109, 10203366197, 10203497273, 10203628381, 10203759457, - 10203890531, 10204021631, 10204152713, 10204283809, 10204414897, 10204545991, 10204677079, - 10204808171, 10204939243, 10205070319, 10205201399, 10205332477, 10205463553, 10205594627, - 10205725703, 10205856781, 10205987861, 10206118957, 10206250037, 10206381151, 10206512227, - 10206643303, 10206774433, 10206905539, 10207036621, 10207167697, 10207298819, 10207429891, - 10207560967, 10207692067, 10207823209, 10207954297, 10208085373, 10208216461, 10208347549, - 10208478661, 10208609773, 10208740849, 10208871923, 10209003017, 10209134119, 10209265207, - 10209396287, 10209527359, 10209658441, 10209789523, 10209920657, 10210051763, 10210182869, - 10210313941, 10210445029, 10210576111, 10210707259, 10210838353, 10210969429, 10211100503, - 10211231581, 10211362657, 10211493731, 10211624827, 10211755909, 10211886991, 10212018119, - 10212149191, 10212280277, 10212411373, 10212542477, 10212673621, 10212804731, 10212935809, - 10213066883, 10213197959, 10213329043, 10213460123, 10213591207, 10213722287, 10213853383, - 10213984471, 10214115581, 10214246683, 10214377769, 10214508869, 10214639947, 10214771057, - 10214902129, 10215033203, 10215164293, 10215295373, 10215426461, 10215557543, 10215688627, - 10215819721, 10215950821, 10216081921, 10216213067, 10216344143, 10216475231, 10216606333, - 10216737407, 10216868509, 10216999601, 10217130683, 10217261771, 10217392903, 10217523983, - 10217655067, 10217786149, 10217917249, 10218048343, 10218179429, 10218310517, 10218441643, - 10218572719, 10218703793, 10218834917, 10218965989, 10219097071, 10219228157, 10219359239, - 10219490339, 10219621411, 10219752493, 10219883579, 10220014663, 10220145737, 10220276809, - 10220407909, 10220538983, 10220670073, 10220801161, 10220932247, 10221063329, 10221194407, - 10221325567, 10221456653, 10221587741, 10221718817, 10221849917, 10221981041, 10222112113, - 10222243193, 10222374271, 10222505351, 10222636423, 10222767521, 10222898593, 10223029669, - 10223160751, 10223291863, 10223422949, 10223554021, 10223685103, 10223816219, 10223947297, - 10224078379, 10224209461, 10224340537, 10224471659, 10224602767, 10224733867, 10224864941, - 10224996037, 10225127123, 10225258217, 10225389319, 10225520401, 10225651511, 10225782599, - 10225913683, 10226044771, 10226175887, 10226306963, 10226438087, 10226569163, 10226700257, - 10226831333, 10226962441, 10227093553, 10227224647, 10227355751, 10227486827, 10227617899, - 10227749003, 10227880087, 10228011187, 10228142279, 10228273373, 10228404449, 10228535521, - 10228666603, 10228797697, 10228928833, 10229059913, 10229191073, 10229322149, 10229453249, - 10229584327, 10229715401, 10229846489, 10229977577, 10230108653, 10230239729, 10230370837, - 10230501929, 10230633001, 10230764081, 10230895163, 10231026257, 10231157329, 10231288451, - 10231419557, 10231550663, 10231681739, 10231812823, 10231943929, 10232075011, 10232206087, - 10232337187, 10232468261, 10232599339, 10232730413, 10232861491, 10232992573, 10233123661, - 10233254741, 10233385843, 10233516929, 10233648031, 10233779111, 10233910187, 10234041287, - 10234172381, 10234303481, 10234434577, 10234565659, 10234696739, 10234827821, 10234958911, - 10235090009, 10235221121, 10235352229, 10235483333, 10235614511, 10235745593, 10235876671, - 10236007759, 10236138839, 10236269929, 10236401009, 10236532081, 10236663167, 10236794257, - 10236925351, 10237056433, 10237187533, 10237318613, 10237449689, 10237580767, 10237711853, - 10237842929, 10237974001, 10238105083, 10238236159, 10238367233, 10238498321, 10238629393, - 10238760559, 10238891651, 10239022733, 10239153811, 10239284893, 10239415987, 10239547067, - 10239678161, 10239809243, 10239940379, 10240071461, 10240202549, 10240333711, 10240464821, - 10240595917, 10240726997, 10240858079, 10240989181, 10241120293, 10241251381, 10241382469, - 10241513549, 10241644627, 10241775701, 10241906783, 10242037867, 10242168941, 10242300023, - 10242431123, 10242562217, 10242693301, 10242824381, 10242955477, 10243086559, 10243217701, - 10243348789, 10243479871, 10243610959, 10243742051, 10243873127, 10244004203, 10244135299, - 10244266381, 10244397463, 10244528549, 10244659631, 10244790707, 10244921789, 10245052891, - 10245183979, 10245315061, 10245446137, 10245577211, 10245708283, 10245839377, 10245970489, - 10246101587, 10246232663, 10246363741, 10246494827, 10246625927, 10246756999, 10246888097, - 10247019187, 10247150297, 10247281393, 10247412587, 10247543699, 10247674819, 10247805907, - 10247936983, 10248068069, 10248199189, 10248330289, 10248461383, 10248592481, 10248723553, - 10248854633, 10248985739, 10249116817, 10249247893, 10249378967, 10249510093, 10249641167, - 10249772249, 10249903331, 10250034407, 10250165483, 10250296559, 10250427643, 10250558723, - 10250689817, 10250820901, 10250951981, 10251083081, 10251214159, 10251345241, 10251476321, - 10251607439, 10251738517, 10251869591, 10252000667, 10252131781, 10252262897, 10252393993, - 10252525091, 10252656163, 10252787249, 10252918327, 10253049403, 10253180479, 10253311559, - 10253442643, 10253573747, 10253704831, 10253835961, 10253967049, 10254098123, 10254229207, - 10254360289, 10254491371, 10254622447, 10254753521, 10254884603, 10255015703, 10255146787, - 10255277867, 10255409039, 10255540129, 10255671203, 10255802287, 10255933367, 10256064443, - 10256195567, 10256326649, 10256457727, 10256588809, 10256719903, 10256850979, 10256982083, - 10257113171, 10257244247, 10257375319, 10257506401, 10257637499, 10257768581, 10257899669, - 10258030753, 10258161827, 10258292903, 10258423997, 10258555081, 10258686157, 10258817287, - 10258948361, 10259079433, 10259210509, 10259341583, 10259472659, 10259603747, 10259734831, - 10259865937, 10259997031, 10260128113, 10260259187, 10260390271, 10260521347, 10260652463, - 10260783563, 10260914681, 10261045799, 10261176881, 10261307993, 10261439161, 10261570247, - 10261701353, 10261832437, 10261963531, 10262094607, 10262225681, 10262356771, 10262487863, - 10262618957, 10262750039, 10262881127, 10263012209, 10263143299, 10263274393, 10263405491, - 10263536567, 10263667639, 10263798731, 10263929803, 10264060907, 10264191997, 10264323079, - 10264454171, 10264585249, 10264716347, 10264847429, 10264978501, 10265109583, 10265240659, - 10265371733, 10265502811, 10265633893, 10265765017, 10265896133, 10266027221, 10266158293, - 10266289367, 10266420449, 10266551521, 10266682603, 10266813677, 10266944773, 10267075873, - 10267206977, 10267338049, 10267469129, 10267600289, 10267731373, 10267862461, 10267993559, - 10268124677, 10268255827, 10268386913, 10268517989, 10268649071, 10268780167, 10268911243, - 10269042331, 10269173407, 10269304501, 10269435587, 10269566663, 10269697747, 10269828823, - 10269959927, 10270091003, 10270222091, 10270353167, 10270484243, 10270615337, 10270746509, - 10270877593, 10271008667, 10271139761, 10271270881, 10271401963, 10271533043, 10271664121, - 10271795197, 10271926283, 10272057409, 10272188483, 10272319591, 10272450667, 10272581771, - 10272712889, 10272843979, 10272975059, 10273106141, 10273237217, 10273368337, 10273499419, - 10273630531, 10273761607, 10273892687, 10274023769, 10274154841, 10274285921, 10274416993, - 10274548133, 10274679211, 10274810303, 10274941381, 10275072469, 10275203551, 10275334637, - 10275465713, 10275596809, 10275727907, 10275858991, 10275990097, 10276121173, 10276252247, - 10276383323, 10276514429, 10276645517, 10276776589, 10276907699, 10277038799, 10277169887, - 10277300987, 10277432071, 10277563159, 10277694283, 10277825357, 10277956489, 10278087571, - 10278218647, 10278349721, 10278480799, 10278611879, 10278742961, 10278874093, 10279005167, - 10279136243, 10279267331, 10279398433, 10279529527, 10279660613, 10279791763, 10279922837, - 10280053919, 10280185109, 10280316181, 10280447263, 10280578361, 10280709457, 10280840533, - 10280971639, 10281102719, 10281233839, 10281364937, 10281496019, 10281627151, 10281758257, - 10281889333, 10282020407, 10282151501, 10282282579, 10282413667, 10282544813, 10282675927, - 10282807033, 10282938119, 10283069213, 10283200327, 10283331419, 10283462491, 10283593571, - 10283724697, 10283855797, 10283986879, 10284117979, 10284249061, 10284380143, 10284511219, - 10284642293, 10284773417, 10284904499, 10285035587, 10285166687, 10285297787, 10285428863, - 10285559939, 10285691027, 10285822139, 10285953239, 10286084353, 10286215477, 10286346571, - 10286477651, 10286608729, 10286739817, 10286870903, 10287002017, 10287133091, 10287264181, - 10287395269, 10287526343, 10287657449, 10287788573, 10287919651, 10288050743, 10288181821, - 10288312933, 10288444027, 10288575133, 10288706237, 10288837337, 10288968421, 10289099539, - 10289230643, 10289361749, 10289492869, 10289623963, 10289755057, 10289886137, 10290017263, - 10290148361, 10290279443, 10290410521, 10290541631, 10290672703, 10290803791, 10290934877, - 10291065959, 10291197053, 10291328147, 10291459247, 10291590347, 10291721423, 10291852559, - 10291983661, 10292114737, 10292245849, 10292376947, 10292508019, 10292639101, 10292770199, - 10292901323, 10293032423, 10293163501, 10293294577, 10293425669, 10293556751, 10293687829, - 10293818921, 10293949999, 10294081087, 10294212161, 10294343239, 10294474363, 10294605449, - 10294736521, 10294867601, 10294998673, 10295129777, 10295260861, 10295391973, 10295523053, - 10295654141, 10295785217, 10295916343, 10296047423, 10296178499, 10296309571, 10296440647, - 10296571721, 10296702803, 10296833881, 10296964961, 10297096049, 10297227139, 10297358261, - 10297489333, 10297620433, 10297751507, 10297882579, 10298013667, 10298144767, 10298275847, - 10298406941, 10298538013, 10298669111, 10298800207, 10298931343, 10299062419, 10299193493, - 10299324709, 10299455791, 10299586873, 10299717949, 10299849031, 10299980177, 10300111267, - 10300242347, 10300373453, 10300504553, 10300635637, 10300766711, 10300897801, 10301028901, - 10301159987, 10301291059, 10301422139, 10301553281, 10301684363, 10301815441, 10301946527, - 10302077629, 10302208723, 10302339799, 10302470887, 10302601963, 10302733061, 10302864149, - 10302995243, 10303126349, 10303257451, 10303388539, 10303519619, 10303650697, 10303781783, - 10303912873, 10304044019, 10304175181, 10304306267, 10304437369, 10304568467, 10304699551, - 10304830637, 10304961727, 10305092813, 10305223927, 10305355013, 10305486091, 10305617183, - 10305748261, 10305879371, 10306010447, 10306141537, 10306272667, 10306403803, 10306534879, - 10306665979, 10306797097, 10306928197, 10307059277, 10307190373, 10307321467, 10307452543, - 10307583623, 10307714759, 10307845831, 10307976937, 10308108011, 10308239087, 10308370169, - 10308501253, 10308632357, 10308763453, 10308894529, 10309025659, 10309156757, 10309287847, - 10309418923, 10309550003, 10309681087, 10309812179, 10309943257, 10310074339, 10310205413, - 10310336489, 10310467567, 10310598731, 10310729813, 10310860907, 10310991979, 10311123107, - 10311254201, 10311385289, 10311516463, 10311647557, 10311778637, 10311909709, 10312040797, - 10312171889, 10312302961, 10312434049, 10312565141, 10312696237, 10312827313, 10312958401, - 10313089481, 10313220563, 10313351647, 10313482727, 10313613799, 10313744879, 10313875951, - 10314007057, 10314138151, 10314269227, 10314400307, 10314531391, 10314662503, 10314793609, - 10314924707, 10315055789, 10315186873, 10315317977, 10315449061, 10315580153, 10315711229, - 10315842307, 10315973401, 10316104499, 10316235577, 10316366777, 10316497853, 10316628967, - 10316760067, 10316891183, 10317022277, 10317153373, 10317284447, 10317415519, 10317546593, - 10317677719, 10317808841, 10317939923, 10318071013, 10318202093, 10318333169, 10318464253, - 10318595341, 10318726447, 10318857551, 10318988629, 10319119711, 10319250841, 10319381921, - 10319512993, 10319644087, 10319775161, 10319906237, 10320037309, 10320168389, 10320299467, - 10320430577, 10320561677, 10320692761, 10320823847, 10320954977, 10321086059, 10321217171, - 10321348249, 10321479341, 10321610441, 10321741531, 10321872629, 10322003717, 10322134799, - 10322265871, 10322396947, 10322528033, 10322659157, 10322790263, 10322921383, 10323052499, - 10323183617, 10323314713, 10323445799, 10323576881, 10323707971, 10323839051, 10323970123, - 10324101199, 10324232279, 10324363367, 10324494457, 10324625533, 10324756627, 10324887701, - 10325018773, 10325149847, 10325280919, 10325412001, 10325543089, 10325674171, 10325805247, - 10325936339, 10326067463, 10326198551, 10326329687, 10326460759, 10326591833, 10326722929, - 10326854099, 10326985199, 10327116277, 10327247383, 10327378487, 10327509559, 10327640639, - 10327771723, 10327902797, 10328033893, 10328164967, 10328296079, 10328427181, 10328558257, - 10328689333, 10328820419, 10328951497, 10329082571, 10329213647, 10329344731, 10329475811, - 10329606893, 10329738017, 10329869111, 10330000193, 10330131313, 10330262473, 10330393547, - 10330524629, 10330655717, 10330786819, 10330917893, 10331049007, 10331180107, 10331311187, - 10331442259, 10331573363, 10331704483, 10331835607, 10331966681, 10332097793, 10332228869, - 10332359953, 10332491051, 10332622127, 10332753253, 10332884339, 10333015417, 10333146491, - 10333277599, 10333408693, 10333539793, 10333670887, 10333801987, 10333933087, 10334064163, - 10334195243, 10334326319, 10334457391, 10334588477, 10334719583, 10334850661, 10334981737, - 10335112817, 10335243917, 10335375007, 10335506081, 10335637153, 10335768227, 10335899369, - 10336030459, 10336161547, 10336292623, 10336423703, 10336554791, 10336685867, 10336816961, - 10336948049, 10337079157, 10337210231, 10337341303, 10337472419, 10337603513, 10337734591, - 10337865697, 10337996771, 10338127853, 10338259031, 10338390103, 10338521189, 10338652273, - 10338783373, 10338914491, 10339045573, 10339176677, 10339307761, 10339438849, 10339569943, - 10339701049, 10339832143, 10339963243, 10340094341, 10340225419, 10340356517, 10340487649, - 10340618759, 10340749831, 10340880911, 10341011983, 10341143063, 10341274157, 10341405233, - 10341536321, 10341667433, 10341798521, 10341929593, 10342060667, 10342191779, 10342322869, - 10342453949, 10342585051, 10342716143, 10342847219, 10342978357, 10343109479, 10343240573, - 10343371673, 10343502751, 10343633857, 10343764931, 10343896019, 10344027091, 10344158173, - 10344289313, 10344420419, 10344551509, 10344682589, 10344813673, 10344944747, 10345075879, - 10345206967, 10345338043, 10345469179, 10345600277, 10345731371, 10345862477, 10345993573, - 10346124671, 10346255749, 10346386823, 10346517911, 10346649007, 10346780107, 10346911231, - 10347042353, 10347173429, 10347304519, 10347435601, 10347566689, 10347697777, 10347828853, - 10347959927, 10348091041, 10348222117, 10348353209, 10348484281, 10348615391, 10348746517, - 10348877603, 10349008679, 10349139803, 10349270879, 10349401961, 10349533043, 10349664191, - 10349795263, 10349926399, 10350057493, 10350188587, 10350319663, 10350450757, 10350581849, - 10350712927, 10350844001, 10350975073, 10351106153, 10351237229, 10351368331, 10351499423, - 10351630517, 10351761619, 10351892701, 10352023807, 10352154889, 10352285969, 10352417059, - 10352548159, 10352679241, 10352810317, 10352941429, 10353072563, 10353203671, 10353334763, - 10353465887, 10353596971, 10353728057, 10353859133, 10353990217, 10354121299, 10354252393, - 10354383497, 10354514579, 10354645657, 10354776793, 10354907891, 10355038979, 10355170061, - 10355301133, 10355432249, 10355563333, 10355694487, 10355825561, 10355956679, 10356087809, - 10356218897, 10356349981, 10356481061, 10356612191, 10356743263, 10356874361, 10357005433, - 10357136521, 10357267699, 10357398773, 10357529851, 10357660927, 10357792051, 10357923133, - 10358054233, 10358185339, 10358316433, 10358447573, 10358578649, 10358709743, 10358840819, - 10358971901, 10359102973, 10359234047, 10359365141, 10359496223, 10359627307, 10359758407, - 10359889487, 10360020607, 10360151687, 10360282763, 10360413859, 10360544951, 10360676023, - 10360807099, 10360938191, 10361069267, 10361200351, 10361331451, 10361462561, 10361593643, - 10361724761, 10361855837, 10361986909, 10362118003, 10362249097, 10362380191, 10362511277, - 10362642377, 10362773461, 10362904547, 10363035619, 10363166699, 10363297783, 10363428937, - 10363560079, 10363691161, 10363822243, 10363953323, 10364084447, 10364215549, 10364346661, - 10364477749, 10364608829, 10364739901, 10364871017, 10365002129, 10365133201, 10365264277, - 10365395371, 10365526447, 10365657527, 10365788639, 10365919747, 10366051001, 10366182097, - 10366313183, 10366444259, 10366575361, 10366706443, 10366837597, 10366968697, 10367099773, - 10367230859, 10367361971, 10367493049, 10367624167, 10367755243, 10367886317, 10368017437, - 10368148537, 10368279671, 10368410749, 10368541921, 10368673001, 10368804073, 10368935147, - 10369066229, 10369197329, 10369328443, 10369459517, 10369590601, 10369721699, 10369852847, - 10369983919, 10370115001, 10370246101, 10370377219, 10370508319, 10370639399, 10370770537, - 10370901647, 10371032719, 10371163793, 10371294893, 10371425971, 10371557051, 10371688147, - 10371819277, 10371950377, 10372081459, 10372212541, 10372343629, 10372474711, 10372605823, - 10372736897, 10372868017, 10372999097, 10373130169, 10373261267, 10373392339, 10373523439, - 10373654519, 10373785603, 10373916677, 10374047767, 10374178879, 10374309961, 10374441067, - 10374572161, 10374703253, 10374834329, 10374965423, 10375096499, 10375227587, 10375358701, - 10375489777, 10375620869, 10375751941, 10375883041, 10376014153, 10376145343, 10376276431, - 10376407507, 10376538583, 10376669659, 10376800757, 10376931889, 10377062981, 10377194053, - 10377325141, 10377456263, 10377587387, 10377718489, 10377849583, 10377980693, 10378111781, - 10378242863, 10378373939, 10378505023, 10378636097, 10378767173, 10378898263, 10379029343, - 10379160469, 10379291561, 10379422673, 10379553749, 10379684827, 10379815913, 10379946991, - 10380078067, 10380209201, 10380340277, 10380471349, 10380602431, 10380733513, 10380864589, - 10380995663, 10381126793, 10381257877, 10381388959, 10381520047, 10381651157, 10381782277, - 10381913363, 10382044469, 10382175547, 10382306647, 10382437811, 10382568919, 10382700001, - 10382831083, 10382962181, 10383093277, 10383224353, 10383355511, 10383486613, 10383617693, - 10383748777, 10383879853, 10384010927, 10384142053, 10384273153, 10384404257, 10384535339, - 10384666441, 10384797541, 10384928657, 10385059733, 10385190811, 10385321893, 10385453027, - 10385584141, 10385715227, 10385846321, 10385977409, 10386108497, 10386239599, 10386370693, - 10386501767, 10386632873, 10386763949, 10386895021, 10387026103, 10387157203, 10387288279, - 10387419379, 10387550483, 10387681571, 10387812647, 10387943743, 10388074817, 10388205907, - 10388337017, 10388468173, 10388599253, 10388730353, 10388861459, 10388992541, 10389123629, - 10389254749, 10389385823, 10389516911, 10389648019, 10389779111, 10389910241, 10390041349, - 10390172423, 10390303537, 10390434611, 10390565711, 10390696783, 10390827857, 10390958933, - 10391090011, 10391221091, 10391352163, 10391483269, 10391614367, 10391745443, 10391876543, - 10392007739, 10392138857, 10392269933, 10392401027, 10392532103, 10392663181, 10392794261, - 10392925369, 10393056461, 10393187569, 10393318643, 10393449721, 10393580807, 10393711897, - 10393843013, 10393974089, 10394105171, 10394236277, 10394367353, 10394498437, 10394629519, - 10394760601, 10394891693, 10395022777, 10395153851, 10395284923, 10395415997, 10395547079, - 10395678191, 10395809299, 10395940381, 10396071463, 10396202543, 10396333657, 10396464739, - 10396595813, 10396726997, 10396858093, 10396989191, 10397120269, 10397251363, 10397382449, - 10397513543, 10397644619, 10397775769, 10397906863, 10398037939, 10398169013, 10398300097, - 10398431171, 10398562243, 10398693317, 10398824407, 10398955481, 10399086557, 10399217707, - 10399348819, 10399479911, 10399610983, 10399742063, 10399873157, 10400004233, 10400135323, - 10400266421, 10400397493, 10400528573, 10400659649, 10400790721, 10400921801, 10401052877, - 10401183977, 10401315091, 10401446189, 10401577271, 10401708367, 10401839443, 10401970529, - 10402101637, 10402232717, 10402363837, 10402494919, 10402626019, 10402757111, 10402888187, - 10403019281, 10403150377, 10403281459, 10403412533, 10403543627, 10403674703, 10403805779, - 10403936891, 10404067979, 10404199111, 10404330187, 10404461293, 10404592397, 10404723493, - 10404854569, 10404985687, 10405116767, 10405247857, 10405378969, 10405510079, 10405641157, - 10405772303, 10405903423, 10406034511, 10406165633, 10406296711, 10406427791, 10406558867, - 10406689939, 10406821039, 10406952119, 10407083221, 10407214313, 10407345457, 10407476561, - 10407607673, 10407738799, 10407869911, 10408000991, 10408132067, 10408263139, 10408394219, - 10408525291, 10408656367, 10408787443, 10408918519, 10409049631, 10409180707, 10409311789, - 10409442887, 10409573981, 10409705069, 10409836153, 10409967251, 10410098327, 10410229399, - 10410360473, 10410491551, 10410622631, 10410753757, 10410884831, 10411015931, 10411147037, - 10411278109, 10411409191, 10411540267, 10411671341, 10411802413, 10411933487, 10412064571, - 10412195669, 10412326747, 10412457833, 10412588929, 10412720029, 10412851121, 10412982193, - 10413113273, 10413244357, 10413375433, 10413506573, 10413637727, 10413768821, 10413899927, - 10414031009, 10414162097, 10414293187, 10414424261, 10414555343, 10414686439, 10414817521, - 10414948613, 10415079707, 10415210789, 10415341903, 10415473051, 10415604131, 10415735249, - 10415866339, 10415997437, 10416128539, 10416259639, 10416390731, 10416521813, 10416652943, - 10416784031, 10416915107, 10417046183, 10417177271, 10417308361, 10417439437, 10417570519, - 10417701599, 10417832717, 10417963789, 10418094913, 10418225989, 10418357099, 10418488193, - 10418619331, 10418750423, 10418881513, 10419012607, 10419143789, 10419274883, 10419405967, - 10419537077, 10419668159, 10419799237, 10419930337, 10420061441, 10420192543, 10420323629, - 10420454717, 10420585801, 10420716959, 10420848041, 10420979113, 10421110237, 10421241319, - 10421372417, 10421503513, 10421634607, 10421765689, 10421896763, 10422027853, 10422158947, - 10422290029, 10422421103, 10422552197, 10422683273, 10422814351, 10422945427, 10423076501, - 10423207573, 10423338703, 10423469807, 10423600919, 10423731991, 10423863077, 10423994173, - 10424125247, 10424256343, 10424387429, 10424518513, 10424649601, 10424780677, 10424911771, - 10425042847, 10425173921, 10425304993, 10425436069, 10425567199, 10425698281, 10425829391, - 10425960473, 10426091549, 10426222669, 10426353757, 10426484833, 10426615909, 10426747043, - 10426878173, 10427009251, 10427140333, 10427271461, 10427402539, 10427533619, 10427664701, - 10427795789, 10427926867, 10428057947, 10428189019, 10428320099, 10428451171, 10428582247, - 10428713371, 10428844499, 10428975581, 10429106687, 10429237789, 10429368863, 10429499989, - 10429631071, 10429762153, 10429893233, 10430024309, 10430155397, 10430286469, 10430417651, - 10430548763, 10430679841, 10430810959, 10430942087, 10431073187, 10431204263, 10431335357, - 10431466433, 10431597521, 10431728597, 10431859681, 10431990769, 10432121863, 10432252939, - 10432384021, 10432515097, 10432646171, 10432777259, 10432908371, 10433039503, 10433170597, - 10433301677, 10433432749, 10433563837, 10433694917, 10433826017, 10433957147, 10434088243, - 10434219317, 10434350393, 10434481469, 10434612553, 10434743687, 10434874763, 10435005839, - 10435136923, 10435268003, 10435399097, 10435530173, 10435661261, 10435792349, 10435923473, - 10436054591, 10436185663, 10436316743, 10436447821, 10436578907, 10436710001, 10436841073, - 10436972179, 10437103349, 10437234463, 10437365537, 10437496639, 10437627719, 10437758797, - 10437889871, 10438020947, 10438152019, 10438283117, 10438414219, 10438545307, 10438676429, - 10438807507, 10438938581, 10439069671, 10439200747, 10439331827, 10439462909, 10439594021, - 10439725099, 10439856257, 10439987347, 10440118459, 10440249569, 10440380747, 10440511841, - 10440642913, 10440774023, 10440905107, 10441036219, 10441167311, 10441298383, 10441429501, - 10441560629, 10441691707, 10441822793, 10441953881, 10442085001, 10442216101, 10442347211, - 10442478301, 10442609389, 10442740463, 10442871541, 10443002657, 10443133733, 10443264829, - 10443395933, 10443527051, 10443658151, 10443789229, 10443920303, 10444051379, 10444182499, - 10444313591, 10444444663, 10444575737, 10444706821, 10444837919, 10444969019, 10445100097, - 10445231221, 10445362313, 10445493389, 10445624491, 10445755583, 10445886727, 10446017807, - 10446148903, 10446279989, 10446411091, 10446542173, 10446673267, 10446804353, 10446935461, - 10447066537, 10447197617, 10447328743, 10447459853, 10447590929, 10447722031, 10447853107, - 10447984189, 10448115277, 10448246351, 10448377439, 10448508559, 10448639659, 10448770753, - 10448901839, 10449032941, 10449164023, 10449295133, 10449426271, 10449557347, 10449688421, - 10449819511, 10449950597, 10450081669, 10450212761, 10450343861, 10450474973, 10450606057, - 10450737137, 10450868237, 10450999313, 10451130397, 10451261503, 10451392591, 10451523703, - 10451654789, 10451785889, 10451916971, 10452048043, 10452179117, 10452310189, 10452441299, - 10452572419, 10452703507, 10452834589, 10452965669, 10453096747, 10453227871, 10453358957, - 10453490081, 10453621183, 10453752259, 10453883351, 10454014427, 10454145521, 10454276621, - 10454407759, 10454538839, 10454669917, 10454800999, 10454932087, 10455063217, 10455194317, - 10455325421, 10455456497, 10455587579, 10455718699, 10455849821, 10455980893, 10456111973, - 10456243051, 10456374191, 10456505363, 10456636511, 10456767593, 10456898707, 10457029801, - 10457160899, 10457292011, 10457423089, 10457554169, 10457685257, 10457816449, 10457947541, - 10458078677, 10458209807, 10458340883, 10458471977, 10458603053, 10458734159, 10458865237, - 10458996323, 10459127401, 10459258477, 10459389571, 10459520677, 10459651759, 10459782859, - 10459913957, 10460045047, 10460176123, 10460307197, 10460438293, 10460569391, 10460700511, - 10460831597, 10460962669, 10461093781, 10461224861, 10461355937, 10461487009, 10461618091, - 10461749167, 10461880249, 10462011353, 10462142479, 10462273553, 10462404643, 10462535729, - 10462666801, 10462797889, 10462928977, 10463060071, 10463191159, 10463322251, 10463453323, - 10463584409, 10463715487, 10463846587, 10463977661, 10464108749, 10464239837, 10464370951, - 10464502051, 10464633133, 10464764213, 10464895303, 10465026419, 10465157503, 10465288661, - 10465419739, 10465550813, 10465681909, 10465812989, 10465944077, 10466075219, 10466206301, - 10466337373, 10466468471, 10466599543, 10466730643, 10466861719, 10466992831, 10467123937, - 10467255013, 10467386087, 10467517163, 10467648239, 10467779327, 10467910421, 10468041511, - 10468172587, 10468303691, 10468434763, 10468565837, 10468696943, 10468828043, 10468959133, - 10469090209, 10469221297, 10469352371, 10469483467, 10469614549, 10469745623, 10469876707, - 10470007819, 10470138893, 10470269989, 10470401083, 10470532159, 10470663253, 10470794381, - 10470925453, 10471056553, 10471187659, 10471318747, 10471449907, 10471580981, 10471712057, - 10471843133, 10471974229, 10472105339, 10472236417, 10472367527, 10472498599, 10472629679, - 10472760761, 10472891879, 10473022957, 10473154031, 10473285133, 10473416237, 10473547313, - 10473678419, 10473809501, 10473940573, 10474071659, 10474202743, 10474333817, 10474464893, - 10474595969, 10474727059, 10474858133, 10474989221, 10475120303, 10475251387, 10475382479, - 10475513551, 10475644631, 10475775703, 10475906803, 10476037889, 10476168971, 10476300071, - 10476431143, 10476562219, 10476693299, 10476824381, 10476955453, 10477086539, 10477217677, - 10477348751, 10477479863, 10477610947, 10477742057, 10477873139, 10478004217, 10478135321, - 10478266397, 10478397487, 10478528569, 10478659663, 10478790737, 10478921809, 10479052889, - 10479184003, 10479315079, 10479446171, 10479577247, 10479708331, 10479839413, 10479970499, - 10480101581, 10480232731, 10480363811, 10480494919, 10480626017, 10480757099, 10480888181, - 10481019259, 10481150363, 10481281441, 10481412587, 10481543707, 10481674781, 10481805869, - 10481936957, 10482068039, 10482199151, 10482330223, 10482461323, 10482592399, 10482723473, - 10482854579, 10482985661, 10483116733, 10483247807, 10483378891, 10483509973, 10483641059, - 10483772161, 10483903267, 10484034389, 10484165467, 10484296549, 10484427631, 10484558719, - 10484689843, 10484820919, 10484951993, 10485083083, 10485214169, 10485345257, 10485476329, - 10485607481, 10485738569, 10485869689, 10486000781, 10486131881, 10486262959, 10486394057, - 10486525169, 10486656269, 10486787357, 10486918439, 10487049553, 10487180633, 10487311819, - 10487442907, 10487573983, 10487705069, 10487836141, 10487967221, 10488098317, 10488229391, - 10488360481, 10488491561, 10488622643, 10488753739, 10488884821, 10489015907, 10489146991, - 10489278083, 10489409159, 10489540261, 10489671343, 10489802419, 10489933499, 10490064587, - 10490195669, 10490326753, 10490457839, 10490588951, 10490720027, 10490851109, 10490982209, - 10491113291, 10491244381, 10491375463, 10491506549, 10491637633, 10491768709, 10491899797, - 10492030877, 10492161971, 10492293047, 10492424153, 10492555247, 10492686397, 10492817471, - 10492948567, 10493079679, 10493210753, 10493341841, 10493472947, 10493604041, 10493735117, - 10493866189, 10493997277, 10494128383, 10494259471, 10494390551, 10494521623, 10494652703, - 10494783787, 10494914891, 10495045963, 10495177039, 10495308113, 10495439221, 10495570297, - 10495701371, 10495832467, 10495963549, 10496094641, 10496225713, 10496356799, 10496487887, - 10496619019, 10496750101, 10496881177, 10497012257, 10497143333, 10497274421, 10497405509, - 10497536587, 10497667699, 10497798803, 10497929909, 10498061009, 10498192091, 10498323167, - 10498454269, 10498585343, 10498716427, 10498847501, 10498978573, 10499109653, 10499240737, - 10499371873, 10499502953, 10499634037, 10499765119, 10499896213, 10500027301, 10500158377, - 10500289451, 10500420527, 10500551599, 10500682693, 10500813779, 10500944911, 10501075993, - 10501207097, 10501338173, 10501469257, 10501600357, 10501731469, 10501862543, 10501993639, - 10502124751, 10502255851, 10502386931, 10502518003, 10502649083, 10502780177, 10502911249, - 10503042349, 10503173441, 10503304517, 10503435667, 10503566741, 10503697817, 10503828901, - 10503959987, 10504091069, 10504222147, 10504353287, 10504484359, 10504615439, 10504746523, - 10504877599, 10505008711, 10505139793, 10505270869, 10505401969, 10505533043, 10505664181, - 10505795347, 10505926451, 10506057557, 10506188629, 10506319717, 10506450791, 10506581909, - 10506712981, 10506844079, 10506975151, 10507106243, 10507237337, 10507368413, 10507499609, - 10507630687, 10507761787, 10507892909, 10508023997, 10508155079, 10508286157, 10508417243, - 10508548319, 10508679403, 10508810483, 10508941559, 10509072671, 10509203767, 10509334867, - 10509466001, 10509597083, 10509728179, 10509859259, 10509990347, 10510121441, 10510252559, - 10510383641, 10510514713, 10510645799, 10510776901, 10510907999, 10511039141, 10511170231, - 10511301319, 10511432413, 10511563499, 10511694587, 10511825659, 10511956757, 10512087829, - 10512218953, 10512350033, 10512481127, 10512612199, 10512743273, 10512874367, 10513005467, - 10513136567, 10513267649, 10513398811, 10513529891, 10513660973, 10513792057, 10513923137, - 10514054219, 10514185301, 10514316389, 10514447477, 10514578553, 10514709637, 10514840717, - 10514971793, 10515102889, 10515234013, 10515365087, 10515496171, 10515627247, 10515758321, - 10515889441, 10516020553, 10516151641, 10516282717, 10516413821, 10516544917, 10516675991, - 10516807111, 10516938227, 10517069323, 10517200411, 10517331527, 10517462651, 10517593781, - 10517724853, 10517855939, 10517987047, 10518118129, 10518249211, 10518380377, 10518511453, - 10518642551, 10518773653, 10518904733, 10519035823, 10519166923, 10519298003, 10519429079, - 10519560157, 10519691243, 10519822319, 10519953401, 10520084611, 10520215687, 10520346779, - 10520477873, 10520608991, 10520740067, 10520871139, 10521002231, 10521133303, 10521264401, - 10521395519, 10521526633, 10521657743, 10521788843, 10521919931, 10522051003, 10522182101, - 10522313201, 10522444333, 10522575433, 10522706569, 10522837669, 10522968749, 10523099833, - 10523230933, 10523362013, 10523493109, 10523624203, 10523755279, 10523886353, 10524017431, - 10524148529, 10524279613, 10524410713, 10524541829, 10524672911, 10524803987, 10524935081, - 10525066177, 10525197253, 10525328381, 10525459457, 10525590541, 10525721621, 10525852703, - 10525983791, 10526114897, 10526245969, 10526377079, 10526508169, 10526639261, 10526770343, - 10526901431, 10527032507, 10527163597, 10527294683, 10527425761, 10527556873, 10527687953, - 10527819037, 10527950117, 10528081219, 10528212301, 10528343407, 10528474499, 10528605583, - 10528736671, 10528867759, 10528998839, 10529129929, 10529261003, 10529392103, 10529523181, - 10529654279, 10529785379, 10529916461, 10530047533, 10530178609, 10530309703, 10530440777, - 10530571853, 10530702929, 10530834001, 10530965111, 10531096183, 10531227293, 10531358389, - 10531489469, 10531620553, 10531751689, 10531882769, 10532013841, 10532144921, 10532276003, - 10532407099, 10532538187, 10532669263, 10532800337, 10532931527, 10533062599, 10533193673, - 10533324751, 10533455839, 10533586951, 10533718057, 10533849181, 10533980311, 10534111403, - 10534242487, 10534373677, 10534504759, 10534635869, 10534766959, 10534898057, 10535029187, - 10535160283, 10535291383, 10535422477, 10535553569, 10535684647, 10535815721, 10535946821, - 10536077917, 10536209011, 10536340093, 10536471181, 10536602257, 10536733379, 10536864467, - 10536995569, 10537126669, 10537257769, 10537388857, 10537519933, 10537651031, 10537782127, - 10537913213, 10538044291, 10538175383, 10538306479, 10538437589, 10538568673, 10538699753, - 10538830829, 10538961919, 10539093013, 10539224093, 10539355181, 10539486253, 10539617371, - 10539748469, 10539879547, 10540010623, 10540141699, 10540272773, 10540403879, 10540534997, - 10540666109, 10540797203, 10540928287, 10541059387, 10541190469, 10541321551, 10541452673, - 10541583797, 10541714873, 10541845949, 10541977123, 10542108211, 10542239287, 10542370387, - 10542501461, 10542632549, 10542763633, 10542894707, 10543025819, 10543156901, 10543288001, - 10543419097, 10543550179, 10543681273, 10543812347, 10543943461, 10544074553, 10544205643, - 10544336731, 10544467841, 10544598913, 10544730041, 10544861137, 10544992219, 10545123319, - 10545254417, 10545385493, 10545516659, 10545647743, 10545778819, 10545909911, 10546041013, - 10546172107, 10546303247, 10546434323, 10546565411, 10546696493, 10546827581, 10546958657, - 10547089733, 10547220847, 10547351951, 10547483069, 10547614141, 10547745223, 10547876303, - 10548007409, 10548138611, 10548269723, 10548400801, 10548531881, 10548662989, 10548794107, - 10548925243, 10549056317, 10549187399, 10549318471, 10549449551, 10549580633, 10549711721, - 10549842817, 10549973911, 10550105003, 10550236087, 10550367239, 10550498327, 10550629399, - 10550760487, 10550891581, 10551022667, 10551153773, 10551284869, 10551415943, 10551547031, - 10551678119, 10551809227, 10551940361, 10552071449, 10552202527, 10552333657, 10552464763, - 10552595849, 10552726949, 10552858051, 10552989127, 10553120267, 10553251349, 10553382467, - 10553513543, 10553644627, 10553775719, 10553906791, 10554037873, 10554168949, 10554300047, - 10554431119, 10554562201, 10554693283, 10554824383, 10554955457, 10555086559, 10555217633, - 10555348723, 10555479799, 10555610927, 10555742053, 10555873129, 10556004209, 10556135287, - 10556266387, 10556397479, 10556528579, 10556659661, 10556790757, 10556921887, 10557052963, - 10557184067, 10557315149, 10557446231, 10557577307, 10557708383, 10557839473, 10557970561, - 10558101637, 10558232719, 10558363801, 10558494889, 10558625971, 10558757093, 10558888189, - 10559019299, 10559150377, 10559281459, 10559412533, 10559543629, 10559674703, 10559805787, - 10559936887, 10560067979, 10560199063, 10560330149, 10560461221, 10560592313, 10560723427, - 10560854503, 10560985607, 10561116679, 10561247779, 10561378873, 10561509949, 10561641023, - 10561772141, 10561903213, 10562034289, 10562165387, 10562296477, 10562427553, 10562558647, - 10562689729, 10562820811, 10562951891, 10563082963, 10563214097, 10563345187, 10563476293, - 10563607433, 10563738509, 10563869587, 10564000697, 10564131793, 10564262869, 10564393943, - 10564525019, 10564656097, 10564787183, 10564918313, 10565049403, 10565180491, 10565311577, - 10565442649, 10565573749, 10565704841, 10565835919, 10565967011, 10566098089, 10566229169, - 10566360283, 10566491371, 10566622453, 10566753539, 10566884681, 10567015757, 10567146829, - 10567277953, 10567409051, 10567540129, 10567671209, 10567802339, 10567933421, 10568064497, - 10568195569, 10568326667, 10568457797, 10568588873, 10568719957, 10568851043, 10568982157, - 10569113281, 10569244363, 10569375437, 10569506551, 10569637703, 10569768787, 10569899909, - 10570030997, 10570162069, 10570293157, 10570424239, 10570555327, 10570686407, 10570817479, - 10570948561, 10571079637, 10571210737, 10571341813, 10571472893, 10571603981, 10571735087, - 10571866159, 10571997257, 10572128339, 10572259427, 10572390511, 10572521587, 10572652691, - 10572783821, 10572914897, 10573045999, 10573177103, 10573308191, 10573439269, 10573570367, - 10573701451, 10573832539, 10573963649, 10574094721, 10574225803, 10574356879, 10574487961, - 10574619053, 10574750161, 10574881241, 10575012341, 10575143431, 10575274513, 10575405587, - 10575536663, 10575667747, 10575798881, 10575929971, 10576061051, 10576192157, 10576323269, - 10576454353, 10576585493, 10576716593, 10576847681, 10576978759, 10577109833, 10577240939, - 10577372023, 10577503103, 10577634251, 10577765323, 10577896411, 10578027527, 10578158603, - 10578289703, 10578420823, 10578551899, 10578682981, 10578814061, 10578945203, 10579076279, - 10579207427, 10579338551, 10579469627, 10579600709, 10579731803, 10579862903, 10579994021, - 10580125123, 10580256199, 10580387273, 10580518363, 10580649437, 10580780519, 10580911603, - 10581042697, 10581173791, 10581304889, 10581435961, 10581567037, 10581698119, 10581829229, - 10581960317, 10582091393, 10582222507, 10582353583, 10582484657, 10582615843, 10582746931, - 10582878101, 10583009189, 10583140261, 10583271343, 10583402483, 10583533567, 10583664671, - 10583795743, 10583926867, 10584057989, 10584189067, 10584320161, 10584451237, 10584582343, - 10584713453, 10584844537, 10584975619, 10585106731, 10585237841, 10585368919, 10585499993, - 10585631083, 10585762157, 10585893323, 10586024417, 10586155511, 10586286593, 10586417671, - 10586548751, 10586679833, 10586810917, 10586942017, 10587073111, 10587204217, 10587335351, - 10587466441, 10587597571, 10587728647, 10587859741, 10587990841, 10588121923, 10588253023, - 10588384123, 10588515211, 10588646303, 10588777411, 10588908503, 10589039581, 10589170661, - 10589301739, 10589432929, 10589564017, 10589695093, 10589826199, 10589957303, 10590088391, - 10590219463, 10590350579, 10590481709, 10590612797, 10590743873, 10590874969, 10591006057, - 10591137143, 10591268221, 10591399307, 10591530407, 10591661489, 10591792639, 10591923751, - 10592054873, 10592185991, 10592317063, 10592448137, 10592579227, 10592710307, 10592841401, - 10592972519, 10593103603, 10593234703, 10593365789, 10593496861, 10593627991, 10593759191, - 10593890267, 10594021367, 10594152461, 10594283543, 10594414673, 10594545751, 10594676831, - 10594807903, 10594939021, 10595070107, 10595201237, 10595332313, 10595463427, 10595594521, - 10595725639, 10595856727, 10595987821, 10596118901, 10596249977, 10596381067, 10596512149, - 10596643241, 10596774323, 10596905411, 10597036511, 10597167593, 10597298681, 10597429769, - 10597560851, 10597691933, 10597823057, 10597954151, 10598085229, 10598216327, 10598347427, - 10598478503, 10598609579, 10598740651, 10598871749, 10599002893, 10599134003, 10599265081, - 10599396167, 10599527291, 10599658367, 10599789451, 10599920531, 10600051603, 10600182683, - 10600313783, 10600444871, 10600575949, 10600707023, 10600838099, 10600969177, 10601100253, - 10601231341, 10601362451, 10601493541, 10601624641, 10601755729, 10601886811, 10602017893, - 10602148969, 10602280063, 10602411137, 10602542297, 10602673387, 10602804461, 10602935537, - 10603066609, 10603197751, 10603328833, 10603459961, 10603591043, 10603722133, 10603853233, - 10603984309, 10604115407, 10604246479, 10604377561, 10604508643, 10604639723, 10604770817, - 10604901899, 10605032983, 10605164069, 10605295159, 10605426241, 10605557323, 10605688409, - 10605819503, 10605950587, 10606081667, 10606212767, 10606343857, 10606474933, 10606606057, - 10606737131, 10606868203, 10606999283, 10607130371, 10607261443, 10607392577, 10607523809, - 10607654881, 10607785957, 10607917039, 10608048133, 10608179233, 10608310331, 10608441413, - 10608572489, 10608703571, 10608834647, 10608965743, 10609096919, 10609228027, 10609359107, - 10609490183, 10609621349, 10609752431, 10609883503, 10610014589, 10610145673, 10610276797, - 10610407877, 10610538959, 10610670053, 10610801129, 10610932243, 10611063319, 10611194393, - 10611325507, 10611456589, 10611587677, 10611718753, 10611849841, 10611980927, 10612112003, - 10612243099, 10612374193, 10612505303, 10612636381, 10612767457, 10612898537, 10613029619, - 10613160731, 10613291813, 10613422889, 10613553997, 10613685073, 10613816153, 10613947237, - 10614078311, 10614209393, 10614340469, 10614471551, 10614602639, 10614733711, 10614864791, - 10614995879, 10615126999, 10615258097, 10615389217, 10615520291, 10615651363, 10615782439, - 10615913519, 10616044613, 10616175733, 10616306839, 10616437913, 10616569001, 10616700089, - 10616831219, 10616962297, 10617093449, 10617224543, 10617355643, 10617486721, 10617617821, - 10617748949, 10617880073, 10618011179, 10618142333, 10618273447, 10618404521, 10618535611, - 10618666717, 10618797797, 10618928893, 10619059981, 10619191061, 10619322193, 10619453311, - 10619584411, 10619715497, 10619846639, 10619977717, 10620108797, 10620239869, 10620370949, - 10620502027, 10620633151, 10620764251, 10620895331, 10621026413, 10621157497, 10621288583, - 10621419659, 10621550741, 10621681813, 10621812911, 10621944001, 10622075117, 10622206207, - 10622337283, 10622468393, 10622599483, 10622730563, 10622861659, 10622992747, 10623123851, - 10623254923, 10623385999, 10623517103, 10623648179, 10623779261, 10623910393, 10624041479, - 10624172567, 10624303717, 10624434841, 10624565969, 10624697059, 10624828141, 10624959259, - 10625090341, 10625221423, 10625352547, 10625483641, 10625614729, 10625745847, 10625876923, - 10626008011, 10626139091, 10626270197, 10626401287, 10626532361, 10626663451, 10626794543, - 10626925649, 10627056767, 10627187839, 10627318913, 10627450013, 10627581121, 10627712243, - 10627843319, 10627974391, 10628105473, 10628236547, 10628367619, 10628498801, 10628629897, - 10628760983, 10628892059, 10629023201, 10629154301, 10629285379, 10629416467, 10629547547, - 10629678659, 10629809731, 10629940823, 10630071919, 10630203007, 10630334129, 10630465247, - 10630596337, 10630727423, 10630858499, 10630989571, 10631120659, 10631251747, 10631382821, - 10631513923, 10631644999, 10631776073, 10631907149, 10632038227, 10632169319, 10632300391, - 10632431471, 10632562543, 10632693637, 10632824723, 10632955871, 10633086953, 10633218053, - 10633349147, 10633480219, 10633611301, 10633742377, 10633873457, 10634004539, 10634135621, - 10634266703, 10634397791, 10634528867, 10634659943, 10634791043, 10634922121, 10635053197, - 10635184271, 10635315389, 10635446461, 10635577549, 10635708653, 10635839729, 10635970861, - 10636101937, 10636233017, 10636364107, 10636495201, 10636626323, 10636757429, 10636888517, - 10637019593, 10637150707, 10637281801, 10637412911, 10637544007, 10637675089, 10637806169, - 10637937263, 10638068339, 10638199417, 10638330503, 10638461599, 10638592681, 10638723763, - 10638854867, 10638985939, 10639117037, 10639248119, 10639379221, 10639510307, 10639641379, - 10639772461, 10639903553, 10640034631, 10640165759, 10640296861, 10640427947, 10640559019, - 10640690117, 10640821193, 10640952271, 10641083351, 10641214427, 10641345499, 10641476633, - 10641607709, 10641738803, 10641869939, 10642001119, 10642132213, 10642263293, 10642394429, - 10642525501, 10642656581, 10642787663, 10642918763, 10643049871, 10643180959, 10643312039, - 10643443157, 10643574233, 10643705351, 10643836429, 10643967541, 10644098627, 10644229741, - 10644360847, 10644491929, 10644623069, 10644754151, 10644885233, 10645016309, 10645147411, - 10645278493, 10645409569, 10645540643, 10645671719, 10645802803, 10645933933, 10646065007, - 10646196091, 10646327183, 10646458259, 10646589379, 10646720459, 10646851541, 10646982631, - 10647113761, 10647244849, 10647375989, 10647507061, 10647638153, 10647769259, 10647900379, - 10648031461, 10648162537, 10648293613, 10648424713, 10648555807, 10648686887, 10648817983, - 10648949081, 10649080153, 10649211229, 10649342321, 10649473403, 10649604479, 10649735611, - 10649866687, 10649997767, 10650128887, 10650259969, 10650391079, 10650522173, 10650653261, - 10650784367, 10650915503, 10651046587, 10651177699, 10651308797, 10651439873, 10651571053, - 10651702147, 10651833239, 10651964321, 10652095393, 10652226493, 10652357603, 10652488703, - 10652619787, 10652750887, 10652882027, 10653013103, 10653144199, 10653275293, 10653406399, - 10653537511, 10653668591, 10653799733, 10653930851, 10654061923, 10654193003, 10654324091, - 10654455199, 10654586291, 10654717379, 10654848487, 10654979567, 10655110673, 10655241749, - 10655372851, 10655503927, 10655635007, 10655766083, 10655897159, 10656028241, 10656159331, - 10656290419, 10656421493, 10656552581, 10656683669, 10656814747, 10656945829, 10657076921, - 10657207997, 10657339073, 10657470157, 10657601233, 10657732369, 10657863451, 10657994531, - 10658125619, 10658256727, 10658387827, 10658518903, 10658649979, 10658781053, 10658912167, - 10659043253, 10659174347, 10659305483, 10659436573, 10659567673, 10659698767, 10659829853, - 10659960931, 10660092077, 10660223179, 10660354261, 10660485359, 10660616437, 10660747519, - 10660878593, 10661009683, 10661140829, 10661271917, 10661402993, 10661534123, 10661665219, - 10661796307, 10661927389, 10662058471, 10662189563, 10662320639, 10662451769, 10662582841, - 10662713947, 10662845029, 10662976109, 10663107209, 10663238329, 10663369403, 10663500499, - 10663631579, 10663762661, 10663893749, 10664024863, 10664155949, 10664287027, 10664418101, - 10664549179, 10664680253, 10664811329, 10664942411, 10665073493, 10665204577, 10665335669, - 10665466753, 10665597841, 10665728917, 10665859999, 10665991079, 10666122163, 10666253287, - 10666384423, 10666515589, 10666646677, 10666777787, 10666908887, 10667039989, 10667171113, - 10667302207, 10667433299, 10667564389, 10667695487, 10667826563, 10667957669, 10668088763, - 10668219853, 10668350929, 10668482003, 10668613093, 10668744173, 10668875251, 10669006339, - 10669137421, 10669268537, 10669399627, 10669530713, 10669661803, 10669792901, 10669923989, - 10670055091, 10670186171, 10670317243, 10670448319, 10670579407, 10670710483, 10670841583, - 10670972657, 10671103769, 10671234851, 10671365923, 10671497021, 10671628147, 10671759233, - 10671890363, 10672021457, 10672152529, 10672283621, 10672414723, 10672545847, 10672676957, - 10672808089, 10672939163, 10673070251, 10673201353, 10673332451, 10673463527, 10673594611, - 10673725687, 10673856779, 10673987881, 10674118979, 10674250091, 10674381169, 10674512243, - 10674643361, 10674774457, 10674905533, 10675036613, 10675167691, 10675298807, 10675429879, - 10675560971, 10675692101, 10675823173, 10675954249, 10676085331, 10676216407, 10676347501, - 10676478607, 10676609681, 10676740769, 10676871841, 10677002923, 10677133997, 10677265087, - 10677396179, 10677527279, 10677658351, 10677789443, 10677920549, 10678051621, 10678182701, - 10678313813, 10678444901, 10678575979, 10678707059, 10678838173, 10678969283, 10679100361, - 10679231443, 10679362523, 10679493599, 10679624693, 10679755777, 10679886853, 10680017939, - 10680149027, 10680280147, 10680411281, 10680542377, 10680673459, 10680804569, 10680935647, - 10681066727, 10681197803, 10681328989, 10681460063, 10681591139, 10681722211, 10681853291, - 10681984367, 10682115463, 10682246537, 10682377609, 10682508689, 10682639797, 10682770927, - 10682902003, 10683033089, 10683164189, 10683295279, 10683426379, 10683557453, 10683688597, - 10683819761, 10683950833, 10684081921, 10684213003, 10684344101, 10684475287, 10684606363, - 10684737443, 10684868531, 10684999603, 10685130679, 10685261759, 10685392847, 10685523941, - 10685655017, 10685786129, 10685917211, 10686048283, 10686179369, 10686310451, 10686441523, - 10686572599, 10686703681, 10686834757, 10686965831, 10687096913, 10687227997, 10687359073, - 10687490161, 10687621237, 10687752329, 10687883467, 10688014573, 10688145653, 10688276761, - 10688407853, 10688538937, 10688670011, 10688801111, 10688932187, 10689063269, 10689194353, - 10689325447, 10689456587, 10689587677, 10689718757, 10689849851, 10689980927, 10690112003, - 10690243111, 10690374199, 10690505311, 10690636457, 10690767547, 10690898653, 10691029753, - 10691160833, 10691291951, 10691423047, 10691554121, 10691685211, 10691816293, 10691947367, - 10692078451, 10692209527, 10692340661, 10692471761, 10692602909, 10692733991, 10692865069, - 10692996199, 10693127273, 10693258391, 10693389463, 10693520569, 10693651663, 10693782739, - 10693913819, 10694044891, 10694175991, 10694307067, 10694438147, 10694569229, 10694700307, - 10694831437, 10694962511, 10695093613, 10695224713, 10695355807, 10695486899, 10695618013, - 10695749131, 10695880213, 10696011289, 10696142377, 10696273451, 10696404527, 10696535599, - 10696666681, 10696797767, 10696928839, 10697059913, 10697191031, 10697322121, 10697453219, - 10697584291, 10697715437, 10697846531, 10697977621, 10698108727, 10698239821, 10698370901, - 10698501991, 10698633079, 10698764171, 10698895253, 10699026341, 10699157449, 10699288529, - 10699419607, 10699550683, 10699681813, 10699812917, 10699943999, 10700075137, 10700206213, - 10700337287, 10700468399, 10700599517, 10700730647, 10700861719, 10700992823, 10701123907, - 10701254987, 10701386063, 10701517163, 10701648239, 10701779371, 10701910519, 10702041617, - 10702172699, 10702303847, 10702434929, 10702566013, 10702697099, 10702828181, 10702959277, - 10703090357, 10703221457, 10703352529, 10703483603, 10703614697, 10703745797, 10703876891, - 10704007969, 10704139051, 10704270139, 10704401221, 10704532361, 10704663433, 10704794531, - 10704925633, 10705056707, 10705187789, 10705318879, 10705449959, 10705581049, 10705712137, - 10705843219, 10705974311, 10706105383, 10706236487, 10706367569, 10706498641, 10706629721, - 10706760817, 10706891893, 10707022967, 10707154057, 10707285157, 10707416243, 10707547349, - 10707678481, 10707809557, 10707940631, 10708071713, 10708202801, 10708333891, 10708464989, - 10708596077, 10708727149, 10708858231, 10708989373, 10709120447, 10709251543, 10709382617, - 10709513701, 10709644789, 10709775941, 10709907029, 10710038107, 10710169187, 10710300281, - 10710431411, 10710562487, 10710693563, 10710824651, 10710955769, 10711086853, 10711217969, - 10711349071, 10711480163, 10711611241, 10711742329, 10711873411, 10712004517, 10712135617, - 10712266693, 10712397767, 10712528923, 10712660069, 10712791151, 10712922229, 10713053333, - 10713184439, 10713315511, 10713446587, 10713577663, 10713708739, 10713839827, 10713970909, - 10714102019, 10714233149, 10714364303, 10714495387, 10714626467, 10714757579, 10714888663, - 10715019761, 10715150839, 10715281937, 10715413013, 10715544089, 10715675197, 10715806303, - 10715937389, 10716068509, 10716199589, 10716330671, 10716461759, 10716592841, 10716723923, - 10716855007, 10716986087, 10717117193, 10717248271, 10717379353, 10717510429, 10717641521, - 10717772627, 10717903709, 10718034781, 10718165863, 10718296961, 10718428081, 10718559221, - 10718690309, 10718821387, 10718952521, 10719083603, 10719214679, 10719345751, 10719476827, - 10719607957, 10719739033, 10719870143, 10720001239, 10720132333, 10720263439, 10720394513, - 10720525589, 10720656677, 10720787771, 10720918843, 10721049917, 10721180993, 10721312099, - 10721443171, 10721574287, 10721705387, 10721836481, 10721967593, 10722098683, 10722229807, - 10722360919, 10722491993, 10722623071, 10722754153, 10722885253, 10723016347, 10723147429, - 10723278521, 10723409621, 10723540741, 10723671883, 10723802983, 10723934059, 10724065159, - 10724196257, 10724327357, 10724458447, 10724589529, 10724720609, 10724851763, 10724982929, - 10725114013, 10725245117, 10725376219, 10725507313, 10725638401, 10725769487, 10725900587, - 10726031681, 10726162813, 10726293917, 10726424993, 10726556107, 10726687187, 10726818283, - 10726949383, 10727080471, 10727211553, 10727342629, 10727473717, 10727604793, 10727735867, - 10727866951, 10727998027, 10728129119, 10728260197, 10728391307, 10728522391, 10728653503, - 10728784597, 10728915683, 10729046759, 10729177871, 10729308973, 10729440083, 10729571179, - 10729702253, 10729833329, 10729964407, 10730095499, 10730226581, 10730357717, 10730488789, - 10730619877, 10730750963, 10730882053, 10731013133, 10731144227, 10731275299, 10731406403, - 10731537503, 10731668599, 10731799693, 10731930767, 10732061863, 10732192943, 10732324091, - 10732455163, 10732586237, 10732717327, 10732848403, 10732979479, 10733110559, 10733241637, - 10733372737, 10733503813, 10733634887, 10733765963, 10733897123, 10734028199, 10734159287, - 10734290377, 10734421499, 10734552649, 10734683723, 10734814799, 10734945899, 10735076993, - 10735208149, 10735339253, 10735470331, 10735601423, 10735732499, 10735863587, 10735994663, - 10736125739, 10736256851, 10736387933, 10736519009, 10736650123, 10736781203, 10736912281, - 10737043381, 10737174463, 10737305597, 10737436709, 10737567791, 10737698863, 10737829937, - 10737961027, 10738092103, 10738223191, 10738354273, 10738485349, 10738616437, 10738747529, - 10738878677, 10739009761, 10739140849, 10739271989, 10739403061, 10739534203, 10739665283, - 10739796377, 10739927453, 10740058577, 10740189653, 10740320737, 10740451819, 10740582899, - 10740713983, 10740845083, 10740976157, 10741107241, 10741238317, 10741369409, 10741500487, - 10741631567, 10741762643, 10741893733, 10742024819, 10742155973, 10742287069, 10742418143, - 10742549221, 10742680303, 10742811433, 10742942521, 10743073631, 10743204727, 10743335843, - 10743466961, 10743598037, 10743729131, 10743860221, 10743991303, 10744122397, 10744253479, - 10744384559, 10744515647, 10744646729, 10744777811, 10744908907, 10745039989, 10745171069, - 10745302147, 10745433229, 10745564321, 10745695397, 10745826473, 10745957557, 10746088657, - 10746219733, 10746350807, 10746481883, 10746612959, 10746744031, 10746875131, 10747006213, - 10747137287, 10747268417, 10747399499, 10747530583, 10747661671, 10747792787, 10747923871, - 10748054963, 10748186041, 10748317189, 10748448329, 10748579411, 10748710499, 10748841613, - 10748972693, 10749103769, 10749234869, 10749365941, 10749497021, 10749628111, 10749759211, - 10749890293, 10750021367, 10750152527, 10750283639, 10750414739, 10750545821, 10750676921, - 10750807997, 10750939093, 10751070203, 10751201287, 10751332369, 10751463461, 10751594551, - 10751725637, 10751856719, 10751987797, 10752118873, 10752249979, 10752381053, 10752512159, - 10752643241, 10752774343, 10752905417, 10753036501, 10753167611, 10753298701, 10753429777, - 10753560907, 10753692007, 10753823107, 10753954181, 10754085269, 10754216351, 10754347447, - 10754478521, 10754609609, 10754740697, 10754871781, 10755002879, 10755133993, 10755265091, - 10755396173, 10755527287, 10755658373, 10755789487, 10755920599, 10756051711, 10756182799, - 10756313873, 10756444967, 10756576063, 10756707149, 10756838251, 10756969331, 10757100451, - 10757231579, 10757362667, 10757493743, 10757624819, 10757755903, 10757886989, 10758018077, - 10758149153, 10758280231, 10758411311, 10758542383, 10758673463, 10758804557, 10758935657, - 10759066733, 10759197859, 10759328941, 10759460017, 10759591123, 10759722227, 10759853329, - 10759984429, 10760115503, 10760246579, 10760377651, 10760508739, 10760639917, 10760770997, - 10760902133, 10761033221, 10761164317, 10761295397, 10761426469, 10761557557, 10761688631, - 10761819713, 10761950789, 10762081873, 10762212983, 10762344091, 10762475183, 10762606273, - 10762737347, 10762868449, 10762999543, 10763130649, 10763261737, 10763392811, 10763523943, - 10763655031, 10763786149, 10763917231, 10764048311, 10764179399, 10764310489, 10764441587, - 10764572713, 10764703787, 10764834893, 10764965971, 10765097071, 10765228147, 10765359229, - 10765490303, 10765621387, 10765752467, 10765883551, 10766014661, 10766145737, 10766276813, - 10766407913, 10766538997, 10766670073, 10766801153, 10766932229, 10767063323, 10767194467, - 10767325553, 10767456643, 10767587729, 10767718861, 10767849941, 10767981031, 10768112107, - 10768243181, 10768374257, 10768505339, 10768636469, 10768767551, 10768898639, 10769029727, - 10769160811, 10769291893, 10769422969, 10769554093, 10769685167, 10769816257, 10769947337, - 10770078467, 10770209579, 10770340661, 10770471743, 10770602819, 10770733891, 10770865003, - 10770996077, 10771127153, 10771258231, 10771389341, 10771520423, 10771651549, 10771782631, - 10771913743, 10772044861, 10772175937, 10772307011, 10772438087, 10772569177, 10772700251, - 10772831339, 10772962411, 10773093497, 10773224569, 10773355711, 10773486797, 10773617873, - 10773748967, 10773880043, 10774011121, 10774142201, 10774273303, 10774404379, 10774535461, - 10774666543, 10774797617, 10774928809, 10775059903, 10775191003, 10775322097, 10775453189, - 10775584301, 10775715403, 10775846479, 10775977591, 10776108667, 10776239783, 10776370897, - 10776501991, 10776633139, 10776764221, 10776895303, 10777026383, 10777157507, 10777288579, - 10777419659, 10777550759, 10777681843, 10777812923, 10777944041, 10778075171, 10778206273, - 10778337371, 10778468453, 10778599541, 10778730617, 10778861693, 10778992769, 10779123877, - 10779254987, 10779386087, 10779517213, 10779648289, 10779779363, 10779910481, 10780041593, - 10780172677, 10780303753, 10780434829, 10780565941, 10780697027, 10780828129, 10780959209, - 10781090323, 10781221417, 10781352539, 10781483617, 10781614691, 10781745803, 10781876909, - 10782007981, 10782139079, 10782270197, 10782401269, 10782532351, 10782663427, 10782794501, - 10782925583, 10783056671, 10783187749, 10783318831, 10783449947, 10783581019, 10783712117, - 10783843211, 10783974301, 10784105413, 10784236511, 10784367589, 10784498663, 10784629747, - 10784760907, 10784891993, 10785023087, 10785154187, 10785285293, 10785416387, 10785547501, - 10785678619, 10785809693, 10785940777, 10786071851, 10786202927, 10786334047, 10786465121, - 10786596193, 10786727267, 10786858349, 10786989449, 10787120521, 10787251633, 10787382721, - 10787513801, 10787644913, 10787776001, 10787907083, 10788038207, 10788169283, 10788300389, - 10788431461, 10788562537, 10788693613, 10788824723, 10788955799, 10789086911, 10789217987, - 10789349069, 10789480153, 10789611257, 10789742371, 10789873453, 10790004527, 10790135639, - 10790266769, 10790397853, 10790528941, 10790660021, 10790791103, 10790922179, 10791053281, - 10791184357, 10791315433, 10791446509, 10791577613, 10791708689, 10791839767, 10791970859, - 10792101941, 10792233041, 10792364117, 10792495193, 10792626269, 10792757341, 10792888433, - 10793019529, 10793150611, 10793281699, 10793412781, 10793543857, 10793674949, 10793806031, - 10793937103, 10794068183, 10794199271, 10794330343, 10794461417, 10794592489, 10794723571, - 10794854657, 10794985769, 10795116851, 10795247927, 10795379003, 10795510081, 10795641163, - 10795772249, 10795903331, 10796034409, 10796165483, 10796296601, 10796427679, 10796558783, - 10796689861, 10796820949, 10796952073, 10797083153, 10797214247, 10797345323, 10797476399, - 10797607481, 10797738569, 10797869647, 10798000723, 10798131811, 10798262911, 10798393987, - 10798525099, 10798656223, 10798787303, 10798918399, 10799049533, 10799180611, 10799311697, - 10799442779, 10799573921, 10799705023, 10799836133, 10799967257, 10800098333, 10800229411, - 10800360499, 10800491599, 10800622717, 10800753791, 10800884863, 10801015949, 10801147039, - 10801278119, 10801409191, 10801540271, 10801671371, 10801802467, 10801933559, 10802064643, - 10802195731, 10802326807, 10802457889, 10802588971, 10802720069, 10802851153, 10802982227, - 10803113303, 10803244381, 10803375463, 10803506599, 10803637679, 10803768751, 10803899831, - 10804030907, 10804162003, 10804293089, 10804424161, 10804555243, 10804686329, 10804817411, - 10804948541, 10805079641, 10805210791, 10805341909, 10805472989, 10805604071, 10805735147, - 10805866223, 10805997331, 10806128407, 10806259483, 10806390559, 10806521657, 10806652739, - 10806783817, 10806914917, 10807046017, 10807177093, 10807308173, 10807439329, 10807570471, - 10807701551, 10807832657, 10807963729, 10808094853, 10808225929, 10808357003, 10808488111, - 10808619209, 10808750287, 10808881379, 10809012457, 10809143537, 10809274639, 10809405731, - 10809536807, 10809667907, 10809798997, 10809930083, 10810061161, 10810192243, 10810323319, - 10810454399, 10810585507, 10810716607, 10810847693, 10810978771, 10811109853, 10811240959, - 10811372053, 10811503163, 10811634287, 10811765401, 10811896489, 10812027563, 10812158723, - 10812289823, 10812420919, 10812552017, 10812683137, 10812814223, 10812945317, 10813076401, - 10813207501, 10813338581, 10813469699, 10813600781, 10813731871, 10813862947, 10813994021, - 10814125097, 10814256191, 10814387281, 10814518357, 10814649449, 10814780521, 10814911603, - 10815042691, 10815173773, 10815304861, 10815435959, 10815567031, 10815698123, 10815829207, - 10815960307, 10816091381, 10816222499, 10816353637, 10816484713, 10816615829, 10816746923, - 10816878001, 10817009081, 10817140153, 10817271233, 10817402327, 10817533409, 10817664491, - 10817795617, 10817926703, 10818057787, 10818188869, 10818319949, 10818451057, 10818582133, - 10818713209, 10818844297, 10818975373, 10819106453, 10819237543, 10819368629, 10819499741, - 10819630831, 10819761961, 10819893053, 10820024129, 10820155217, 10820286349, 10820417449, - 10820548537, 10820679641, 10820810717, 10820941837, 10821072923, 10821204019, 10821335093, - 10821466177, 10821597251, 10821728371, 10821859511, 10821990587, 10822121659, 10822252747, - 10822383941, 10822515037, 10822646117, 10822777193, 10822908277, 10823039377, 10823170459, - 10823301547, 10823432639, 10823563711, 10823694797, 10823825911, 10823957003, 10824088103, - 10824219179, 10824350261, 10824481351, 10824612433, 10824743507, 10824874589, 10825005673, - 10825136747, 10825267819, 10825398917, 10825530017, 10825661113, 10825792199, 10825923299, - 10826054399, 10826185477, 10826316559, 10826447693, 10826578781, 10826709853, 10826840929, - 10826972033, 10827103109, 10827234211, 10827365291, 10827496403, 10827627487, 10827758563, - 10827889649, 10828020727, 10828151809, 10828282903, 10828413979, 10828545059, 10828676153, - 10828807229, 10828938313, 10829069413, 10829200493, 10829331577, 10829462681, 10829593757, - 10829724839, 10829855917, 10829987017, 10830118111, 10830249217, 10830380303, 10830511379, - 10830642457, 10830773537, 10830904621, 10831035703, 10831166789, 10831297879, 10831428953, - 10831560029, 10831691107, 10831822207, 10831953283, 10832084363, 10832215529, 10832346659, - 10832477749, 10832608823, 10832739947, 10832871061, 10833002149, 10833133229, 10833264329, - 10833395413, 10833526519, 10833657623, 10833788701, 10833919799, 10834050883, 10834181989, - 10834313069, 10834444141, 10834575223, 10834706303, 10834837451, 10834968523, 10835099621, - 10835230697, 10835361773, 10835492867, 10835623961, 10835755039, 10835886121, 10836017197, - 10836148273, 10836279379, 10836410479, 10836541559, 10836672673, 10836803777, 10836934853, - 10837065947, 10837197023, 10837328107, 10837459189, 10837590277, 10837721351, 10837852429, - 10837983503, 10838114591, 10838245681, 10838376763, 10838507837, 10838638931, 10838770021, - 10838901097, 10839032177, 10839163253, 10839294331, 10839425417, 10839556493, 10839687601, - 10839818677, 10839949753, 10840080841, 10840211917, 10840343021, 10840474093, 10840605187, - 10840736279, 10840867363, 10840998523, 10841129609, 10841260693, 10841391767, 10841522849, - 10841653937, 10841785013, 10841916089, 10842047171, 10842178261, 10842309337, 10842440417, - 10842571499, 10842702599, 10842833671, 10842964747, 10843095833, 10843226929, 10843358051, - 10843489141, 10843620223, 10843751339, 10843882421, 10844013503, 10844144621, 10844275723, - 10844406829, 10844537917, 10844668993, 10844800093, 10844931191, 10845062279, 10845193363, - 10845324443, 10845455521, 10845586597, 10845717703, 10845848779, 10845979861, 10846110967, - 10846242047, 10846373119, 10846504199, 10846635277, 10846766363, 10846897469, 10847028547, - 10847159627, 10847290709, 10847421791, 10847552867, 10847683963, 10847815049, 10847946133, - 10848077231, 10848208307, 10848339419, 10848470497, 10848601573, 10848732647, 10848863719, - 10848994811, 10849125883, 10849256959, 10849388063, 10849519141, 10849650233, 10849781309, - 10849912391, 10850043469, 10850174549, 10850305657, 10850436733, 10850567869, 10850698949, - 10850830027, 10850961109, 10851092279, 10851223381, 10851354467, 10851485549, 10851616621, - 10851747701, 10851878801, 10852009877, 10852140973, 10852272071, 10852403143, 10852534283, - 10852665361, 10852796441, 10852927559, 10853058641, 10853189713, 10853320811, 10853451887, - 10853582963, 10853714041, 10853845127, 10853976229, 10854107323, 10854238397, 10854369473, - 10854500563, 10854631639, 10854762733, 10854893821, 10855024897, 10855155973, 10855287071, - 10855418159, 10855549231, 10855680349, 10855811429, 10855942507, 10856073617, 10856204731, - 10856335829, 10856466911, 10856598007, 10856729083, 10856860169, 10856991247, 10857122321, - 10857253403, 10857384533, 10857515611, 10857646699, 10857777773, 10857908849, 10858039921, - 10858171013, 10858302107, 10858433203, 10858564291, 10858695371, 10858826501, 10858957573, - 10859088649, 10859219753, 10859350837, 10859481953, 10859613031, 10859744107, 10859875249, - 10860006329, 10860137419, 10860268499, 10860399617, 10860530717, 10860661793, 10860792869, - 10860923971, 10861055057, 10861186129, 10861317211, 10861448399, 10861579471, 10861710571, - 10861841707, 10861972787, 10862103859, 10862234953, 10862366051, 10862497147, 10862628221, - 10862759339, 10862890429, 10863021517, 10863152591, 10863283693, 10863414769, 10863545879, - 10863676973, 10863808093, 10863939173, 10864070291, 10864201417, 10864332527, 10864463611, - 10864594691, 10864725779, 10864856861, 10864987967, 10865119039, 10865250127, 10865381203, - 10865512279, 10865643359, 10865774453, 10865905529, 10866036607, 10866167687, 10866298801, - 10866429877, 10866560951, 10866692069, 10866823153, 10866954227, 10867085303, 10867216417, - 10867347497, 10867478579, 10867609657, 10867740757, 10867871831, 10868002939, 10868134027, - 10868265113, 10868396281, 10868527381, 10868658503, 10868789593, 10868920679, 10869051811, - 10869182899, 10869314017, 10869445141, 10869576253, 10869707347, 10869838531, 10869969623, - 10870100699, 10870231777, 10870362857, 10870493929, 10870625009, 10870756093, 10870887169, - 10871018293, 10871149381, 10871280457, 10871411531, 10871542631, 10871673719, 10871804803, - 10871935891, 10872066991, 10872198079, 10872329161, 10872460297, 10872591413, 10872722489, - 10872853573, 10872984691, 10873115777, 10873246883, 10873377961, 10873509041, 10873640117, - 10873771189, 10873902313, 10874033419, 10874164501, 10874295583, 10874426663, 10874557769, - 10874688841, 10874819929, 10874951053, 10875082133, 10875213253, 10875344351, 10875475439, - 10875606529, 10875737603, 10875868687, 10875999791, 10876130869, 10876261961, 10876393037, - 10876524121, 10876655227, 10876786307, 10876917383, 10877048459, 10877179609, 10877310733, - 10877441807, 10877572883, 10877703961, 10877835041, 10877966147, 10878097261, 10878228337, - 10878359411, 10878490487, 10878621571, 10878752711, 10878883783, 10879014857, 10879145939, - 10879277027, 10879408117, 10879539199, 10879670339, 10879801411, 10879932491, 10880063567, - 10880194649, 10880325727, 10880456819, 10880587901, 10880718977, 10880850059, 10880981147, - 10881112219, 10881243313, 10881374401, 10881505477, 10881636569, 10881767669, 10881898751, - 10882029841, 10882160977, 10882292051, 10882423141, 10882554217, 10882685291, 10882816363, - 10882947437, 10883078527, 10883209669, 10883340763, 10883471839, 10883602913, 10883734027, - 10883865119, 10883996197, 10884127297, 10884258373, 10884389501, 10884520573, 10884651647, - 10884782731, 10884913813, 10885044889, 10885175963, 10885307053, 10885438129, 10885569221, - 10885700299, 10885831393, 10885962497, 10886093597, 10886224681, 10886355761, 10886486837, - 10886617909, 10886749021, 10886880097, 10887011189, 10887142267, 10887273343, 10887404417, - 10887535489, 10887666589, 10887797699, 10887928781, 10888059899, 10888190981, 10888322083, - 10888453171, 10888584251, 10888715329, 10888846411, 10888977523, 10889108599, 10889239679, - 10889370773, 10889501899, 10889632981, 10889764079, 10889895179, 10890026429, 10890157541, - 10890288659, 10890419737, 10890550837, 10890681913, 10890813029, 10890944111, 10891075199, - 10891206343, 10891337417, 10891468517, 10891599619, 10891730699, 10891861819, 10891992899, - 10892123971, 10892255063, 10892386157, 10892517271, 10892648383, 10892779483, 10892910563, - 10893041641, 10893172723, 10893303859, 10893434953, 10893566027, 10893697109, 10893828199, - 10893959291, 10894090391, 10894221467, 10894352603, 10894483693, 10894614767, 10894745843, - 10894876931, 10895008009, 10895139107, 10895270189, 10895401289, 10895532367, 10895663459, - 10895794579, 10895925697, 10896056791, 10896187879, 10896318967, 10896450083, 10896581167, - 10896712273, 10896843359, 10896974437, 10897105517, 10897236607, 10897367681, 10897498757, - 10897629851, 10897760941, 10897892017, 10898023109, 10898154277, 10898285357, 10898416469, - 10898547547, 10898678633, 10898809709, 10898940791, 10899071881, 10899202973, 10899334073, - 10899465149, 10899596231, 10899727313, 10899858413, 10899989491, 10900120577, 10900251673, - 10900382819, 10900513903, 10900645027, 10900776119, 10900907197, 10901038271, 10901169343, - 10901300467, 10901431549, 10901562643, 10901693731, 10901824811, 10901955887, 10902086989, - 10902218111, 10902349187, 10902480283, 10902611359, 10902742517, 10902873599, 10903004677, - 10903135757, 10903266833, 10903397941, 10903529051, 10903660181, 10903791299, 10903922371, - 10904053493, 10904184589, 10904315677, 10904446783, 10904577889, 10904708999, 10904840099, - 10904971171, 10905102289, 10905233377, 10905364451, 10905495539, 10905626621, 10905757721, - 10905888823, 10906019897, 10906150973, 10906282061, 10906413139, 10906544219, 10906675301, - 10906806373, 10906937449, 10907068531, 10907199631, 10907330711, 10907461811, 10907592889, - 10907724013, 10907855089, 10907986207, 10908117289, 10908248363, 10908379439, 10908510517, - 10908641591, 10908772691, 10908903763, 10909034887, 10909165963, 10909297039, 10909428137, - 10909559231, 10909690331, 10909821427, 10909952531, 10910083607, 10910214683, 10910345773, - 10910476867, 10910607947, 10910739061, 10910870141, 10911001219, 10911132301, 10911263387, - 10911394471, 10911525571, 10911656671, 10911787753, 10911918839, 10912049927, 10912180999, - 10912312133, 10912443209, 10912574291, 10912705379, 10912836481, 10912967561, 10913098633, - 10913229749, 10913360837, 10913491933, 10913623031, 10913754119, 10913885261, 10914016349, - 10914147443, 10914278663, 10914409771, 10914540877, 10914671987, 10914803059, 10914934141, - 10915065251, 10915196333, 10915327421, 10915458493, 10915589567, 10915720643, 10915851721, - 10915982813, 10916113961, 10916245049, 10916376131, 10916507243, 10916638351, 10916769449, - 10916900521, 10917031607, 10917162689, 10917293773, 10917424873, 10917555949, 10917687031, - 10917818129, 10917949283, 10918080367, 10918211443, 10918342529, 10918473607, 10918604687, - 10918735783, 10918866859, 10918997941, 10919129029, 10919260103, 10919391211, 10919522303, - 10919653391, 10919784529, 10919915623, 10920046703, 10920177787, 10920308863, 10920439949, - 10920571021, 10920702109, 10920833219, 10920964291, 10921095371, 10921226497, 10921357571, - 10921488647, 10921619777, 10921750877, 10921881953, 10922013061, 10922144137, 10922275253, - 10922406343, 10922537447, 10922668531, 10922799611, 10922930719, 10923061801, 10923192881, - 10923323963, 10923455047, 10923586123, 10923717209, 10923848329, 10923979403, 10924110523, - 10924241617, 10924372691, 10924503781, 10924634873, 10924765991, 10924897063, 10925028143, - 10925159227, 10925290333, 10925421407, 10925552479, 10925683597, 10925814703, 10925945791, - 10926076957, 10926208031, 10926339103, 10926470179, 10926601253, 10926732329, 10926863411, - 10926994489, 10927125571, 10927256647, 10927387727, 10927518803, 10927649879, 10927780967, - 10927912043, 10928043163, 10928174249, 10928305321, 10928436427, 10928567509, 10928698589, - 10928829727, 10928960831, 10929091933, 10929223027, 10929354131, 10929485213, 10929616331, - 10929747403, 10929878501, 10930009589, 10930140679, 10930271773, 10930402867, 10930533947, - 10930665043, 10930796143, 10930927229, 10931058311, 10931189407, 10931320529, 10931451607, - 10931582687, 10931713759, 10931844839, 10931975921, 10932106993, 10932238087, 10932369167, - 10932500263, 10932631379, 10932762499, 10932893603, 10933024681, 10933155757, 10933286849, - 10933417921, 10933549027, 10933680127, 10933811249, 10933942321, 10934073401, 10934204497, - 10934335591, 10934466703, 10934597777, 10934728877, 10934859977, 10934991049, 10935122129, - 10935253201, 10935384307, 10935515399, 10935646483, 10935777563, 10935908677, 10936039799, - 10936170881, 10936301963, 10936433051, 10936564123, 10936695197, 10936826273, 10936957379, - 10937088467, 10937219539, 10937350621, 10937481697, 10937612773, 10937743877, 10937874971, - 10938006043, 10938137141, 10938268223, 10938399331, 10938530411, 10938661483, 10938792569, - 10938923669, 10939054747, 10939185839, 10939316933, 10939448029, 10939579103, 10939710209, - 10939841281, 10939972357, 10940103529, 10940234609, 10940365697, 10940496773, 10940627869, - 10940758963, 10940890043, 10941021121, 10941152197, 10941283279, 10941414373, 10941545453, - 10941676553, 10941807659, 10941938737, 10942069811, 10942200889, 10942331963, 10942463039, - 10942594127, 10942725251, 10942856341, 10942987463, 10943118577, 10943249657, 10943380729, - 10943511853, 10943642947, 10943774029, 10943905111, 10944036221, 10944167309, 10944298459, - 10944429547, 10944560639, 10944691711, 10944822799, 10944953881, 10945085069, 10945216141, - 10945347241, 10945478329, 10945609417, 10945740527, 10945871611, 10946002699, 10946133799, - 10946264893, 10946395973, 10946527061, 10946658143, 10946789251, 10946920343, 10947051449, - 10947182531, 10947313603, 10947444689, 10947575761, 10947706883, 10947837961, 10947969061, - 10948100167, 10948231241, 10948362367, 10948493441, 10948624567, 10948755641, 10948886723, - 10949017799, 10949148871, 10949279959, 10949411041, 10949542133, 10949673211, 10949804303, - 10949935387, 10950066461, 10950197563, 10950328657, 10950459757, 10950590837, 10950721913, - 10950853073, 10950984151, 10951115237, 10951246331, 10951377403, 10951508521, 10951639609, - 10951770691, 10951901783, 10952032879, 10952163953, 10952295031, 10952426117, 10952557211, - 10952688317, 10952819389, 10952950469, 10953081553, 10953212653, 10953343733, 10953474853, - 10953605933, 10953737009, 10953868099, 10953999179, 10954130261, 10954261343, 10954392433, - 10954523507, 10954654589, 10954785679, 10954916761, 10955047891, 10955178977, 10955310059, - 10955441131, 10955572219, 10955703307, 10955834387, 10955965499, 10956096589, 10956227663, - 10956358753, 10956489857, 10956620953, 10956752033, 10956883109, 10957014181, 10957145357, - 10957276439, 10957407523, 10957538617, 10957669693, 10957800779, 10957931923, 10958063009, - 10958194109, 10958325181, 10958456263, 10958587357, 10958718443, 10958849543, 10958980631, - 10959111767, 10959242849, 10959373927, 10959505003, 10959636113, 10959767219, 10959898297, - 10960029373, 10960160473, 10960291553, 10960422637, 10960553717, 10960684811, 10960815883, - 10960946977, 10961078057, 10961209159, 10961340259, 10961471347, 10961602423, 10961733499, - 10961864581, 10961995663, 10962126743, 10962257833, 10962388909, 10962519983, 10962651083, - 10962782177, 10962913277, 10963044353, 10963175437, 10963306559, 10963437647, 10963568747, - 10963699841, 10963830947, 10963962041, 10964093141, 10964224253, 10964355371, 10964486473, - 10964617549, 10964748629, 10964879701, 10965010799, 10965141893, 10965273019, 10965404117, - 10965535193, 10965666293, 10965797383, 10965928537, 10966059613, 10966190687, 10966321771, - 10966452853, 10966583933, 10966715017, 10966846109, 10966977181, 10967108267, 10967239373, - 10967370521, 10967501593, 10967632667, 10967763743, 10967894827, 10968025903, 10968157043, - 10968288119, 10968419197, 10968550279, 10968681371, 10968812443, 10968943529, 10969074643, - 10969205803, 10969336879, 10969467953, 10969599049, 10969730137, 10969861267, 10969992403, - 10970123491, 10970254571, 10970385649, 10970516803, 10970647901, 10970778989, 10970910077, - 10971041183, 10971172271, 10971303349, 10971434459, 10971565537, 10971696629, 10971827717, - 10971958813, 10972089917, 10972220993, 10972352081, 10972483157, 10972614239, 10972745321, - 10972876393, 10973007467, 10973138549, 10973269649, 10973400721, 10973531809, 10973662919, - 10973793991, 10973925077, 10974056153, 10974187267, 10974318343, 10974449429, 10974580579, - 10974711653, 10974842789, 10974973873, 10975104977, 10975236073, 10975367167, 10975498249, - 10975629367, 10975760441, 10975891517, 10976022593, 10976153687, 10976284771, 10976415851, - 10976546923, 10976678003, 10976809147, 10976940229, 10977071317, 10977202399, 10977333491, - 10977464579, 10977595669, 10977726779, 10977857851, 10977988949, 10978120051, 10978251131, - 10978382203, 10978513279, 10978644359, 10978775503, 10978906597, 10979037673, 10979168773, - 10979299847, 10979430923, 10979562001, 10979693089, 10979824169, 10979955281, 10980086389, - 10980217483, 10980348571, 10980479647, 10980610723, 10980741797, 10980872869, 10981003951, - 10981135073, 10981266209, 10981397303, 10981528409, 10981659509, 10981790581, 10981921721, - 10982052793, 10982183867, 10982314943, 10982446061, 10982577139, 10982708239, 10982839327, - 10982970437, 10983101509, 10983232621, 10983363731, 10983494831, 10983625927, 10983757003, - 10983888077, 10984019159, 10984150241, 10984281313, 10984412399, 10984543499, 10984674619, - 10984805693, 10984936789, 10985067889, 10985198963, 10985330053, 10985461129, 10985592251, - 10985723341, 10985854417, 10985985533, 10986116641, 10986247747, 10986378829, 10986509923, - 10986641011, 10986772127, 10986903227, 10987034389, 10987165463, 10987296539, 10987427657, - 10987558741, 10987689833, 10987820951, 10987952029, 10988083109, 10988214203, 10988345287, - 10988476427, 10988607547, 10988738639, 10988869729, 10989000811, 10989131921, 10989263003, - 10989394081, 10989525181, 10989656263, 10989787337, 10989918419, 10990049491, 10990180571, - 10990311659, 10990442731, 10990573813, 10990704917, 10990836001, 10990967093, 10991098187, - 10991229281, 10991360363, 10991491493, 10991622581, 10991753671, 10991884793, 10992015877, - 10992146983, 10992278093, 10992409171, 10992540301, 10992671377, 10992802519, 10992933599, - 10993064683, 10993195799, 10993326871, 10993457971, 10993589051, 10993720139, 10993851241, - 10993982317, 10994113391, 10994244463, 10994375549, 10994506657, 10994637733, 10994768849, - 10994899969, 10995031043, 10995162137, 10995293213, 10995424289, 10995555391, 10995686467, - 10995817561, 10995948643, 10996079761, 10996210843, 10996341949, 10996473023, 10996604111, - 10996735187, 10996866269, 10996997357, 10997128433, 10997259521, 10997390597, 10997521673, - 10997652797, 10997783893, 10997914969, 10998046069, 10998177167, 10998308267, 10998439349, - 10998570431, 10998701537, 10998832631, 10998963707, 10999094797, 10999225873, 10999356989, - 10999488061, 10999619143, 10999750217, 10999881313, 11000012389, 11000143463, 11000274553, - 11000405629, 11000536739, 11000667841, 11000798917, 11000930033, 11001061111, 11001192217, - 11001323297, 11001454421, 11001585499, 11001716581, 11001847657, 11001978739, 11002109819, - 11002240901, 11002371997, 11002503073, 11002634147, 11002765229, 11002896353, 11003027429, - 11003158513, 11003289611, 11003420693, 11003551771, 11003682847, 11003813927, 11003945009, - 11004076099, 11004207173, 11004338251, 11004469327, 11004600403, 11004731477, 11004862553, - 11004993653, 11005124749, 11005255831, 11005386923, 11005518023, 11005649113, 11005780223, - 11005911317, 11006042401, 11006173481, 11006304559, 11006435639, 11006566733, 11006697829, - 11006828909, 11006959991, 11007091079, 11007222151, 11007353233, 11007484331, 11007615407, - 11007746513, 11007877591, 11008008689, 11008139789, 11008270873, 11008401947, 11008533049, - 11008664129, 11008795207, 11008926301, 11009057419, 11009188493, 11009319577, 11009450723, - 11009581799, 11009712919, 11009843993, 11009975069, 11010106147, 11010237229, 11010368321, - 11010499403, 11010630481, 11010761599, 11010892679, 11011023791, 11011154909, 11011285981, - 11011417069, 11011548143, 11011679251, 11011810343, 11011941463, 11012072563, 11012203639, - 11012334731, 11012465831, 11012596979, 11012728091, 11012859167, 11012990251, 11013121337, - 11013252413, 11013383509, 11013514613, 11013645739, 11013776857, 11013907939, 11014039013, - 11014170109, 11014301201, 11014432321, 11014563409, 11014694501, 11014825609, 11014956691, - 11015087791, 11015218909, 11015350007, 11015481083, 11015612171, 11015743273, 11015874347, - 11016005479, 11016136609, 11016267701, 11016398791, 11016529871, 11016660947, 11016792029, - 11016923153, 11017054229, 11017185323, 11017316399, 11017447513, 11017578601, 11017709713, - 11017840787, 11017971859, 11018102939, 11018234023, 11018365097, 11018496193, 11018627293, - 11018758417, 11018889491, 11019020581, 11019151657, 11019282797, 11019413921, 11019545003, - 11019676079, 11019807191, 11019938287, 11020069363, 11020200449, 11020331537, 11020462657, - 11020593739, 11020724851, 11020855957, 11020987037, 11021118149, 11021249221, 11021380309, - 11021511433, 11021642537, 11021773621, 11021904697, 11022035797, 11022166879, 11022297967, - 11022429073, 11022560161, 11022691249, 11022822331, 11022953407, 11023084549, 11023215647, - 11023346729, 11023477823, 11023608923, 11023739999, 11023871071, 11024002147, 11024133221, - 11024264309, 11024395387, 11024526463, 11024657543, 11024788639, 11024919743, 11025050849, - 11025181949, 11025313069, 11025444211, 11025575291, 11025706409, 11025837481, 11025968567, - 11026099661, 11026230749, 11026361849, 11026492937, 11026624043, 11026755139, 11026886249, - 11027017357, 11027148479, 11027279573, 11027410661, 11027541739, 11027672857, 11027803937, - 11027935031, 11028066149, 11028197221, 11028328303, 11028459439, 11028590519, 11028721621, - 11028852707, 11028983803, 11029114879, 11029245977, 11029377049, 11029508123, 11029639199, - 11029770287, 11029901369, 11030032459, 11030163577, 11030294699, 11030425781, 11030556863, - 11030687951, 11030819029, 11030950103, 11031081209, 11031212327, 11031343417, 11031474511, - 11031605587, 11031736673, 11031867767, 11031998897, 11032129973, 11032261069, 11032392143, - 11032523291, 11032654363, 11032785437, 11032916519, 11033047621, 11033178713, 11033309849, - 11033440933, 11033572007, 11033703157, 11033834237, 11033965309, 11034096389, 11034227489, - 11034358627, 11034489721, 11034620801, 11034751879, 11034882953, 11035014071, 11035145167, - 11035276267, 11035407367, 11035538467, 11035669549, 11035800719, 11035931857, 11036062943, - 11036194021, 11036325169, 11036456243, 11036587319, 11036718401, 11036849477, 11036980571, - 11037111649, 11037242729, 11037373801, 11037504899, 11037636011, 11037767119, 11037898199, - 11038029281, 11038160363, 11038291447, 11038422523, 11038553597, 11038684669, 11038815829, - 11038946921, 11039077997, 11039209081, 11039340227, 11039471341, 11039602447, 11039733553, - 11039864657, 11039995739, 11040126817, 11040257947, 11040389047, 11040520123, 11040651203, - 11040782279, 11040913369, 11041044449, 11041175527, 11041306663, 11041437761, 11041568869, - 11041699961, 11041831033, 11041962149, 11042093221, 11042224327, 11042355413, 11042486491, - 11042617577, 11042748659, 11042879759, 11043010831, 11043141937, 11043273011, 11043404101, - 11043535187, 11043666289, 11043797383, 11043928459, 11044059541, 11044190639, 11044321753, - 11044452833, 11044583939, 11044715027, 11044846147, 11044977233, 11045108309, 11045239409, - 11045370527, 11045501641, 11045632753, 11045763863, 11045894939, 11046026083, 11046157189, - 11046288283, 11046419359, 11046550433, 11046681511, 11046812593, 11046943667, 11047074751, - 11047205833, 11047336939, 11047468043, 11047599127, 11047730233, 11047861343, 11047992427, - 11048123509, 11048254597, 11048385737, 11048516819, 11048647891, 11048779061, 11048910137, - 11049041219, 11049172301, 11049303383, 11049434483, 11049565561, 11049696641, 11049827753, - 11049958847, 11050089929, 11050221023, 11050352099, 11050483219, 11050614319, 11050745437, - 11050876513, 11051007589, 11051138689, 11051269769, 11051400991, 11051532067, 11051663141, - 11051794223, 11051925319, 11052056443, 11052187537, 11052318619, 11052449699, 11052580783, - 11052711881, 11052842987, 11052974059, 11053105139, 11053236251, 11053367399, 11053498471, - 11053629599, 11053760671, 11053891829, 11054022937, 11054154031, 11054285107, 11054416199, - 11054547299, 11054678377, 11054809481, 11054940569, 11055071641, 11055202727, 11055333827, - 11055464909, 11055596089, 11055727183, 11055858277, 11055989359, 11056120451, 11056251523, - 11056382639, 11056513711, 11056644811, 11056775909, 11056906997, 11057038099, 11057169181, - 11057300269, 11057431391, 11057562463, 11057693551, 11057824627, 11057955707, 11058086797, - 11058217879, 11058349013, 11058480089, 11058611191, 11058742271, 11058873347, 11059004419, - 11059135501, 11059266577, 11059397681, 11059528787, 11059659869, 11059791013, 11059922089, - 11060053163, 11060184257, 11060315339, 11060446427, 11060577509, 11060708597, 11060839697, - 11060970773, 11061101873, 11061232951, 11061364051, 11061495127, 11061626221, 11061757337, - 11061888419, 11062019491, 11062150579, 11062281653, 11062412729, 11062543813, 11062674901, - 11062805983, 11062937057, 11063068151, 11063199227, 11063330347, 11063461463, 11063592559, - 11063723653, 11063854727, 11063985811, 11064116887, 11064247991, 11064379099, 11064510199, - 11064641281, 11064772363, 11064903449, 11065034551, 11065165633, 11065296707, 11065427797, - 11065558871, 11065689967, 11065821049, 11065952123, 11066083313, 11066214493, 11066345593, - 11066476693, 11066607767, 11066738861, 11066869939, 11067001021, 11067132113, 11067263189, - 11067394291, 11067525383, 11067656461, 11067787547, 11067918671, 11068049747, 11068180859, - 11068311937, 11068443031, 11068574123, 11068705213, 11068836293, 11068967387, 11069098487, - 11069229629, 11069360749, 11069491883, 11069622959, 11069754037, 11069885117, 11070016193, - 11070147281, 11070278363, 11070409439, 11070540511, 11070671687, 11070802759, 11070933833, - 11071064929, 11071196009, 11071327103, 11071458179, 11071589251, 11071720351, 11071851433, - 11071982507, 11072113601, 11072244679, 11072375857, 11072506957, 11072638051, 11072769133, - 11072900227, 11073031301, 11073162379, 11073293467, 11073424547, 11073555641, 11073686713, - 11073817787, 11073948863, 11074079959, 11074211039, 11074342157, 11074473229, 11074604327, - 11074735411, 11074866493, 11074997567, 11075128661, 11075259749, 11075390827, 11075521901, - 11075653003, 11075784101, 11075915173, 11076046271, 11076177353, 11076308449, 11076439537, - 11076570629, 11076701731, 11076832849, 11076963923, 11077094999, 11077226113, 11077357189, - 11077488263, 11077619341, 11077750433, 11077881509, 11078012591, 11078143697, 11078274787, - 11078405873, 11078536949, 11078668031, 11078799107, 11078930197, 11079061271, 11079192343, - 11079323429, 11079454511, 11079585607, 11079716717, 11079847811, 11079978913, 11080110029, - 11080241119, 11080372213, 11080503311, 11080634407, 11080765511, 11080896583, 11081027663, - 11081158783, 11081289859, 11081420971, 11081552057, 11081683159, 11081814251, 11081945341, - 11082076459, 11082207547, 11082338629, 11082469721, 11082600803, 11082731879, 11082863047, - 11082994121, 11083125217, 11083256309, 11083387421, 11083518547, 11083649623, 11083780699, - 11083911779, 11084042911, 11084173999, 11084305097, 11084436211, 11084567321, 11084698421, - 11084829499, 11084960629, 11085091709, 11085222787, 11085353933, 11085485009, 11085616127, - 11085747217, 11085878291, 11086009373, 11086140449, 11086271527, 11086402619, 11086533713, - 11086664837, 11086795943, 11086927031, 11087058109, 11087189249, 11087320369, 11087451443, - 11087582521, 11087713603, 11087844707, 11087975779, 11088106853, 11088237943, 11088369073, - 11088500147, 11088631237, 11088762313, 11088893393, 11089024489, 11089155563, 11089286639, - 11089417721, 11089548793, 11089679869, 11089810961, 11089942033, 11090073179, 11090204299, - 11090335387, 11090466461, 11090597533, 11090728637, 11090859727, 11090990809, 11091121889, - 11091252967, 11091384043, 11091515117, 11091646217, 11091777317, 11091908419, 11092039499, - 11092170577, 11092301653, 11092432733, 11092563841, 11092694923, 11092826011, 11092957111, - 11093088199, 11093219299, 11093350423, 11093481541, 11093612671, 11093743753, 11093874851, - 11094005927, 11094137011, 11094268099, 11094399179, 11094530267, 11094661339, 11094792431, - 11094923513, 11095054681, 11095185791, 11095316879, 11095447973, 11095579049, 11095710179, - 11095841269, 11095972343, 11096103433, 11096234537, 11096365633, 11096496707, 11096627827, - 11096758919, 11096890001, 11097021073, 11097152149, 11097283247, 11097414319, 11097545401, - 11097676489, 11097807569, 11097938641, 11098069739, 11098200823, 11098331903, 11098463011, - 11098594099, 11098725173, 11098856273, 11098987357, 11099118461, 11099249533, 11099380639, - 11099511719, 11099642843, 11099773931, 11099905009, 11100036121, 11100167207, 11100298373, - 11100429479, 11100560557, 11100691669, 11100822773, 11100953869, 11101085029, 11101216123, - 11101347199, 11101478273, 11101609373, 11101740449, 11101871531, 11102002603, 11102133677, - 11102264779, 11102395939, 11102527031, 11102658103, 11102789177, 11102920273, 11103051397, - 11103182491, 11103313597, 11103444689, 11103575809, 11103706903, 11103838007, 11103969083, - 11104100209, 11104231289, 11104362377, 11104493453, 11104624547, 11104755631, 11104886711, - 11105017787, 11105148889, 11105279989, 11105411081, 11105542153, 11105673233, 11105804327, - 11105935409, 11106066487, 11106197569, 11106328657, 11106459739, 11106590827, 11106721907, - 11106853013, 11106984103, 11107115177, 11107246261, 11107377361, 11107508459, 11107639547, - 11107770623, 11107901699, 11108032787, 11108163863, 11108294941, 11108426023, 11108557099, - 11108688179, 11108819261, 11108950379, 11109081463, 11109212537, 11109343649, 11109474731, - 11109605803, 11109736877, 11109867959, 11109999031, 11110130137, 11110261223, 11110392353, - 11110523449, 11110654537, 11110785643, 11110916731, 11111047811, 11111178899, 11111309971, - 11111441069, 11111572211, 11111703299, 11111834407, 11111965483, 11112096557, 11112227629, - 11112358709, 11112489781, 11112620863, 11112751963, 11112883079, 11113014151, 11113145273, - 11113276373, 11113407469, 11113538573, 11113669661, 11113800743, 11113931837, 11114062909, - 11114194037, 11114325109, 11114456183, 11114587271, 11114718353, 11114849437, 11114980519, - 11115111607, 11115242689, 11115373769, 11115504853, 11115635957, 11115767081, 11115898159, - 11116029247, 11116160339, 11116291429, 11116422503, 11116553579, 11116684679, 11116815767, - 11116946843, 11117077921, 11117209043, 11117340121, 11117471237, 11117602333, 11117733409, - 11117864491, 11117995601, 11118126673, 11118257767, 11118388861, 11118519941, 11118651013, - 11118782093, 11118913199, 11119044289, 11119175381, 11119306459, 11119437533, 11119568627, - 11119699727, 11119830803, 11119961911, 11120093029, 11120224189, 11120355269, 11120486347, - 11120617427, 11120748557, 11120879629, 11121010721, 11121141809, 11121272887, 11121404009, - 11121535153, 11121666233, 11121797327, 11121928421, 11122059499, 11122190593, 11122321673, - 11122452773, 11122583891, 11122714963, 11122846039, 11122977133, 11123108221, 11123239321, - 11123370409, 11123501491, 11123632579, 11123763661, 11123894741, 11124025883, 11124156959, - 11124288041, 11124419167, 11124550247, 11124681349, 11124812423, 11124943499, 11125074589, - 11125205669, 11125336751, 11125467883, 11125598969, 11125730071, 11125861169, 11125992257, - 11126123347, 11126254421, 11126385499, 11126516633, 11126647709, 11126778799, 11126909909, - 11127041077, 11127172151, 11127303293, 11127434393, 11127565469, 11127696571, 11127827701, - 11127958781, 11128089893, 11128220977, 11128352107, 11128483253, 11128614347, 11128745443, - 11128876553, 11129007629, 11129138701, 11129269777, 11129400851, 11129531953, 11129663033, - 11129794147, 11129925221, 11130056389, 11130187507, 11130318587, 11130449689, 11130580771, - 11130711877, 11130842969, 11130974053, 11131105171, 11131236269, 11131367363, 11131498447, - 11131629557, 11131760657, 11131891759, 11132022833, 11132153957, 11132285051, 11132416171, - 11132547247, 11132678321, 11132809423, 11132940547, 11133071629, 11133202733, 11133333823, - 11133464897, 11133595973, 11133727051, 11133858133, 11133989213, 11134120331, 11134251421, - 11134382507, 11134513591, 11134644671, 11134775783, 11134906907, 11135038003, 11135169083, - 11135300213, 11135431297, 11135562457, 11135693539, 11135824613, 11135955773, 11136086869, - 11136217957, 11136349031, 11136480109, 11136611249, 11136742321, 11136873409, 11137004563, - 11137135637, 11137266737, 11137397813, 11137528891, 11137660013, 11137791107, 11137922231, - 11138053309, 11138184383, 11138315467, 11138446541, 11138577617, 11138708689, 11138839781, - 11138970853, 11139101929, 11139233029, 11139364127, 11139495221, 11139626387, 11139757469, - 11139888541, 11140019629, 11140150817, 11140281959, 11140413041, 11140544141, 11140675237, - 11140806343, 11140937417, 11141068489, 11141199583, 11141330657, 11141461753, 11141592881, - 11141723987, 11141855077, 11141986153, 11142117227, 11142248303, 11142379403, 11142510487, - 11142641603, 11142772679, 11142903763, 11143034867, 11143165963, 11143297063, 11143428139, - 11143559221, 11143690297, 11143821383, 11143952497, 11144083589, 11144214703, 11144345809, - 11144476921, 11144608021, 11144739173, 11144870287, 11145001409, 11145132497, 11145263573, - 11145394657, 11145525791, 11145656881, 11145787963, 11145919051, 11146050133, 11146181213, - 11146312297, 11146443377, 11146574449, 11146705529, 11146836611, 11146967683, 11147098763, - 11147229869, 11147360957, 11147492099, 11147623199, 11147754281, 11147885377, 11148016459, - 11148147559, 11148278653, 11148409747, 11148540839, 11148671939, 11148803023, 11148934099, - 11149065211, 11149196291, 11149327373, 11149458461, 11149589573, 11149720663, 11149851743, - 11149982827, 11150113913, 11150245087, 11150376163, 11150507239, 11150638313, 11150769389, - 11150900521, 11151031609, 11151162689, 11151293773, 11151424853, 11151555967, 11151687059, - 11151818147, 11151949229, 11152080301, 11152211381, 11152342459, 11152473547, 11152604641, - 11152735717, 11152866793, 11152997879, 11153128963, 11153260051, 11153391133, 11153522243, - 11153653319, 11153784401, 11153915501, 11154046573, 11154177647, 11154308723, 11154439819, - 11154570913, 11154702011, 11154833111, 11154964243, 11155095317, 11155226393, 11155357469, - 11155488559, 11155619653, 11155750729, 11155881811, 11156012927, 11156144011, 11156275093, - 11156406211, 11156537299, 11156668373, 11156799463, 11156930563, 11157061637, 11157192727, - 11157323803, 11157454883, 11157585977, 11157717089, 11157848201, 11157979297, 11158110391, - 11158241467, 11158372553, 11158503647, 11158634723, 11158765801, 11158896877, 11159027951, - 11159159029, 11159290133, 11159421209, 11159552297, 11159683373, 11159814493, 11159945717, - 11160076793, 11160207869, 11160338951, 11160470039, 11160601117, 11160732217, 11160863291, - 11160994373, 11161125463, 11161256549, 11161387639, 11161518743, 11161649831, 11161780909, - 11161912031, 11162043127, 11162174237, 11162305313, 11162436401, 11162567497, 11162698571, - 11162829659, 11162960761, 11163091867, 11163222943, 11163354023, 11163485101, 11163616213, - 11163747299, 11163878381, 11164009453, 11164140583, 11164271681, 11164402763, 11164533841, - 11164664933, 11164796011, 11164927087, 11165058251, 11165189359, 11165320433, 11165451547, - 11165582621, 11165713697, 11165844797, 11165975881, 11166106961, 11166238043, 11166369121, - 11166500197, 11166631291, 11166762421, 11166893519, 11167024591, 11167155667, 11167286797, - 11167417889, 11167549021, 11167680133, 11167811243, 11167942343, 11168073461, 11168204543, - 11168335637, 11168466721, 11168597821, 11168728897, 11168859973, 11168991079, 11169122189, - 11169253273, 11169384397, 11169515473, 11169646547, 11169777637, 11169908713, 11170039799, - 11170170877, 11170301957, 11170433039, 11170564117, 11170695199, 11170826279, 11170957351, - 11171088473, 11171219681, 11171350783, 11171481859, 11171612953, 11171744029, 11171875133, - 11172006217, 11172137293, 11172268381, 11172399463, 11172530549, 11172661639, 11172792721, - 11172923803, 11173054897, 11173186001, 11173317079, 11173448159, 11173579237, 11173710341, - 11173841473, 11173972553, 11174103643, 11174234717, 11174365789, 11174496901, 11174627987, - 11174759087, 11174890159, 11175021241, 11175152333, 11175283433, 11175414511, 11175545599, - 11175676711, 11175807793, 11175938881, 11176069979, 11176201067, 11176332157, 11176463239, - 11176594321, 11176725401, 11176856489, 11176987567, 11177118647, 11177249729, 11177380873, - 11177511967, 11177643091, 11177774197, 11177905301, 11178036379, 11178167459, 11178298531, - 11178429643, 11178560741, 11178691847, 11178822929, 11178954029, 11179085107, 11179216189, - 11179347337, 11179478423, 11179609531, 11179740629, 11179871723, 11180002811, 11180133893, - 11180264987, 11180396063, 11180527147, 11180658257, 11180789357, 11180920441, 11181051517, - 11181182599, 11181313733, 11181444863, 11181575941, 11181707021, 11181838093, 11181969191, - 11182100311, 11182231393, 11182362469, 11182493557, 11182624639, 11182755721, 11182886837, - 11183017913, 11183149007, 11183280161, 11183411249, 11183542373, 11183673493, 11183804573, - 11183935669, 11184066781, 11184197891, 11184328997, 11184460081, 11184591157, 11184722249, - 11184853331, 11184984407, 11185115483, 11185246561, 11185377713, 11185508809, 11185639939, - 11185771099, 11185902241, 11186033333, 11186164433, 11186295569, 11186426659, 11186557751, - 11186688869, 11186819953, 11186951033, 11187082141, 11187213259, 11187344351, 11187475441, - 11187606539, 11187737633, 11187868711, 11187999793, 11188130869, 11188261943, 11188393061, - 11188524173, 11188655249, 11188786339, 11188917413, 11189048503, 11189179601, 11189310673, - 11189441749, 11189572913, 11189704037, 11189835121, 11189966201, 11190097277, 11190228377, - 11190359449, 11190490583, 11190621677, 11190752761, 11190883883, 11191014997, 11191146089, - 11191277173, 11191408273, 11191539347, 11191670509, 11191801603, 11191932683, 11192063759, - 11192194831, 11192325913, 11192457007, 11192588101, 11192719211, 11192850287, 11192981363, - 11193112459, 11193243541, 11193374623, 11193505709, 11193636827, 11193767899, 11193898981, - 11194030079, 11194161169, 11194292251, 11194423327, 11194554401, 11194685483, 11194816597, - 11194947671, 11195078777, 11195209871, 11195340953, 11195472037, 11195603123, 11195734223, - 11195865299, 11195996381, 11196127487, 11196258559, 11196389647, 11196520723, 11196651841, - 11196782939, 11196914021, 11197045147, 11197176233, 11197307333, 11197438423, 11197569511, - 11197700593, 11197831691, 11197962773, 11198093857, 11198224931, 11198356019, 11198487107, - 11198618191, 11198749279, 11198880359, 11199011437, 11199142567, 11199273641, 11199404717, - 11199535801, 11199666889, 11199797993, 11199929129, 11200060237, 11200191361, 11200322453, - 11200453529, 11200584667, 11200715767, 11200846841, 11200977917, 11201108999, 11201240077, - 11201371189, 11201502311, 11201633393, 11201764477, 11201895553, 11202026713, 11202157789, - 11202288871, 11202419981, 11202551071, 11202682159, 11202813247, 11202944387, 11203075489, - 11203206577, 11203337683, 11203468763, 11203599871, 11203730947, 11203862023, 11203993109, - 11204124181, 11204255269, 11204386357, 11204517449, 11204648549, 11204779633, 11204910737, - 11205041831, 11205172919, 11205304031, 11205435149, 11205566231, 11205697309, 11205828401, - 11205959483, 11206090607, 11206221749, 11206352831, 11206483921, 11206614997, 11206746077, - 11206877161, 11207008271, 11207139353, 11207270491, 11207401603, 11207532689, 11207663783, - 11207794889, 11207926019, 11208057121, 11208188207, 11208319361, 11208450437, 11208581537, - 11208712639, 11208843719, 11208974797, 11209105889, 11209237003, 11209368077, 11209499183, - 11209630261, 11209761361, 11209892453, 11210023529, 11210154649, 11210285731, 11210416883, - 11210547989, 11210679071, 11210810173, 11210941283, 11211072373, 11211203447, 11211334531, - 11211465623, 11211596729, 11211727801, 11211858899, 11211989981, 11212121059, 11212252157, - 11212383277, 11212514353, 11212645441, 11212776521, 11212907593, 11213038673, 11213169749, - 11213300821, 11213431907, 11213562979, 11213694083, 11213825159, 11213956231, 11214087307, - 11214218381, 11214349459, 11214480577, 11214611651, 11214742769, 11214873883, 11215004981, - 11215136063, 11215267157, 11215398239, 11215529363, 11215660441, 11215791527, 11215922617, - 11216053699, 11216184821, 11216315911, 11216446987, 11216578073, 11216709151, 11216840263, - 11216971349, 11217102467, 11217233549, 11217364649, 11217495721, 11217626831, 11217757919, - 11217889037, 11218020137, 11218151213, 11218282297, 11218413379, 11218544473, 11218675577, - 11218806649, 11218937753, 11219068829, 11219199973, 11219331059, 11219462131, 11219593237, - 11219724337, 11219855411, 11219986483, 11220117607, 11220248687, 11220379829, 11220510907, - 11220641987, 11220773093, 11220904187, 11221035263, 11221166381, 11221297459, 11221428587, - 11221559663, 11221690741, 11221821823, 11221952939, 11222084039, 11222215111, 11222346203, - 11222477293, 11222608387, 11222739467, 11222870551, 11223001633, 11223132719, 11223263819, - 11223394901, 11223525979, 11223657059, 11223788137, 11223919243, 11224050391, 11224181483, - 11224312559, 11224443641, 11224574719, 11224705813, 11224836911, 11224967989, 11225099071, - 11225230147, 11225361223, 11225492297, 11225623403, 11225754479, 11225885569, 11226016673, - 11226147773, 11226278881, 11226409973, 11226541049, 11226672179, 11226803251, 11226934337, - 11227065413, 11227196489, 11227327577, 11227458667, 11227589741, 11227720813, 11227851931, - 11227983043, 11228114129, 11228245207, 11228376283, 11228507359, 11228638439, 11228769523, - 11228900609, 11229031703, 11229162781, 11229293861, 11229424937, 11229556021, 11229687113, - 11229818227, 11229949307, 11230080403, 11230211479, 11230342577, 11230473671, 11230604743, - 11230735819, 11230866919, 11230998001, 11231129081, 11231260163, 11231391263, 11231522353, - 11231653441, 11231784559, 11231915659, 11232046733, 11232177821, 11232308977, 11232440099, - 11232571193, 11232702277, 11232833371, 11232964459, 11233095539, 11233226737, 11233357841, - 11233488943, 11233620037, 11233751119, 11233882199, 11234013293, 11234144377, 11234275453, - 11234406527, 11234537617, 11234668699, 11234799833, 11234930933, 11235062009, 11235193093, - 11235324167, 11235455293, 11235586387, 11235717473, 11235848551, 11235979639, 11236110727, - 11236241801, 11236372877, 11236503953, 11236635077, 11236766159, 11236897247, 11237028367, - 11237159447, 11237290529, 11237421623, 11237552707, 11237683819, 11237814937, 11237946037, - 11238077143, 11238208231, 11238339313, 11238470387, 11238601459, 11238732551, 11238863633, - 11238994717, 11239125811, 11239256887, 11239387967, 11239519073, 11239650193, 11239781291, - 11239912379, 11240043461, 11240174551, 11240305639, 11240436721, 11240567809, 11240698951, - 11240830057, 11240961131, 11241092267, 11241223417, 11241354497, 11241485581, 11241616663, - 11241747757, 11241878863, 11242009957, 11242141061, 11242272157, 11242403231, 11242534309, - 11242665407, 11242796483, 11242927571, 11243058653, 11243189729, 11243320819, 11243451899, - 11243582989, 11243714063, 11243845139, 11243976229, 11244107311, 11244238391, 11244369463, - 11244500543, 11244631637, 11244762709, 11244893789, 11245024871, 11245155953, 11245287043, - 11245418117, 11245549193, 11245680317, 11245811399, 11245942481, 11246073593, 11246204677, - 11246335757, 11246466859, 11246597939, 11246729017, 11246860129, 11246991209, 11247122303, - 11247253387, 11247384461, 11247515581, 11247646681, 11247777851, 11247908939, 11248040053, - 11248171153, 11248302227, 11248433321, 11248564417, 11248695499, 11248826593, 11248957679, - 11249088793, 11249219879, 11249350979, 11249482061, 11249613139, 11249744243, 11249875321, - 11250006401, 11250137473, 11250268609, 11250399683, 11250530777, 11250661871, 11250792997, - 11250924079, 11251055197, 11251186333, 11251317409, 11251448491, 11251579583, 11251710707, - 11251841831, 11251972931, 11252104037, 11252235133, 11252366221, 11252497349, 11252628427, - 11252759513, 11252890589, 11253021713, 11253152821, 11253283897, 11253414971, 11253546047, - 11253677129, 11253808231, 11253939311, 11254070411, 11254201489, 11254332569, 11254463651, - 11254594759, 11254725841, 11254856917, 11254988033, 11255119121, 11255250217, 11255381303, - 11255512399, 11255643499, 11255774573, 11255905673, 11256036749, 11256167843, 11256298919, - 11256430007, 11256561079, 11256692173, 11256823247, 11256954341, 11257085423, 11257216573, - 11257347653, 11257478737, 11257609817, 11257740899, 11257872029, 11258003123, 11258134243, - 11258265329, 11258396423, 11258527507, 11258658599, 11258789677, 11258920787, 11259051883, - 11259182999, 11259314093, 11259445229, 11259576311, 11259707383, 11259838459, 11259969559, - 11260100633, 11260231709, 11260362781, 11260493861, 11260624961, 11260756033, 11260887139, - 11261018231, 11261149337, 11261280427, 11261411519, 11261542603, 11261673697, 11261804777, - 11261935891, 11262066971, 11262198061, 11262329149, 11262460267, 11262591421, 11262722521, - 11262853607, 11262984727, 11263115813, 11263246913, 11263377991, 11263509077, 11263640153, - 11263771231, 11263902311, 11264033387, 11264164501, 11264295583, 11264426731, 11264557807, - 11264688913, 11264819989, 11264951141, 11265082217, 11265213313, 11265344393, 11265475483, - 11265606557, 11265737699, 11265868777, 11265999851, 11266130923, 11266262027, 11266393111, - 11266524229, 11266655303, 11266786381, 11266917479, 11267048557, 11267179631, 11267310727, - 11267441803, 11267572903, 11267704027, 11267835101, 11267966183, 11268097271, 11268228343, - 11268359429, 11268490543, 11268621641, 11268752723, 11268883819, 11269014901, 11269145977, - 11269277053, 11269408177, 11269539263, 11269670353, 11269801451, 11269932539, 11270063621, - 11270194703, 11270325851, 11270456959, 11270588047, 11270719139, 11270850233, 11270981347, - 11271112423, 11271243499, 11271374603, 11271505697, 11271636787, 11271767869, 11271898961, - 11272030037, 11272161127, 11272292219, 11272423301, 11272554413, 11272685519, 11272816601, - 11272947691, 11273078771, 11273209877, 11273340961, 11273472043, 11273603177, 11273734261, - 11273865341, 11273996417, 11274127517, 11274258601, 11274389677, 11274520793, 11274651907, - 11274782983, 11274914069, 11275045217, 11275176299, 11275307371, 11275438469, 11275569541, - 11275700621, 11275831709, 11275962781, 11276093861, 11276224951, 11276356031, 11276487113, - 11276618189, 11276749273, 11276880379, 11277011491, 11277142571, 11277273643, 11277404759, - 11277535847, 11277666947, 11277798029, 11277929107, 11278060207, 11278191311, 11278322383, - 11278453457, 11278584529, 11278715627, 11278846703, 11278977821, 11279108923, 11279240017, - 11279371139, 11279502239, 11279633311, 11279764399, 11279895491, 11280026573, 11280157687, - 11280288763, 11280419849, 11280550979, 11280682057, 11280813139, 11280944219, 11281075297, - 11281206397, 11281337477, 11281468577, 11281599671, 11281730767, 11281861847, 11281992949, - 11282124023, 11282255137, 11282386217, 11282517307, 11282648387, 11282779471, 11282910547, - 11283041683, 11283172757, 11283303839, 11283434951, 11283566033, 11283697109, 11283828181, - 11283959317, 11284090393, 11284221479, 11284352579, 11284483663, 11284614749, 11284745821, - 11284876903, 11285008013, 11285139113, 11285270189, 11285401321, 11285532409, 11285663551, - 11285794633, 11285925709, 11286056813, 11286187901, 11286318973, 11286450047, 11286581123, - 11286712207, 11286843283, 11286974389, 11287105517, 11287236607, 11287367681, 11287498757, - 11287629841, 11287760927, 11287892009, 11288023081, 11288154167, 11288285269, 11288416357, - 11288547493, 11288678581, 11288809667, 11288940853, 11289071957, 11289203059, 11289334169, - 11289465241, 11289596321, 11289727409, 11289858493, 11289989567, 11290120679, 11290251751, - 11290382837, 11290513931, 11290645019, 11290776121, 11290907209, 11291038303, 11291169391, - 11291300473, 11291431577, 11291562691, 11291693771, 11291824867, 11291955959, 11292087047, - 11292218141, 11292349217, 11292480383, 11292611467, 11292742543, 11292873617, 11293004693, - 11293135771, 11293266851, 11293397939, 11293529011, 11293660151, 11293791263, 11293922357, - 11294053483, 11294184571, 11294315651, 11294446733, 11294577871, 11294708989, 11294840083, - 11294971157, 11295102233, 11295233359, 11295364439, 11295495517, 11295626593, 11295757667, - 11295888743, 11296019849, 11296150933, 11296282007, 11296413143, 11296544239, 11296675349, - 11296806427, 11296937507, 11297068649, 11297199743, 11297330867, 11297461961, 11297593037, - 11297724157, 11297855251, 11297986409, 11298117491, 11298248567, 11298379709, 11298510793, - 11298641867, 11298772949, 11298904069, 11299035151, 11299166237, 11299297309, 11299428389, - 11299559497, 11299690601, 11299821677, 11299952749, 11300083849, 11300214943, 11300346037, - 11300477119, 11300608199, 11300739271, 11300870353, 11301001489, 11301132571, 11301263671, - 11301394781, 11301525853, 11301656939, 11301788033, 11301919129, 11302050203, 11302181287, - 11302312367, 11302443443, 11302574603, 11302705699, 11302836803, 11302967887, 11303098987, - 11303230091, 11303361163, 11303492237, 11303623313, 11303754419, 11303885491, 11304016573, - 11304147653, 11304278753, 11304409829, 11304540911, 11304671993, 11304803087, 11304934163, - 11305065251, 11305196341, 11305327459, 11305458559, 11305589639, 11305720711, 11305851787, - 11305982861, 11306113937, 11306245009, 11306376127, 11306507221, 11306638297, 11306769373, - 11306900453, 11307031583, 11307162697, 11307293819, 11307424901, 11307555979, 11307687077, - 11307818149, 11307949253, 11308080367, 11308211461, 11308342543, 11308473623, 11308604719, - 11308735793, 11308866889, 11308997981, 11309129063, 11309260141, 11309391259, 11309522333, - 11309653409, 11309784481, 11309915579, 11310046667, 11310177751, 11310308861, 11310439961, - 11310571043, 11310702163, 11310833243, 11310964319, 11311095391, 11311226483, 11311357583, - 11311488659, 11311619741, 11311750823, 11311881901, 11312012981, 11312144087, 11312275207, - 11312406317, 11312537389, 11312668487, 11312799571, 11312930683, 11313061759, 11313192859, - 11313323941, 11313455017, 11313586091, 11313717167, 11313848239, 11313979319, 11314110403, - 11314241479, 11314372603, 11314503703, 11314634791, 11314765873, 11314897039, 11315028149, - 11315159231, 11315290303, 11315421433, 11315552609, 11315683703, 11315814841, 11315945923, - 11316077041, 11316208159, 11316339277, 11316470383, 11316601469, 11316732551, 11316863629, - 11316994709, 11317125797, 11317256887, 11317387979, 11317519099, 11317650203, 11317781317, - 11317912391, 11318043497, 11318174587, 11318305697, 11318436769, 11318567857, 11318698949, - 11318830031, 11318961161, 11319092249, 11319223387, 11319354461, 11319485549, 11319616639, - 11319747731, 11319878819, 11320009933, 11320141037, 11320272109, 11320403209, 11320534297, - 11320665371, 11320796471, 11320927549, 11321058641, 11321189723, 11321320873, 11321451961, - 11321583073, 11321714149, 11321845237, 11321976349, 11322107449, 11322238621, 11322369697, - 11322500857, 11322631949, 11322763033, 11322894137, 11323025213, 11323156301, 11323287403, - 11323418521, 11323549607, 11323680703, 11323811777, 11323942853, 11324073931, 11324205031, - 11324336137, 11324467213, 11324598287, 11324729359, 11324860439, 11324991631, 11325122707, - 11325253811, 11325384883, 11325515969, 11325647041, 11325778157, 11325909229, 11326040303, - 11326171379, 11326302467, 11326433551, 11326564631, 11326695703, 11326826807, 11326957879, - 11327088953, 11327220029, 11327351111, 11327482183, 11327613257, 11327744333, 11327875417, - 11328006493, 11328137567, 11328268661, 11328399763, 11328530879, 11328661957, 11328793043, - 11328924161, 11329055249, 11329186331, 11329317427, 11329448551, 11329579627, 11329710713, - 11329841819, 11329972903, 11330104007, 11330235121, 11330366213, 11330497289, 11330628409, - 11330759507, 11330890579, 11331021671, 11331152743, 11331283841, 11331414917, 11331546007, - 11331677081, 11331808171, 11331939257, 11332070339, 11332201417, 11332332491, 11332463567, - 11332594649, 11332725727, 11332856807, 11332987903, 11333118989, 11333250077, 11333381153, - 11333512237, 11333643319, 11333774401, 11333905489, 11334036569, 11334167657, 11334298733, - 11334429809, 11334560891, 11334691987, 11334823061, 11334954149, 11335085231, 11335216303, - 11335347437, 11335478563, 11335609651, 11335740761, 11335871843, 11336002921, 11336134001, - 11336265113, 11336396237, 11336527313, 11336658391, 11336789491, 11336920591, 11337051673, - 11337182749, 11337313829, 11337444929, 11337576011, 11337707107, 11337838189, 11337969271, - 11338100357, 11338231439, 11338362521, 11338493623, 11338624733, 11338755859, 11338886941, - 11339018023, 11339149097, 11339280259, 11339411357, 11339542433, 11339673511, 11339804617, - 11339935693, 11340066781, 11340197857, 11340328991, 11340460081, 11340591179, 11340722251, - 11340853367, 11340984439, 11341115543, 11341246627, 11341377701, 11341508839, 11341639921, - 11341770997, 11341902073, 11342033149, 11342164237, 11342295311, 11342426399, 11342557493, - 11342688583, 11342819659, 11342950739, 11343081851, 11343212929, 11343344003, 11343475139, - 11343606221, 11343737323, 11343868451, 11343999551, 11344130639, 11344261717, 11344392799, - 11344523893, 11344654973, 11344786067, 11344917149, 11345048261, 11345179333, 11345310437, - 11345441537, 11345572613, 11345703739, 11345834879, 11345965951, 11346097033, 11346228167, - 11346359239, 11346490313, 11346621397, 11346752509, 11346883609, 11347014751, 11347145851, - 11347276939, 11347408021, 11347539101, 11347670183, 11347801279, 11347932359, 11348063437, - 11348194511, 11348325587, 11348456659, 11348587739, 11348718817, 11348849903, 11348980987, - 11349112081, 11349243203, 11349374297, 11349505379, 11349636457, 11349767549, 11349898631, - 11350029739, 11350160827, 11350291907, 11350422983, 11350554071, 11350685153, 11350816231, - 11350947323, 11351078407, 11351209483, 11351340569, 11351471669, 11351602799, 11351733889, - 11351864999, 11351996111, 11352127219, 11352258293, 11352389383, 11352520471, 11352651551, - 11352782713, 11352913829, 11353044929, 11353176017, 11353307111, 11353438183, 11353569287, - 11353700387, 11353831471, 11353962553, 11354093687, 11354224759, 11354355889, 11354486977, - 11354618057, 11354749183, 11354880283, 11355011407, 11355142507, 11355273617, 11355404717, - 11355535799, 11355666877, 11355798031, 11355929113, 11356060229, 11356191307, 11356322389, - 11356453469, 11356584599, 11356715719, 11356846793, 11356977871, 11357108953, 11357240029, - 11357371199, 11357502313, 11357633393, 11357764471, 11357895547, 11358026623, 11358157697, - 11358288779, 11358419861, 11358550979, 11358682051, 11358813127, 11358944203, 11359075309, - 11359206407, 11359337489, 11359468613, 11359599737, 11359730813, 11359861913, 11359992989, - 11360124071, 11360255143, 11360386259, 11360517383, 11360648477, 11360779559, 11360910709, - 11361041801, 11361172931, 11361304061, 11361435133, 11361566257, 11361697339, 11361828419, - 11361959527, 11362090609, 11362221707, 11362352783, 11362483889, 11362615009, 11362746119, - 11362877209, 11363008291, 11363139379, 11363270453, 11363401583, 11363532659, 11363663747, - 11363794861, 11363925949, 11364057059, 11364188149, 11364319229, 11364450319, 11364581407, - 11364712507, 11364843613, 11364974737, 11365105819, 11365236913, 11365368017, 11365499129, - 11365630231, 11365761427, 11365892501, 11366023589, 11366154689, 11366285771, 11366416877, - 11366547953, 11366679047, 11366810137, 11366941283, 11367072359, 11367203479, 11367334579, - 11367465691, 11367596791, 11367727883, 11367859037, 11367990131, 11368121213, 11368252307, - 11368383407, 11368514483, 11368645577, 11368776703, 11368907779, 11369038861, 11369169949, - 11369301023, 11369432141, 11369563217, 11369694289, 11369825393, 11369956487, 11370087571, - 11370218677, 11370349763, 11370480857, 11370611929, 11370743009, 11370874093, 11371005187, - 11371136261, 11371267333, 11371398419, 11371529509, 11371660613, 11371791719, 11371922831, - 11372053937, 11372185009, 11372316091, 11372447189, 11372578271, 11372709343, 11372840441, - 11372971517, 11373102589, 11373233687, 11373364763, 11373495841, 11373626941, 11373758021, - 11373889129, 11374020233, 11374151311, 11374282397, 11374413481, 11374544593, 11374675681, - 11374806797, 11374937909, 11375068993, 11375200073, 11375331151, 11375462321, 11375593403, - 11375724487, 11375855567, 11375986651, 11376117733, 11376248813, 11376379919, 11376510991, - 11376642083, 11376773179, 11376904307, 11377035407, 11377166483, 11377297559, 11377428661, - 11377559747, 11377690871, 11377821967, 11377953043, 11378084129, 11378215201, 11378346319, - 11378477393, 11378608469, 11378739563, 11378870653, 11379001757, 11379132859, 11379263941, - 11379395017, 11379526111, 11379657197, 11379788281, 11379919367, 11380050439, 11380181521, - 11380312627, 11380443719, 11380574791, 11380705867, 11380836959, 11380968041, 11381099153, - 11381230241, 11381361317, 11381492389, 11381623499, 11381754649, 11381885741, 11382016813, - 11382147937, 11382279043, 11382410153, 11382541253, 11382672403, 11382803489, 11382934567, - 11383065641, 11383196729, 11383327801, 11383458913, 11383590007, 11383721087, 11383852189, - 11383983283, 11384114359, 11384245459, 11384376541, 11384507627, 11384638703, 11384769787, - 11384900899, 11385032011, 11385163103, 11385294181, 11385425263, 11385556361, 11385687461, - 11385818537, 11385949657, 11386080749, 11386211843, 11386342931, 11386474007, 11386605119, - 11386736269, 11386867391, 11386998479, 11387129563, 11387260639, 11387391713, 11387522807, - 11387653891, 11387784971, 11387916047, 11388047137, 11388178213, 11388309307, 11388440383, - 11388571499, 11388702659, 11388833737, 11388964817, 11389095899, 11389226971, 11389358051, - 11389489129, 11389620247, 11389751353, 11389882459, 11390013539, 11390144629, 11390275747, - 11390406851, 11390537927, 11390669009, 11390800093, 11390931191, 11391062273, 11391193369, - 11391324509, 11391455657, 11391586733, 11391717809, 11391848899, 11391980023, 11392111097, - 11392242187, 11392373261, 11392504337, 11392635431, 11392766513, 11392897597, 11393028697, - 11393159797, 11393290873, 11393421983, 11393553121, 11393684221, 11393815331, 11393946409, - 11394077483, 11394208583, 11394339667, 11394470771, 11394601859, 11394732941, 11394864017, - 11394995107, 11395126199, 11395257271, 11395388357, 11395519469, 11395650593, 11395781707, - 11395912783, 11396043937, 11396175059, 11396306143, 11396437249, 11396568367, 11396699527, - 11396830609, 11396961701, 11397092801, 11397223913, 11397355019, 11397486109, 11397617213, - 11397748289, 11397879373, 11398010471, 11398141571, 11398272661, 11398403761, 11398534843, - 11398665923, 11398797023, 11398928141, 11399059267, 11399190401, 11399321477, 11399452549, - 11399583647, 11399714741, 11399845829, 11399976901, 11400107993, 11400239093, 11400370171, - 11400501247, 11400632329, 11400763427, 11400894511, 11401025591, 11401156673, 11401287757, - 11401418869, 11401549961, 11401681037, 11401812131, 11401943207, 11402074279, 11402205377, - 11402336453, 11402467529, 11402598619, 11402729707, 11402860817, 11402991913, 11403123041, - 11403254113, 11403385219, 11403516301, 11403647389, 11403778487, 11403909563, 11404040639, - 11404171733, 11404302823, 11404433903, 11404565047, 11404696129, 11404827223, 11404958321, - 11405089439, 11405220523, 11405351627, 11405482717, 11405613799, 11405744887, 11405875961, - 11406007049, 11406138179, 11406269261, 11406400333, 11406531457, 11406662551, 11406793679, - 11406924761, 11407055843, 11407186933, 11407318033, 11407449107, 11407580257, 11407711363, - 11407842443, 11407973567, 11408104667, 11408235749, 11408366939, 11408498029, 11408629117, - 11408760193, 11408891287, 11409022381, 11409153461, 11409284533, 11409415607, 11409546679, - 11409677759, 11409808831, 11409939923, 11410071031, 11410202129, 11410333201, 11410464281, - 11410595359, 11410726463, 11410857551, 11410988623, 11411119751, 11411250839, 11411381959, - 11411513053, 11411644219, 11411775301, 11411906381, 11412037453, 11412168563, 11412299653, - 11412430739, 11412561817, 11412692903, 11412823999, 11412955087, 11413086169, 11413217281, - 11413348369, 11413479443, 11413610521, 11413741601, 11413872677, 11414003771, 11414134877, - 11414265949, 11414397077, 11414528183, 11414659261, 11414790349, 11414921423, 11415052501, - 11415183581, 11415314653, 11415445739, 11415576817, 11415707903, 11415839011, 11415970087, - 11416101161, 11416232257, 11416363331, 11416494407, 11416625497, 11416756573, 11416887653, - 11417018731, 11417149823, 11417280911, 11417412001, 11417543087, 11417674171, 11417805293, - 11417936381, 11418067471, 11418198587, 11418329707, 11418460793, 11418591871, 11418722947, - 11418854021, 11418985117, 11419116277, 11419247353, 11419378429, 11419509503, 11419640611, - 11419771703, 11419902787, 11420033909, 11420164981, 11420296061, 11420427133, 11420558239, - 11420689339, 11420820431, 11420951569, 11421082657, 11421213731, 11421344819, 11421475927, - 11421607003, 11421738089, 11421869191, 11422000277, 11422131349, 11422262429, 11422393501, - 11422524583, 11422655659, 11422786759, 11422917839, 11423048911, 11423179997, 11423311087, - 11423442169, 11423573261, 11423704361, 11423835473, 11423966551, 11424097679, 11424228757, - 11424359833, 11424490907, 11424622021, 11424753103, 11424884179, 11425015309, 11425146487, - 11425277569, 11425408649, 11425539751, 11425670827, 11425801921, 11425933003, 11426064079, - 11426195153, 11426326277, 11426457377, 11426588479, 11426719553, 11426850647, 11426981747, - 11427112843, 11427243943, 11427375017, 11427506107, 11427637189, 11427768263, 11427899369, - 11428030457, 11428161529, 11428292609, 11428423711, 11428554791, 11428685909, 11428816991, - 11428948127, 11429079281, 11429210363, 11429341471, 11429472617, 11429603707, 11429734807, - 11429865883, 11429996957, 11430128057, 11430259129, 11430390203, 11430521281, 11430652391, - 11430783467, 11430914557, 11431045663, 11431176767, 11431307903, 11431438981, 11431570079, - 11431701179, 11431832267, 11431963409, 11432094481, 11432225579, 11432356651, 11432487751, - 11432618833, 11432749921, 11432880997, 11433012079, 11433143167, 11433274247, 11433405341, - 11433536441, 11433667519, 11433798611, 11433929707, 11434060789, 11434191863, 11434322957, - 11434454033, 11434585109, 11434716187, 11434847267, 11434978361, 11435109437, 11435240521, - 11435371609, 11435502709, 11435633801, 11435764883, 11435896009, 11436027089, 11436158171, - 11436289247, 11436420329, 11436551431, 11436682513, 11436813613, 11436944749, 11437075843, - 11437206919, 11437337993, 11437469089, 11437600193, 11437731289, 11437862407, 11437993481, - 11438124553, 11438255663, 11438386747, 11438517841, 11438648929, 11438780011, 11438911093, - 11439042187, 11439173267, 11439304379, 11439435509, 11439566599, 11439697699, 11439828773, - 11439959887, 11440090979, 11440222099, 11440353179, 11440484309, 11440615397, 11440746491, - 11440877563, 11441008637, 11441139709, 11441270887, 11441401981, 11441533073, 11441664167, - 11441795249, 11441926333, 11442057413, 11442188503, 11442319579, 11442450689, 11442581783, - 11442712859, 11442843953, 11442975029, 11443106107, 11443237187, 11443368311, 11443499393, - 11443630481, 11443761577, 11443892687, 11444023813, 11444154901, 11444285977, 11444417077, - 11444548177, 11444679251, 11444810339, 11444941411, 11445072581, 11445203663, 11445334751, - 11445465853, 11445596951, 11445728039, 11445859133, 11445990211, 11446121321, 11446252417, - 11446383497, 11446514591, 11446645667, 11446776749, 11446907831, 11447038921, 11447170003, - 11447301133, 11447432237, 11447563313, 11447694397, 11447825503, 11447956577, 11448087649, - 11448218723, 11448349819, 11448480893, 11448611987, 11448743099, 11448874181, 11449005289, - 11449136371, 11449267469, 11449398581, 11449529659, 11449660757, 11449791841, 11449922917, - 11450054017, 11450185111, 11450316197, 11450447287, 11450578387, 11450709481, 11450840563, - 11450971687, 11451102769, 11451233851, 11451364933, 11451496031, 11451627107, 11451758183, - 11451889259, 11452020361, 11452151461, 11452282553, 11452413631, 11452544713, 11452675859, - 11452806931, 11452938011, 11453069083, 11453200219, 11453331353, 11453462437, 11453593517, - 11453724589, 11453855669, 11453986741, 11454117847, 11454248921, 11454380027, 11454511099, - 11454642179, 11454773251, 11454904327, 11455035443, 11455166521, 11455297649, 11455428739, - 11455559827, 11455690901, 11455822033, 11455953109, 11456084203, 11456215307, 11456346401, - 11456477503, 11456608633, 11456739709, 11456870797, 11457001889, 11457132961, 11457264037, - 11457395111, 11457526187, 11457657269, 11457788393, 11457919469, 11458050589, 11458181717, - 11458312819, 11458443907, 11458574993, 11458706071, 11458837177, 11458968251, 11459099341, - 11459230441, 11459361521, 11459492657, 11459623733, 11459754809, 11459885959, 11460017069, - 11460148207, 11460279283, 11460410363, 11460541457, 11460672551, 11460803639, 11460934711, - 11461065809, 11461196921, 11461327993, 11461459073, 11461590149, 11461721237, 11461852313, - 11461983409, 11462114497, 11462245607, 11462376713, 11462507803, 11462638879, 11462769953, - 11462901041, 11463032233, 11463163319, 11463294397, 11463425497, 11463556631, 11463687721, - 11463818819, 11463949909, 11464080989, 11464212107, 11464343197, 11464474279, 11464605379, - 11464736467, 11464867543, 11464998653, 11465129737, 11465260817, 11465391893, 11465522983, - 11465654119, 11465785207, 11465916281, 11466047371, 11466178457, 11466309541, 11466440641, - 11466571747, 11466702899, 11466833981, 11466965089, 11467096211, 11467227283, 11467358387, - 11467489543, 11467620649, 11467751731, 11467882813, 11468013899, 11468145019, 11468276107, - 11468407211, 11468538293, 11468669413, 11468800489, 11468931569, 11469062659, 11469193787, - 11469324917, 11469456017, 11469587093, 11469718199, 11469849329, 11469980411, 11470111483, - 11470242571, 11470373699, 11470504831, 11470635931, 11470767013, 11470898093, 11471029217, - 11471160293, 11471291393, 11471422471, 11471553547, 11471684639, 11471815723, 11471946847, - 11472077923, 11472209017, 11472340141, 11472471223, 11472602311, 11472733399, 11472864479, - 11472995551, 11473126633, 11473257727, 11473388819, 11473519919, 11473651009, 11473782083, - 11473913273, 11474044397, 11474175469, 11474306561, 11474437679, 11474568769, 11474699843, - 11474830951, 11474962091, 11475093169, 11475224251, 11475355357, 11475486431, 11475617509, - 11475748589, 11475879683, 11476010783, 11476141891, 11476272971, 11476404083, 11476535159, - 11476666237, 11476797317, 11476928399, 11477059493, 11477190581, 11477321657, 11477452747, - 11477583823, 11477714953, 11477846033, 11477977127, 11478108203, 11478239293, 11478370417, - 11478501563, 11478632677, 11478763757, 11478894907, 11479025989, 11479157069, 11479288181, - 11479419323, 11479550399, 11479681487, 11479812563, 11479943663, 11480074741, 11480205817, - 11480336899, 11480467981, 11480599153, 11480730227, 11480861363, 11480992477, 11481123593, - 11481254677, 11481385777, 11481516881, 11481647953, 11481779033, 11481910133, 11482041217, - 11482172293, 11482303367, 11482434451, 11482565543, 11482696679, 11482827779, 11482958857, - 11483089939, 11483221019, 11483352091, 11483483239, 11483614319, 11483745401, 11483876479, - 11484007621, 11484138713, 11484269789, 11484400883, 11484531959, 11484663059, 11484794147, - 11484925253, 11485056343, 11485187429, 11485318511, 11485449589, 11485580677, 11485711753, - 11485842871, 11485973953, 11486105051, 11486236159, 11486367247, 11486498339, 11486629463, - 11486760559, 11486891651, 11487022747, 11487153823, 11487284929, 11487416009, 11487547103, - 11487678199, 11487809293, 11487940369, 11488071443, 11488202533, 11488333643, 11488464763, - 11488595849, 11488726937, 11488858021, 11488989107, 11489120189, 11489251283, 11489382389, - 11489513479, 11489644559, 11489775653, 11489906737, 11490037813, 11490168887, 11490299963, - 11490431039, 11490562199, 11490693271, 11490824353, 11490955471, 11491086547, 11491217623, - 11491348699, 11491479773, 11491610857, 11491741931, 11491873033, 11492004113, 11492135279, - 11492266367, 11492397461, 11492528539, 11492659613, 11492790703, 11492921801, 11493052877, - 11493183967, 11493315077, 11493446183, 11493577301, 11493708427, 11493839551, 11493970639, - 11494101757, 11494232833, 11494363921, 11494494997, 11494626083, 11494757167, 11494888267, - 11495019343, 11495150431, 11495281559, 11495412659, 11495543737, 11495674837, 11495805917, - 11495936999, 11496068137, 11496199259, 11496330383, 11496461489, 11496592589, 11496723683, - 11496854767, 11496985859, 11497116989, 11497248067, 11497379141, 11497510229, 11497641347, - 11497772437, 11497903517, 11498034599, 11498165677, 11498296753, 11498427841, 11498558933, - 11498690041, 11498821121, 11498952217, 11499083311, 11499214387, 11499345467, 11499476539, - 11499607661, 11499738749, 11499869839, 11500000951, 11500132027, 11500263157, 11500394249, - 11500525321, 11500656413, 11500787489, 11500918573, 11501049649, 11501180729, 11501311813, - 11501442889, 11501574053, 11501705143, 11501836223, 11501967299, 11502098371, 11502229477, - 11502360557, 11502491633, 11502622711, 11502753793, 11502884881, 11503015973, 11503147081, - 11503278197, 11503409287, 11503540379, 11503671481, 11503802561, 11503933657, 11504064757, - 11504195837, 11504326913, 11504458027, 11504589137, 11504720257, 11504851343, 11504982479, - 11505113561, 11505244679, 11505375769, 11505506843, 11505637933, 11505769061, 11505900137, - 11506031219, 11506162301, 11506293377, 11506424467, 11506555547, 11506686641, 11506817767, - 11506948847, 11507079919, 11507210993, 11507342069, 11507473147, 11507604223, 11507735297, - 11507866369, 11507997461, 11508128603, 11508259681, 11508390757, 11508521837, 11508652919, - 11508784013, 11508915091, 11509046177, 11509177271, 11509308367, 11509439441, 11509570519, - 11509701631, 11509832717, 11509963819, 11510094899, 11510225981, 11510357057, 11510488159, - 11510619287, 11510750359, 11510881439, 11511012533, 11511143629, 11511274727, 11511405799, - 11511536891, 11511667991, 11511799063, 11511930173, 11512061251, 11512192327, 11512323409, - 11512454489, 11512585649, 11512716739, 11512847839, 11512978913, 11513109991, 11513241097, - 11513372201, 11513503289, 11513634373, 11513765447, 11513896549, 11514027643, 11514158729, - 11514289811, 11514420919, 11514552059, 11514683137, 11514814217, 11514945301, 11515076381, - 11515207453, 11515338529, 11515469659, 11515600753, 11515731863, 11515862993, 11515994179, - 11516125253, 11516256337, 11516387417, 11516518499, 11516649577, 11516780651, 11516911727, - 11517042833, 11517173911, 11517304987, 11517436067, 11517567143, 11517698219, 11517829303, - 11517960397, 11518091483, 11518222591, 11518353683, 11518484771, 11518615847, 11518746949, - 11518878083, 11519009189, 11519140271, 11519271353, 11519402429, 11519533507, 11519664623, - 11519795701, 11519926811, 11520057893, 11520189001, 11520320081, 11520451153, 11520582289, - 11520713417, 11520844519, 11520975593, 11521106671, 11521237747, 11521368847, 11521499933, - 11521631053, 11521762129, 11521893221, 11522024323, 11522155397, 11522286509, 11522417597, - 11522548673, 11522679767, 11522810867, 11522941981, 11523073061, 11523204167, 11523335249, - 11523466379, 11523597457, 11523728539, 11523859637, 11523990761, 11524121867, 11524252963, - 11524384093, 11524515187, 11524646281, 11524777361, 11524908457, 11525039543, 11525170627, - 11525301701, 11525432791, 11525563871, 11525694977, 11525826077, 11525957161, 11526088243, - 11526219329, 11526350431, 11526481531, 11526612611, 11526743689, 11526874813, 11527005901, - 11527136993, 11527268089, 11527399189, 11527530283, 11527661389, 11527792469, 11527923577, - 11528054669, 11528185807, 11528316893, 11528447977, 11528579131, 11528710213, 11528841323, - 11528972431, 11529103513, 11529234593, 11529365671, 11529496751, 11529627827, 11529758899, - 11529889979, 11530021081, 11530152157, 11530283231, 11530414327, 11530545401, 11530676477, - 11530807559, 11530938637, 11531069747, 11531200843, 11531331949, 11531463101, 11531594177, - 11531725259, 11531856337, 11531987419, 11532118621, 11532249697, 11532380807, 11532511883, - 11532642959, 11532774031, 11532905123, 11533036213, 11533167293, 11533298377, 11533429463, - 11533560539, 11533691621, 11533822747, 11533953869, 11534084951, 11534216027, 11534347129, - 11534478203, 11534609279, 11534740351, 11534871431, 11535002513, 11535133619, 11535264701, - 11535395779, 11535526879, 11535657979, 11535789107, 11535920183, 11536051271, 11536182421, - 11536313533, 11536444607, 11536575689, 11536706771, 11536837843, 11536968917, 11537100017, - 11537231149, 11537362223, 11537493299, 11537624407, 11537755499, 11537886571, 11538017651, - 11538148729, 11538279811, 11538410899, 11538541979, 11538673057, 11538804149, 11538935231, - 11539066307, 11539197391, 11539328473, 11539459549, 11539590649, 11539721773, 11539852867, - 11539983941, 11540115019, 11540246111, 11540377231, 11540508389, 11540639491, 11540770567, - 11540901641, 11541032719, 11541163793, 11541294899, 11541425983, 11541557077, 11541688157, - 11541819259, 11541950333, 11542081451, 11542212523, 11542343597, 11542474681, 11542605757, - 11542736831, 11542867943, 11542999037, 11543130113, 11543261207, 11543392391, 11543523491, - 11543654627, 11543785727, 11543916799, 11544047887, 11544178999, 11544310079, 11544441187, - 11544572261, 11544703399, 11544834479, 11544965587, 11545096681, 11545227779, 11545358893, - 11545490009, 11545621091, 11545752187, 11545883267, 11546014343, 11546145431, 11546276503, - 11546407603, 11546538691, 11546669767, 11546800907, 11546932003, 11547063091, 11547194209, - 11547325343, 11547456451, 11547587531, 11547718613, 11547849701, 11547980789, 11548111891, - 11548242967, 11548374067, 11548505147, 11548636249, 11548767371, 11548898443, 11549029549, - 11549160641, 11549291753, 11549422849, 11549553943, 11549685067, 11549816147, 11549947229, - 11550078361, 11550209449, 11550340531, 11550471671, 11550602801, 11550733921, 11550865031, - 11550996157, 11551127233, 11551258319, 11551389391, 11551520479, 11551651567, 11551782643, - 11551913767, 11552044871, 11552175953, 11552307043, 11552438129, 11552569207, 11552700287, - 11552831363, 11552962439, 11553093533, 11553224621, 11553355717, 11553486829, 11553617909, - 11553748993, 11553880081, 11554011187, 11554142261, 11554273373, 11554404457, 11554535533, - 11554666609, 11554797691, 11554928767, 11555059849, 11555190923, 11555322011, 11555453113, - 11555584189, 11555715293, 11555846399, 11555977471, 11556108563, 11556239657, 11556370733, - 11556501809, 11556632897, 11556763969, 11556895061, 11557026161, 11557157251, 11557288367, - 11557419449, 11557550549, 11557681621, 11557812701, 11557943773, 11558074873, 11558205949, - 11558337029, 11558468149, 11558599229, 11558730301, 11558861389, 11558992477, 11559123571, - 11559254653, 11559385727, 11559516811, 11559647887, 11559778969, 11559910067, 11560041139, - 11560172233, 11560303327, 11560434407, 11560565501, 11560696577, 11560827721, 11560958797, - 11561089877, 11561220961, 11561352053, 11561483137, 11561614243, 11561745319, 11561876393, - 11562007487, 11562138559, 11562269647, 11562400741, 11562531817, 11562662927, 11562794003, - 11562925091, 11563056173, 11563187281, 11563318367, 11563449439, 11563580521, 11563711609, - 11563842691, 11563973777, 11564104891, 11564235967, 11564367049, 11564498129, 11564629211, - 11564760359, 11564891477, 11565022571, 11565153647, 11565284719, 11565415793, 11565546871, - 11565677947, 11565809033, 11565940229, 11566071301, 11566202383, 11566333483, 11566464557, - 11566595639, 11566726711, 11566857833, 11566988957, 11567120053, 11567251147, 11567382223, - 11567513299, 11567644393, 11567775493, 11567906573, 11568037669, 11568168749, 11568299843, - 11568430931, 11568562039, 11568693113, 11568824243, 11568955319, 11569086391, 11569217497, - 11569348607, 11569479683, 11569610761, 11569741847, 11569872929, 11570004029, 11570135123, - 11570266207, 11570397287, 11570528383, 11570659469, 11570790547, 11570921629, 11571052711, - 11571183817, 11571314893, 11571445979, 11571577091, 11571708271, 11571839353, 11571970453, - 11572101533, 11572232621, 11572363703, 11572494823, 11572625983, 11572757059, 11572888147, - 11573019223, 11573150311, 11573281399, 11573412479, 11573543551, 11573674711, 11573805791, - 11573936873, 11574067951, 11574199033, 11574330161, 11574461243, 11574592331, 11574723403, - 11574854479, 11574985571, 11575116647, 11575247729, 11575378813, 11575509893, 11575641001, - 11575772099, 11575903217, 11576034367, 11576165449, 11576296607, 11576427761, 11576558837, - 11576689909, 11576821019, 11576952097, 11577083179, 11577214279, 11577345361, 11577476441, - 11577607519, 11577738593, 11577869713, 11578000787, 11578131863, 11578262957, 11578394029, - 11578525117, 11578656211, 11578787287, 11578918387, 11579049473, 11579180593, 11579311669, - 11579442751, 11579573861, 11579704937, 11579836019, 11579967101, 11580098177, 11580229289, - 11580360361, 11580491441, 11580622583, 11580753689, 11580884773, 11581015847, 11581146949, - 11581278029, 11581409107, 11581540183, 11581671289, 11581802377, 11581933457, 11582064547, - 11582195627, 11582326699, 11582457781, 11582588863, 11582719943, 11582851039, 11582982121, - 11583113219, 11583244297, 11583375407, 11583506497, 11583637579, 11583768659, 11583899737, - 11584030813, 11584161907, 11584292981, 11584424063, 11584555211, 11584686283, 11584817359, - 11584948447, 11585079559, 11585210641, 11585341721, 11585472803, 11585603881, 11585734973, - 11585866057, 11585997151, 11586128231, 11586259309, 11586390391, 11586521501, 11586652573, - 11586783667, 11586914743, 11587045819, 11587176901, 11587307983, 11587439089, 11587570207, - 11587701283, 11587832369, 11587963441, 11588094559, 11588225639, 11588356711, 11588487791, - 11588618869, 11588749957, 11588881043, 11589012221, 11589143303, 11589274397, 11589405497, - 11589536591, 11589667673, 11589798749, 11589929831, 11590060903, 11590191979, 11590323067, - 11590454149, 11590585243, 11590716373, 11590847453, 11590978541, 11591109617, 11591240707, - 11591371787, 11591502859, 11591633941, 11591765021, 11591896111, 11592027193, 11592158269, - 11592289343, 11592420449, 11592551533, 11592682613, 11592813719, 11592944801, 11593075903, - 11593206979, 11593338061, 11593469137, 11593600223, 11593731307, 11593862383, 11593993471, - 11594124557, 11594255653, 11594386751, 11594517863, 11594648959, 11594780083, 11594911157, - 11595042257, 11595173353, 11595304471, 11595435583, 11595566687, 11595697759, 11595828841, - 11595959927, 11596091047, 11596222147, 11596353283, 11596484387, 11596615463, 11596746599, - 11596877683, 11597008783, 11597139857, 11597270963, 11597402041, 11597533147, 11597664229, - 11597795309, 11597926409, 11598057503, 11598188593, 11598319721, 11598450817, 11598581927, - 11598713011, 11598844109, 11598975197, 11599106269, 11599237369, 11599368457, 11599499531, - 11599630607, 11599761731, 11599892809, 11600023909, 11600154991, 11600286083, 11600417161, - 11600548291, 11600679367, 11600810479, 11600941571, 11601072647, 11601203759, 11601334861, - 11601465937, 11601597023, 11601728161, 11601859331, 11601990461, 11602121543, 11602252619, - 11602383697, 11602514779, 11602645861, 11602776943, 11602908041, 11603039137, 11603170283, - 11603301373, 11603432461, 11603563547, 11603694659, 11603825731, 11603956807, 11604087959, - 11604219031, 11604350119, 11604481253, 11604612343, 11604743417, 11604874513, 11605005617, - 11605136701, 11605267789, 11605398863, 11605529941, 11605661027, 11605792103, 11605923179, - 11606054261, 11606185343, 11606316431, 11606447549, 11606578631, 11606709703, 11606840803, - 11606971889, 11607102989, 11607234091, 11607365191, 11607496267, 11607627349, 11607758441, - 11607889541, 11608020629, 11608151713, 11608282787, 11608413967, 11608545043, 11608676147, - 11608807267, 11608938347, 11609069449, 11609200541, 11609331659, 11609462737, 11609593829, - 11609724901, 11609856001, 11609987099, 11610118211, 11610249337, 11610380413, 11610511511, - 11610642689, 11610773807, 11610904913, 11611035991, 11611167101, 11611298201, 11611429307, - 11611560391, 11611691479, 11611822603, 11611953697, 11612084777, 11612215859, 11612346931, - 11612478013, 11612609143, 11612740229, 11612871353, 11613002459, 11613133547, 11613264667, - 11613395809, 11613526889, 11613657997, 11613789079, 11613920159, 11614051243, 11614182317, - 11614313393, 11614444493, 11614575589, 11614706687, 11614837771, 11614968863, 11615099939, - 11615231021, 11615362111, 11615493203, 11615624291, 11615755363, 11615886439, 11616017519, - 11616148591, 11616279667, 11616410747, 11616541819, 11616672901, 11616803977, 11616935051, - 11617066151, 11617197257, 11617328347, 11617459423, 11617590497, 11617721569, 11617852681, - 11617983791, 11618114887, 11618245963, 11618377037, 11618508157, 11618639243, 11618770327, - 11618901407, 11619032507, 11619163627, 11619294707, 11619425827, 11619556903, 11619687983, - 11619819077, 11619950161, 11620081399, 11620212473, 11620343569, 11620474681, 11620605761, - 11620736833, 11620867957, 11620999069, 11621130187, 11621261261, 11621392361, 11621523437, - 11621654537, 11621785619, 11621916727, 11622047803, 11622178879, 11622309967, 11622441079, - 11622572161, 11622703277, 11622834373, 11622965461, 11623096549, 11623227643, 11623358741, - 11623489861, 11623620947, 11623752047, 11623883123, 11624014247, 11624145331, 11624276471, - 11624407591, 11624538701, 11624669857, 11624800937, 11624932019, 11625063103, 11625194197, - 11625325277, 11625456389, 11625587503, 11625718579, 11625849709, 11625980801, 11626111897, - 11626243003, 11626374077, 11626505179, 11626636283, 11626767359, 11626898431, 11627029511, - 11627160631, 11627291713, 11627422813, 11627553893, 11627684989, 11627816093, 11627947169, - 11628078257, 11628209353, 11628340447, 11628471521, 11628602621, 11628733709, 11628864799, - 11628995921, 11629127017, 11629258093, 11629389179, 11629520257, 11629651339, 11629782443, - 11629913521, 11630044627, 11630175719, 11630306791, 11630437873, 11630568959, 11630700043, - 11630831137, 11630962237, 11631093311, 11631224483, 11631355633, 11631486739, 11631617819, - 11631748957, 11631880049, 11632011121, 11632142243, 11632273321, 11632404439, 11632535527, - 11632666613, 11632797707, 11632928821, 11633059901, 11633190973, 11633322059, 11633453131, - 11633584213, 11633715293, 11633846387, 11633977483, 11634108571, 11634239671, 11634370777, - 11634501863, 11634632969, 11634764041, 11634895121, 11635026199, 11635157299, 11635288397, - 11635419511, 11635550599, 11635681691, 11635812791, 11635943863, 11636074991, 11636206063, - 11636337137, 11636468209, 11636599283, 11636730359, 11636861443, 11636992553, 11637123643, - 11637254753, 11637385847, 11637516959, 11637648049, 11637779123, 11637910199, 11638041281, - 11638172389, 11638303477, 11638434571, 11638565651, 11638696777, 11638827859, 11638958957, - 11639090033, 11639221129, 11639352301, 11639483521, 11639614633, 11639745721, 11639876861, - 11640007979, 11640139079, 11640270221, 11640401293, 11640532403, 11640663491, 11640794573, - 11640925687, 11641056787, 11641187879, 11641319003, 11641450099, 11641581191, 11641712287, - 11641843387, 11641974473, 11642105549, 11642236649, 11642367727, 11642498809, 11642629891, - 11642761003, 11642892091, 11643023191, 11643154273, 11643285347, 11643416441, 11643547519, - 11643678619, 11643809803, 11643940879, 11644072001, 11644203097, 11644334183, 11644465291, - 11644596389, 11644727461, 11644858597, 11644989673, 11645120749, 11645251847, 11645382919, - 11645513993, 11645645069, 11645776141, 11645907223, 11646038297, 11646169369, 11646300451, - 11646431561, 11646562643, 11646693733, 11646824857, 11646955933, 11647087019, 11647218113, - 11647349191, 11647480267, 11647611341, 11647742459, 11647873537, 11648004617, 11648135689, - 11648266801, 11648397881, 11648528993, 11648660071, 11648791157, 11648922239, 11649053333, - 11649184453, 11649315533, 11649446621, 11649577703, 11649708787, 11649839879, 11649970963, - 11650102081, 11650233167, 11650364239, 11650495327, 11650626401, 11650757491, 11650888589, - 11651019689, 11651150783, 11651281883, 11651412967, 11651544043, 11651675153, 11651806241, - 11651937361, 11652068501, 11652199583, 11652330673, 11652461767, 11652592877, 11652724037, - 11652855131, 11652986203, 11653117277, 11653248371, 11653379483, 11653510567, 11653641641, - 11653772737, 11653903813, 11654034907, 11654165981, 11654297069, 11654428147, 11654559221, - 11654690293, 11654821421, 11654952523, 11655083647, 11655214721, 11655345803, 11655476909, - 11655607987, 11655739093, 11655870167, 11656001239, 11656132337, 11656263419, 11656394513, - 11656525597, 11656656689, 11656787761, 11656918843, 11657049973, 11657181071, 11657312159, - 11657443241, 11657574319, 11657705407, 11657836493, 11657967569, 11658098659, 11658229733, - 11658360817, 11658491891, 11658622999, 11658754099, 11658885211, 11659016293, 11659147391, - 11659278479, 11659409551, 11659540631, 11659671721, 11659802797, 11659933897, 11660064991, - 11660196103, 11660327201, 11660458273, 11660589377, 11660720453, 11660851529, 11660982617, - 11661113731, 11661244817, 11661375899, 11661507007, 11661638099, 11661769177, 11661900251, - 11662031347, 11662162427, 11662293509, 11662424581, 11662555759, 11662686853, 11662817981, - 11662949063, 11663080139, 11663211221, 11663342309, 11663473403, 11663604487, 11663735569, - 11663866663, 11663997749, 11664128821, 11664259903, 11664390979, 11664522073, 11664653153, - 11664784249, 11664915341, 11665046429, 11665177501, 11665308581, 11665439659, 11665570783, - 11665701893, 11665832977, 11665964131, 11666095219, 11666226293, 11666357377, 11666488453, - 11666619527, 11666750611, 11666881693, 11667012769, 11667143863, 11667274937, 11667406013, - 11667537131, 11667668227, 11667799307, 11667930389, 11668061467, 11668192553, 11668323629, - 11668454701, 11668585787, 11668716881, 11668847963, 11668979051, 11669110151, 11669241277, - 11669372359, 11669503451, 11669634523, 11669765603, 11669896697, 11670027781, 11670158869, - 11670289987, 11670421093, 11670552181, 11670683261, 11670814361, 11670945437, 11671076531, - 11671207633, 11671338713, 11671469791, 11671600883, 11671731971, 11671863053, 11671994129, - 11672125237, 11672256311, 11672387411, 11672518519, 11672649641, 11672780747, 11672911819, - 11673042917, 11673174041, 11673305113, 11673436219, 11673567299, 11673698371, 11673829451, - 11673960589, 11674091711, 11674222817, 11674353919, 11674484999, 11674616111, 11674747223, - 11674878307, 11675009431, 11675140511, 11675271589, 11675402671, 11675533747, 11675664829, - 11675795909, 11675926993, 11676058067, 11676189143, 11676320219, 11676451313, 11676582389, - 11676713501, 11676844607, 11676975697, 11677106801, 11677237877, 11677368953, 11677500031, - 11677631113, 11677762189, 11677893281, 11678024381, 11678155453, 11678286553, 11678417651, - 11678548723, 11678679799, 11678810881, 11678941957, 11679073061, 11679204137, 11679335267, - 11679466339, 11679597427, 11679728519, 11679859627, 11679990761, 11680121833, 11680252921, - 11680383997, 11680515083, 11680646171, 11680777243, 11680908383, 11681039459, 11681170561, - 11681301637, 11681432753, 11681563837, 11681694929, 11681826001, 11681957141, 11682088213, - 11682219301, 11682350399, 11682481511, 11682612583, 11682743711, 11682874811, 11683005899, - 11683136977, 11683268053, 11683399153, 11683530233, 11683661321, 11683792457, 11683923547, - 11684054653, 11684185729, 11684316811, 11684447897, 11684578973, 11684710087, 11684841167, - 11684972251, 11685103343, 11685234443, 11685365539, 11685496631, 11685627787, 11685758867, - 11685889939, 11686021013, 11686152151, 11686283227, 11686414307, 11686545379, 11686676461, - 11686807547, 11686938673, 11687069761, 11687200901, 11687331983, 11687463061, 11687594137, - 11687725219, 11687856307, 11687987413, 11688118513, 11688249593, 11688380677, 11688511763, - 11688642877, 11688774001, 11688905077, 11689036211, 11689167311, 11689298393, 11689429481, - 11689560581, 11689691669, 11689822741, 11689953823, 11690084897, 11690215973, 11690347117, - 11690478193, 11690609269, 11690740343, 11690871421, 11691002513, 11691133609, 11691264707, - 11691395783, 11691526859, 11691657931, 11691789007, 11691920089, 11692051177, 11692182269, - 11692313357, 11692444429, 11692575563, 11692706653, 11692837733, 11692968817, 11693099897, - 11693230979, 11693362063, 11693493151, 11693624251, 11693755369, 11693886469, 11694017549, - 11694148637, 11694279731, 11694410803, 11694541891, 11694673009, 11694804083, 11694935159, - 11695066283, 11695197391, 11695328473, 11695459571, 11695590649, 11695721749, 11695852841, - 11695983913, 11696114987, 11696246087, 11696377163, 11696508253, 11696639371, 11696770453, - 11696901529, 11697032617, 11697163703, 11697294781, 11697425869, 11697557023, 11697688097, - 11697819179, 11697950269, 11698081427, 11698212503, 11698343593, 11698474687, 11698605773, - 11698736869, 11698867949, 11698999027, 11699130101, 11699261183, 11699392279, 11699523373, - 11699654497, 11699785571, 11699916673, 11700047803, 11700178883, 11700309961, 11700441043, - 11700572119, 11700703199, 11700834329, 11700965447, 11701096607, 11701227683, 11701358819, - 11701489999, 11701621079, 11701752157, 11701883269, 11702014349, 11702145439, 11702276611, - 11702407709, 11702538791, 11702669939, 11702801053, 11702932127, 11703063199, 11703194389, - 11703325489, 11703456563, 11703587647, 11703718729, 11703849809, 11703980887, 11704111999, - 11704243087, 11704374173, 11704505249, 11704636327, 11704767419, 11704898537, 11705029627, - 11705160787, 11705291881, 11705422973, 11705554057, 11705685139, 11705816249, 11705947373, - 11706078451, 11706209539, 11706340631, 11706471727, 11706602801, 11706733877, 11706864973, - 11706996047, 11707127161, 11707258261, 11707389409, 11707520483, 11707651573, 11707782659, - 11707913761, 11708044841, 11708175943, 11708307019, 11708438129, 11708569259, 11708700331, - 11708831419, 11708962493, 11709093569, 11709224671, 11709355753, 11709486889, 11709617981, - 11709749083, 11709880183, 11710011283, 11710142363, 11710273447, 11710404557, 11710535647, - 11710666769, 11710797853, 11710928959, 11711060057, 11711191153, 11711322241, 11711453363, - 11711584459, 11711715541, 11711846623, 11711977751, 11712108847, 11712239969, 11712371057, - 11712502133, 11712633211, 11712764299, 11712895379, 11713026473, 11713157579, 11713288667, - 11713419749, 11713550831, 11713681907, 11713813021, 11713944101, 11714075203, 11714206297, - 11714337421, 11714468501, 11714599643, 11714730739, 11714861861, 11714992957, 11715124061, - 11715255133, 11715386213, 11715517301, 11715648389, 11715779497, 11715910643, 11716041739, - 11716172821, 11716303919, 11716435009, 11716566089, 11716697207, 11716828283, 11716959403, - 11717090507, 11717221597, 11717352677, 11717483783, 11717614861, 11717745937, 11717877053, - 11718008161, 11718139261, 11718270359, 11718401437, 11718532517, 11718663637, 11718794713, - 11718925831, 11719056983, 11719188059, 11719319147, 11719450247, 11719581323, 11719712419, - 11719843501, 11719974589, 11720105687, 11720236763, 11720367859, 11720498939, 11720630011, - 11720761123, 11720892217, 11721023309, 11721154381, 11721285503, 11721416579, 11721547693, - 11721678769, 11721809851, 11721940927, 11722072001, 11722203089, 11722334213, 11722465291, - 11722596397, 11722727479, 11722858559, 11722989661, 11723120749, 11723251829, 11723382901, - 11723514013, 11723645099, 11723776213, 11723907311, 11724038387, 11724169489, 11724300613, - 11724431699, 11724562781, 11724693899, 11724824983, 11724956081, 11725087193, 11725218287, - 11725349359, 11725480433, 11725611511, 11725742617, 11725873697, 11726004791, 11726135873, - 11726267017, 11726398097, 11726529173, 11726660249, 11726791327, 11726922401, 11727053473, - 11727184561, 11727315643, 11727446749, 11727577843, 11727708919, 11727839993, 11727971071, - 11728102151, 11728233239, 11728364341, 11728495423, 11728626523, 11728757611, 11728888729, - 11729019817, 11729150899, 11729281973, 11729413061, 11729544133, 11729675207, 11729806279, - 11729937377, 11730068479, 11730199561, 11730330649, 11730461753, 11730592847, 11730723997, - 11730855119, 11730986191, 11731117289, 11731248407, 11731379479, 11731510577, 11731641653, - 11731772747, 11731903823, 11732034907, 11732165993, 11732297089, 11732428207, 11732559313, - 11732690413, 11732821487, 11732952587, 11733083671, 11733214789, 11733345893, 11733476971, - 11733608059, 11733739141, 11733870217, 11734001311, 11734132439, 11734263551, 11734394647, - 11734525729, 11734656811, 11734787903, 11734919011, 11735050091, 11735181167, 11735312257, - 11735443361, 11735574437, 11735705533, 11735836621, 11735967701, 11736098791, 11736229873, - 11736360967, 11736492121, 11736623207, 11736754283, 11736885359, 11737016443, 11737147529, - 11737278617, 11737409701, 11737540777, 11737671877, 11737802953, 11737934029, 11738065121, - 11738196209, 11738327287, 11738458379, 11738589461, 11738720551, 11738851627, 11738982721, - 11739113807, 11739244897, 11739376013, 11739507089, 11739638177, 11739769259, 11739900371, - 11740031449, 11740162559, 11740293661, 11740424777, 11740555901, 11740686983, 11740818079, - 11740949189, 11741080261, 11741211371, 11741342447, 11741473559, 11741604643, 11741735743, - 11741866817, 11741997893, 11742128977, 11742260093, 11742391201, 11742522277, 11742653359, - 11742784441, 11742915517, 11743046591, 11743177681, 11743308767, 11743439857, 11743570961, - 11743702073, 11743833149, 11743964251, 11744095327, 11744226407, 11744357507, 11744488603, - 11744619727, 11744750827, 11744881903, 11745013009, 11745144109, 11745275279, 11745406357, - 11745537449, 11745668549, 11745799631, 11745930731, 11746061807, 11746192903, 11746324013, - 11746455089, 11746586161, 11746717237, 11746848331, 11746979407, 11747110489, 11747241589, - 11747372669, 11747503751, 11747634851, 11747765927, 11747897033, 11748028129, 11748159251, - 11748290383, 11748421457, 11748552547, 11748683621, 11748814703, 11748945847, 11749076929, - 11749208017, 11749339093, 11749470193, 11749601291, 11749732391, 11749863479, 11749994561, - 11750125643, 11750256731, 11750387809, 11750518931, 11750650003, 11750781101, 11750912203, - 11751043279, 11751174427, 11751305551, 11751436633, 11751567731, 11751698809, 11751829927, - 11751961019, 11752092139, 11752223251, 11752354333, 11752485427, 11752616501, 11752747577, - 11752878779, 11753009861, 11753140939, 11753272019, 11753403107, 11753534183, 11753665289, - 11753796371, 11753927443, 11754058531, 11754189677, 11754320749, 11754451871, 11754582943, - 11754714047, 11754845149, 11754976223, 11755107319, 11755238419, 11755369511, 11755500599, - 11755631687, 11755762801, 11755893881, 11756025013, 11756156101, 11756287181, 11756418277, - 11756549353, 11756680433, 11756811527, 11756942627, 11757073709, 11757204793, 11757335873, - 11757466957, 11757598033, 11757729107, 11757860183, 11757991277, 11758122419, 11758253513, - 11758384597, 11758515673, 11758646747, 11758777837, 11758908929, 11759040047, 11759171143, - 11759302241, 11759433313, 11759564413, 11759695501, 11759826581, 11759957681, 11760088777, - 11760219857, 11760350963, 11760482039, 11760613187, 11760744301, 11760875393, 11761006469, - 11761137547, 11761268689, 11761399787, 11761530871, 11761661957, 11761793051, 11761924151, - 11762055223, 11762186297, 11762317373, 11762448449, 11762579533, 11762710607, 11762841683, - 11762972761, 11763103841, 11763234961, 11763366049, 11763497147, 11763628243, 11763759347, - 11763890429, 11764021501, 11764152623, 11764283719, 11764414807, 11764545893, 11764676969, - 11764808063, 11764939163, 11765070257, 11765201347, 11765332429, 11765463557, 11765594657, - 11765725753, 11765856827, 11765987911, 11766118997, 11766250079, 11766381169, 11766512273, - 11766643349, 11766774421, 11766905497, 11767036573, 11767167653, 11767298791, 11767429867, - 11767560943, 11767692029, 11767823129, 11767954213, 11768085289, 11768216377, 11768347489, - 11768478577, 11768609653, 11768740741, 11768871839, 11769002911, 11769134059, 11769265169, - 11769396241, 11769527323, 11769658403, 11769789481, 11769920563, 11770051661, 11770182761, - 11770313873, 11770444979, 11770576109, 11770707191, 11770838269, 11770969361, 11771100433, - 11771231551, 11771362627, 11771493707, 11771624797, 11771755871, 11771886953, 11772018103, - 11772149177, 11772280259, 11772411331, 11772542413, 11772673531, 11772804629, 11772935701, - 11773066807, 11773197881, 11773328977, 11773460093, 11773591169, 11773722253, 11773853369, - 11773984447, 11774115533, 11774246609, 11774377687, 11774508773, 11774639867, 11774770981, - 11774902093, 11775033167, 11775164251, 11775295331, 11775426407, 11775557491, 11775688591, - 11775819667, 11775950741, 11776081843, 11776212967, 11776344061, 11776475149, 11776606223, - 11776737319, 11776868431, 11776999517, 11777130593, 11777261669, 11777392747, 11777523827, - 11777654921, 11777786023, 11777917121, 11778048193, 11778179269, 11778310343, 11778441469, - 11778572581, 11778703661, 11778834733, 11778965819, 11779096891, 11779228009, 11779359133, - 11779490231, 11779621307, 11779752389, 11779883501, 11780014607, 11780145703, 11780276843, - 11780407921, 11780539009, 11780670103, 11780801189, 11780932279, 11781063367, 11781194501, - 11781325579, 11781456667, 11781587747, 11781718829, 11781849901, 11781980999, 11782112071, - 11782243157, 11782374277, 11782505351, 11782636433, 11782767509, 11782898581, 11783029667, - 11783160749, 11783291857, 11783422949, 11783554031, 11783685103, 11783816221, 11783947297, - 11784078373, 11784209453, 11784340591, 11784471691, 11784602771, 11784733861, 11784864947, - 11784996019, 11785127099, 11785258187, 11785389263, 11785520347, 11785651459, 11785782553, - 11785913627, 11786044703, 11786175787, 11786306891, 11786437967, 11786569111, 11786700187, - 11786831327, 11786962403, 11787093509, 11787224593, 11787355667, 11787486743, 11787617837, - 11787748937, 11787880063, 11788011139, 11788142221, 11788273309, 11788404389, 11788535461, - 11788666553, 11788797641, 11788928729, 11789059801, 11789190901, 11789322001, 11789453077, - 11789584171, 11789715257, 11789846329, 11789977417, 11790108493, 11790239621, 11790370727, - 11790501817, 11790632891, 11790763981, 11790895069, 11791026157, 11791157233, 11791288343, - 11791419449, 11791550579, 11791681669, 11791812763, 11791943843, 11792074919, 11792206001, - 11792337091, 11792468167, 11792599243, 11792730337, 11792861411, 11792992489, 11793123611, - 11793254731, 11793385819, 11793516919, 11793648019, 11793779093, 11793910187, 11794041313, - 11794172389, 11794303487, 11794434563, 11794565639, 11794696721, 11794827799, 11794958881, - 11795089987, 11795221103, 11795352181, 11795483311, 11795614399, 11795745487, 11795876579, - 11796007661, 11796138737, 11796269827, 11796400901, 11796531991, 11796663079, 11796794171, - 11796925319, 11797056391, 11797187477, 11797318571, 11797449679, 11797580759, 11797711831, - 11797842911, 11797973987, 11798105063, 11798236189, 11798367307, 11798498429, 11798629559, - 11798760653, 11798891743, 11799022817, 11799153913, 11799285041, 11799416131, 11799547211, - 11799678283, 11799809431, 11799940513, 11800071587, 11800202663, 11800333789, 11800464911, - 11800596001, 11800727129, 11800858247, 11800989329, 11801120407, 11801251489, 11801382577, - 11801513651, 11801644733, 11801775809, 11801906881, 11802037981, 11802169069, 11802300149, - 11802431231, 11802562337, 11802693421, 11802824503, 11802955597, 11803086671, 11803217773, - 11803348877, 11803479983, 11803611077, 11803742149, 11803873229, 11804004343, 11804135449, - 11804266541, 11804397643, 11804528759, 11804659859, 11804790941, 11804922013, 11805053087, - 11805184159, 11805315259, 11805446333, 11805577409, 11805708493, 11805839581, 11805970661, - 11806101739, 11806232813, 11806363903, 11806494989, 11806626109, 11806757231, 11806888319, - 11807019431, 11807150569, 11807281657, 11807412737, 11807543819, 11807674927, 11807806013, - 11807937131, 11808068213, 11808199297, 11808330371, 11808461453, 11808592577, 11808723653, - 11808854737, 11808985813, 11809116901, 11809248007, 11809379081, 11809510177, 11809641289, - 11809772371, 11809903463, 11810034541, 11810165651, 11810296769, 11810427851, 11810558941, - 11810690039, 11810821117, 11810952211, 11811083287, 11811214399, 11811345473, 11811476581, - 11811607663, 11811738769, 11811869869, 11812000951, 11812132039, 11812263131, 11812394207, - 11812525279, 11812656367, 11812787449, 11812918541, 11813049613, 11813180693, 11813311771, - 11813442937, 11813574029, 11813705159, 11813836259, 11813967331, 11814098467, 11814229541, - 11814360631, 11814491723, 11814622811, 11814753893, 11814884987, 11815016071, 11815147189, - 11815278311, 11815409399, 11815540483, 11815671557, 11815802651, 11815933741, 11816064833, - 11816195917, 11816326997, 11816458091, 11816589167, 11816720243, 11816851331, 11816982451, - 11817113587, 11817244687, 11817375797, 11817506879, 11817638003, 11817769099, 11817900191, - 11818031263, 11818162337, 11818293437, 11818424509, 11818555597, 11818686701, 11818817783, - 11818948871, 11819079973, 11819211077, 11819342149, 11819473223, 11819604299, 11819735393, - 11819866523, 11819997599, 11820128699, 11820259777, 11820390859, 11820522031, 11820653111, - 11820784193, 11820915299, 11821046399, 11821177493, 11821308571, 11821439647, 11821570723, - 11821701803, 11821832881, 11821963957, 11822095037, 11822226109, 11822357221, 11822488303, - 11822619379, 11822750473, 11822881547, 11823012659, 11823143743, 11823274819, 11823405901, - 11823536983, 11823668111, 11823799241, 11823930343, 11824061419, 11824192493, 11824323569, - 11824454657, 11824585733, 11824716863, 11824847959, 11824979057, 11825110133, 11825241217, - 11825372291, 11825503369, 11825634481, 11825765557, 11825896657, 11826027761, 11826158857, - 11826289931, 11826421003, 11826552077, 11826683159, 11826814277, 11826945349, 11827076423, - 11827207517, 11827338623, 11827469713, 11827600847, 11827731931, 11827863007, 11827994117, - 11828125193, 11828256281, 11828387369, 11828518517, 11828649593, 11828780669, 11828911777, - 11829042871, 11829173981, 11829305063, 11829436159, 11829567241, 11829698317, 11829829399, - 11829960487, 11830091573, 11830222673, 11830353751, 11830484849, 11830615921, 11830747021, - 11830878121, 11831009213, 11831140301, 11831271377, 11831402459, 11831533541, 11831664619, - 11831795707, 11831926789, 11832057863, 11832188941, 11832320029, 11832451109, 11832582187, - 11832713281, 11832844363, 11832975449, 11833106587, 11833237679, 11833368751, 11833499833, - 11833630933, 11833762007, 11833893079, 11834024159, 11834155231, 11834286367, 11834417453, - 11834548541, 11834679653, 11834810731, 11834941829, 11835072911, 11835203993, 11835335081, - 11835466171, 11835597253, 11835728353, 11835859457, 11835990539, 11836121639, 11836252723, - 11836383799, 11836514887, 11836646039, 11836777123, 11836908197, 11837039281, 11837170357, - 11837301449, 11837432561, 11837563649, 11837694749, 11837825833, 11837956913, 11838087991, - 11838219067, 11838350189, 11838481313, 11838612391, 11838743467, 11838874547, 11839005631, - 11839136707, 11839267837, 11839398913, 11839530007, 11839661087, 11839792169, 11839923247, - 11840054321, 11840185393, 11840316473, 11840447573, 11840578759, 11840709901, 11840840981, - 11840972063, 11841103147, 11841234227, 11841365299, 11841496379, 11841627451, 11841758543, - 11841889621, 11842020721, 11842151801, 11842282901, 11842414009, 11842545097, 11842676171, - 11842807243, 11842938319, 11843069393, 11843200477, 11843331559, 11843462713, 11843593787, - 11843724859, 11843856007, 11843987081, 11844118193, 11844249283, 11844380363, 11844511489, - 11844642569, 11844773651, 11844904777, 11845035887, 11845166969, 11845298051, 11845429153, - 11845560229, 11845691317, 11845822397, 11845953479, 11846084557, 11846215643, 11846346737, - 11846477809, 11846608901, 11846740007, 11846871137, 11847002249, 11847133351, 11847264449, - 11847395543, 11847526633, 11847657739, 11847788861, 11847919933, 11848051021, 11848182133, - 11848313233, 11848444343, 11848575421, 11848706503, 11848837591, 11848968667, 11849099771, - 11849230849, 11849361929, 11849493083, 11849624179, 11849755367, 11849886463, 11850017537, - 11850148649, 11850279737, 11850410833, 11850541931, 11850673033, 11850804107, 11850935183, - 11851066267, 11851197343, 11851328441, 11851459519, 11851590593, 11851721689, 11851852783, - 11851983883, 11852114993, 11852246069, 11852377193, 11852508277, 11852639369, 11852770441, - 11852901527, 11853032623, 11853163703, 11853294781, 11853425869, 11853556963, 11853688069, - 11853819149, 11853950231, 11854081303, 11854212389, 11854343461, 11854474537, 11854605689, - 11854736791, 11854867903, 11854998983, 11855130059, 11855261141, 11855392243, 11855523367, - 11855654443, 11855785553, 11855916643, 11856047719, 11856178801, 11856309901, 11856440977, - 11856572069, 11856703151, 11856834247, 11856965321, 11857096417, 11857227509, 11857358599, - 11857489673, 11857620763, 11857751849, 11857882979, 11858014061, 11858145139, 11858276239, - 11858407331, 11858538413, 11858669503, 11858800627, 11858931701, 11859062773, 11859193849, - 11859324941, 11859456017, 11859587119, 11859718223, 11859849319, 11859980393, 11860111511, - 11860242619, 11860373711, 11860504793, 11860635887, 11860766963, 11860898041, 11861029151, - 11861160247, 11861291341, 11861422453, 11861553527, 11861684617, 11861815699, 11861946793, - 11862077869, 11862208973, 11862340067, 11862471151, 11862602243, 11862733411, 11862864509, - 11862995581, 11863126663, 11863257739, 11863388843, 11863519919, 11863651003, 11863782079, - 11863913167, 11864044249, 11864175341, 11864306431, 11864437517, 11864568619, 11864699699, - 11864830841, 11864961923, 11865093013, 11865224113, 11865355189, 11865486323, 11865617399, - 11865748481, 11865879583, 11866010669, 11866141741, 11866272823, 11866403911, 11866534991, - 11866666067, 11866797167, 11866928263, 11867059343, 11867190457, 11867321539, 11867452613, - 11867583709, 11867714783, 11867845883, 11867977019, 11868108097, 11868239231, 11868370307, - 11868501391, 11868632471, 11868763547, 11868894637, 11869025713, 11869156841, 11869287961, - 11869419071, 11869550159, 11869681247, 11869812341, 11869943413, 11870074549, 11870205637, - 11870336741, 11870467841, 11870598919, 11870730013, 11870861129, 11870992207, 11871123281, - 11871254387, 11871385483, 11871516599, 11871647699, 11871778783, 11871909871, 11872040981, - 11872172057, 11872303193, 11872434293, 11872565377, 11872696477, 11872827581, 11872958653, - 11873089747, 11873220823, 11873351899, 11873482991, 11873614069, 11873745161, 11873876233, - 11874007337, 11874138467, 11874269557, 11874400691, 11874531769, 11874662851, 11874793927, - 11874925019, 11875056163, 11875187239, 11875318333, 11875449427, 11875580527, 11875711619, - 11875842691, 11875973779, 11876104861, 11876235947, 11876367023, 11876498107, 11876629183, - 11876760299, 11876891419, 11877022501, 11877153677, 11877284777, 11877415867, 11877546949, - 11877678023, 11877809137, 11877940211, 11878071299, 11878202377, 11878333471, 11878464557, - 11878595629, 11878726703, 11878857787, 11878988893, 11879119969, 11879251123, 11879382223, - 11879513369, 11879644451, 11879775553, 11879906651, 11880037759, 11880168869, 11880299953, - 11880431029, 11880562139, 11880693259, 11880824399, 11880955501, 11881086583, 11881217687, - 11881348769, 11881479881, 11881610969, 11881742071, 11881873151, 11882004241, 11882135327, - 11882266421, 11882397521, 11882528639, 11882659741, 11882790889, 11882921971, 11883053051, - 11883184129, 11883315203, 11883446291, 11883577367, 11883708439, 11883839521, 11883970597, - 11884101707, 11884232827, 11884363943, 11884495057, 11884626133, 11884757219, 11884888313, - 11885019401, 11885150491, 11885281591, 11885412683, 11885543777, 11885674861, 11885805937, - 11885937029, 11886068101, 11886199207, 11886330331, 11886461459, 11886592577, 11886723659, - 11886854761, 11886985841, 11887116929, 11887248007, 11887379083, 11887510169, 11887641277, - 11887772411, 11887903507, 11888034581, 11888165657, 11888296781, 11888427869, 11888558947, - 11888690063, 11888821163, 11888952247, 11889083407, 11889214483, 11889345571, 11889476653, - 11889607727, 11889738799, 11889869897, 11890000981, 11890132073, 11890263173, 11890394273, - 11890525369, 11890656461, 11890787543, 11890918639, 11891049757, 11891180831, 11891311909, - 11891442989, 11891574067, 11891705191, 11891836283, 11891967359, 11892098443, 11892229519, - 11892360619, 11892491713, 11892622817, 11892753973, 11892885073, 11893016147, 11893147219, - 11893278301, 11893409383, 11893540469, 11893671593, 11893802689, 11893933783, 11894064869, - 11894196001, 11894327087, 11894458207, 11894589281, 11894720353, 11894851433, 11894982511, - 11895113621, 11895244717, 11895375799, 11895506879, 11895637969, 11895769049, 11895900131, - 11896031243, 11896162351, 11896293499, 11896424597, 11896555679, 11896686761, 11896817839, - 11896948939, 11897080021, 11897211103, 11897342183, 11897473277, 11897604391, 11897735467, - 11897866549, 11897997673, 11898128773, 11898259859, 11898390943, 11898522017, 11898653167, - 11898784243, 11898915337, 11899046429, 11899177553, 11899308691, 11899439771, 11899570843, - 11899701929, 11899833013, 11899964117, 11900095213, 11900226301, 11900357377, 11900488463, - 11900619553, 11900750657, 11900881771, 11901012917, 11901144007, 11901275101, 11901406183, - 11901537269, 11901668357, 11901799439, 11901930511, 11902061621, 11902192739, 11902323827, - 11902454903, 11902585987, 11902717063, 11902848161, 11902979237, 11903110309, 11903241403, - 11903372483, 11903503607, 11903634679, 11903765777, 11903896931, 11904028039, 11904159143, - 11904290221, 11904421297, 11904552377, 11904683503, 11904814613, 11904945707, 11905076801, - 11905207877, 11905338967, 11905470077, 11905601167, 11905732271, 11905863383, 11905994461, - 11906125571, 11906256643, 11906387723, 11906518801, 11906649883, 11906780971, 11906912053, - 11907043153, 11907174241, 11907305327, 11907436399, 11907567473, 11907698599, 11907829679, - 11907960767, 11908091849, 11908222943, 11908354027, 11908485101, 11908616197, 11908747297, - 11908878379, 11909009479, 11909140571, 11909271707, 11909402797, 11909533871, 11909664961, - 11909796053, 11909927173, 11910058301, 11910189377, 11910320467, 11910451543, 11910582623, - 11910713729, 11910844871, 11910975943, 11911107031, 11911238113, 11911369213, 11911500299, - 11911631377, 11911762463, 11911893547, 11912024639, 11912155729, 11912286809, 11912417887, - 11912548993, 11912680067, 11912811143, 11912942227, 11913073303, 11913204439, 11913335549, - 11913466639, 11913597719, 11913728803, 11913859949, 11913991043, 11914122119, 11914253201, - 11914384309, 11914515391, 11914646467, 11914777559, 11914908647, 11915039749, 11915170867, - 11915301943, 11915433031, 11915564123, 11915695201, 11915826287, 11915957363, 11916088439, - 11916219517, 11916350597, 11916481697, 11916612787, 11916743869, 11916875029, 11917006109, - 11917137187, 11917268281, 11917399363, 11917530467, 11917661579, 11917792657, 11917923733, - 11918054809, 11918185891, 11918317003, 11918448089, 11918579161, 11918710343, 11918841427, - 11918972503, 11919103577, 11919234673, 11919365749, 11919496829, 11919627919, 11919758999, - 11919890113, 11920021199, 11920152287, 11920283387, 11920414459, 11920545577, 11920676681, - 11920807763, 11920938839, 11921069911, 11921201077, 11921332153, 11921463263, 11921594341, - 11921725429, 11921856521, 11921987593, 11922118669, 11922249763, 11922380837, 11922511943, - 11922643063, 11922774139, 11922905219, 11923036361, 11923167433, 11923298521, 11923429597, - 11923560697, 11923691807, 11923822891, 11923953973, 11924085137, 11924216221, 11924347297, - 11924478373, 11924609471, 11924740543, 11924871661, 11925002741, 11925133823, 11925264929, - 11925396001, 11925527083, 11925658163, 11925789263, 11925920407, 11926051507, 11926182641, - 11926313723, 11926444801, 11926575877, 11926706963, 11926838069, 11926969141, 11927100221, - 11927231293, 11927362393, 11927493469, 11927624543, 11927755621, 11927886703, 11928017789, - 11928148861, 11928279991, 11928411091, 11928542207, 11928673279, 11928804361, 11928935489, - 11929066561, 11929197649, 11929328729, 11929459823, 11929590923, 11929722011, 11929853083, - 11929984159, 11930115277, 11930246353, 11930377427, 11930508509, 11930639599, 11930770673, - 11930901751, 11931032833, 11931163921, 11931295003, 11931426077, 11931557189, 11931688261, - 11931819343, 11931950431, 11932081517, 11932212601, 11932343701, 11932474781, 11932605859, - 11932736939, 11932868011, 11932999103, 11933130197, 11933261279, 11933392411, 11933523521, - 11933654617, 11933785709, 11933916793, 11934047891, 11934178979, 11934310051, 11934441151, - 11934572263, 11934703349, 11934834523, 11934965599, 11935096673, 11935227749, 11935358899, - 11935489987, 11935621091, 11935752193, 11935883329, 11936014421, 11936145517, 11936276593, - 11936407669, 11936538751, 11936669831, 11936800973, 11936932087, 11937063161, 11937194233, - 11937325307, 11937456407, 11937587503, 11937718577, 11937849709, 11937980797, 11938111877, - 11938242973, 11938374047, 11938505147, 11938636247, 11938767341, 11938898441, 11939029523, - 11939160601, 11939291699, 11939422771, 11939553863, 11939684947, 11939816027, 11939947133, - 11940078209, 11940209327, 11940340403, 11940471493, 11940602581, 11940733691, 11940864763, - 11940995839, 11941126949, 11941258027, 11941389121, 11941520209, 11941651283, 11941782361, - 11941913447, 11942044537, 11942175613, 11942306689, 11942437777, 11942568857, 11942699939, - 11942831027, 11942962123, 11943093221, 11943224299, 11943355379, 11943486517, 11943617611, - 11943748741, 11943879823, 11944010927, 11944141999, 11944273073, 11944404181, 11944535363, - 11944666439, 11944797517, 11944928617, 11945059699, 11945190781, 11945321867, 11945452963, - 11945584103, 11945715211, 11945846291, 11945977403, 11946108527, 11946239611, 11946370699, - 11946501793, 11946632891, 11946763979, 11946895117, 11947026211, 11947157293, 11947288393, - 11947419487, 11947550591, 11947681663, 11947812757, 11947943849, 11948074933, 11948206007, - 11948337109, 11948468183, 11948599303, 11948730389, 11948861471, 11948992543, 11949123629, - 11949254711, 11949385787, 11949516877, 11949647951, 11949779057, 11949910151, 11950041227, - 11950172309, 11950303427, 11950434499, 11950565587, 11950696663, 11950827743, 11950958839, - 11951089949, 11951221033, 11951352109, 11951483233, 11951614331, 11951745409, 11951876491, - 11952007567, 11952138683, 11952269767, 11952400843, 11952531919, 11952662993, 11952794153, - 11952925247, 11953056331, 11953187443, 11953318541, 11953449653, 11953580759, 11953711837, - 11953842941, 11953974017, 11954105117, 11954236193, 11954367283, 11954498399, 11954629499, - 11954760583, 11954891693, 11955022769, 11955153853, 11955284941, 11955416017, 11955547103, - 11955678181, 11955809263, 11955940391, 11956071481, 11956202569, 11956333651, 11956464743, - 11956595831, 11956726927, 11956858027, 11956989103, 11957120183, 11957251283, 11957382397, - 11957513489, 11957644607, 11957775749, 11957906843, 11958037919, 11958169001, 11958300077, - 11958431153, 11958562249, 11958693343, 11958824417, 11958955493, 11959086583, 11959217707, - 11959348787, 11959479941, 11959611043, 11959742143, 11959873231, 11960004307, 11960135387, - 11960266459, 11960397539, 11960528621, 11960659699, 11960790773, 11960921873, 11961052973, - 11961184073, 11961315151, 11961446303, 11961577379, 11961708461, 11961839579, 11961970673, - 11962101803, 11962232899, 11962363981, 11962495067, 11962626139, 11962757221, 11962888331, - 11963019403, 11963150483, 11963281559, 11963412653, 11963543729, 11963674829, 11963805929, - 11963937019, 11964068093, 11964199187, 11964330263, 11964461389, 11964592487, 11964723569, - 11964854659, 11964985757, 11965116853, 11965247941, 11965379017, 11965510127, 11965641203, - 11965772281, 11965903361, 11966034463, 11966165537, 11966296609, 11966427689, 11966558761, - 11966689841, 11966820919, 11966951999, 11967083081, 11967214183, 11967345259, 11967476333, - 11967607409, 11967738481, 11967869597, 11968000703, 11968131779, 11968262927, 11968394017, - 11968525091, 11968656181, 11968787263, 11968918363, 11969049467, 11969180539, 11969311631, - 11969442721, 11969573807, 11969704897, 11969835989, 11969967089, 11970098183, 11970229279, - 11970360397, 11970491479, 11970622561, 11970753637, 11970884719, 11971015799, 11971146893, - 11971277977, 11971409077, 11971540169, 11971671251, 11971802327, 11971933411, 11972064491, - 11972195581, 11972326661, 11972457769, 11972588867, 11972719939, 11972851013, 11972982089, - 11973113189, 11973244291, 11973375431, 11973506579, 11973637657, 11973768773, 11973899851, - 11974030961, 11974162049, 11974293167, 11974424239, 11974555361, 11974686511, 11974817641, - 11974948717, 11975079791, 11975210869, 11975341957, 11975473057, 11975604131, 11975735227, - 11975866313, 11975997389, 11976128501, 11976259583, 11976390661, 11976521747, 11976652819, - 11976783901, 11976914977, 11977046051, 11977177133, 11977308257, 11977439329, 11977570421, - 11977701503, 11977832591, 11977963687, 11978094803, 11978225957, 11978357033, 11978488111, - 11978619193, 11978750291, 11978881363, 11979012457, 11979143537, 11979274609, 11979405689, - 11979536773, 11979667927, 11979799001, 11979930119, 11980061201, 11980192351, 11980323427, - 11980454527, 11980585649, 11980716763, 11980847899, 11980978987, 11981110087, 11981241191, - 11981372269, 11981503363, 11981634437, 11981765539, 11981896631, 11982027709, 11982158801, - 11982289883, 11982420959, 11982552031, 11982683123, 11982814211, 11982945349, 11983076459, - 11983207553, 11983338659, 11983469741, 11983600841, 11983731941, 11983863049, 11983994137, - 11984125211, 11984256331, 11984387461, 11984518549, 11984649643, 11984780719, 11984911819, - 11985042919, 11985173999, 11985305093, 11985436171, 11985567257, 11985698359, 11985829433, - 11985960563, 11986091647, 11986222727, 11986353817, 11986484911, 11986615999, 11986747121, - 11986878199, 11987009299, 11987140393, 11987271469, 11987402543, 11987533627, 11987664739, - 11987795843, 11987926919, 11988058003, 11988189077, 11988320171, 11988451247, 11988582341, - 11988713413, 11988844501, 11988975631, 11989106711, 11989237783, 11989368857, 11989499939, - 11989631023, 11989762123, 11989893199, 11990024279, 11990155351, 11990286457, 11990417531, - 11990548627, 11990679703, 11990810801, 11990941873, 11991072971, 11991204053, 11991335159, - 11991466237, 11991597313, 11991728401, 11991859489, 11991990607, 11992121707, 11992252787, - 11992383917, 11992515043, 11992646129, 11992777207, 11992908283, 11993039413, 11993170499, - 11993301583, 11993432761, 11993563889, 11993694971, 11993826101, 11993957203, 11994088283, - 11994219371, 11994350471, 11994481561, 11994612649, 11994743743, 11994874823, 11995005917, - 11995137029, 11995268101, 11995399183, 11995530289, 11995661371, 11995792483, 11995923613, - 11996054687, 11996185759, 11996316833, 11996447917, 11996579011, 11996710157, 11996841229, - 11996972303, 11997103397, 11997234481, 11997365563, 11997496639, 11997627731, 11997758827, - 11997889903, 11998020977, 11998152059, 11998283147, 11998414229, 11998545323, 11998676429, - 11998807501, 11998938593, 11999069669, 11999200771, 11999331881, 11999462957, 11999594029, - 11999725109, 11999856227, 11999987333, 12000118447, 12000249523, 12000380657, 12000511729, - 12000642803, 12000773893, 12000904969, 12001036051, 12001167149, 12001298233, 12001429331, - 12001560413, 12001691491, 12001822601, 12001953683, 12002084761, 12002215837, 12002346991, - 12002478067, 12002609141, 12002740219, 12002871317, 12003002419, 12003133537, 12003264619, - 12003395731, 12003526819, 12003657937, 12003789013, 12003920113, 12004051207, 12004182299, - 12004313437, 12004444513, 12004575637, 12004706717, 12004837813, 12004968893, 12005099983, - 12005231059, 12005362153, 12005493229, 12005624329, 12005755457, 12005886583, 12006017657, - 12006148757, 12006279833, 12006410917, 12006542003, 12006673087, 12006804167, 12006935251, - 12007066373, 12007197457, 12007328539, 12007459637, 12007590709, 12007721827, 12007852943, - 12007984039, 12008115139, 12008246213, 12008377289, 12008508361, 12008639443, 12008770517, - 12008901601, 12009032699, 12009163787, 12009294877, 12009425959, 12009557033, 12009688111, - 12009819191, 12009950317, 12010081451, 12010212523, 12010343623, 12010474717, 12010605799, - 12010736879, 12010867951, 12010999031, 12011130107, 12011261201, 12011392273, 12011523373, - 12011654483, 12011785571, 12011916643, 12012047717, 12012178837, 12012309917, 12012441059, - 12012572161, 12012703253, 12012834367, 12012965443, 12013096517, 12013227607, 12013358729, - 12013489811, 12013620923, 12013751999, 12013883071, 12014014183, 12014145271, 12014276353, - 12014407459, 12014538541, 12014669621, 12014800781, 12014931853, 12015062933, 12015194011, - 12015325087, 12015456169, 12015587263, 12015718343, 12015849449, 12015980539, 12016111643, - 12016242757, 12016373833, 12016504933, 12016636033, 12016767107, 12016898197, 12017029279, - 12017160371, 12017291501, 12017422609, 12017553731, 12017684831, 12017815907, 12017947031, - 12018078131, 12018209293, 12018340381, 12018471523, 12018602639, 12018733711, 12018864787, - 12018995887, 12019126961, 12019258033, 12019389121, 12019520257, 12019651333, 12019782407, - 12019913491, 12020044583, 12020175691, 12020306797, 12020437901, 12020569003, 12020700079, - 12020831171, 12020962243, 12021093323, 12021224417, 12021355517, 12021486601, 12021617681, - 12021748787, 12021879917, 12022011019, 12022142107, 12022273189, 12022404281, 12022535353, - 12022666433, 12022797529, 12022928627, 12023059717, 12023190791, 12023321867, 12023452939, - 12023584043, 12023715157, 12023846231, 12023977331, 12024108427, 12024239503, 12024370619, - 12024501703, 12024632803, 12024763913, 12024894989, 12025026073, 12025157147, 12025288229, - 12025419347, 12025550419, 12025681519, 12025812599, 12025943729, 12026074811, 12026205923, - 12026337053, 12026468159, 12026599241, 12026730341, 12026861417, 12026992489, 12027123613, - 12027254717, 12027385813, 12027516899, 12027647971, 12027779053, 12027910127, 12028041203, - 12028172297, 12028303379, 12028434503, 12028565597, 12028696711, 12028827791, 12028958863, - 12029089939, 12029221067, 12029352151, 12029483251, 12029614351, 12029745449, 12029876533, - 12030007631, 12030138719, 12030269813, 12030400909, 12030531983, 12030663103, 12030794177, - 12030925259, 12031056347, 12031187447, 12031318531, 12031449613, 12031580707, 12031711781, - 12031842863, 12031973957, 12032105081, 12032236157, 12032367229, 12032498311, 12032629403, - 12032760503, 12032891593, 12033022667, 12033153751, 12033284827, 12033415903, 12033546989, - 12033678061, 12033809191, 12033940267, 12034071347, 12034202423, 12034333501, 12034464583, - 12034595663, 12034726771, 12034857859, 12034988969, 12035120057, 12035251141, 12035382221, - 12035513327, 12035644421, 12035775497, 12035906579, 12036037687, 12036168763, 12036299839, - 12036430993, 12036562079, 12036693233, 12036824309, 12036955409, 12037086491, 12037217587, - 12037348667, 12037479743, 12037610831, 12037741951, 12037873037, 12038004151, 12038135243, - 12038266319, 12038397407, 12038528479, 12038659681, 12038790767, 12038921887, 12039052969, - 12039184043, 12039315133, 12039446207, 12039577279, 12039708361, 12039839447, 12039970541, - 12040101613, 12040232747, 12040363837, 12040494923, 12040626001, 12040757189, 12040888273, - 12041019371, 12041150453, 12041281627, 12041412701, 12041543791, 12041674873, 12041805967, - 12041937041, 12042068123, 12042199199, 12042330323, 12042461399, 12042592543, 12042723683, - 12042854773, 12042985891, 12043116971, 12043248053, 12043379137, 12043510223, 12043641301, - 12043772437, 12043903513, 12044034593, 12044165687, 12044296769, 12044427851, 12044558963, - 12044690041, 12044821121, 12044952203, 12045083291, 12045214381, 12045345497, 12045476623, - 12045607699, 12045738781, 12045869903, 12046001017, 12046132097, 12046263211, 12046394291, - 12046525367, 12046656439, 12046787513, 12046918627, 12047049709, 12047180837, 12047311949, - 12047443021, 12047574151, 12047705249, 12047836391, 12047967467, 12048098539, 12048229643, - 12048360719, 12048491797, 12048622921, 12048754019, 12048885119, 12049016201, 12049147289, - 12049278379, 12049409459, 12049540561, 12049671649, 12049802773, 12049933859, 12050064991, - 12050196079, 12050327153, 12050458243, 12050589329, 12050720411, 12050851507, 12050982589, - 12051113687, 12051244763, 12051375851, 12051506963, 12051638059, 12051769133, 12051900233, - 12052031347, 12052162429, 12052293509, 12052424609, 12052555733, 12052686857, 12052817957, - 12052949033, 12053080133, 12053211211, 12053342299, 12053473379, 12053604461, 12053735543, - 12053866633, 12053997721, 12054128797, 12054259891, 12054390979, 12054522101, 12054653231, - 12054784307, 12054915391, 12055046473, 12055177553, 12055308649, 12055439729, 12055570801, - 12055701893, 12055832989, 12055964087, 12056095199, 12056226293, 12056357431, 12056488511, - 12056619593, 12056750677, 12056881751, 12057012829, 12057143909, 12057274993, 12057406087, - 12057537169, 12057668243, 12057799337, 12057930421, 12058061497, 12058192609, 12058323691, - 12058454767, 12058585919, 12058717031, 12058848103, 12058979183, 12059110277, 12059241367, - 12059372453, 12059503529, 12059634611, 12059765771, 12059896853, 12060027983, 12060159077, - 12060290149, 12060421249, 12060552341, 12060683419, 12060814559, 12060945661, 12061076737, - 12061207811, 12061338889, 12061469969, 12061601047, 12061732129, 12061863263, 12061994341, - 12062125417, 12062256541, 12062387627, 12062518739, 12062649817, 12062780893, 12062911981, - 12063043081, 12063174163, 12063305263, 12063436349, 12063567433, 12063698527, 12063829601, - 12063960683, 12064091759, 12064222837, 12064353911, 12064485061, 12064616147, 12064747309, - 12064878391, 12065009471, 12065140609, 12065271689, 12065402761, 12065533841, 12065664971, - 12065796077, 12065927261, 12066058369, 12066189449, 12066320549, 12066451627, 12066582721, - 12066713803, 12066844877, 12066975961, 12067107053, 12067238147, 12067369231, 12067500323, - 12067631447, 12067762541, 12067893637, 12068024713, 12068155793, 12068286871, 12068417953, - 12068549081, 12068680201, 12068811319, 12068942393, 12069073519, 12069204599, 12069335683, - 12069466757, 12069597863, 12069728939, 12069860027, 12069991099, 12070122173, 12070253269, - 12070384349, 12070515421, 12070646503, 12070777627, 12070908763, 12071039879, 12071170957, - 12071302031, 12071433131, 12071564227, 12071695309, 12071826401, 12071957489, 12072088579, - 12072219713, 12072350803, 12072481903, 12072612983, 12072744071, 12072875147, 12073006273, - 12073137347, 12073268423, 12073399571, 12073530649, 12073661723, 12073792813, 12073923893, - 12074054977, 12074186071, 12074317159, 12074448233, 12074579311, 12074710391, 12074841469, - 12074972573, 12075103679, 12075234751, 12075365831, 12075496913, 12075628009, 12075759103, - 12075890179, 12076021271, 12076152353, 12076283477, 12076414583, 12076545713, 12076676917, - 12076807997, 12076939093, 12077070169, 12077201291, 12077332363, 12077463443, 12077594519, - 12077725601, 12077856677, 12077987777, 12078118849, 12078249941, 12078381041, 12078512153, - 12078643261, 12078774341, 12078905413, 12079036513, 12079167587, 12079298663, 12079429771, - 12079560853, 12079691933, 12079823033, 12079954127, 12080085203, 12080216279, 12080347351, - 12080478469, 12080609543, 12080740619, 12080871703, 12081002783, 12081133913, 12081264989, - 12081396071, 12081527201, 12081658283, 12081789373, 12081920471, 12082051571, 12082182653, - 12082313741, 12082444853, 12082575949, 12082707023, 12082838099, 12082969237, 12083100311, - 12083231399, 12083362477, 12083493553, 12083624647, 12083755769, 12083886853, 12084017927, - 12084149041, 12084280127, 12084411203, 12084542303, 12084673423, 12084804499, 12084935581, - 12085066703, 12085197833, 12085328911, 12085459999, 12085591097, 12085722193, 12085853287, - 12085984367, 12086115491, 12086246569, 12086377643, 12086508761, 12086639849, 12086770921, - 12086902013, 12087033097, 12087164231, 12087295351, 12087426427, 12087557501, 12087688583, - 12087819659, 12087950737, 12088081847, 12088212949, 12088344031, 12088475111, 12088606193, - 12088737343, 12088868423, 12088999499, 12089130587, 12089261659, 12089392807, 12089523923, - 12089654999, 12089786117, 12089917219, 12090048317, 12090179441, 12090310517, 12090441637, - 12090572719, 12090703829, 12090834953, 12090966029, 12091097101, 12091228183, 12091359263, - 12091490339, 12091621439, 12091752529, 12091883611, 12092014699, 12092145829, 12092276909, - 12092408011, 12092539091, 12092670167, 12092801239, 12092932349, 12093063421, 12093194497, - 12093325571, 12093456647, 12093587741, 12093718837, 12093849967, 12093981047, 12094112143, - 12094243229, 12094374319, 12094505393, 12094636481, 12094767563, 12094898653, 12095029753, - 12095160829, 12095292019, 12095423111, 12095554231, 12095685383, 12095816477, 12095947571, - 12096078653, 12096209743, 12096340819, 12096471899, 12096602993, 12096734077, 12096865159, - 12096996277, 12097127369, 12097258469, 12097389541, 12097520641, 12097651729, 12097782821, - 12097913903, 12098044979, 12098176061, 12098307167, 12098438239, 12098569349, 12098700499, - 12098831617, 12098962697, 12099093793, 12099224881, 12099355969, 12099487051, 12099618137, - 12099749209, 12099880301, 12100011383, 12100142459, 12100273553, 12100404643, 12100535717, - 12100666801, 12100797899, 12100928989, 12101060077, 12101191171, 12101322251, 12101453323, - 12101584399, 12101715491, 12101846591, 12101977709, 12102108791, 12102239869, 12102370981, - 12102502063, 12102633163, 12102764237, 12102895313, 12103026389, 12103157467, 12103288541, - 12103419707, 12103550801, 12103681927, 12103813003, 12103944077, 12104075161, 12104206273, - 12104337379, 12104468461, 12104599571, 12104730679, 12104861779, 12104992901, 12105124061, - 12105255133, 12105386327, 12105517409, 12105648481, 12105779579, 12105910651, 12106041757, - 12106172833, 12106303907, 12106434979, 12106566067, 12106697227, 12106828309, 12106959401, - 12107090519, 12107221601, 12107352683, 12107483807, 12107614919, 12107746003, 12107877079, - 12108008201, 12108139331, 12108270403, 12108401483, 12108532567, 12108663649, 12108794729, - 12108925811, 12109056889, 12109188017, 12109319099, 12109450187, 12109581269, 12109712341, - 12109843423, 12109974511, 12110105597, 12110236681, 12110367757, 12110498833, 12110629907, - 12110760983, 12110892077, 12111023153, 12111154277, 12111285353, 12111416431, 12111547517, - 12111678589, 12111809663, 12111940739, 12112071817, 12112202911, 12112333993, 12112465093, - 12112596173, 12112727257, 12112858333, 12112989431, 12113120527, 12113251609, 12113382733, - 12113513851, 12113644931, 12113776007, 12113907079, 12114038159, 12114169231, 12114300329, - 12114431401, 12114562487, 12114693581, 12114824681, 12114955753, 12115086833, 12115217927, - 12115349003, 12115480079, 12115611163, 12115742239, 12115873331, 12116004451, 12116135527, - 12116266601, 12116397737, 12116528819, 12116659937, 12116791033, 12116922121, 12117053227, - 12117184309, 12117315383, 12117446459, 12117577601, 12117708751, 12117839831, 12117970903, - 12118101997, 12118233091, 12118364171, 12118495243, 12118626319, 12118757393, 12118888489, - 12119019587, 12119150669, 12119281747, 12119412859, 12119543951, 12119675059, 12119806207, - 12119937287, 12120068407, 12120199489, 12120330577, 12120461659, 12120592747, 12120723833, - 12120854917, 12120985991, 12121117091, 12121248221, 12121379317, 12121510417, 12121641503, - 12121772581, 12121903679, 12122034767, 12122165897, 12122296973, 12122428049, 12122559139, - 12122690233, 12122821307, 12122952409, 12123083507, 12123214637, 12123345721, 12123476819, - 12123607921, 12123738997, 12123870089, 12124001161, 12124132309, 12124263433, 12124394519, - 12124525591, 12124656673, 12124787749, 12124918831, 12125049913, 12125180989, 12125312071, - 12125443157, 12125574239, 12125705401, 12125836493, 12125967569, 12126098671, 12126229751, - 12126360847, 12126491941, 12126623029, 12126754103, 12126885181, 12127016267, 12127147339, - 12127278419, 12127409513, 12127540591, 12127671683, 12127802767, 12127933843, 12128064919, - 12128195993, 12128327093, 12128458201, 12128589353, 12128720459, 12128851549, 12128982623, - 12129113701, 12129244781, 12129375877, 12129506971, 12129638051, 12129769181, 12129900253, - 12130031339, 12130162411, 12130293493, 12130424567, 12130555639, 12130686721, 12130817821, - 12130948901, 12131079979, 12131211133, 12131342207, 12131473331, 12131604461, 12131735537, - 12131866609, 12131997719, 12132128807, 12132259889, 12132390971, 12132522071, 12132653149, - 12132784241, 12132915323, 12133046423, 12133177561, 12133308647, 12133439777, 12133570853, - 12133701947, 12133833053, 12133964173, 12134095271, 12134226343, 12134357479, 12134488579, - 12134619751, 12134750827, 12134881931, 12135013021, 12135144097, 12135275177, 12135406271, - 12135537343, 12135668437, 12135799541, 12135930647, 12136061759, 12136192837, 12136323917, - 12136455043, 12136586141, 12136717223, 12136848359, 12136979443, 12137110541, 12137241659, - 12137372761, 12137503837, 12137634917, 12137766013, 12137897089, 12138028163, 12138159251, - 12138290323, 12138421397, 12138552469, 12138683563, 12138814637, 12138945733, 12139076819, - 12139207891, 12139338979, 12139470071, 12139601161, 12139732243, 12139863341, 12139994429, - 12140125513, 12140256613, 12140387717, 12140518801, 12140649907, 12140781011, 12140912107, - 12141043183, 12141174263, 12141305339, 12141436453, 12141567527, 12141698623, 12141829723, - 12141960799, 12142091891, 12142222979, 12142354067, 12142485181, 12142616287, 12142747387, - 12142878491, 12143009579, 12143140657, 12143271737, 12143402819, 12143533933, 12143665013, - 12143796103, 12143927177, 12144058249, 12144189341, 12144320423, 12144451511, 12144582629, - 12144713717, 12144844799, 12144975881, 12145106959, 12145238033, 12145369133, 12145500317, - 12145631461, 12145762553, 12145893679, 12146024753, 12146155831, 12146286931, 12146418017, - 12146549099, 12146680171, 12146811293, 12146942371, 12147073447, 12147204527, 12147335633, - 12147466729, 12147597811, 12147728893, 12147859987, 12147991061, 12148122193, 12148253279, - 12148384363, 12148515439, 12148646593, 12148777681, 12148908757, 12149039839, 12149170949, - 12149302037, 12149433113, 12149564213, 12149695297, 12149826379, 12149957459, 12150088567, - 12150219647, 12150350741, 12150481831, 12150612907, 12150743981, 12150875063, 12151006169, - 12151137247, 12151268321, 12151399453, 12151530527, 12151661611, 12151792753, 12151923827, - 12152054909, 12152185987, 12152317061, 12152448163, 12152579239, 12152710373, 12152841457, - 12152972593, 12153103687, 12153234773, 12153365863, 12153496937, 12153628087, 12153759169, - 12153890251, 12154021349, 12154152433, 12154283563, 12154414637, 12154545713, 12154676797, - 12154807871, 12154938947, 12155070029, 12155201117, 12155332193, 12155463277, 12155594387, - 12155725481, 12155856563, 12155987663, 12156118763, 12156249893, 12156380989, 12156512183, - 12156643321, 12156774401, 12156905477, 12157036559, 12157167643, 12157298833, 12157429951, - 12157561049, 12157692149, 12157823239, 12157954331, 12158085409, 12158216491, 12158347573, - 12158478649, 12158609759, 12158740831, 12158871917, 12159003029, 12159134147, 12159265229, - 12159396349, 12159527453, 12159658541, 12159789617, 12159920693, 12160051781, 12160182863, - 12160313989, 12160445093, 12160576223, 12160707301, 12160838387, 12160969481, 12161100559, - 12161231671, 12161362747, 12161493821, 12161624897, 12161755973, 12161887079, 12162018151, - 12162149239, 12162280321, 12162411427, 12162542501, 12162673603, 12162804697, 12162935773, - 12163066849, 12163197931, 12163329023, 12163460137, 12163591283, 12163722383, 12163853509, - 12163984589, 12164115749, 12164246821, 12164377913, 12164508989, 12164640067, 12164771161, - 12164902237, 12165033341, 12165164467, 12165295553, 12165426631, 12165557741, 12165688813, - 12165819923, 12165951011, 12166082083, 12166213181, 12166344257, 12166475359, 12166606451, - 12166737551, 12166868677, 12166999763, 12167130841, 12167261923, 12167393087, 12167524183, - 12167655281, 12167786369, 12167917441, 12168048649, 12168179729, 12168310837, 12168441919, - 12168573019, 12168704099, 12168835187, 12168966263, 12169097377, 12169228451, 12169359551, - 12169490639, 12169621721, 12169752809, 12169883909, 12170015041, 12170146169, 12170277253, - 12170408353, 12170539439, 12170670521, 12170801603, 12170932687, 12171063761, 12171194839, - 12171325921, 12171457013, 12171588101, 12171719201, 12171850279, 12171981389, 12172112461, - 12172243579, 12172374671, 12172505831, 12172636933, 12172768063, 12172899173, 12173030263, - 12173161381, 12173292473, 12173423609, 12173554681, 12173685781, 12173816867, 12173947939, - 12174079051, 12174210151, 12174341227, 12174472301, 12174603383, 12174734459, 12174865531, - 12174996679, 12175127771, 12175258847, 12175389979, 12175521067, 12175652147, 12175783229, - 12175914313, 12176045423, 12176176499, 12176307589, 12176438741, 12176569819, 12176700923, - 12176832001, 12176963077, 12177094183, 12177225257, 12177356341, 12177487451, 12177618527, - 12177749609, 12177880699, 12178011793, 12178142917, 12178273997, 12178405069, 12178536151, - 12178667227, 12178798409, 12178929493, 12179060611, 12179191693, 12179322781, 12179453893, - 12179584973, 12179716063, 12179847139, 12179978227, 12180109307, 12180240379, 12180371491, - 12180502573, 12180633667, 12180764779, 12180895891, 12181026967, 12181158047, 12181289119, - 12181420213, 12181551299, 12181682399, 12181813477, 12181944553, 12182075629, 12182206711, - 12182337793, 12182468869, 12182599943, 12182731039, 12182862127, 12182993209, 12183124309, - 12183255431, 12183386519, 12183517609, 12183648707, 12183779813, 12183910889, 12184041971, - 12184173059, 12184304147, 12184435223, 12184566299, 12184697411, 12184828483, 12184959581, - 12185090711, 12185221813, 12185352887, 12185483963, 12185615053, 12185746187, 12185877293, - 12186008399, 12186139481, 12186270557, 12186401641, 12186532717, 12186663791, 12186794863, - 12186925957, 12187057049, 12187188121, 12187319213, 12187450321, 12187581409, 12187712491, - 12187843567, 12187974649, 12188105767, 12188236871, 12188367949, 12188499077, 12188630171, - 12188761253, 12188892341, 12189023417, 12189154529, 12189285601, 12189416719, 12189547819, - 12189678901, 12189809977, 12189941077, 12190072157, 12190203239, 12190334311, 12190465423, - 12190596499, 12190727611, 12190858711, 12190989791, 12191120899, 12191251997, 12191383073, - 12191514173, 12191645261, 12191776351, 12191907457, 12192038531, 12192169657, 12192300767, - 12192431873, 12192562961, 12192694039, 12192825133, 12192956231, 12193087321, 12193218407, - 12193349479, 12193480553, 12193611629, 12193742741, 12193873847, 12194004923, 12194136049, - 12194267143, 12194398253, 12194529329, 12194660407, 12194791493, 12194922629, 12195053719, - 12195184811, 12195315893, 12195447073, 12195578147, 12195709247, 12195840323, 12195971399, - 12196102487, 12196233563, 12196364639, 12196495721, 12196626803, 12196757887, 12196889009, - 12197020111, 12197151191, 12197282269, 12197413363, 12197544493, 12197675573, 12197806661, - 12197937749, 12198068873, 12198199961, 12198331069, 12198462151, 12198593257, 12198724379, - 12198855451, 12198986533, 12199117607, 12199248683, 12199379783, 12199510901, 12199641973, - 12199773083, 12199904173, 12200035297, 12200166373, 12200297449, 12200428531, 12200559703, - 12200690779, 12200821877, 12200952983, 12201084083, 12201215177, 12201346273, 12201477433, - 12201608519, 12201739619, 12201870713, 12202001857, 12202132933, 12202264021, 12202395169, - 12202526251, 12202657393, 12202788469, 12202919557, 12203050631, 12203181743, 12203312851, - 12203443963, 12203575039, 12203706127, 12203837207, 12203968289, 12204099403, 12204230501, - 12204361577, 12204492667, 12204623741, 12204754817, 12204885919, 12205017001, 12205148101, - 12205279187, 12205410317, 12205541393, 12205672481, 12205803557, 12205934633, 12206065717, - 12206196817, 12206327891, 12206458973, 12206590057, 12206721143, 12206852221, 12206983307, - 12207114427, 12207245507, 12207376583, 12207507667, 12207638741, 12207769831, 12207900937, - 12208032013, 12208163111, 12208294207, 12208425283, 12208556359, 12208687453, 12208818527, - 12208949609, 12209080691, 12209211779, 12209342881, 12209473957, 12209605033, 12209736131, - 12209867203, 12209998289, 12210129361, 12210260449, 12210391541, 12210522619, 12210653737, - 12210784823, 12210915911, 12211046983, 12211178071, 12211309199, 12211440281, 12211571357, - 12211702453, 12211833581, 12211964683, 12212095757, 12212226847, 12212357947, 12212489041, - 12212620117, 12212751203, 12212882281, 12213013357, 12213144481, 12213275567, 12213406649, - 12213537727, 12213668851, 12213799951, 12213931039, 12214062127, 12214193209, 12214324337, - 12214455467, 12214586561, 12214717639, 12214848713, 12214979807, 12215110889, 12215241967, - 12215373047, 12215504141, 12215635261, 12215766373, 12215897497, 12216028577, 12216159653, - 12216290759, 12216421873, 12216552961, 12216684037, 12216815119, 12216946199, 12217077317, - 12217208467, 12217339543, 12217470619, 12217601699, 12217732783, 12217863863, 12217994951, - 12218126023, 12218257147, 12218388227, 12218519317, 12218650393, 12218781511, 12218912603, - 12219043703, 12219174817, 12219305893, 12219436993, 12219568079, 12219699181, 12219830269, - 12219961357, 12220092433, 12220223531, 12220354667, 12220485829, 12220616909, 12220747999, - 12220879091, 12221010163, 12221141267, 12221272361, 12221403449, 12221534599, 12221665717, - 12221796803, 12221927891, 12222058967, 12222190051, 12222321143, 12222452233, 12222583319, - 12222714431, 12222845519, 12222976643, 12223107791, 12223238921, 12223369999, 12223501079, - 12223632151, 12223763257, 12223894343, 12224025427, 12224156513, 12224287613, 12224418709, - 12224549819, 12224680913, 12224811997, 12224943091, 12225074171, 12225205243, 12225336317, - 12225467393, 12225598529, 12225729611, 12225860747, 12225991819, 12226122893, 12226253981, - 12226385063, 12226516139, 12226647233, 12226778323, 12226909417, 12227040517, 12227171591, - 12227302669, 12227433749, 12227564831, 12227695913, 12227827009, 12227958089, 12228089161, - 12228220271, 12228351349, 12228482471, 12228613571, 12228744653, 12228875731, 12229006817, - 12229137923, 12229269023, 12229400101, 12229531219, 12229662299, 12229793413, 12229924501, - 12230055577, 12230186651, 12230317733, 12230448823, 12230579903, 12230710981, 12230842067, - 12230973203, 12231104279, 12231235369, 12231366449, 12231497539, 12231628621, 12231759719, - 12231890809, 12232021909, 12232153019, 12232284133, 12232415227, 12232546307, 12232677383, - 12232808459, 12232939541, 12233070649, 12233201723, 12233332861, 12233463941, 12233595019, - 12233726111, 12233857189, 12233988271, 12234119347, 12234250433, 12234381527, 12234512603, - 12234643697, 12234774791, 12234905863, 12235036937, 12235168027, 12235299103, 12235430201, - 12235561297, 12235692389, 12235823461, 12235954547, 12236085619, 12236216693, 12236347789, - 12236478889, 12236609969, 12236741113, 12236872211, 12237003341, 12237134419, 12237265493, - 12237396581, 12237527669, 12237658781, 12237789859, 12237920953, 12238052027, 12238183117, - 12238314197, 12238445273, 12238576349, 12238707433, 12238838527, 12238969607, 12239100703, - 12239231803, 12239362931, 12239494013, 12239625103, 12239756197, 12239887333, 12240018409, - 12240149497, 12240280579, 12240411683, 12240542791, 12240673901, 12240804991, 12240936073, - 12241067147, 12241198219, 12241329293, 12241460369, 12241591463, 12241722547, 12241853621, - 12241984709, 12242115797, 12242246879, 12242377991, 12242509067, 12242640149, 12242771237, - 12242902333, 12243033427, 12243164513, 12243295613, 12243426721, 12243557813, 12243688903, - 12243820003, 12243951091, 12244082219, 12244213327, 12244344487, 12244475561, 12244606651, - 12244737731, 12244868807, 12244999909, 12245131007, 12245262097, 12245393179, 12245524259, - 12245655347, 12245786419, 12245917501, 12246048599, 12246179677, 12246310753, 12246441847, - 12246572959, 12246704051, 12246835147, 12246966223, 12247097323, 12247228397, 12247359469, - 12247490543, 12247621621, 12247752721, 12247883839, 12248014921, 12248146003, 12248277089, - 12248408167, 12248539243, 12248670331, 12248801413, 12248932489, 12249063599, 12249194747, - 12249325819, 12249456893, 12249587989, 12249719089, 12249850177, 12249981269, 12250112351, - 12250243427, 12250374509, 12250505591, 12250636691, 12250767787, 12250898927, 12251030009, - 12251161151, 12251292269, 12251423351, 12251554459, 12251685539, 12251816639, 12251947727, - 12252078799, 12252209891, 12252340973, 12252472079, 12252603151, 12252734237, 12252865309, - 12252996389, 12253127461, 12253258559, 12253389647, 12253520731, 12253651819, 12253782949, - 12253914037, 12254045123, 12254176237, 12254307337, 12254438411, 12254569519, 12254700629, - 12254831749, 12254962829, 12255093901, 12255225029, 12255356129, 12255487249, 12255618329, - 12255749449, 12255880573, 12256011667, 12256142783, 12256273859, 12256404947, 12256536031, - 12256667107, 12256798189, 12256929271, 12257060353, 12257191451, 12257322523, 12257453651, - 12257584723, 12257715851, 12257846963, 12257978039, 12258109133, 12258240263, 12258371371, - 12258502463, 12258633539, 12258764611, 12258895699, 12259026781, 12259157863, 12259288939, - 12259420031, 12259551107, 12259682179, 12259813261, 12259944343, 12260075431, 12260206561, - 12260337643, 12260468723, 12260599829, 12260730907, 12260861999, 12260993081, 12261124153, - 12261255233, 12261386309, 12261517397, 12261648517, 12261779639, 12261910753, 12262041871, - 12262172963, 12262304039, 12262435111, 12262566187, 12262697267, 12262828339, 12262959413, - 12263090503, 12263221589, 12263352677, 12263483753, 12263614871, 12263745973, 12263877053, - 12264008149, 12264139229, 12264270323, 12264401399, 12264532507, 12264663581, 12264794681, - 12264925753, 12265056847, 12265187939, 12265319029, 12265450117, 12265581193, 12265712267, - 12265843391, 12265974467, 12266105563, 12266236663, 12266367749, 12266498821, 12266629897, - 12266761033, 12266892139, 12267023221, 12267154313, 12267285409, 12267416507, 12267547609, - 12267678733, 12267809821, 12267940933, 12268072009, 12268203083, 12268334167, 12268465267, - 12268596341, 12268727437, 12268858517, 12268989611, 12269120693, 12269251783, 12269382857, - 12269513947, 12269645023, 12269776171, 12269907253, 12270038351, 12270169433, 12270300517, - 12270431597, 12270562727, 12270693833, 12270824941, 12270956039, 12271087133, 12271218209, - 12271349327, 12271480399, 12271611479, 12271742597, 12271873703, 12272004803, 12272135879, - 12272266987, 12272398081, 12272529193, 12272660297, 12272791409, 12272922481, 12273053567, - 12273184681, 12273315757, 12273446851, 12273577931, 12273709003, 12273840119, 12273971233, - 12274102327, 12274233409, 12274364489, 12274495589, 12274626697, 12274757797, 12274888891, - 12275020031, 12275151113, 12275282203, 12275413313, 12275544409, 12275675491, 12275806601, - 12275937731, 12276068803, 12276199967, 12276331079, 12276462151, 12276593227, 12276724321, - 12276855397, 12276986479, 12277117591, 12277248671, 12277379759, 12277510879, 12277641967, - 12277773041, 12277904143, 12278035241, 12278166319, 12278297393, 12278428469, 12278559593, - 12278690689, 12278821771, 12278952859, 12279083941, 12279215021, 12279346097, 12279477169, - 12279608251, 12279739337, 12279870409, 12280001491, 12280132567, 12280263641, 12280394747, - 12280525819, 12280656959, 12280788059, 12280919141, 12281050231, 12281181317, 12281312437, - 12281443511, 12281574583, 12281705663, 12281836739, 12281967881, 12282098957, 12282230033, - 12282361171, 12282492283, 12282623389, 12282754487, 12282885583, 12283016663, 12283147739, - 12283278811, 12283409893, 12283540979, 12283672081, 12283803167, 12283934297, 12284065393, - 12284196469, 12284327579, 12284458657, 12284589773, 12284720857, 12284851949, 12284983021, - 12285114103, 12285245183, 12285376261, 12285507347, 12285638501, 12285769579, 12285900661, - 12286031741, 12286162843, 12286293949, 12286425029, 12286556101, 12286687207, 12286818301, - 12286949407, 12287080513, 12287211611, 12287342689, 12287473763, 12287604863, 12287735951, - 12287867029, 12287998139, 12288129211, 12288260329, 12288391403, 12288522509, 12288653593, - 12288784687, 12288915761, 12289046843, 12289177961, 12289309057, 12289440139, 12289571213, - 12289702297, 12289833389, 12289964473, 12290095561, 12290226647, 12290357719, 12290488799, - 12290619907, 12290751013, 12290882113, 12291013219, 12291144329, 12291275429, 12291406513, - 12291537593, 12291668737, 12291799813, 12291930919, 12292062011, 12292193087, 12292324169, - 12292455269, 12292586399, 12292717511, 12292848583, 12292979669, 12293110757, 12293241853, - 12293372929, 12293504011, 12293635091, 12293766169, 12293897249, 12294028339, 12294159421, - 12294290501, 12294421577, 12294552653, 12294683759, 12294814859, 12294945973, 12295077103, - 12295208179, 12295339297, 12295470409, 12295601497, 12295732577, 12295863677, 12295994807, - 12296125879, 12296256971, 12296388043, 12296519173, 12296650271, 12296781373, 12296912449, - 12297043537, 12297174613, 12297305693, 12297436771, 12297567857, 12297698929, 12297830011, - 12297961127, 12298092217, 12298223293, 12298354391, 12298485469, 12298616563, 12298747639, - 12298878719, 12299009813, 12299140891, 12299271991, 12299403089, 12299534171, 12299665283, - 12299796367, 12299927447, 12300058523, 12300189607, 12300320687, 12300451763, 12300582859, - 12300713939, 12300845047, 12300976133, 12301107229, 12301238311, 12301369403, 12301500479, - 12301631557, 12301762633, 12301893761, 12302024851, 12302155951, 12302287033, 12302418109, - 12302549213, 12302680303, 12302811377, 12302942479, 12303073567, 12303204649, 12303335767, - 12303466841, 12303598039, 12303729157, 12303860237, 12303991321, 12304122401, 12304253477, - 12304384601, 12304515679, 12304646773, 12304777861, 12304908977, 12305040049, 12305171159, - 12305302241, 12305433317, 12305564389, 12305695481, 12305826581, 12305957659, 12306088733, - 12306219817, 12306350989, 12306482093, 12306613171, 12306744269, 12306875341, 12307006427, - 12307137517, 12307268627, 12307399703, 12307530799, 12307661879, 12307792979, 12307924051, - 12308055127, 12308186207, 12308317289, 12308448377, 12308579473, 12308710597, 12308841697, - 12308972777, 12309103943, 12309235019, 12309366101, 12309497191, 12309628271, 12309759379, - 12309890477, 12310021621, 12310152733, 12310283837, 12310414937, 12310546021, 12310677121, - 12310808197, 12310939271, 12311070361, 12311201443, 12311332519, 12311463607, 12311594693, - 12311725781, 12311856883, 12311987957, 12312119033, 12312250123, 12312381217, 12312512299, - 12312643391, 12312774469, 12312905567, 12313036649, 12313167733, 12313298831, 12313429939, - 12313561049, 12313692133, 12313823209, 12313954307, 12314085431, 12314216513, 12314347657, - 12314478767, 12314609843, 12314740927, 12314872013, 12315003119, 12315134233, 12315265331, - 12315396409, 12315527509, 12315658631, 12315789769, 12315920849, 12316051933, 12316183027, - 12316314323, 12316445399, 12316576487, 12316707563, 12316838669, 12316969747, 12317100841, - 12317231921, 12317363017, 12317494099, 12317625181, 12317756257, 12317887331, 12318018403, - 12318149477, 12318280561, 12318411647, 12318542723, 12318673823, 12318804917, 12318935989, - 12319067063, 12319198163, 12319329287, 12319460371, 12319591463, 12319722577, 12319853713, - 12319984793, 12320115911, 12320246993, 12320378093, 12320509181, 12320640257, 12320771341, - 12320902463, 12321033563, 12321164677, 12321295817, 12321426917, 12321558013, 12321689089, - 12321820163, 12321951287, 12322082389, 12322213471, 12322344571, 12322475657, 12322606729, - 12322737803, 12322868917, 12323000003, 12323131081, 12323262167, 12323393239, 12323524319, - 12323655451, 12323786551, 12323917643, 12324048739, 12324179827, 12324310937, 12324442019, - 12324573101, 12324704219, 12324835291, 12324966371, 12325097471, 12325228577, 12325359677, - 12325490753, 12325621849, 12325752973, 12325884049, 12326015147, 12326146243, 12326277331, - 12326408407, 12326539493, 12326670571, 12326801647, 12326932729, 12327063839, 12327194917, - 12327326029, 12327457123, 12327588263, 12327719353, 12327850429, 12327981503, 12328112597, - 12328243673, 12328374749, 12328505821, 12328636907, 12328767991, 12328899083, 12329030227, - 12329161309, 12329292383, 12329423467, 12329554541, 12329685629, 12329816749, 12329947849, - 12330078931, 12330210017, 12330341161, 12330472241, 12330603359, 12330734459, 12330865583, - 12330996673, 12331127773, 12331258861, 12331389949, 12331521053, 12331652149, 12331783231, - 12331914307, 12332045413, 12332176487, 12332307649, 12332438731, 12332569877, 12332700967, - 12332832067, 12332963233, 12333094369, 12333225481, 12333356561, 12333487643, 12333618721, - 12333749797, 12333880901, 12334011973, 12334143071, 12334274189, 12334405261, 12334536341, - 12334667489, 12334798561, 12334929643, 12335060729, 12335191849, 12335322977, 12335454059, - 12335585159, 12335716231, 12335847311, 12335978383, 12336109531, 12336240607, 12336371681, - 12336502781, 12336633857, 12336764939, 12336896027, 12337027117, 12337158193, 12337289273, - 12337420349, 12337551427, 12337682531, 12337813613, 12337944691, 12338075777, 12338206891, - 12338338003, 12338469089, 12338600179, 12338731261, 12338862373, 12338993449, 12339124541, - 12339255613, 12339386737, 12339517819, 12339648899, 12339779981, 12339911071, 12340042159, - 12340173253, 12340304351, 12340435451, 12340566541, 12340697623, 12340828699, 12340959791, - 12341090873, 12341221951, 12341353109, 12341484247, 12341615323, 12341746447, 12341877529, - 12342008629, 12342139729, 12342270803, 12342401963, 12342533039, 12342664121, 12342795203, - 12342926339, 12343057411, 12343188523, 12343319609, 12343450697, 12343581793, 12343712873, - 12343843949, 12343975037, 12344106109, 12344237197, 12344368297, 12344499379, 12344630479, - 12344761553, 12344892641, 12345023759, 12345154841, 12345285917, 12345416989, 12345548063, - 12345679187, 12345810259, 12345941339, 12346072433, 12346203509, 12346334593, 12346465667, - 12346596767, 12346727843, 12346858949, 12346990043, 12347121121, 12347252263, 12347383351, - 12347514451, 12347645543, 12347776621, 12347907731, 12348038861, 12348169961, 12348301037, - 12348432121, 12348563197, 12348694279, 12348825361, 12348956453, 12349087567, 12349218649, - 12349349731, 12349480811, 12349611899, 12349742971, 12349874107, 12350005211, 12350136289, - 12350267429, 12350398513, 12350529619, 12350660711, 12350791801, 12350922923, 12351054017, - 12351185101, 12351316177, 12351447271, 12351578377, 12351709457, 12351840533, 12351971617, - 12352102703, 12352233781, 12352364861, 12352495951, 12352627117, 12352758217, 12352889291, - 12353020417, 12353151523, 12353282609, 12353413691, 12353544769, 12353675857, 12353806957, - 12353938033, 12354069109, 12354200207, 12354331313, 12354462389, 12354593467, 12354724621, - 12354855701, 12354986779, 12355117891, 12355248973, 12355380077, 12355511153, 12355642237, - 12355773341, 12355904413, 12356035519, 12356166689, 12356297813, 12356428927, 12356560003, - 12356691089, 12356822167, 12356953289, 12357084371, 12357215447, 12357346523, 12357477611, - 12357608687, 12357739769, 12357870953, 12358002031, 12358133129, 12358264231, 12358395319, - 12358526443, 12358657517, 12358788593, 12358919681, 12359050777, 12359181889, 12359312981, - 12359444089, 12359575169, 12359706241, 12359837317, 12359968399, 12360099487, 12360230587, - 12360361661, 12360492751, 12360623879, 12360754951, 12360886033, 12361017107, 12361148213, - 12361279373, 12361410449, 12361541561, 12361672639, 12361803733, 12361934843, 12362065927, - 12362197009, 12362328091, 12362459167, 12362590249, 12362721361, 12362852441, 12362983531, - 12363114623, 12363245773, 12363376853, 12363507973, 12363639061, 12363770143, 12363901261, - 12364032349, 12364163479, 12364294597, 12364425673, 12364556759, 12364687939, 12364819057, - 12364950133, 12365081237, 12365212313, 12365343391, 12365474479, 12365605579, 12365736667, - 12365867753, 12365998831, 12366129943, 12366261041, 12366392119, 12366523219, 12366654331, - 12366785413, 12366916489, 12367047619, 12367178737, 12367309837, 12367440931, 12367572013, - 12367703123, 12367834211, 12367965289, 12368096431, 12368227591, 12368358689, 12368489773, - 12368620867, 12368751943, 12368883031, 12369014131, 12369145207, 12369276299, 12369407387, - 12369538463, 12369669547, 12369800659, 12369931757, 12370062847, 12370193929, 12370325053, - 12370456139, 12370587211, 12370718293, 12370849369, 12370980449, 12371111521, 12371242607, - 12371373683, 12371504797, 12371635901, 12371767003, 12371898083, 12372029171, 12372160247, - 12372291319, 12372422411, 12372553483, 12372684557, 12372815633, 12372946709, 12373077781, - 12373208867, 12373339963, 12373471039, 12373602139, 12373733219, 12373864337, 12373995457, - 12374126533, 12374257723, 12374388797, 12374519893, 12374650979, 12374782093, 12374913217, - 12375044303, 12375175391, 12375306467, 12375437549, 12375568627, 12375699731, 12375830807, - 12375961891, 12376093019, 12376224101, 12376355203, 12376486289, 12376617403, 12376748479, - 12376879553, 12377010629, 12377141719, 12377272799, 12377403881, 12377534963, 12377666053, - 12377797199, 12377928287, 12378059359, 12378190453, 12378321559, 12378452659, 12378583741, - 12378714841, 12378845923, 12378977003, 12379108099, 12379239181, 12379370303, 12379501391, - 12379632479, 12379763569, 12379894643, 12380025737, 12380156827, 12380287903, 12380418989, - 12380550163, 12380681237, 12380812321, 12380943403, 12381074477, 12381205579, 12381336707, - 12381467821, 12381598909, 12381729989, 12381861061, 12381992153, 12382123231, 12382254337, - 12382385417, 12382516501, 12382647581, 12382778657, 12382909733, 12383040853, 12383171947, - 12383303033, 12383434111, 12383565197, 12383696279, 12383827367, 12383958439, 12384089513, - 12384220609, 12384351701, 12384482801, 12384613907, 12384744989, 12384876121, 12385007203, - 12385138291, 12385269373, 12385400491, 12385531573, 12385662659, 12385793741, 12385924823, - 12386055907, 12386187041, 12386318117, 12386449213, 12386580289, 12386711413, 12386842519, - 12386973661, 12387104761, 12387235837, 12387366967, 12387498047, 12387629131, 12387760207, - 12387891319, 12388022513, 12388153597, 12388284751, 12388415857, 12388546939, 12388678021, - 12388809107, 12388940191, 12389071297, 12389202401, 12389333549, 12389464631, 12389595761, - 12389726851, 12389857939, 12389989013, 12390120161, 12390251243, 12390382387, 12390513463, - 12390644551, 12390775697, 12390906823, 12391037927, 12391169027, 12391300133, 12391431277, - 12391562353, 12391693427, 12391824589, 12391955669, 12392086757, 12392217833, 12392348909, - 12392479999, 12392611079, 12392742163, 12392873261, 12393004343, 12393135421, 12393266497, - 12393397571, 12393528643, 12393659723, 12393790859, 12393921937, 12394053029, 12394184107, - 12394315223, 12394446313, 12394577389, 12394708481, 12394839571, 12394970647, 12395101739, - 12395232821, 12395363921, 12395495003, 12395626079, 12395757191, 12395888347, 12396019423, - 12396150517, 12396281657, 12396412753, 12396543829, 12396674957, 12396806029, 12396937103, - 12397068193, 12397199273, 12397330411, 12397461491, 12397592579, 12397723703, 12397854779, - 12397985861, 12398116993, 12398248073, 12398379151, 12398510231, 12398641351, 12398772427, - 12398903501, 12399034579, 12399165677, 12399296759, 12399427837, 12399558917, 12399690041, - 12399821123, 12399952249, 12400083323, 12400214401, 12400345493, 12400476577, 12400607651, - 12400738733, 12400869809, 12401000903, 12401131979, 12401263087, 12401394179, 12401525267, - 12401656339, 12401787421, 12401918537, 12402049609, 12402180683, 12402311791, 12402442879, - 12402573959, 12402705053, 12402836137, 12402967229, 12403098311, 12403229407, 12403360511, - 12403491629, 12403622713, 12403753919, 12403885019, 12404016101, 12404147183, 12404278273, - 12404409371, 12404540479, 12404671577, 12404802667, 12404933753, 12405064871, 12405195983, - 12405327059, 12405458179, 12405589303, 12405720377, 12405851509, 12405982609, 12406113689, - 12406244777, 12406375937, 12406507031, 12406638121, 12406769209, 12406900313, 12407031433, - 12407162531, 12407293631, 12407424703, 12407555813, 12407686897, 12407817977, 12407949049, - 12408080161, 12408211247, 12408342319, 12408473419, 12408604499, 12408735571, 12408866671, - 12408997753, 12409128829, 12409259923, 12409391003, 12409522087, 12409653163, 12409784237, - 12409915321, 12410046401, 12410177501, 12410308577, 12410439649, 12410570749, 12410701837, - 12410832911, 12410964001, 12411095131, 12411226237, 12411357311, 12411488393, 12411619483, - 12411750563, 12411881641, 12412012729, 12412143803, 12412274879, 12412405961, 12412537057, - 12412668209, 12412799281, 12412930363, 12413061467, 12413192551, 12413323651, 12413454797, - 12413585897, 12413717047, 12413848123, 12413979203, 12414110287, 12414241363, 12414372449, - 12414503527, 12414634601, 12414765673, 12414896749, 12415027831, 12415158979, 12415290067, - 12415421141, 12415552229, 12415683317, 12415814429, 12415945571, 12416076653, 12416207747, - 12416338849, 12416469931, 12416601013, 12416732087, 12416863159, 12416994251, 12417125323, - 12417256451, 12417387529, 12417518621, 12417649697, 12417780853, 12417911929, 12418043003, - 12418174123, 12418305233, 12418436311, 12418567391, 12418698491, 12418829573, 12418960651, - 12419091743, 12419222839, 12419353939, 12419485021, 12419616109, 12419747201, 12419878277, - 12420009377, 12420140459, 12420271541, 12420402649, 12420533731, 12420664813, 12420795929, - 12420927017, 12421058099, 12421189211, 12421320287, 12421451363, 12421582463, 12421713607, - 12421844683, 12421975771, 12422106859, 12422237941, 12422369077, 12422500159, 12422631233, - 12422762333, 12422893409, 12423024491, 12423155599, 12423286717, 12423417817, 12423548903, - 12423679979, 12423811097, 12423942173, 12424073261, 12424204337, 12424335409, 12424466521, - 12424597597, 12424728721, 12424859833, 12424990909, 12425122009, 12425253107, 12425384221, - 12425515327, 12425646407, 12425777489, 12425908571, 12426039649, 12426170747, 12426301837, - 12426432937, 12426564083, 12426695159, 12426826249, 12426957341, 12427088477, 12427219549, - 12427350629, 12427481701, 12427612823, 12427743907, 12427875011, 12428006119, 12428137217, - 12428268289, 12428399381, 12428530501, 12428661589, 12428792669, 12428923753, 12429054863, - 12429185941, 12429317053, 12429448151, 12429579299, 12429710407, 12429841507, 12429972587, - 12430103687, 12430234769, 12430365851, 12430497017, 12430628101, 12430759181, 12430890271, - 12431021357, 12431152469, 12431283581, 12431414689, 12431545769, 12431676857, 12431807951, - 12431939033, 12432070159, 12432201251, 12432332327, 12432463399, 12432594511, 12432725611, - 12432856817, 12432987899, 12433118981, 12433250131, 12433381211, 12433512313, 12433643441, - 12433774537, 12433905613, 12434036707, 12434167783, 12434298857, 12434429929, 12434561011, - 12434692103, 12434823253, 12434954333, 12435085441, 12435216529, 12435347651, 12435478729, - 12435609827, 12435740903, 12435872041, 12436003133, 12436134209, 12436265287, 12436396397, - 12436527469, 12436658569, 12436789661, 12436920739, 12437051831, 12437182903, 12437313991, - 12437445071, 12437576143, 12437707231, 12437838323, 12437969447, 12438100529, 12438231607, - 12438362687, 12438493801, 12438624881, 12438755969, 12438887057, 12439018177, 12439149259, - 12439280353, 12439411429, 12439542509, 12439673599, 12439804687, 12439935839, 12440066929, - 12440198009, 12440329147, 12440460257, 12440591341, 12440722423, 12440853499, 12440984593, - 12441115699, 12441246791, 12441377911, 12441508987, 12441640063, 12441771149, 12441902227, - 12442033313, 12442164401, 12442295473, 12442426547, 12442557623, 12442688719, 12442819811, - 12442950889, 12443081977, 12443213089, 12443344211, 12443475313, 12443606437, 12443737561, - 12443868643, 12443999723, 12444130817, 12444261901, 12444392977, 12444524087, 12444655183, - 12444786257, 12444917347, 12445048453, 12445179529, 12445310627, 12445441733, 12445572871, - 12445703971, 12445835089, 12445966189, 12446097263, 12446228351, 12446359439, 12446490559, - 12446621633, 12446752709, 12446883791, 12447014897, 12447145979, 12447277091, 12447408163, - 12447539261, 12447670337, 12447801409, 12447932521, 12448063597, 12448194727, 12448325801, - 12448456883, 12448587967, 12448719077, 12448850159, 12448981243, 12449112317, 12449243431, - 12449374507, 12449505583, 12449636659, 12449767783, 12449898887, 12450030059, 12450161173, - 12450292249, 12450423367, 12450554461, 12450685547, 12450816629, 12450947759, 12451078949, - 12451210021, 12451341103, 12451472191, 12451603319, 12451734413, 12451865501, 12451996573, - 12452127707, 12452258783, 12452389913, 12452521087, 12452652161, 12452783243, 12452914319, - 12453045421, 12453176497, 12453307583, 12453438667, 12453569773, 12453700859, 12453831931, - 12453963017, 12454094137, 12454225237, 12454356323, 12454487401, 12454618481, 12454749553, - 12454880639, 12455011747, 12455142841, 12455273933, 12455405023, 12455536099, 12455667173, - 12455798269, 12455929349, 12456060427, 12456191519, 12456322607, 12456453703, 12456584797, - 12456715897, 12456846971, 12456978049, 12457109131, 12457240217, 12457371301, 12457502383, - 12457633459, 12457764547, 12457895627, 12458026703, 12458157827, 12458288903, 12458419991, - 12458551109, 12458682191, 12458813281, 12458944363, 12459075437, 12459206521, 12459337607, - 12459468683, 12459599783, 12459730873, 12459861949, 12459993023, 12460124099, 12460255189, - 12460386269, 12460517347, 12460648451, 12460779533, 12460910611, 12461041721, 12461172793, - 12461303999, 12461435089, 12461566171, 12461697247, 12461828333, 12461959423, 12462090539, - 12462221647, 12462352817, 12462483889, 12462614971, 12462746071, 12462877159, 12463008277, - 12463139363, 12463270447, 12463401527, 12463532617, 12463663697, 12463794779, 12463925861, - 12464056939, 12464188057, 12464319163, 12464450263, 12464581351, 12464712427, 12464843509, - 12464974589, 12465105671, 12465236747, 12465367823, 12465498943, 12465630031, 12465761111, - 12465892193, 12466023281, 12466154357, 12466285457, 12466416533, 12466547609, 12466678699, - 12466809779, 12466940869, 12467071943, 12467203027, 12467334167, 12467465251, 12467596333, - 12467727413, 12467858509, 12467989609, 12468120683, 12468251771, 12468382897, 12468513971, - 12468645103, 12468776183, 12468907271, 12469038343, 12469169417, 12469300489, 12469431589, - 12469562663, 12469693739, 12469824847, 12469955921, 12470087009, 12470218081, 12470349163, - 12470480263, 12470611357, 12470742443, 12470873521, 12471004621, 12471135709, 12471266849, - 12471397951, 12471529043, 12471660119, 12471791221, 12471922327, 12472053401, 12472184503, - 12472315589, 12472446683, 12472577783, 12472708907, 12472839979, 12472971053, 12473102129, - 12473233229, 12473364307, 12473495381, 12473626453, 12473757533, 12473888611, 12474019687, - 12474150779, 12474281873, 12474412981, 12474544067, 12474675139, 12474806221, 12474937339, - 12475068439, 12475199533, 12475330607, 12475461709, 12475592797, 12475723877, 12475854959, - 12475986067, 12476117141, 12476248219, 12476379301, 12476510411, 12476641483, 12476772569, - 12476903689, 12477034769, 12477165893, 12477296983, 12477428059, 12477559163, 12477690271, - 12477821383, 12477952469, 12478083557, 12478214653, 12478345727, 12478476859, 12478607957, - 12478739057, 12478870147, 12479001247, 12479132327, 12479263399, 12479394481, 12479525567, - 12479656643, 12479787721, 12479918821, 12480049943, 12480181061, 12480312133, 12480443279, - 12480574399, 12480705481, 12480836573, 12480967649, 12481098769, 12481229843, 12481360919, - 12481492007, 12481623101, 12481754191, 12481885267, 12482016377, 12482147453, 12482278531, - 12482409707, 12482540809, 12482671891, 12482802971, 12482934091, 12483065207, 12483196279, - 12483327391, 12483458467, 12483589553, 12483720671, 12483851797, 12483982871, 12484113947, - 12484245019, 12484376101, 12484507177, 12484638311, 12484769443, 12484900517, 12485031607, - 12485162699, 12485293781, 12485424863, 12485555947, 12485687021, 12485818097, 12485949187, - 12486080279, 12486211363, 12486342443, 12486473521, 12486604621, 12486735727, 12486866827, - 12486997909, 12487128989, 12487260083, 12487391159, 12487522241, 12487653323, 12487784399, - 12487915493, 12488046569, 12488177641, 12488308717, 12488439793, 12488570879, 12488701963, - 12488833051, 12488964139, 12489095221, 12489226361, 12489357473, 12489488563, 12489619651, - 12489750727, 12489881809, 12490012903, 12490143977, 12490275073, 12490406147, 12490537237, - 12490668353, 12490799441, 12490930531, 12491061617, 12491192699, 12491323777, 12491454907, - 12491585983, 12491717083, 12491848169, 12491979251, 12492110333, 12492241441, 12492372523, - 12492503633, 12492634747, 12492765821, 12492896917, 12493028057, 12493159141, 12493290217, - 12493421309, 12493552411, 12493683493, 12493814569, 12493945687, 12494076797, 12494207879, - 12494338951, 12494470033, 12494601127, 12494732207, 12494863291, 12494994389, 12495125479, - 12495256567, 12495387649, 12495518731, 12495649807, 12495780907, 12495912007, 12496043081, - 12496174157, 12496305319, 12496436411, 12496567487, 12496698559, 12496829633, 12496960727, - 12497091821, 12497222911, 12497353993, 12497485067, 12497616203, 12497747333, 12497878409, - 12498009481, 12498140573, 12498271651, 12498402733, 12498533833, 12498664921, 12498795997, - 12498927071, 12499058161, 12499189301, 12499320377, 12499451449, 12499582531, 12499713613, - 12499844689, 12499975903, 12500106977, 12500238059, 12500369179, 12500500261, 12500631347, - 12500762423, 12500893511, 12501024587, 12501155663, 12501286741, 12501417829, 12501548947, - 12501680039, 12501811123, 12501942197, 12502073279, 12502204381, 12502335463, 12502466549, - 12502597643, 12502728757, 12502859851, 12502990943, 12503122019, 12503253101, 12503384221, - 12503515309, 12503646391, 12503777467, 12503908541, 12504039643, 12504170719, 12504301807, - 12504432881, 12504563963, 12504695069, 12504826141, 12504957221, 12505088363, 12505219459, - 12505350551, 12505481663, 12505612747, 12505743841, 12505874929, 12506006011, 12506137099, - 12506268197, 12506399303, 12506530427, 12506661511, 12506792587, 12506923661, 12507054757, - 12507185851, 12507316981, 12507448067, 12507579143, 12507710221, 12507841337, 12507972409, - 12508103539, 12508234621, 12508365721, 12508496813, 12508627907, 12508758991, 12508890089, - 12509021171, 12509152247, 12509283329, 12509414417, 12509545511, 12509676587, 12509807659, - 12509938757, 12510069829, 12510200933, 12510332027, 12510463109, 12510594181, 12510725287, - 12510856363, 12510987539, 12511118623, 12511249703, 12511380781, 12511511863, 12511642987, - 12511774063, 12511905143, 12512036219, 12512167307, 12512298431, 12512429507, 12512560591, - 12512691671, 12512822743, 12512953829, 12513084901, 12513216071, 12513347167, 12513478273, - 12513609377, 12513740453, 12513871529, 12514002647, 12514133729, 12514264831, 12514395911, - 12514527001, 12514658081, 12514789171, 12514920349, 12515051441, 12515182517, 12515313607, - 12515444701, 12515575801, 12515706877, 12515837959, 12515969033, 12516100117, 12516231193, - 12516362273, 12516493393, 12516624467, 12516755557, 12516886651, 12517017757, 12517148843, - 12517279937, 12517411013, 12517542091, 12517673191, 12517804279, 12517935383, 12518066461, - 12518197543, 12518328623, 12518459717, 12518590801, 12518721877, 12518852963, 12518984053, - 12519115127, 12519246239, 12519377317, 12519508447, 12519639533, 12519770621, 12519901727, - 12520032803, 12520163899, 12520294979, 12520426063, 12520557143, 12520688231, 12520819331, - 12520950433, 12521081543, 12521212619, 12521343721, 12521474809, 12521605903, 12521736977, - 12521868071, 12521999173, 12522130259, 12522261373, 12522392483, 12522523567, 12522654647, - 12522785789, 12522916921, 12523048001, 12523179169, 12523310243, 12523441331, 12523572409, - 12523703513, 12523834607, 12523965697, 12524096771, 12524227889, 12524358971, 12524490089, - 12524621177, 12524752297, 12524883389, 12525014483, 12525145583, 12525276689, 12525407767, - 12525538859, 12525669943, 12525801047, 12525932173, 12526063261, 12526194347, 12526325443, - 12526456531, 12526587637, 12526718723, 12526849813, 12526980899, 12527111983, 12527243107, - 12527374187, 12527505259, 12527636333, 12527767513, 12527898599, 12528029687, 12528160759, - 12528291833, 12528422923, 12528554009, 12528685121, 12528816193, 12528947293, 12529078409, - 12529209481, 12529340567, 12529471673, 12529602749, 12529733849, 12529864927, 12529996001, - 12530127079, 12530258189, 12530389271, 12530520371, 12530651477, 12530782577, 12530913743, - 12531044839, 12531175913, 12531307003, 12531438077, 12531569173, 12531700267, 12531831341, - 12531962447, 12532093523, 12532224637, 12532355861, 12532486937, 12532618073, 12532749149, - 12532880221, 12533011319, 12533142397, 12533273491, 12533404579, 12533535667, 12533666741, - 12533797817, 12533928893, 12534059977, 12534191051, 12534322127, 12534453223, 12534584317, - 12534715399, 12534846473, 12534977551, 12535108667, 12535239781, 12535370891, 12535501969, - 12535633051, 12535764127, 12535895209, 12536026291, 12536157367, 12536288473, 12536419547, - 12536550643, 12536681747, 12536812831, 12536943929, 12537075013, 12537206117, 12537337193, - 12537468299, 12537599381, 12537730453, 12537861571, 12537992657, 12538123751, 12538254829, - 12538385927, 12538517003, 12538648079, 12538779173, 12538910273, 12539041391, 12539172467, - 12539303597, 12539434697, 12539565769, 12539696849, 12539827939, 12539959013, 12540090091, - 12540221167, 12540352249, 12540483349, 12540614431, 12540745523, 12540876631, 12541007737, - 12541138823, 12541269899, 12541401053, 12541532131, 12541663229, 12541794301, 12541925447, - 12542056523, 12542187611, 12542318683, 12542449757, 12542580847, 12542711947, 12542843021, - 12542974109, 12543105181, 12543236261, 12543367387, 12543498493, 12543629573, 12543760679, - 12543891803, 12544022879, 12544153967, 12544285049, 12544416121, 12544547207, 12544678309, - 12544809397, 12544940479, 12545071577, 12545202697, 12545333803, 12545464949, 12545596043, - 12545727127, 12545858209, 12545989301, 12546120403, 12546251479, 12546382559, 12546513643, - 12546644753, 12546775841, 12546906973, 12547038103, 12547169177, 12547300273, 12547431353, - 12547562429, 12547693507, 12547824581, 12547955677, 12548086751, 12548217839, 12548348921, - 12548479997, 12548611079, 12548742161, 12548873251, 12549004327, 12549135413, 12549266491, - 12549397577, 12549528661, 12549659761, 12549790889, 12549922003, 12550053077, 12550184161, - 12550315273, 12550446347, 12550577419, 12550708493, 12550839641, 12550970723, 12551101811, - 12551232887, 12551363963, 12551495041, 12551626117, 12551757193, 12551888309, 12552019397, - 12552150473, 12552281557, 12552412637, 12552543709, 12552674801, 12552805873, 12552936973, - 12553068091, 12553199171, 12553330249, 12553461331, 12553592411, 12553723487, 12553854569, - 12553985657, 12554116781, 12554247869, 12554378957, 12554510063, 12554641139, 12554772233, - 12554903351, 12555034439, 12555165521, 12555296599, 12555427691, 12555558767, 12555689849, - 12555820961, 12555952037, 12556083121, 12556214221, 12556345303, 12556476389, 12556607477, - 12556738567, 12556869659, 12557000737, 12557131813, 12557262899, 12557394043, 12557525143, - 12557656247, 12557787349, 12557918441, 12558049529, 12558180637, 12558311737, 12558442843, - 12558573971, 12558705043, 12558836117, 12558967189, 12559098269, 12559229341, 12559360459, - 12559491547, 12559622623, 12559753699, 12559884829, 12560015917, 12560146997, 12560278099, - 12560409179, 12560540269, 12560671349, 12560802431, 12560933513, 12561064627, 12561195709, - 12561326839, 12561457919, 12561589009, 12561720091, 12561851177, 12561982253, 12562113373, - 12562244501, 12562375621, 12562506703, 12562637783, 12562768909, 12562899983, 12563031067, - 12563162167, 12563293277, 12563424361, 12563555437, 12563686529, 12563817601, 12563948687, - 12564079769, 12564210877, 12564341981, 12564473057, 12564604139, 12564735223, 12564866329, - 12564997409, 12565128481, 12565259563, 12565390637, 12565521719, 12565652893, 12565783973, - 12565915111, 12566046191, 12566177279, 12566308351, 12566439437, 12566570519, 12566701607, - 12566832683, 12566963777, 12567094849, 12567225929, 12567357001, 12567488081, 12567619187, - 12567750281, 12567881377, 12568012493, 12568143671, 12568274773, 12568405921, 12568537001, - 12568668103, 12568799183, 12568930259, 12569061331, 12569192423, 12569323531, 12569454607, - 12569585683, 12569716759, 12569847877, 12569978963, 12570110057, 12570241153, 12570372233, - 12570503327, 12570634421, 12570765497, 12570896593, 12571027669, 12571158751, 12571289851, - 12571420931, 12571552033, 12571683109, 12571814219, 12571945297, 12572076373, 12572207471, - 12572338543, 12572469617, 12572600701, 12572731807, 12572862881, 12572993959, 12573125041, - 12573256127, 12573387259, 12573518341, 12573649433, 12573780529, 12573911627, 12574042727, - 12574173809, 12574304891, 12574435963, 12574567051, 12574698133, 12574829219, 12574960297, - 12575091391, 12575222467, 12575353561, 12575484637, 12575615737, 12575746811, 12575877893, - 12576008987, 12576140063, 12576271193, 12576402283, 12576533393, 12576664511, 12576795601, - 12576926701, 12577057783, 12577188913, 12577320071, 12577451143, 12577582249, 12577713331, - 12577844443, 12577975519, 12578106613, 12578237687, 12578368813, 12578499917, 12578631017, - 12578762129, 12578893213, 12579024299, 12579155383, 12579286469, 12579417541, 12579548759, - 12579679831, 12579810911, 12579941999, 12580073101, 12580204181, 12580335259, 12580466347, - 12580597427, 12580728499, 12580859579, 12580990663, 12581121743, 12581252833, 12581383931, - 12581515031, 12581646109, 12581777183, 12581908271, 12582039361, 12582170437, 12582301517, - 12582432661, 12582563737, 12582694879, 12582825953, 12582957061, 12583088153, 12583219237, - 12583350319, 12583481411, 12583612513, 12583743589, 12583874663, 12584005781, 12584136857, - 12584267989, 12584399063, 12584530157, 12584661241, 12584792323, 12584923411, 12585054553, - 12585185647, 12585316763, 12585447899, 12585579023, 12585710117, 12585841207, 12585972299, - 12586103377, 12586234471, 12586365559, 12586496639, 12586627727, 12586758817, 12586889921, - 12587020997, 12587152079, 12587283173, 12587414303, 12587545379, 12587676457, 12587807537, - 12587938619, 12588069719, 12588200857, 12588331933, 12588463031, 12588594103, 12588725197, - 12588856279, 12588987361, 12589118501, 12589249597, 12589380673, 12589511801, 12589642873, - 12589773949, 12589905037, 12590036111, 12590167223, 12590298341, 12590429413, 12590560487, - 12590691559, 12590822641, 12590953721, 12591084823, 12591215909, 12591347011, 12591478147, - 12591609241, 12591740327, 12591871399, 12592002497, 12592133573, 12592264669, 12592395773, - 12592526851, 12592657951, 12592789051, 12592920157, 12593051239, 12593182313, 12593313407, - 12593444491, 12593575601, 12593706679, 12593837791, 12593968867, 12594099943, 12594231029, - 12594362101, 12594493193, 12594624269, 12594755351, 12594886483, 12595017571, 12595148653, - 12595279729, 12595410827, 12595541923, 12595673009, 12595804087, 12595935167, 12596066243, - 12596197363, 12596328461, 12596459563, 12596590663, 12596721737, 12596852861, 12596983933, - 12597115021, 12597246127, 12597377237, 12597508309, 12597639401, 12597770489, 12597901609, - 12598032739, 12598163821, 12598294897, 12598425979, 12598557061, 12598688147, 12598819253, - 12598950347, 12599081419, 12599212501, 12599343587, 12599474711, 12599605787, 12599736859, - 12599867947, 12599999039, 12600130129, 12600261203, 12600392293, 12600523367, 12600654463, - 12600785551, 12600916693, 12601047821, 12601178927, 12601310021, 12601441103, 12601572209, - 12601703287, 12601834373, 12601965461, 12602096561, 12602227633, 12602358707, 12602489813, - 12602620909, 12602752021, 12602883109, 12603014191, 12603145277, 12603276359, 12603407431, - 12603538513, 12603669599, 12603800681, 12603931771, 12604062881, 12604193971, 12604325057, - 12604456177, 12604587269, 12604718383, 12604849549, 12604980631, 12605111707, 12605242787, - 12605373881, 12605504953, 12605636047, 12605767123, 12605898199, 12606029321, 12606160393, - 12606291479, 12606422557, 12606553633, 12606684709, 12606815791, 12606946871, 12607077943, - 12607209037, 12607340117, 12607471231, 12607602307, 12607733381, 12607864457, 12607995581, - 12608126659, 12608257769, 12608388857, 12608519939, 12608651023, 12608782103, 12608913179, - 12609044257, 12609175331, 12609306427, 12609437501, 12609568597, 12609699671, 12609830771, - 12609961843, 12610092923, 12610224001, 12610355077, 12610486183, 12610617269, 12610748399, - 12610879471, 12611010553, 12611141633, 12611272711, 12611403793, 12611534879, 12611665987, - 12611797073, 12611928149, 12612059233, 12612190307, 12612321389, 12612452483, 12612583561, - 12612714637, 12612845711, 12612976793, 12613107869, 12613238947, 12613370027, 12613501133, - 12613632221, 12613763299, 12613894399, 12614025491, 12614156573, 12614287687, 12614418781, - 12614549903, 12614680979, 12614812061, 12614943137, 12615074209, 12615205319, 12615336403, - 12615467477, 12615598591, 12615729667, 12615860779, 12615991853, 12616123007, 12616254089, - 12616385191, 12616516273, 12616647367, 12616778441, 12616909523, 12617040599, 12617171683, - 12617302781, 12617433877, 12617564957, 12617696029, 12617827109, 12617958181, 12618089273, - 12618220379, 12618351491, 12618482563, 12618613691, 12618744769, 12618875861, 12619006943, - 12619138019, 12619269109, 12619400207, 12619531291, 12619662389, 12619793471, 12619924543, - 12620055619, 12620186729, 12620317849, 12620448949, 12620580029, 12620711101, 12620842183, - 12620973289, 12621104401, 12621235519, 12621366613, 12621497689, 12621628763, 12621759881, - 12621890971, 12622022053, 12622153133, 12622284217, 12622415291, 12622546369, 12622677451, - 12622808531, 12622939621, 12623070737, 12623201821, 12623332901, 12623463989, 12623595071, - 12623726173, 12623857261, 12623988337, 12624119461, 12624250549, 12624381643, 12624512723, - 12624643861, 12624774937, 12624906059, 12625037143, 12625168217, 12625299317, 12625430399, - 12625561483, 12625692571, 12625823647, 12625954729, 12626085839, 12626216963, 12626348051, - 12626479123, 12626610259, 12626741383, 12626872457, 12627003541, 12627134623, 12627265747, - 12627396823, 12627527897, 12627658969, 12627790061, 12627921143, 12628052263, 12628183357, - 12628314449, 12628445537, 12628576661, 12628707779, 12628838867, 12628969957, 12629101031, - 12629232107, 12629363239, 12629494321, 12629625409, 12629756507, 12629887583, 12630018673, - 12630149761, 12630280853, 12630411971, 12630543053, 12630674141, 12630805219, 12630936347, - 12631067441, 12631198513, 12631329611, 12631460729, 12631591811, 12631722893, 12631854071, - 12631985143, 12632116267, 12632247347, 12632378419, 12632509523, 12632640607, 12632771717, - 12632902829, 12633033947, 12633165047, 12633296177, 12633427249, 12633558331, 12633689423, - 12633820513, 12633951613, 12634082687, 12634213793, 12634344871, 12634475993, 12634607087, - 12634738159, 12634869241, 12635000341, 12635131463, 12635262539, 12635393611, 12635524709, - 12635655817, 12635786893, 12635918011, 12636049091, 12636180163, 12636311239, 12636442361, - 12636573461, 12636704569, 12636835649, 12636966733, 12637097819, 12637228897, 12637359991, - 12637491077, 12637622149, 12637753231, 12637884307, 12638015381, 12638146471, 12638277569, - 12638408663, 12638539741, 12638670817, 12638801893, 12638932973, 12639064073, 12639195187, - 12639326261, 12639457351, 12639588427, 12639719503, 12639850607, 12639981701, 12640112801, - 12640243877, 12640374997, 12640506079, 12640637173, 12640768253, 12640899361, 12641030489, - 12641161571, 12641292649, 12641423731, 12641554843, 12641685977, 12641817053, 12641948171, - 12642079259, 12642210349, 12642341423, 12642472499, 12642603583, 12642734659, 12642865751, - 12642996827, 12643127927, 12643259003, 12643390117, 12643521227, 12643652303, 12643783381, - 12643914457, 12644045549, 12644176621, 12644307703, 12644438809, 12644569909, 12644701009, - 12644832197, 12644963291, 12645094379, 12645225493, 12645356573, 12645487649, 12645618737, - 12645749821, 12645880909, 12646012013, 12646143127, 12646274213, 12646405397, 12646536479, - 12646667573, 12646798649, 12646929751, 12647060831, 12647191903, 12647322979, 12647454073, - 12647585147, 12647716223, 12647847301, 12647978407, 12648109493, 12648240589, 12648371693, - 12648502781, 12648633863, 12648764959, 12648896033, 12649027141, 12649158241, 12649289327, - 12649420417, 12649551493, 12649682567, 12649813651, 12649944803, 12650075927, 12650206999, - 12650338093, 12650469217, 12650600341, 12650731447, 12650862527, 12650993617, 12651124699, - 12651255781, 12651386863, 12651517981, 12651649117, 12651780277, 12651911381, 12652042463, - 12652173539, 12652304633, 12652435709, 12652566781, 12652697857, 12652828933, 12652960007, - 12653091079, 12653222161, 12653353319, 12653484391, 12653615479, 12653746571, 12653877647, - 12654008737, 12654139811, 12654270907, 12654401989, 12654533063, 12654664157, 12654795269, - 12654926341, 12655057421, 12655188503, 12655319587, 12655450663, 12655581767, 12655712857, - 12655843973, 12655975081, 12656106157, 12656237261, 12656368363, 12656499437, 12656630513, - 12656761589, 12656892679, 12657023761, 12657154841, 12657285947, 12657417023, 12657548119, - 12657679201, 12657810331, 12657941411, 12658072487, 12658203581, 12658334669, 12658465811, - 12658596883, 12658727959, 12658859033, 12658990159, 12659121253, 12659252327, 12659383411, - 12659514487, 12659645591, 12659776663, 12659907833, 12660039037, 12660170111, 12660301201, - 12660432277, 12660563351, 12660694457, 12660825533, 12660956611, 12661087687, 12661218763, - 12661349837, 12661480913, 12661612021, 12661743109, 12661874243, 12662005351, 12662136439, - 12662267521, 12662398607, 12662529683, 12662660807, 12662791891, 12662922973, 12663054067, - 12663185147, 12663316219, 12663447299, 12663578377, 12663709459, 12663840587, 12663971659, - 12664102741, 12664233821, 12664364917, 12664496021, 12664627121, 12664758193, 12664889273, - 12665020367, 12665151449, 12665282551, 12665413637, 12665544743, 12665675819, 12665806903, - 12665938001, 12666069089, 12666200161, 12666331243, 12666462317, 12666593441, 12666724529, - 12666855623, 12666986699, 12667117783, 12667248887, 12667379999, 12667511081, 12667642199, - 12667773289, 12667904369, 12668035451, 12668166547, 12668297641, 12668428723, 12668559823, - 12668690941, 12668822029, 12668953181, 12669084257, 12669215357, 12669346447, 12669477529, - 12669608603, 12669739741, 12669870821, 12670001959, 12670133041, 12670264121, 12670395193, - 12670526287, 12670657369, 12670788443, 12670919539, 12671050699, 12671181773, 12671312869, - 12671443951, 12671575031, 12671706121, 12671837197, 12671968279, 12672099361, 12672230509, - 12672361601, 12672492683, 12672623767, 12672754841, 12672885923, 12673017017, 12673148113, - 12673279193, 12673410283, 12673541369, 12673672447, 12673803539, 12673934617, 12674065693, - 12674196793, 12674327947, 12674459047, 12674590127, 12674721203, 12674852303, 12674983411, - 12675114497, 12675245623, 12675376717, 12675507797, 12675638873, 12675769957, 12675901057, - 12676032151, 12676163257, 12676294331, 12676425407, 12676556533, 12676687609, 12676818703, - 12676949783, 12677080907, 12677212027, 12677343121, 12677474197, 12677605271, 12677736389, - 12677867471, 12677998547, 12678129641, 12678260717, 12678391871, 12678522943, 12678654031, - 12678785111, 12678916189, 12679047281, 12679178387, 12679309493, 12679440569, 12679571647, - 12679702727, 12679833833, 12679964909, 12680095997, 12680227099, 12680358227, 12680489321, - 12680620423, 12680751547, 12680882639, 12681013721, 12681144793, 12681275869, 12681406951, - 12681538031, 12681669107, 12681800203, 12681931289, 12682062403, 12682193479, 12682324667, - 12682455809, 12682586881, 12682717969, 12682849061, 12682980157, 12683111263, 12683242361, - 12683373433, 12683504531, 12683635697, 12683766773, 12683897857, 12684028997, 12684160103, - 12684291181, 12684422263, 12684553367, 12684684469, 12684815621, 12684946693, 12685077841, - 12685208917, 12685339991, 12685471069, 12685602161, 12685733239, 12685864327, 12685995401, - 12686126477, 12686257579, 12686388679, 12686519761, 12686650849, 12686781923, 12686913047, - 12687044129, 12687175201, 12687306277, 12687437351, 12687568423, 12687699509, 12687830633, - 12687961717, 12688092869, 12688223969, 12688355051, 12688486169, 12688617247, 12688748333, - 12688879409, 12689010487, 12689141567, 12689272657, 12689403757, 12689534833, 12689665909, - 12689796983, 12689928059, 12690059159, 12690190237, 12690321317, 12690452429, 12690583511, - 12690714583, 12690845659, 12690976733, 12691107823, 12691238897, 12691369973, 12691501051, - 12691632143, 12691763233, 12691894307, 12692025407, 12692156489, 12692287583, 12692418689, - 12692549801, 12692680877, 12692811953, 12692943031, 12693074113, 12693205207, 12693336319, - 12693467399, 12693598529, 12693729641, 12693860779, 12693991873, 12694122949, 12694254029, - 12694385219, 12694516319, 12694647391, 12694778479, 12694909559, 12695040641, 12695171717, - 12695302813, 12695433899, 12695564993, 12695696093, 12695827181, 12695958281, 12696089353, - 12696220477, 12696351557, 12696482641, 12696613729, 12696744821, 12696875929, 12697007017, - 12697138099, 12697269173, 12697400251, 12697531333, 12697662493, 12697793593, 12697924697, - 12698055779, 12698186857, 12698317949, 12698449051, 12698580143, 12698711239, 12698842319, - 12698973407, 12699104479, 12699235553, 12699366629, 12699497717, 12699628793, 12699759869, - 12699890969, 12700022059, 12700153183, 12700284277, 12700415381, 12700546459, 12700677551, - 12700808669, 12700939777, 12701070881, 12701201969, 12701333059, 12701464189, 12701595289, - 12701726371, 12701857457, 12701988601, 12702119681, 12702250793, 12702381869, 12702512941, - 12702644039, 12702775121, 12702906197, 12703037317, 12703168391, 12703299491, 12703430563, - 12703561699, 12703692773, 12703823849, 12703954961, 12704086051, 12704217143, 12704348243, - 12704479339, 12704610419, 12704741507, 12704872601, 12705003677, 12705134791, 12705265871, - 12705396983, 12705528091, 12705659171, 12705790267, 12705921401, 12706052483, 12706183573, - 12706314659, 12706445747, 12706576829, 12706707901, 12706839011, 12706970113, 12707101193, - 12707232311, 12707363387, 12707494483, 12707625629, 12707756701, 12707887793, 12708018893, - 12708149969, 12708281041, 12708412121, 12708543203, 12708674371, 12708805511, 12708936589, - 12709067671, 12709198753, 12709329827, 12709460971, 12709592053, 12709723153, 12709854247, - 12709985371, 12710116459, 12710247533, 12710378617, 12710509699, 12710640781, 12710771863, - 12710902961, 12711034069, 12711165163, 12711296261, 12711427343, 12711558473, 12711689603, - 12711820721, 12711951797, 12712082869, 12712213961, 12712345081, 12712476191, 12712607263, - 12712738361, 12712869439, 12713000539, 12713131631, 12713262733, 12713393821, 12713524921, - 12713656003, 12713787101, 12713918209, 12714049331, 12714180403, 12714311501, 12714442589, - 12714573671, 12714704749, 12714835841, 12714966949, 12715098023, 12715229123, 12715360199, - 12715491301, 12715622393, 12715753537, 12715884617, 12716015701, 12716146787, 12716277883, - 12716409059, 12716540171, 12716671243, 12716802317, 12716933401, 12717064517, 12717195677, - 12717326759, 12717457843, 12717588971, 12717720049, 12717851137, 12717982231, 12718113307, - 12718244423, 12718375507, 12718506583, 12718637683, 12718768763, 12718899871, 12719030953, - 12719162041, 12719293117, 12719424233, 12719555327, 12719686453, 12719817527, 12719948603, - 12720079709, 12720210791, 12720341917, 12720472991, 12720604067, 12720735169, 12720866299, - 12720997397, 12721128491, 12721259581, 12721390679, 12721521793, 12721652893, 12721783973, - 12721915069, 12722046149, 12722177233, 12722308307, 12722439407, 12722570479, 12722701561, - 12722832653, 12722963753, 12723094837, 12723225917, 12723357007, 12723488093, 12723619193, - 12723750313, 12723881441, 12724012517, 12724143643, 12724274741, 12724405819, 12724536893, - 12724667971, 12724799069, 12724930157, 12725061263, 12725192341, 12725323417, 12725454491, - 12725585563, 12725716637, 12725847751, 12725978827, 12726109901, 12726240991, 12726372077, - 12726503171, 12726634243, 12726765319, 12726896417, 12727027499, 12727158589, 12727289681, - 12727420759, 12727551833, 12727682923, 12727814051, 12727945163, 12728076253, 12728207341, - 12728338429, 12728469503, 12728600609, 12728731739, 12728862821, 12728993939, 12729125027, - 12729256103, 12729387199, 12729518279, 12729649357, 12729780439, 12729911533, 12730042607, - 12730173697, 12730304773, 12730435849, 12730566923, 12730698119, 12730829191, 12730960267, - 12731091349, 12731222423, 12731353511, 12731484589, 12731615719, 12731746823, 12731877931, - 12732009029, 12732140117, 12732271199, 12732402283, 12732533357, 12732664429, 12732795563, - 12732926653, 12733057741, 12733188829, 12733319959, 12733451033, 12733582109, 12733713191, - 12733844267, 12733975343, 12734106419, 12734237533, 12734368607, 12734499683, 12734630803, - 12734761903, 12734892979, 12735024061, 12735155143, 12735286241, 12735417323, 12735548401, - 12735679487, 12735810629, 12735941707, 12736072787, 12736203859, 12736334981, 12736466069, - 12736597141, 12736728227, 12736859347, 12736990451, 12737121571, 12737252653, 12737383733, - 12737514817, 12737645941, 12737777029, 12737908201, 12738039313, 12738170407, 12738301489, - 12738432587, 12738563683, 12738694757, 12738825851, 12738956927, 12739088009, 12739219099, - 12739350187, 12739481269, 12739612343, 12739743427, 12739874503, 12740005583, 12740136679, - 12740267767, 12740398841, 12740529959, 12740661053, 12740792191, 12740923291, 12741054373, - 12741185533, 12741316667, 12741447739, 12741578813, 12741709919, 12741841081, 12741972161, - 12742103243, 12742234331, 12742365403, 12742496519, 12742627607, 12742758719, 12742889821, - 12743020897, 12743152003, 12743283083, 12743414191, 12743545277, 12743676349, 12743807423, - 12743938511, 12744069587, 12744200669, 12744331753, 12744462833, 12744593941, 12744725023, - 12744856133, 12744987259, 12745118341, 12745249421, 12745380493, 12745511567, 12745642667, - 12745773751, 12745904837, 12746035921, 12746167103, 12746298211, 12746429341, 12746560447, - 12746691539, 12746822659, 12746953781, 12747084853, 12747215947, 12747347027, 12747478103, - 12747609209, 12747740321, 12747871399, 12748002479, 12748133551, 12748264651, 12748395739, - 12748526837, 12748657913, 12748788989, 12748920071, 12749051191, 12749182291, 12749313377, - 12749444459, 12749575549, 12749706647, 12749837719, 12749968807, 12750099883, 12750230971, - 12750362047, 12750493121, 12750624193, 12750755267, 12750886367, 12751017443, 12751148519, - 12751279643, 12751410719, 12751541797, 12751672873, 12751803947, 12751935023, 12752066149, - 12752197229, 12752328301, 12752459443, 12752590519, 12752721599, 12752852683, 12752983777, - 12753114863, 12753245959, 12753377041, 12753508121, 12753639257, 12753770353, 12753901451, - 12754032547, 12754163621, 12754294703, 12754425791, 12754556909, 12754687997, 12754819097, - 12754950191, 12755081267, 12755212343, 12755343431, 12755474507, 12755605609, 12755736709, - 12755867843, 12755998933, 12756130021, 12756261139, 12756392237, 12756523309, 12756654431, - 12756785537, 12756916621, 12757047731, 12757178809, 12757309889, 12757441001, 12757572077, - 12757703207, 12757834339, 12757965433, 12758096521, 12758227633, 12758358707, 12758489791, - 12758620873, 12758751961, 12758883043, 12759014117, 12759145211, 12759276287, 12759407369, - 12759538453, 12759669529, 12759800623, 12759931699, 12760062781, 12760193893, 12760324987, - 12760456061, 12760587139, 12760718237, 12760849313, 12760980391, 12761111477, 12761242561, - 12761373661, 12761504737, 12761635823, 12761766923, 12761898043, 12762029177, 12762160267, - 12762291361, 12762422437, 12762553519, 12762684619, 12762815693, 12762946783, 12763077871, - 12763208947, 12763340039, 12763471153, 12763602233, 12763733371, 12763864493, 12763995577, - 12764126653, 12764257739, 12764388823, 12764519897, 12764650973, 12764782057, 12764913157, - 12765044287, 12765175363, 12765306451, 12765437653, 12765568831, 12765699907, 12765830999, - 12765962071, 12766093163, 12766224257, 12766355333, 12766486409, 12766617497, 12766748611, - 12766879693, 12767010827, 12767141951, 12767273047, 12767404171, 12767535283, 12767666357, - 12767797429, 12767928529, 12768059611, 12768190723, 12768321799, 12768452897, 12768583999, - 12768715073, 12768846151, 12768977233, 12769108309, 12769239391, 12769370539, 12769501621, - 12769632697, 12769763801, 12769894873, 12770025953, 12770157067, 12770288159, 12770419253, - 12770550329, 12770681419, 12770812507, 12770943607, 12771074731, 12771205823, 12771336901, - 12771467987, 12771599063, 12771730141, 12771861229, 12771992309, 12772123381, 12772254457, - 12772385531, 12772516633, 12772647763, 12772778869, 12772909951, 12773041027, 12773172101, - 12773303189, 12773434319, 12773565391, 12773696479, 12773827559, 12773958649, 12774089743, - 12774220843, 12774351917, 12774483011, 12774614087, 12774745187, 12774876259, 12775007339, - 12775138421, 12775269541, 12775400621, 12775531697, 12775662793, 12775793903, 12775925053, - 12776056127, 12776187247, 12776318449, 12776449529, 12776580613, 12776711687, 12776842783, - 12776973889, 12777104981, 12777236077, 12777367151, 12777498301, 12777629399, 12777760483, - 12777891559, 12778022689, 12778153777, 12778284859, 12778415981, 12778547053, 12778678127, - 12778809221, 12778940297, 12779071369, 12779202463, 12779333543, 12779464639, 12779595733, - 12779726809, 12779857889, 12779988971, 12780120097, 12780251179, 12780382253, 12780513341, - 12780644447, 12780775531, 12780906613, 12781037701, 12781168783, 12781299857, 12781430939, - 12781562069, 12781693157, 12781824271, 12781955383, 12782086469, 12782217557, 12782348659, - 12782479733, 12782610809, 12782741899, 12782872979, 12783004057, 12783135149, 12783266231, - 12783397307, 12783528389, 12783659467, 12783790541, 12783921637, 12784052737, 12784183823, - 12784314911, 12784446013, 12784577129, 12784708231, 12784839313, 12784970423, 12785101507, - 12785232587, 12785363687, 12785494769, 12785625841, 12785756917, 12785888029, 12786019123, - 12786150197, 12786281293, 12786412391, 12786543467, 12786674561, 12786805651, 12786936727, - 12787067819, 12787198891, 12787329967, 12787461053, 12787592171, 12787723253, 12787854397, - 12787985471, 12788116543, 12788247617, 12788378689, 12788509807, 12788640899, 12788771971, - 12788903047, 12789034129, 12789165211, 12789296291, 12789427381, 12789558469, 12789689551, - 12789820669, 12789951791, 12790082887, 12790213973, 12790345079, 12790476151, 12790607231, - 12790738319, 12790869431, 12791000539, 12791131637, 12791262763, 12791393837, 12791524939, - 12791656067, 12791787143, 12791918219, 12792049397, 12792180469, 12792311549, 12792442633, - 12792573737, 12792704819, 12792835897, 12792966971, 12793098049, 12793229143, 12793360249, - 12793491323, 12793622453, 12793753541, 12793884613, 12794015701, 12794146777, 12794277889, - 12794408971, 12794540047, 12794671159, 12794802281, 12794933353, 12795064553, 12795195641, - 12795326759, 12795457867, 12795588941, 12795720017, 12795851099, 12795982181, 12796113277, - 12796244453, 12796375577, 12796506649, 12796637741, 12796768813, 12796899937, 12797031041, - 12797162141, 12797293213, 12797424337, 12797555413, 12797686487, 12797817581, 12797948701, - 12798079781, 12798210871, 12798341987, 12798473059, 12798604187, 12798735307, 12798866383, - 12798997517, 12799128599, 12799259677, 12799390753, 12799521841, 12799652923, 12799784083, - 12799915157, 12800046229, 12800177311, 12800308403, 12800439499, 12800570609, 12800701733, - 12800832809, 12800963897, 12801094997, 12801226099, 12801357193, 12801488339, 12801619451, - 12801750523, 12801881629, 12802012759, 12802143841, 12802274939, 12802406021, 12802537109, - 12802668209, 12802799287, 12802930421, 12803061503, 12803192653, 12803323751, 12803454841, - 12803585933, 12803717011, 12803848103, 12803979187, 12804110329, 12804241403, 12804372509, - 12804503599, 12804634673, 12804765761, 12804896849, 12805027957, 12805159043, 12805290119, - 12805421191, 12805552267, 12805683349, 12805814449, 12805945547, 12806076631, 12806207717, - 12806338801, 12806469881, 12806600959, 12806732033, 12806863133, 12806994227, 12807125327, - 12807256471, 12807387547, 12807518627, 12807649733, 12807780857, 12807911939, 12808043011, - 12808174097, 12808305173, 12808436257, 12808567333, 12808698457, 12808829549, 12808960667, - 12809091767, 12809222843, 12809353939, 12809485027, 12809616103, 12809747201, 12809878273, - 12810009383, 12810140459, 12810271531, 12810402611, 12810533683, 12810664831, 12810795919, - 12810926993, 12811058089, 12811189163, 12811320253, 12811451327, 12811582423, 12811713521, - 12811844597, 12811975679, 12812106751, 12812237827, 12812368901, 12812499979, 12812631053, - 12812762161, 12812893253, 12813024331, 12813155417, 12813286531, 12813417607, 12813548687, - 12813679763, 12813810851, 12813941927, 12814073003, 12814204079, 12814335151, 12814466233, - 12814597309, 12814728397, 12814859479, 12814990567, 12815121647, 12815252729, 12815383807, - 12815515001, 12815646089, 12815777207, 12815908279, 12816039377, 12816170489, 12816301577, - 12816432649, 12816563741, 12816694819, 12816825893, 12816957001, 12817088107, 12817219187, - 12817350263, 12817481357, 12817612453, 12817743551, 12817874627, 12818005741, 12818136817, - 12818267897, 12818398969, 12818530073, 12818661151, 12818792243, 12818923343, 12819054419, - 12819185543, 12819316637, 12819447727, 12819578801, 12819709879, 12819840977, 12819972059, - 12820103221, 12820234307, 12820365413, 12820496527, 12820627601, 12820758689, 12820889777, - 12821020871, 12821151983, 12821283103, 12821414219, 12821545307, 12821676409, 12821807491, - 12821938573, 12822069677, 12822200759, 12822331843, 12822462937, 12822594017, 12822725093, - 12822856181, 12822987263, 12823118369, 12823249463, 12823380587, 12823511663, 12823642757, - 12823773839, 12823904923, 12824035999, 12824167099, 12824298173, 12824429251, 12824560337, - 12824691419, 12824822497, 12824953573, 12825084673, 12825215789, 12825346861, 12825477941, - 12825609029, 12825740149, 12825871229, 12826002311, 12826133387, 12826264471, 12826395557, - 12826526689, 12826657801, 12826788883, 12826919983, 12827051119, 12827182213, 12827313293, - 12827444411, 12827575489, 12827706587, 12827837683, 12827968759, 12828099847, 12828230927, - 12828362017, 12828493109, 12828624253, 12828755341, 12828886423, 12829017497, 12829148569, - 12829279657, 12829410733, 12829541807, 12829672883, 12829803971, 12829935047, 12830066143, - 12830197223, 12830328319, 12830459393, 12830590501, 12830721587, 12830852659, 12830983741, - 12831114823, 12831245923, 12831377003, 12831508103, 12831639239, 12831770381, 12831901477, - 12832032571, 12832163647, 12832294733, 12832425833, 12832556917, 12832687993, 12832819073, - 12832950173, 12833081263, 12833212367, 12833343449, 12833474543, 12833605621, 12833736701, - 12833867791, 12833998871, 12834129947, 12834261023, 12834392149, 12834523277, 12834654367, - 12834785471, 12834916543, 12835047661, 12835178749, 12835309849, 12835440953, 12835572077, - 12835703159, 12835834259, 12835965341, 12836096489, 12836227637, 12836358727, 12836489807, - 12836620883, 12836752007, 12836883091, 12837014231, 12837145303, 12837276407, 12837407521, - 12837538601, 12837669709, 12837800791, 12837931891, 12838062997, 12838194143, 12838325257, - 12838456349, 12838587449, 12838718521, 12838849601, 12838980683, 12839111767, 12839242853, - 12839373931, 12839505043, 12839636123, 12839767211, 12839898283, 12840029359, 12840160439, - 12840291551, 12840422689, 12840553763, 12840684839, 12840815929, 12840947003, 12841078091, - 12841209169, 12841340279, 12841471399, 12841602547, 12841733659, 12841864747, 12841995821, - 12842126897, 12842257973, 12842389081, 12842520157, 12842651273, 12842782357, 12842913437, - 12843044527, 12843175613, 12843306701, 12843437779, 12843568861, 12843699983, 12843831089, - 12843962207, 12844093337, 12844224433, 12844355569, 12844486651, 12844617803, 12844748881, - 12844879961, 12845011051, 12845142133, 12845273269, 12845404349, 12845535433, 12845666539, - 12845797633, 12845928761, 12846059851, 12846190963, 12846322039, 12846453119, 12846584207, - 12846715289, 12846846361, 12846977443, 12847108543, 12847239637, 12847370719, 12847501861, - 12847632953, 12847764107, 12847895189, 12848026273, 12848157403, 12848288483, 12848419559, - 12848550653, 12848681731, 12848812811, 12848943917, 12849074999, 12849206081, 12849337169, - 12849468251, 12849599333, 12849730417, 12849861551, 12849992641, 12850123721, 12850254817, - 12850385963, 12850517041, 12850648121, 12850779239, 12850910333, 12851041417, 12851172527, - 12851303617, 12851434691, 12851565773, 12851696899, 12851827991, 12851959073, 12852090187, - 12852221297, 12852352399, 12852483473, 12852614573, 12852745649, 12852876769, 12853007851, - 12853138951, 12853270097, 12853401179, 12853532269, 12853663357, 12853794433, 12853925527, - 12854056639, 12854187739, 12854318819, 12854449963, 12854581039, 12854712133, 12854843219, - 12854974291, 12855105383, 12855236483, 12855367561, 12855498641, 12855629747, 12855760831, - 12855891949, 12856023023, 12856154123, 12856285213, 12856416301, 12856547399, 12856678477, - 12856809571, 12856940669, 12857071813, 12857202893, 12857334001, 12857465087, 12857596201, - 12857727359, 12857858473, 12857989553, 12858120689, 12858251837, 12858382909, 12858514037, - 12858645109, 12858776213, 12858907289, 12859038373, 12859169447, 12859300537, 12859431623, - 12859562707, 12859693807, 12859824889, 12859955971, 12860087069, 12860218159, 12860349233, - 12860480317, 12860611403, 12860742481, 12860873561, 12861004643, 12861135797, 12861266911, - 12861397999, 12861529073, 12861660157, 12861791231, 12861922321, 12862053427, 12862184521, - 12862315603, 12862446677, 12862577759, 12862708841, 12862839919, 12862971029, 12863102101, - 12863233213, 12863364317, 12863495413, 12863626499, 12863757581, 12863888659, 12864019769, - 12864150853, 12864281977, 12864413053, 12864544153, 12864675269, 12864806351, 12864937427, - 12865068499, 12865199579, 12865330657, 12865461751, 12865592833, 12865723907, 12865854979, - 12865986071, 12866117153, 12866248229, 12866379301, 12866510399, 12866641519, 12866772599, - 12866903681, 12867034777, 12867165901, 12867296989, 12867428087, 12867559169, 12867690247, - 12867821321, 12867952403, 12868083497, 12868214599, 12868345681, 12868476763, 12868607891, - 12868738963, 12868870051, 12869001137, 12869132279, 12869263357, 12869394437, 12869525527, - 12869656619, 12869787691, 12869918771, 12870049847, 12870180923, 12870311999, 12870443083, - 12870574169, 12870705257, 12870836443, 12870967537, 12871098677, 12871229759, 12871360847, - 12871491929, 12871623007, 12871754107, 12871885183, 12872016281, 12872147383, 12872278457, - 12872409559, 12872540689, 12872671783, 12872802871, 12872933977, 12873065071, 12873196181, - 12873327281, 12873458357, 12873589447, 12873720529, 12873851609, 12873982691, 12874113809, - 12874244897, 12874375973, 12874507057, 12874638149, 12874769249, 12874900321, 12875031409, - 12875162549, 12875293649, 12875424721, 12875555809, 12875686891, 12875817973, 12875949059, - 12876080131, 12876211223, 12876342307, 12876473383, 12876604471, 12876735563, 12876866647, - 12876997723, 12877128809, 12877259893, 12877390997, 12877522079, 12877653179, 12877784267, - 12877915357, 12878046437, 12878177509, 12878308613, 12878439689, 12878570819, 12878701937, - 12878833031, 12878964121, 12879095209, 12879226291, 12879357383, 12879488467, 12879619549, - 12879750623, 12879881699, 12880012781, 12880143863, 12880274969, 12880406047, 12880537139, - 12880668223, 12880799303, 12880930399, 12881061499, 12881192579, 12881323661, 12881454737, - 12881585839, 12881716951, 12881848043, 12881979137, 12882110221, 12882241297, 12882372379, - 12882503467, 12882634577, 12882765667, 12882896749, 12883027823, 12883158907, 12883290011, - 12883421107, 12883552207, 12883683299, 12883814371, 12883945457, 12884076539, 12884207627, - 12884338717, 12884469803, 12884600903, 12884731999, 12884863093, 12884994173, 12885125257, - 12885256357, 12885387433, 12885518507, 12885649583, 12885780707, 12885911803, 12886042909, - 12886174003, 12886305139, 12886436273, 12886567357, 12886698443, 12886829533, 12886960613, - 12887091709, 12887222783, 12887353867, 12887484997, 12887616127, 12887747203, 12887878301, - 12888009391, 12888140509, 12888271657, 12888402731, 12888533807, 12888664889, 12888796001, - 12888927101, 12889058173, 12889189289, 12889320361, 12889451483, 12889582571, 12889713647, - 12889844743, 12889975817, 12890106893, 12890237977, 12890369057, 12890500141, 12890631233, - 12890762341, 12890893429, 12891024539, 12891155623, 12891286697, 12891417811, 12891548903, - 12891679991, 12891811067, 12891942209, 12892073291, 12892204373, 12892335461, 12892466533, - 12892597607, 12892728689, 12892859761, 12892990841, 12893121959, 12893253031, 12893384111, - 12893515199, 12893646281, 12893777363, 12893908507, 12894039583, 12894170657, 12894301741, - 12894432827, 12894563909, 12894694987, 12894826157, 12894957239, 12895088317, 12895219397, - 12895350491, 12895481567, 12895612643, 12895743761, 12895874869, 12896005949, 12896137057, - 12896268139, 12896399227, 12896530303, 12896661439, 12896792521, 12896923601, 12897054701, - 12897185783, 12897316877, 12897447971, 12897579073, 12897710191, 12897841301, 12897972379, - 12898103489, 12898234603, 12898365679, 12898496813, 12898627897, 12898759001, 12898890073, - 12899021189, 12899152283, 12899283373, 12899414447, 12899545537, 12899676611, 12899807707, - 12899938783, 12900069859, 12900200947, 12900332047, 12900463151, 12900594229, 12900725311, - 12900856387, 12900987493, 12901118641, 12901249729, 12901380839, 12901511921, 12901642997, - 12901774099, 12901905197, 12902036281, 12902167361, 12902298439, 12902429537, 12902560609, - 12902691701, 12902822773, 12902953849, 12903084947, 12903216023, 12903347143, 12903478229, - 12903609307, 12903740407, 12903871507, 12904002583, 12904133659, 12904264739, 12904395821, - 12904526903, 12904658057, 12904789187, 12904920271, 12905051431, 12905182519, 12905313713, - 12905444791, 12905575867, 12905706949, 12905838041, 12905969117, 12906100217, 12906231301, - 12906362377, 12906493507, 12906624581, 12906755663, 12906886771, 12907017853, 12907148957, - 12907280033, 12907411159, 12907542259, 12907673413, 12907804513, 12907935613, 12908066687, - 12908197781, 12908328859, 12908459939, 12908591021, 12908722093, 12908853169, 12908984251, - 12909115327, 12909246407, 12909377513, 12909508589, 12909639713, 12909770791, 12909901877, - 12910032959, 12910164041, 12910295131, 12910426237, 12910557329, 12910688411, 12910819499, - 12910950593, 12911081699, 12911212781, 12911343877, 12911474957, 12911606033, 12911737123, - 12911868199, 12911999299, 12912130381, 12912261457, 12912392567, 12912523649, 12912654721, - 12912785801, 12912916903, 12913047977, 12913179061, 12913310147, 12913441271, 12913572349, - 12913703443, 12913834547, 12913965643, 12914096747, 12914227831, 12914358917, 12914490023, - 12914621101, 12914752177, 12914883259, 12915014347, 12915145433, 12915276509, 12915407587, - 12915538663, 12915669773, 12915800851, 12915931933, 12916063073, 12916194149, 12916325221, - 12916456303, 12916587377, 12916718471, 12916849573, 12916980649, 12917111737, 12917242813, - 12917373899, 12917504981, 12917636059, 12917767147, 12917898223, 12918029297, 12918160429, - 12918291509, 12918422597, 12918553699, 12918684811, 12918815909, 12918947009, 12919078093, - 12919209169, 12919340267, 12919471349, 12919602499, 12919733591, 12919864669, 12919995743, - 12920126831, 12920257919, 12920388991, 12920520103, 12920651203, 12920782307, 12920913403, - 12921044509, 12921175607, 12921306679, 12921437777, 12921568873, 12921699953, 12921831073, - 12921962239, 12922093411, 12922224493, 12922355591, 12922486669, 12922617751, 12922748831, - 12922879927, 12923011021, 12923142101, 12923273201, 12923404283, 12923535403, 12923666521, - 12923797609, 12923928707, 12924059803, 12924190919, 12924322069, 12924453151, 12924584243, - 12924715343, 12924846421, 12924977519, 12925108621, 12925239773, 12925370849, 12925501943, - 12925633027, 12925764113, 12925895197, 12926026283, 12926157403, 12926288477, 12926419553, - 12926550641, 12926681767, 12926812867, 12926943941, 12927075017, 12927206099, 12927337201, - 12927468289, 12927599369, 12927730447, 12927861553, 12927992639, 12928123711, 12928254793, - 12928385923, 12928517011, 12928648153, 12928779229, 12928910341, 12929041417, 12929172517, - 12929303663, 12929434783, 12929565863, 12929696981, 12929828053, 12929959157, 12930090233, - 12930221323, 12930352403, 12930483487, 12930614561, 12930745669, 12930876811, 12931007899, - 12931138981, 12931270057, 12931401139, 12931532233, 12931663307, 12931794391, 12931925477, - 12932056549, 12932187629, 12932318713, 12932449787, 12932580877, 12932711977, 12932843089, - 12932974177, 12933105277, 12933236357, 12933367471, 12933498547, 12933629659, 12933760733, - 12933891821, 12934022897, 12934154017, 12934285097, 12934416199, 12934547303, 12934678433, - 12934809509, 12934940647, 12935071733, 12935202821, 12935333899, 12935464979, 12935596061, - 12935727143, 12935858249, 12935989457, 12936120553, 12936251663, 12936382777, 12936513853, - 12936644947, 12936776033, 12936907157, 12937038259, 12937169347, 12937300421, 12937431509, - 12937562591, 12937693669, 12937824763, 12937955843, 12938086919, 12938218009, 12938349121, - 12938480209, 12938611297, 12938742389, 12938873477, 12939004549, 12939135631, 12939266723, - 12939397817, 12939528893, 12939659969, 12939791057, 12939922129, 12940053221, 12940184303, - 12940315393, 12940446469, 12940577549, 12940708631, 12940839731, 12940970807, 12941101903, - 12941232979, 12941364061, 12941495153, 12941626283, 12941757391, 12941888471, 12942019543, - 12942150619, 12942281701, 12942412781, 12942543863, 12942675091, 12942806207, 12942937279, - 12943068353, 12943199471, 12943330553, 12943461659, 12943592741, 12943723847, 12943854919, - 12943985993, 12944117107, 12944248181, 12944379269, 12944510389, 12944641469, 12944772541, - 12944903641, 12945034763, 12945165851, 12945296933, 12945428009, 12945559087, 12945690217, - 12945821321, 12945952433, 12946083511, 12946214627, 12946345717, 12946476811, 12946607897, - 12946738993, 12946870073, 12947001149, 12947132227, 12947263331, 12947394413, 12947525491, - 12947656591, 12947787667, 12947918759, 12948049843, 12948180919, 12948312019, 12948443117, - 12948574207, 12948705311, 12948836419, 12948967511, 12949098587, 12949229659, 12949360759, - 12949491871, 12949622947, 12949754021, 12949885097, 12950016217, 12950147323, 12950278399, - 12950409473, 12950540593, 12950671667, 12950802773, 12950933893, 12951064999, 12951196079, - 12951327161, 12951458257, 12951589331, 12951720449, 12951851603, 12951982679, 12952113761, - 12952244867, 12952375951, 12952507037, 12952638109, 12952769189, 12952900273, 12953031353, - 12953162489, 12953293583, 12953424661, 12953555801, 12953686897, 12953818027, 12953949131, - 12954080239, 12954211337, 12954342413, 12954473491, 12954604577, 12954735649, 12954866731, - 12954997807, 12955128899, 12955259983, 12955391069, 12955522187, 12955653307, 12955784411, - 12955915507, 12956046581, 12956177657, 12956308823, 12956439901, 12956570987, 12956702063, - 12956833151, 12956964257, 12957095381, 12957226483, 12957357583, 12957488659, 12957619747, - 12957750847, 12957881927, 12958013017, 12958144117, 12958275193, 12958406323, 12958537399, - 12958668479, 12958799551, 12958930681, 12959061761, 12959192833, 12959323921, 12959455027, - 12959586109, 12959717207, 12959848283, 12959979371, 12960110453, 12960241529, 12960372613, - 12960503713, 12960634823, 12960765907, 12960897029, 12961028107, 12961159199, 12961290281, - 12961421371, 12961552453, 12961683563, 12961814639, 12961945723, 12962076833, 12962207941, - 12962339023, 12962470109, 12962601203, 12962732303, 12962863471, 12962994553, 12963125641, - 12963256717, 12963387823, 12963518917, 12963650041, 12963781121, 12963912277, 12964043363, - 12964174477, 12964305581, 12964436669, 12964567741, 12964698823, 12964829947, 12964961029, - 12965092141, 12965223253, 12965354333, 12965485409, 12965616481, 12965747609, 12965878687, - 12966009761, 12966140849, 12966271921, 12966403003, 12966534103, 12966665203, 12966796277, - 12966927353, 12967058441, 12967189537, 12967320629, 12967451719, 12967582829, 12967713961, - 12967845047, 12967976209, 12968107283, 12968238391, 12968369467, 12968500543, 12968631617, - 12968762693, 12968893771, 12969024857, 12969155987, 12969287059, 12969418141, 12969549217, - 12969680293, 12969811367, 12969942439, 12970073521, 12970204603, 12970335689, 12970466779, - 12970597883, 12970728973, 12970860053, 12970991183, 12971122261, 12971253341, 12971384423, - 12971515523, 12971646601, 12971777677, 12971908777, 12972039881, 12972170971, 12972302071, - 12972433163, 12972564251, 12972695339, 12972826411, 12972957493, 12973088573, 12973219681, - 12973350779, 12973481869, 12973612961, 12973744037, 12973875137, 12974006219, 12974137301, - 12974268409, 12974399483, 12974530573, 12974661653, 12974792737, 12974923811, 12975054901, - 12975186017, 12975317093, 12975448177, 12975579257, 12975710329, 12975841409, 12975972523, - 12976103641, 12976234723, 12976365811, 12976496903, 12976628023, 12976759109, 12976890193, - 12977021279, 12977152367, 12977283547, 12977414621, 12977545703, 12977676781, 12977807867, - 12977938949, 12978070037, 12978201157, 12978332231, 12978463319, 12978594401, 12978725479, - 12978856573, 12978987649, 12979118771, 12979249861, 12979380937, 12979512017, 12979643099, - 12979774187, 12979905383, 12980036471, 12980167549, 12980298623, 12980429701, 12980560781, - 12980691877, 12980822951, 12980954123, 12981085213, 12981216319, 12981347419, 12981478493, - 12981609577, 12981740657, 12981871843, 12982002931, 12982134013, 12982265111, 12982396183, - 12982527269, 12982658399, 12982789531, 12982920617, 12983051723, 12983182813, 12983313901, - 12983444989, 12983576069, 12983707169, 12983838251, 12983969353, 12984100427, 12984231503, - 12984362609, 12984493723, 12984624853, 12984755929, 12984887021, 12985018097, 12985149187, - 12985280261, 12985411381, 12985542467, 12985673573, 12985804661, 12985935737, 12986066813, - 12986197897, 12986329003, 12986460083, 12986591171, 12986722267, 12986853353, 12986984429, - 12987115523, 12987246607, 12987377693, 12987508783, 12987639883, 12987770977, 12987902071, - 12988033159, 12988164251, 12988295377, 12988426457, 12988557551, 12988688623, 12988819709, - 12988950797, 12989081869, 12989212981, 12989344057, 12989475133, 12989606209, 12989737339, - 12989868433, 12989999573, 12990130651, 12990261727, 12990392813, 12990523891, 12990654973, - 12990786047, 12990917123, 12991048211, 12991179293, 12991310383, 12991441459, 12991572541, - 12991703651, 12991834781, 12991965887, 12992096981, 12992228059, 12992359181, 12992490253, - 12992621371, 12992752447, 12992883571, 12993014653, 12993145727, 12993276809, 12993407881, - 12993538979, 12993670091, 12993801179, 12993932279, 12994063361, 12994194461, 12994325563, - 12994456639, 12994587737, 12994718819, 12994849897, 12994980983, 12995112071, 12995243161, - 12995374261, 12995505371, 12995636461, 12995767559, 12995898649, 12996029723, 12996160817, - 12996291907, 12996423001, 12996554101, 12996685189, 12996816269, 12996947351, 12997078427, - 12997209499, 12997340579, 12997471667, 12997602797, 12997733869, 12997864961, 12997996079, - 12998127151, 12998258227, 12998389301, 12998520401, 12998651473, 12998782547, 12998913673, - 12999044753, 12999175837, 12999306923, 12999438013, 12999569113, 12999700253, 12999831347, - 12999962449, 13000093537, 13000224623, 13000355699, 13000486783, 13000617869, 13000748947, - 13000880059, 13001011151, 13001142229, 13001273309, 13001404387, 13001535467, 13001666563, - 13001797651, 13001928739, 13002059881, 13002190961, 13002322093, 13002453203, 13002584297, - 13002715459, 13002846539, 13002977641, 13003108829, 13003239901, 13003370977, 13003502051, - 13003633151, 13003764247, 13003895327, 13004026403, 13004157503, 13004288623, 13004419699, - 13004550781, 13004681867, 13004812969, 13004944049, 13005075121, 13005206219, 13005337369, - 13005468449, 13005599533, 13005730649, 13005861731, 13005992837, 13006123909, 13006254997, - 13006386091, 13006517171, 13006648267, 13006779353, 13006910453, 13007041543, 13007172643, - 13007303719, 13007434799, 13007565871, 13007696957, 13007828111, 13007959199, 13008090281, - 13008221431, 13008352517, 13008483613, 13008614791, 13008745877, 13008876961, 13009008049, - 13009139137, 13009270231, 13009401313, 13009532407, 13009663481, 13009794557, 13009925639, - 13010056711, 13010187791, 13010318873, 13010449957, 13010581069, 13010712149, 13010843221, - 13010974303, 13011105377, 13011236449, 13011367543, 13011498631, 13011629707, 13011760831, - 13011891917, 13012022993, 13012154083, 13012285201, 13012416283, 13012547407, 13012678487, - 13012809629, 13012940741, 13013071829, 13013202901, 13013333981, 13013465093, 13013596171, - 13013727253, 13013858357, 13013989451, 13014120529, 13014251617, 13014382853, 13014513943, - 13014645041, 13014776129, 13014907237, 13015038349, 13015169467, 13015300607, 13015431691, - 13015562789, 13015693871, 13015824947, 13015956029, 13016087107, 13016218183, 13016349257, - 13016480329, 13016611411, 13016742491, 13016873587, 13017004661, 13017135749, 13017266827, - 13017397903, 13017528977, 13017660079, 13017791173, 13017922273, 13018053401, 13018184573, - 13018315657, 13018446739, 13018577839, 13018708979, 13018840063, 13018971143, 13019102219, - 13019233309, 13019364403, 13019495497, 13019626573, 13019757671, 13019888759, 13020019843, - 13020150931, 13020282013, 13020413117, 13020544189, 13020675289, 13020806387, 13020937459, - 13021068623, 13021199713, 13021330787, 13021461917, 13021593041, 13021724113, 13021855229, - 13021986323, 13022117413, 13022248493, 13022379569, 13022510717, 13022641829, 13022772901, - 13022904007, 13023035087, 13023166207, 13023297283, 13023428359, 13023559477, 13023690571, - 13023821659, 13023952757, 13024083857, 13024214953, 13024346029, 13024477111, 13024608197, - 13024739291, 13024870373, 13025001481, 13025132651, 13025263733, 13025394817, 13025525923, - 13025657011, 13025788117, 13025919209, 13026050333, 13026181417, 13026312521, 13026443603, - 13026574679, 13026705781, 13026836861, 13026967937, 13027099049, 13027230173, 13027361261, - 13027492349, 13027623421, 13027754533, 13027885609, 13028016709, 13028147809, 13028278889, - 13028409983, 13028541067, 13028672141, 13028803231, 13028934311, 13029065383, 13029196463, - 13029327631, 13029458759, 13029589841, 13029720929, 13029852023, 13029983201, 13030114313, - 13030245427, 13030376509, 13030507657, 13030638749, 13030769821, 13030900963, 13031032039, - 13031163113, 13031294197, 13031425273, 13031556359, 13031687441, 13031818517, 13031949631, - 13032080717, 13032211789, 13032342881, 13032473959, 13032605051, 13032736159, 13032867247, - 13032998351, 13033129427, 13033260517, 13033391627, 13033522703, 13033653799, 13033784887, - 13033915981, 13034047073, 13034178161, 13034309333, 13034440409, 13034571497, 13034702573, - 13034833673, 13034964751, 13035095851, 13035226927, 13035358013, 13035489127, 13035620207, - 13035751279, 13035882373, 13036013447, 13036144529, 13036275617, 13036406689, 13036537763, - 13036668859, 13036799953, 13036931051, 13037062163, 13037193241, 13037324317, 13037455421, - 13037586533, 13037717621, 13037848717, 13037979793, 13038110867, 13038241943, 13038373031, - 13038504137, 13038635227, 13038766313, 13038897401, 13039028489, 13039159577, 13039290659, - 13039421737, 13039552819, 13039683931, 13039815011, 13039946083, 13040077201, 13040208281, - 13040339381, 13040470453, 13040601619, 13040732701, 13040863777, 13040994859, 13041125983, - 13041257077, 13041388163, 13041519259, 13041650357, 13041781453, 13041912529, 13042043603, - 13042174687, 13042305761, 13042436837, 13042567913, 13042699031, 13042830109, 13042961189, - 13043092331, 13043223407, 13043354483, 13043485561, 13043616643, 13043747807, 13043878901, - 13044009991, 13044141109, 13044272209, 13044403303, 13044534383, 13044665461, 13044796537, - 13044927619, 13045058693, 13045189777, 13045320851, 13045451941, 13045583021, 13045714151, - 13045845223, 13045976309, 13046107387, 13046238467, 13046369573, 13046500669, 13046631791, - 13046762887, 13046893961, 13047025081, 13047156163, 13047287263, 13047418337, 13047549439, - 13047680599, 13047811691, 13047942781, 13048073873, 13048204963, 13048336061, 13048467149, - 13048598249, 13048729339, 13048860439, 13048991519, 13049122607, 13049253709, 13049384791, - 13049515873, 13049646949, 13049778083, 13049909183, 13050040261, 13050171349, 13050302429, - 13050433511, 13050564617, 13050695743, 13050826823, 13050957911, 13051088983, 13051220057, - 13051351147, 13051482229, 13051613329, 13051744417, 13051875497, 13052006587, 13052137663, - 13052268743, 13052399839, 13052530913, 13052662001, 13052793097, 13052924179, 13053055283, - 13053186397, 13053317479, 13053448591, 13053579677, 13053710777, 13053841877, 13053972949, - 13054104029, 13054235107, 13054366219, 13054497317, 13054628399, 13054759489, 13054890599, - 13055021677, 13055152763, 13055283931, 13055415007, 13055546107, 13055677183, 13055808281, - 13055939353, 13056070429, 13056201503, 13056332587, 13056463733, 13056594809, 13056725893, - 13056856973, 13056988067, 13057119139, 13057250221, 13057381321, 13057512431, 13057643507, - 13057774607, 13057905691, 13058036777, 13058167849, 13058298923, 13058429999, 13058561093, - 13058692169, 13058823247, 13058954323, 13059085399, 13059216479, 13059347557, 13059478631, - 13059609713, 13059740789, 13059871879, 13060002971, 13060134047, 13060265123, 13060396207, - 13060527283, 13060658371, 13060789457, 13060920547, 13061051629, 13061182709, 13061313787, - 13061444863, 13061575963, 13061707037, 13061838143, 13061969251, 13062100327, 13062231409, - 13062362483, 13062493583, 13062624661, 13062755743, 13062886841, 13063017917, 13063149067, - 13063280143, 13063411219, 13063542329, 13063673407, 13063804549, 13063935629, 13064066737, - 13064197829, 13064328917, 13064460001, 13064591129, 13064722213, 13064853287, 13064984363, - 13065115499, 13065246599, 13065377713, 13065508787, 13065639889, 13065770989, 13065902119, - 13066033231, 13066164379, 13066295521, 13066426601, 13066557677, 13066688773, 13066819847, - 13066950931, 13067082019, 13067213099, 13067344181, 13067475257, 13067606329, 13067737433, - 13067868511, 13067999597, 13068130687, 13068261797, 13068392893, 13068523991, 13068655079, - 13068786151, 13068917261, 13069048361, 13069179443, 13069310557, 13069441643, 13069572743, - 13069703851, 13069834961, 13069966033, 13070097109, 13070228209, 13070359301, 13070490373, - 13070621477, 13070752567, 13070883643, 13071014767, 13071145849, 13071276943, 13071408029, - 13071539111, 13071670193, 13071801307, 13071932399, 13072063483, 13072194559, 13072325653, - 13072456729, 13072587877, 13072718957, 13072850033, 13072981123, 13073112223, 13073243317, - 13073374453, 13073505527, 13073636657, 13073767769, 13073898847, 13074029923, 13074161063, - 13074292223, 13074423311, 13074554393, 13074685469, 13074816551, 13074947651, 13075078739, - 13075209811, 13075340923, 13075472027, 13075603139, 13075734211, 13075865287, 13075996379, - 13076127451, 13076258537, 13076389631, 13076520707, 13076651813, 13076782903, 13076914013, - 13077045101, 13077176179, 13077307259, 13077438331, 13077569431, 13077700523, 13077831607, - 13077962693, 13078093771, 13078224931, 13078356041, 13078487129, 13078618277, 13078749377, - 13078880483, 13079011567, 13079142647, 13079273723, 13079404831, 13079535923, 13079667001, - 13079798099, 13079929241, 13080060407, 13080191507, 13080322579, 13080453653, 13080584743, - 13080715831, 13080846967, 13080978059, 13081109131, 13081240217, 13081371311, 13081502393, - 13081633559, 13081764637, 13081895711, 13082026801, 13082157877, 13082289001, 13082420093, - 13082551231, 13082682307, 13082813389, 13082944481, 13083075559, 13083206639, 13083337739, - 13083468817, 13083599909, 13083731021, 13083862097, 13083993217, 13084124351, 13084255439, - 13084386529, 13084517609, 13084648697, 13084779769, 13084910903, 13085042011, 13085173103, - 13085304179, 13085435263, 13085566339, 13085697421, 13085828507, 13085959589, 13086090701, - 13086221821, 13086352919, 13086484051, 13086615127, 13086746201, 13086877339, 13087008427, - 13087139503, 13087270579, 13087401659, 13087532767, 13087663871, 13087794959, 13087926031, - 13088057117, 13088188199, 13088319323, 13088450407, 13088581483, 13088712577, 13088843683, - 13088974793, 13089105877, 13089236959, 13089368053, 13089499169, 13089630289, 13089761389, - 13089892477, 13090023553, 13090154653, 13090285751, 13090416863, 13090547947, 13090679027, - 13090810147, 13090941263, 13091072339, 13091203423, 13091334497, 13091465617, 13091596729, - 13091727851, 13091858959, 13091990063, 13092121153, 13092252241, 13092383351, 13092514423, - 13092645551, 13092776713, 13092907787, 13093038863, 13093169963, 13093301047, 13093432129, - 13093563209, 13093694297, 13093825373, 13093956451, 13094087527, 13094218639, 13094349743, - 13094480849, 13094611927, 13094743003, 13094874097, 13095005177, 13095136277, 13095267377, - 13095398461, 13095529553, 13095660631, 13095791717, 13095922789, 13096053863, 13096184989, - 13096316069, 13096447163, 13096578283, 13096709393, 13096840469, 13096971551, 13097102633, - 13097233711, 13097364793, 13097495869, 13097626951, 13097758027, 13097889113, 13098020249, - 13098151333, 13098282427, 13098413507, 13098544601, 13098675683, 13098806801, 13098937879, - 13099068953, 13099200041, 13099331129, 13099462219, 13099593329, 13099724413, 13099855487, - 13099986569, 13100117677, 13100248751, 13100379833, 13100510921, 13100642011, 13100773099, - 13100904233, 13101035371, 13101166447, 13101297527, 13101428609, 13101559693, 13101690779, - 13101821861, 13101952937, 13102084057, 13102215169, 13102346251, 13102477361, 13102608439, - 13102739543, 13102870633, 13103001707, 13103132831, 13103263909, 13103395001, 13103526089, - 13103657179, 13103788283, 13103919407, 13104050497, 13104181591, 13104312677, 13104443789, - 13104574891, 13104705979, 13104837077, 13104968171, 13105099261, 13105230349, 13105361431, - 13105492531, 13105623607, 13105754707, 13105885787, 13106016863, 13106147963, 13106279089, - 13106410189, 13106541263, 13106672347, 13106803433, 13106934587, 13107065711, 13107196799, - 13107327907, 13107459023, 13107590101, 13107721177, 13107852253, 13107983347, 13108114423, - 13108245551, 13108376639, 13108507771, 13108638913, 13108770007, 13108901119, 13109032207, - 13109163289, 13109294377, 13109425451, 13109556529, 13109687609, 13109818697, 13109949833, - 13110080909, 13110211987, 13110343063, 13110474203, 13110605293, 13110736369, 13110867457, - 13110998531, 13111129643, 13111260719, 13111391791, 13111522877, 13111653979, 13111785067, - 13111916141, 13112047213, 13112178301, 13112309377, 13112440463, 13112571539, 13112702657, - 13112833753, 13112964869, 13113095951, 13113227027, 13113358147, 13113489239, 13113620339, - 13113751421, 13113882499, 13114013581, 13114144657, 13114275737, 13114406827, 13114537913, - 13114669021, 13114800107, 13114931191, 13115062309, 13115193383, 13115324471, 13115455543, - 13115586623, 13115717701, 13115848783, 13115979871, 13116111023, 13116242137, 13116373211, - 13116504283, 13116635381, 13116766459, 13116897557, 13117028653, 13117159813, 13117290919, - 13117422001, 13117553087, 13117684207, 13117815371, 13117946447, 13118077543, 13118208619, - 13118339693, 13118470777, 13118601863, 13118732971, 13118864071, 13118995159, 13119126259, - 13119257341, 13119388423, 13119519593, 13119650681, 13119781783, 13119912893, 13120043983, - 13120175063, 13120306159, 13120437247, 13120568323, 13120699409, 13120830509, 13120961587, - 13121092667, 13121223767, 13121354887, 13121485967, 13121617043, 13121748127, 13121879203, - 13122010327, 13122141413, 13122272497, 13122403573, 13122534671, 13122665749, 13122796829, - 13122927911, 13123059043, 13123190177, 13123321249, 13123452367, 13123583477, 13123714573, - 13123845667, 13123976771, 13124107957, 13124239033, 13124370113, 13124501189, 13124632271, - 13124763347, 13124894437, 13125025519, 13125156601, 13125287701, 13125418777, 13125549919, - 13125680993, 13125812137, 13125943247, 13126074329, 13126205437, 13126336513, 13126467587, - 13126598687, 13126729771, 13126860883, 13126991993, 13127123081, 13127254177, 13127385251, - 13127516341, 13127647457, 13127778541, 13127909621, 13128040697, 13128171773, 13128302851, - 13128433937, 13128565097, 13128696181, 13128827281, 13128958369, 13129089461, 13129220539, - 13129351619, 13129482697, 13129613773, 13129744871, 13129875943, 13130007031, 13130138113, - 13130269193, 13130400307, 13130531431, 13130662511, 13130793607, 13130924683, 13131055789, - 13131186889, 13131317971, 13131449053, 13131580153, 13131711239, 13131842329, 13131973417, - 13132104523, 13132235609, 13132366727, 13132497799, 13132628879, 13132759951, 13132891069, - 13133022169, 13133153261, 13133284337, 13133415409, 13133546507, 13133677619, 13133808739, - 13133939827, 13134070907, 13134201979, 13134333089, 13134464171, 13134595261, 13134726343, - 13134857419, 13134988501, 13135119607, 13135250699, 13135381793, 13135512889, 13135644013, - 13135775117, 13135906193, 13136037289, 13136168401, 13136299493, 13136430589, 13136561701, - 13136692783, 13136823857, 13136954947, 13137086057, 13137217133, 13137348227, 13137479321, - 13137610393, 13137741481, 13137872557, 13138003657, 13138134733, 13138265851, 13138396969, - 13138528049, 13138659161, 13138790267, 13138921349, 13139052457, 13139183537, 13139314619, - 13139445701, 13139576783, 13139707877, 13139838953, 13139970047, 13140101147, 13140232241, - 13140363337, 13140494441, 13140625573, 13140756677, 13140887777, 13141018871, 13141149943, - 13141281029, 13141412129, 13141543213, 13141674317, 13141805401, 13141936519, 13142067593, - 13142198677, 13142329763, 13142460841, 13142591921, 13142723023, 13142854099, 13142985181, - 13143116269, 13143247391, 13143378499, 13143509573, 13143640667, 13143771749, 13143902831, - 13144033909, 13144164997, 13144296089, 13144427173, 13144558319, 13144689427, 13144820509, - 13144951591, 13145082667, 13145213749, 13145344831, 13145475971, 13145607047, 13145738173, - 13145869249, 13146000403, 13146131477, 13146262553, 13146393661, 13146524773, 13146655853, - 13146786943, 13146918073, 13147049171, 13147180261, 13147311347, 13147442431, 13147573519, - 13147704611, 13147835737, 13147966831, 13148097947, 13148229043, 13148360123, 13148491211, - 13148622323, 13148753419, 13148884493, 13149015571, 13149146683, 13149277763, 13149408871, - 13149539947, 13149671023, 13149802097, 13149933197, 13150064269, 13150195361, 13150326463, - 13150457557, 13150588637, 13150719737, 13150850813, 13150981897, 13151113033, 13151244109, - 13151375191, 13151506271, 13151637349, 13151768423, 13151899531, 13152030659, 13152161731, - 13152292807, 13152423917, 13152555001, 13152686083, 13152817163, 13152948239, 13153079321, - 13153210397, 13153341479, 13153472581, 13153603663, 13153734743, 13153865827, 13153996927, - 13154128019, 13154259101, 13154390189, 13154521279, 13154652391, 13154783479, 13154914567, - 13155045697, 13155176777, 13155307853, 13155438929, 13155570011, 13155701101, 13155832243, - 13155963323, 13156094423, 13156225583, 13156356677, 13156487753, 13156618859, 13156749953, - 13156881029, 13157012101, 13157143177, 13157274271, 13157405351, 13157536433, 13157667539, - 13157798639, 13157929717, 13158060791, 13158191899, 13158322997, 13158454093, 13158585197, - 13158716269, 13158847363, 13158978461, 13159109569, 13159240667, 13159371761, 13159502833, - 13159633933, 13159765037, 13159896119, 13160027191, 13160158301, 13160289377, 13160420459, - 13160551541, 13160682659, 13160813747, 13160944831, 13161075943, 13161207061, 13161338243, - 13161469357, 13161600449, 13161731533, 13161862667, 13161993743, 13162124849, 13162255921, - 13162387033, 13162518137, 13162649221, 13162780321, 13162911401, 13163042479, 13163173579, - 13163304677, 13163435783, 13163566861, 13163697961, 13163829059, 13163960137, 13164091223, - 13164222311, 13164353407, 13164484507, 13164615613, 13164746689, 13164877769, 13165008859, - 13165139963, 13165271083, 13165402177, 13165533287, 13165664371, 13165795529, 13165926611, - 13166057713, 13166188787, 13166319961, 13166451043, 13166582119, 13166713199, 13166844287, - 13166975369, 13167106451, 13167237553, 13167368629, 13167499703, 13167630799, 13167761879, - 13167892957, 13168024057, 13168155139, 13168286213, 13168417289, 13168548377, 13168679453, - 13168810531, 13168941607, 13169072711, 13169203811, 13169334949, 13169466031, 13169597113, - 13169728199, 13169859281, 13169990359, 13170121441, 13170252541, 13170383623, 13170514727, - 13170645809, 13170776893, 13170907973, 13171039087, 13171170191, 13171301263, 13171432369, - 13171563443, 13171694519, 13171825613, 13171956697, 13172087777, 13172218877, 13172349959, - 13172481103, 13172612263, 13172743411, 13172874487, 13173005569, 13173136643, 13173267761, - 13173398891, 13173529991, 13173661091, 13173792173, 13173923251, 13174054367, 13174185443, - 13174316527, 13174447621, 13174578707, 13174709791, 13174840867, 13174972061, 13175103157, - 13175234263, 13175365349, 13175496449, 13175627537, 13175758619, 13175889691, 13176020797, - 13176151883, 13176283027, 13176414109, 13176545219, 13176676291, 13176807377, 13176938477, - 13177069579, 13177200671, 13177331747, 13177462843, 13177593931, 13177725061, 13177856137, - 13177987219, 13178118301, 13178249419, 13178380529, 13178511607, 13178642689, 13178773789, - 13178904863, 13179035951, 13179167033, 13179298109, 13179429209, 13179560287, 13179691363, - 13179822463, 13179953539, 13180084637, 13180215709, 13180346801, 13180477879, 13180608971, - 13180740049, 13180871177, 13181002283, 13181133373, 13181264461, 13181395537, 13181526667, - 13181657773, 13181788849, 13181919977, 13182051049, 13182182161, 13182313237, 13182444343, - 13182575423, 13182706501, 13182837581, 13182968653, 13183099733, 13183230829, 13183361941, - 13183493041, 13183624159, 13183755241, 13183886333, 13184017409, 13184148491, 13184279593, - 13184410693, 13184541803, 13184672887, 13184803991, 13184935067, 13185066157, 13185197239, - 13185328313, 13185459473, 13185590597, 13185721687, 13185852787, 13185983911, 13186115039, - 13186246111, 13186377223, 13186508317, 13186639399, 13186770497, 13186901587, 13187032673, - 13187163757, 13187294947, 13187426023, 13187557133, 13187688209, 13187819291, 13187950459, - 13188081541, 13188212629, 13188343703, 13188474779, 13188605861, 13188736949, 13188868027, - 13188999127, 13189130239, 13189261363, 13189392439, 13189523591, 13189654679, 13189785761, - 13189916891, 13190047963, 13190179097, 13190310193, 13190441293, 13190572387, 13190703467, - 13190834543, 13190965637, 13191096733, 13191227813, 13191358897, 13191489973, 13191621049, - 13191752129, 13191883253, 13192014337, 13192145411, 13192276501, 13192407577, 13192538659, - 13192669759, 13192800847, 13192931977, 13193063057, 13193194129, 13193325239, 13193456323, - 13193587399, 13193718493, 13193849587, 13193980661, 13194111743, 13194242821, 13194373901, - 13194504997, 13194636107, 13194767207, 13194898303, 13195029401, 13195160477, 13195291559, - 13195422659, 13195553737, 13195684829, 13195815917, 13195946993, 13196078081, 13196209153, - 13196340247, 13196471347, 13196602439, 13196733521, 13196864609, 13196995697, 13197126823, - 13197257897, 13197388969, 13197520057, 13197651133, 13197782243, 13197913321, 13198044397, - 13198175503, 13198306619, 13198437709, 13198568797, 13198699879, 13198830973, 13198962071, - 13199093179, 13199224261, 13199355341, 13199486429, 13199617517, 13199748607, 13199879713, - 13200010787, 13200141859, 13200272941, 13200404017, 13200535121, 13200666203, 13200797299, - 13200928373, 13201059451, 13201190539, 13201321663, 13201452739, 13201583821, 13201714931, - 13201846033, 13201977127, 13202108203, 13202239277, 13202370463, 13202501551, 13202632627, - 13202763713, 13202894791, 13203025903, 13203156977, 13203288061, 13203419149, 13203550253, - 13203681341, 13203812417, 13203943591, 13204074679, 13204205761, 13204336837, 13204467911, - 13204599019, 13204730101, 13204861181, 13204992293, 13205123369, 13205254483, 13205385587, - 13205516669, 13205647757, 13205778841, 13205909923, 13206041003, 13206172099, 13206303193, - 13206434317, 13206565451, 13206696557, 13206827633, 13206958711, 13207089827, 13207220909, - 13207352021, 13207483099, 13207614179, 13207745261, 13207876333, 13208007419, 13208138497, - 13208269609, 13208400683, 13208531779, 13208662853, 13208793929, 13208925011, 13209056099, - 13209187171, 13209318247, 13209449417, 13209580507, 13209711607, 13209842689, 13209973769, - 13210104877, 13210235993, 13210367081, 13210498177, 13210629259, 13210760351, 13210891427, - 13211022511, 13211153591, 13211284673, 13211415799, 13211546903, 13211678041, 13211809123, - 13211940197, 13212071297, 13212202369, 13212333499, 13212464579, 13212595661, 13212726773, - 13212857893, 13212988967, 13213120097, 13213251211, 13213382321, 13213513399, 13213644481, - 13213775581, 13213906669, 13214037743, 13214168827, 13214299907, 13214430997, 13214562083, - 13214693161, 13214824241, 13214955317, 13215086399, 13215217471, 13215348551, 13215479623, - 13215610697, 13215741769, 13215872867, 13216003939, 13216135013, 13216266139, 13216397251, - 13216528337, 13216659409, 13216790501, 13216921631, 13217052727, 13217183809, 13217314889, - 13217445979, 13217577151, 13217708243, 13217839331, 13217970413, 13218101527, 13218232603, - 13218363689, 13218494761, 13218625877, 13218756959, 13218888047, 13219019183, 13219150267, - 13219281367, 13219412441, 13219543517, 13219674607, 13219805699, 13219936771, 13220067853, - 13220198933, 13220330009, 13220461081, 13220592163, 13220723267, 13220854349, 13220985433, - 13221116581, 13221247661, 13221378743, 13221509831, 13221640909, 13221771989, 13221903061, - 13222034149, 13222165261, 13222296343, 13222427419, 13222558493, 13222689643, 13222820731, - 13222951813, 13223082907, 13223214077, 13223345183, 13223476271, 13223607343, 13223738419, - 13223869513, 13224000593, 13224131731, 13224262811, 13224393883, 13224524977, 13224656059, - 13224787159, 13224918241, 13225049317, 13225180393, 13225311511, 13225442617, 13225573709, - 13225704787, 13225835879, 13225966951, 13226098097, 13226229187, 13226360297, 13226491423, - 13226622503, 13226753581, 13226884679, 13227015751, 13227146827, 13227277913, 13227409033, - 13227540119, 13227671213, 13227802303, 13227933379, 13228064453, 13228195529, 13228326613, - 13228457713, 13228588817, 13228719913, 13228850993, 13228982069, 13229113151, 13229244227, - 13229375317, 13229506391, 13229637479, 13229768561, 13229899649, 13230030727, 13230161827, - 13230292919, 13230423991, 13230555067, 13230686141, 13230817231, 13230948317, 13231079423, - 13231210513, 13231341589, 13231472663, 13231603739, 13231734821, 13231865903, 13231996979, - 13232128073, 13232259169, 13232390243, 13232521327, 13232652427, 13232783507, 13232914589, - 13233045677, 13233176779, 13233307859, 13233438997, 13233570079, 13233701207, 13233832279, - 13233963367, 13234094441, 13234225519, 13234356631, 13234487713, 13234618801, 13234749887, - 13234880999, 13235012081, 13235143153, 13235274229, 13235405327, 13235536417, 13235667499, - 13235798591, 13235929687, 13236060779, 13236191867, 13236322943, 13236454019, 13236585119, - 13236716191, 13236847307, 13236978389, 13237109467, 13237240547, 13237371619, 13237502717, - 13237633793, 13237764893, 13237895999, 13238027071, 13238158147, 13238289277, 13238420383, - 13238551481, 13238682593, 13238813671, 13238944751, 13239075823, 13239206923, 13239337999, - 13239469109, 13239600229, 13239731333, 13239862421, 13239993509, 13240124627, 13240255729, - 13240386823, 13240517921, 13240649011, 13240780121, 13240911251, 13241042351, 13241173441, - 13241304521, 13241435629, 13241566727, 13241697809, 13241828891, 13241959967, 13242091043, - 13242222143, 13242353219, 13242484319, 13242615403, 13242746567, 13242877649, 13243008743, - 13243139827, 13243270913, 13243401989, 13243533131, 13243664209, 13243795289, 13243926373, - 13244057447, 13244188547, 13244319631, 13244450759, 13244581837, 13244712913, 13244844037, - 13244975113, 13245106187, 13245237259, 13245368347, 13245499471, 13245630577, 13245761653, - 13245892729, 13246023809, 13246154881, 13246285999, 13246417081, 13246548157, 13246679231, - 13246810307, 13246941397, 13247072473, 13247203547, 13247334623, 13247465701, 13247596777, - 13247727869, 13247858947, 13247990051, 13248121129, 13248252209, 13248383297, 13248514373, - 13248645523, 13248776609, 13248907699, 13249038779, 13249169863, 13249300943, 13249432019, - 13249563109, 13249694239, 13249825327, 13249956409, 13250087483, 13250218559, 13250349643, - 13250480767, 13250611841, 13250742943, 13250874029, 13251005107, 13251136181, 13251267313, - 13251398387, 13251529463, 13251660559, 13251791633, 13251922711, 13252053797, 13252184903, - 13252315997, 13252447069, 13252578161, 13252709237, 13252840343, 13252971421, 13253102507, - 13253233597, 13253364673, 13253495777, 13253626849, 13253757943, 13253889031, 13254020137, - 13254151219, 13254282317, 13254413437, 13254544529, 13254675619, 13254806699, 13254937793, - 13255068901, 13255199977, 13255331071, 13255462151, 13255593283, 13255724413, 13255855511, - 13255986593, 13256117711, 13256248847, 13256379919, 13256510999, 13256642117, 13256773223, - 13256904301, 13257035413, 13257166537, 13257297611, 13257428711, 13257559811, 13257690931, - 13257822023, 13257953129, 13258084201, 13258215287, 13258346363, 13258477469, 13258608541, - 13258739629, 13258870747, 13259001823, 13259133001, 13259264101, 13259395183, 13259526277, - 13259657351, 13259788433, 13259919529, 13260050603, 13260181703, 13260312809, 13260443951, - 13260575087, 13260706183, 13260837263, 13260968339, 13261099417, 13261230491, 13261361573, - 13261492649, 13261623733, 13261754887, 13261885991, 13262017063, 13262148139, 13262279221, - 13262410303, 13262541389, 13262672471, 13262803553, 13262934647, 13263065743, 13263196831, - 13263327907, 13263458993, 13263590071, 13263721157, 13263852247, 13263983323, 13264114397, - 13264245473, 13264376551, 13264507661, 13264638791, 13264769873, 13264900993, 13265032069, - 13265163167, 13265294249, 13265425361, 13265556517, 13265687597, 13265818669, 13265949743, - 13266080819, 13266211943, 13266343049, 13266474121, 13266605207, 13266736291, 13266867389, - 13266998471, 13267129543, 13267260623, 13267391741, 13267522813, 13267653911, 13267784989, - 13267916093, 13268047207, 13268178289, 13268309363, 13268440457, 13268571599, 13268702701, - 13268833783, 13268964857, 13269095951, 13269227047, 13269358127, 13269489227, 13269620327, - 13269751511, 13269882601, 13270013677, 13270144751, 13270275827, 13270406917, 13270537991, - 13270669079, 13270800163, 13270931257, 13271062361, 13271193443, 13271324531, 13271455633, - 13271586719, 13271717827, 13271848913, 13271980009, 13272111091, 13272242171, 13272373253, - 13272504347, 13272635419, 13272766513, 13272897587, 13273028689, 13273159829, 13273290907, - 13273422013, 13273553089, 13273684181, 13273815253, 13273946333, 13274077489, 13274208601, - 13274339681, 13274470753, 13274601841, 13274732929, 13274864021, 13274995093, 13275126173, - 13275257257, 13275388333, 13275519409, 13275650483, 13275781567, 13275912647, 13276043743, - 13276174819, 13276305947, 13276437037, 13276568113, 13276699187, 13276830271, 13276961419, - 13277092501, 13277223587, 13277354659, 13277485769, 13277616883, 13277747969, 13277879081, - 13278010169, 13278141257, 13278272389, 13278403471, 13278534551, 13278665629, 13278796717, - 13278927797, 13279058873, 13279189967, 13279321051, 13279452161, 13279583287, 13279714369, - 13279845457, 13279976537, 13280107613, 13280238757, 13280369833, 13280500907, 13280631979, - 13280763059, 13280894131, 13281025211, 13281156299, 13281287387, 13281418477, 13281549559, - 13281680639, 13281811729, 13281942809, 13282073881, 13282204997, 13282336069, 13282467167, - 13282598311, 13282729423, 13282860497, 13282991573, 13283122651, 13283253727, 13283384801, - 13283515873, 13283646973, 13283778089, 13283909161, 13284040271, 13284171359, 13284302453, - 13284433537, 13284564637, 13284695813, 13284826889, 13284957979, 13285089089, 13285220213, - 13285351291, 13285482421, 13285613501, 13285744607, 13285875689, 13286006761, 13286137871, - 13286268949, 13286400053, 13286531177, 13286662261, 13286793337, 13286924437, 13287055519, - 13287186593, 13287317669, 13287448747, 13287579859, 13287710957, 13287842083, 13287973157, - 13288104241, 13288235381, 13288366463, 13288497539, 13288628621, 13288759721, 13288890827, - 13289021899, 13289153021, 13289284093, 13289415187, 13289546261, 13289677391, 13289808491, - 13289939587, 13290070691, 13290201773, 13290332863, 13290464029, 13290595111, 13290726209, - 13290857287, 13290988421, 13291119511, 13291250587, 13291381669, 13291512779, 13291643879, - 13291774963, 13291906049, 13292037131, 13292168203, 13292299289, 13292430413, 13292561489, - 13292692579, 13292823671, 13292954761, 13293085837, 13293216917, 13293348059, 13293479153, - 13293610249, 13293741337, 13293872437, 13294003517, 13294134593, 13294265671, 13294396783, - 13294527887, 13294658981, 13294790053, 13294921201, 13295052301, 13295183393, 13295314481, - 13295445563, 13295576647, 13295707739, 13295838811, 13295969893, 13296101069, 13296232177, - 13296363257, 13296494353, 13296625469, 13296756589, 13296887699, 13297018783, 13297149863, - 13297280951, 13297412059, 13297543151, 13297674263, 13297805347, 13297936439, 13298067533, - 13298198647, 13298329757, 13298460869, 13298591959, 13298723063, 13298854139, 13298985223, - 13299116323, 13299247447, 13299378553, 13299509647, 13299640723, 13299771833, 13299902909, - 13300034021, 13300165133, 13300296211, 13300427303, 13300558417, 13300689499, 13300820573, - 13300951649, 13301082787, 13301213867, 13301344939, 13301476037, 13301607127, 13301738249, - 13301869331, 13302000403, 13302131519, 13302262591, 13302393667, 13302524771, 13302655867, - 13302786941, 13302918017, 13303049147, 13303180223, 13303311311, 13303442407, 13303573487, - 13303704599, 13303835681, 13303966757, 13304097839, 13304228941, 13304360023, 13304491097, - 13304622169, 13304753263, 13304884339, 13305015467, 13305146627, 13305277703, 13305408803, - 13305539899, 13305670991, 13305802079, 13305933191, 13306064279, 13306195351, 13306326433, - 13306457533, 13306588609, 13306719691, 13306850797, 13306981871, 13307112943, 13307244019, - 13307375099, 13307506181, 13307637253, 13307768363, 13307899441, 13308030577, 13308161729, - 13308292817, 13308423893, 13308554977, 13308686107, 13308817189, 13308948269, 13309079383, - 13309210483, 13309341557, 13309472651, 13309603751, 13309734827, 13309865911, 13309997003, - 13310128127, 13310259223, 13310390311, 13310521423, 13310652541, 13310783617, 13310914691, - 13311045799, 13311176899, 13311307979, 13311439069, 13311570149, 13311701297, 13311832403, - 13311963491, 13312094567, 13312225669, 13312356749, 13312487843, 13312618919, 13312750001, - 13312881073, 13313012149, 13313143237, 13313274343, 13313405423, 13313536513, 13313667613, - 13313798723, 13313929801, 13314060937, 13314192011, 13314323089, 13314454169, 13314585257, - 13314716329, 13314847411, 13314978491, 13315109629, 13315240703, 13315371799, 13315502891, - 13315633973, 13315765063, 13315896203, 13316027281, 13316158423, 13316289577, 13316420659, - 13316551733, 13316682809, 13316813911, 13316944999, 13317076081, 13317207181, 13317338273, - 13317469387, 13317600511, 13317731593, 13317862687, 13317993763, 13318124839, 13318255919, - 13318387009, 13318518121, 13318649207, 13318780291, 13318911367, 13319042459, 13319173541, - 13319304671, 13319435743, 13319566853, 13319697943, 13319829041, 13319960113, 13320091201, - 13320222287, 13320353363, 13320484439, 13320615563, 13320746657, 13320877747, 13321008839, - 13321139917, 13321270997, 13321402069, 13321533221, 13321664299, 13321795373, 13321926473, - 13322057579, 13322188667, 13322319743, 13322450819, 13322581891, 13322712967, 13322844071, - 13322975203, 13323106361, 13323237457, 13323368533, 13323499613, 13323630703, 13323761779, - 13323892859, 13324023967, 13324155049, 13324286141, 13324417213, 13324548311, 13324679437, - 13324810519, 13324941593, 13325072669, 13325203751, 13325334823, 13325465981, 13325597057, - 13325728153, 13325859293, 13325990369, 13326121463, 13326252571, 13326383663, 13326514771, - 13326645881, 13326776971, 13326908051, 13327039123, 13327170217, 13327301291, 13327432369, - 13327563449, 13327694531, 13327825649, 13327956749, 13328087849, 13328218949, 13328350043, - 13328481119, 13328612191, 13328743303, 13328874379, 13329005461, 13329136627, 13329267737, - 13329398809, 13329529897, 13329660973, 13329792101, 13329923177, 13330054261, 13330185353, - 13330316459, 13330447531, 13330578631, 13330709729, 13330840837, 13330971911, 13331102999, - 13331234093, 13331365189, 13331496287, 13331627369, 13331758457, 13331889551, 13332020629, - 13332151717, 13332282823, 13332413957, 13332545029, 13332676109, 13332807199, 13332938317, - 13333069397, 13333200493, 13333331573, 13333462657, 13333593739, 13333724881, 13333855963, - 13333987049, 13334118137, 13334249209, 13334380313, 13334511397, 13334642479, 13334773607, - 13334904679, 13335035761, 13335166841, 13335297919, 13335429031, 13335560111, 13335691183, - 13335822259, 13335953381, 13336084471, 13336215547, 13336346623, 13336477703, 13336608809, - 13336739893, 13336870993, 13337002079, 13337133197, 13337264287, 13337395403, 13337526487, - 13337657591, 13337788669, 13337919773, 13338050897, 13338181991, 13338313073, 13338444169, - 13338575249, 13338706327, 13338837427, 13338968501, 13339099583, 13339230677, 13339361771, - 13339492853, 13339623931, 13339755017, 13339886089, 13340017169, 13340148259, 13340279339, - 13340410411, 13340541499, 13340672573, 13340803661, 13340934767, 13341065873, 13341196949, - 13341328067, 13341459161, 13341590279, 13341721361, 13341852439, 13341983519, 13342114637, - 13342245727, 13342376807, 13342507901, 13342638977, 13342770061, 13342901137, 13343032231, - 13343163341, 13343294413, 13343425489, 13343556571, 13343687657, 13343818729, 13343949811, - 13344080899, 13344212003, 13344343081, 13344474263, 13344605377, 13344736477, 13344867583, - 13344998677, 13345129751, 13345260827, 13345391909, 13345523027, 13345654099, 13345785197, - 13345916279, 13346047357, 13346178487, 13346309609, 13346440687, 13346571761, 13346702833, - 13346833933, 13346965031, 13347096131, 13347227213, 13347358307, 13347489383, 13347620471, - 13347751577, 13347882649, 13348013737, 13348144811, 13348275887, 13348406977, 13348538051, - 13348669129, 13348800203, 13348931293, 13349062381, 13349193461, 13349324537, 13349455643, - 13349586739, 13349717837, 13349848931, 13349980003, 13350111079, 13350242167, 13350373243, - 13350504367, 13350635479, 13350766567, 13350897641, 13351028749, 13351159859, 13351290961, - 13351422047, 13351553123, 13351684249, 13351815329, 13351946411, 13352077493, 13352208577, - 13352339657, 13352470751, 13352601841, 13352732927, 13352864017, 13352995091, 13353126173, - 13353257273, 13353388379, 13353519467, 13353650567, 13353781663, 13353912739, 13354043839, - 13354174921, 13354305997, 13354437097, 13354568189, 13354699273, 13354830347, 13354961437, - 13355092537, 13355223619, 13355354699, 13355485771, 13355616847, 13355747941, 13355879023, - 13356010099, 13356141173, 13356272353, 13356403427, 13356534511, 13356665743, 13356796819, - 13356927893, 13357058969, 13357190047, 13357321127, 13357452263, 13357583341, 13357714423, - 13357845517, 13357976641, 13358107727, 13358238811, 13358369887, 13358500973, 13358632051, - 13358763169, 13358894251, 13359025333, 13359156407, 13359287533, 13359418619, 13359549719, - 13359680813, 13359811891, 13359943013, 13360074103, 13360205197, 13360336271, 13360467371, - 13360598443, 13360729531, 13360860647, 13360991731, 13361122837, 13361253911, 13361384987, - 13361516083, 13361647157, 13361778233, 13361909377, 13362040469, 13362171541, 13362302623, - 13362433729, 13362564823, 13362695897, 13362826979, 13362958099, 13363089211, 13363220287, - 13363351363, 13363482469, 13363613551, 13363744627, 13363875727, 13364006827, 13364137907, - 13364268991, 13364400089, 13364531161, 13364662237, 13364793317, 13364924393, 13365055477, - 13365186553, 13365317657, 13365448763, 13365579863, 13365710951, 13365842029, 13365973133, - 13366104223, 13366235297, 13366366427, 13366497533, 13366628683, 13366759781, 13366890869, - 13367021947, 13367153021, 13367284193, 13367415311, 13367546383, 13367677457, 13367808533, - 13367939617, 13368070699, 13368201817, 13368332893, 13368464003, 13368595081, 13368726157, - 13368857339, 13368988427, 13369119523, 13369250597, 13369381681, 13369512847, 13369643993, - 13369775113, 13369906211, 13370037293, 13370168369, 13370299447, 13370430527, 13370561639, - 13370692723, 13370823853, 13370955001, 13371086107, 13371217199, 13371348281, 13371479369, - 13371610451, 13371741557, 13371872639, 13372003727, 13372134799, 13372265887, 13372396967, - 13372528069, 13372659163, 13372790237, 13372921369, 13373052479, 13373183561, 13373314693, - 13373445793, 13373576893, 13373707981, 13373839067, 13373970151, 13374101227, 13374232327, - 13374363427, 13374494501, 13374625591, 13374756667, 13374887741, 13375018841, 13375149917, - 13375281013, 13375412119, 13375543193, 13375674271, 13375805351, 13375936517, 13376067589, - 13376198677, 13376329751, 13376460833, 13376591927, 13376723011, 13376854087, 13376985161, - 13377116237, 13377247309, 13377378403, 13377509521, 13377640643, 13377771739, 13377902821, - 13378033897, 13378164997, 13378296121, 13378427201, 13378558301, 13378689383, 13378820459, - 13378951541, 13379082643, 13379213761, 13379344843, 13379475937, 13379607013, 13379738101, - 13379869177, 13380000281, 13380131353, 13380262429, 13380393517, 13380524653, 13380655733, - 13380786833, 13380917909, 13381048981, 13381180069, 13381311149, 13381442231, 13381573349, - 13381704421, 13381835501, 13381966621, 13382097713, 13382228791, 13382359871, 13382490943, - 13382622023, 13382753101, 13382884181, 13383015293, 13383146389, 13383277469, 13383408583, - 13383539669, 13383670759, 13383801853, 13383932959, 13384064063, 13384195177, 13384326271, - 13384457347, 13384588453, 13384719529, 13384850639, 13384981733, 13385112817, 13385243903, - 13385375027, 13385506109, 13385637193, 13385768317, 13385899447, 13386030557, 13386161629, - 13386292723, 13386423797, 13386554869, 13386685957, 13386817039, 13386948139, 13387079219, - 13387210321, 13387341419, 13387472491, 13387603573, 13387734671, 13387865767, 13387996873, - 13388127971, 13388259061, 13388390149, 13388521243, 13388652317, 13388783411, 13388914499, - 13389045581, 13389176677, 13389307759, 13389438859, 13389569939, 13389701029, 13389832109, - 13389963221, 13390094293, 13390225367, 13390356443, 13390487533, 13390618649, 13390749733, - 13390880813, 13391011891, 13391142997, 13391274079, 13391405249, 13391536339, 13391667451, - 13391798627, 13391929751, 13392060859, 13392191977, 13392323057, 13392454129, 13392585203, - 13392716327, 13392847411, 13392978491, 13393109591, 13393240669, 13393371773, 13393502861, - 13393633933, 13393765031, 13393896121, 13394027221, 13394158301, 13394289383, 13394420477, - 13394551553, 13394682641, 13394813717, 13394944789, 13395075877, 13395206953, 13395338041, - 13395469133, 13395600217, 13395731309, 13395862409, 13395993493, 13396124633, 13396255709, - 13396386803, 13396517903, 13396648981, 13396780121, 13396911193, 13397042293, 13397173409, - 13397304497, 13397435609, 13397566697, 13397697779, 13397828861, 13397959963, 13398091037, - 13398222119, 13398353203, 13398484291, 13398615389, 13398746467, 13398877553, 13399008661, - 13399139749, 13399270831, 13399401919, 13399533023, 13399664123, 13399795237, 13399926313, - 13400057389, 13400188469, 13400319553, 13400450737, 13400581837, 13400712917, 13400844113, - 13400975201, 13401106283, 13401237361, 13401368441, 13401499519, 13401630617, 13401761699, - 13401892781, 13402023889, 13402155007, 13402286083, 13402417157, 13402548253, 13402679333, - 13402810411, 13402941493, 13403072567, 13403203657, 13403334733, 13403465837, 13403596933, - 13403728027, 13403859163, 13403990317, 13404121391, 13404252503, 13404383581, 13404514729, - 13404645803, 13404776881, 13404908089, 13405039169, 13405170241, 13405301333, 13405432423, - 13405563511, 13405694597, 13405825669, 13405956757, 13406087837, 13406218993, 13406350079, - 13406481211, 13406612291, 13406743393, 13406874479, 13407005627, 13407136723, 13407267827, - 13407398957, 13407530051, 13407661123, 13407792217, 13407923293, 13408054369, 13408185451, - 13408316527, 13408447651, 13408578731, 13408709813, 13408840897, 13408971971, 13409103083, - 13409234159, 13409365253, 13409496329, 13409627411, 13409758499, 13409889599, 13410020681, - 13410151753, 13410282841, 13410413957, 13410545033, 13410676109, 13410807199, 13410938293, - 13411069391, 13411200527, 13411331599, 13411462697, 13411593781, 13411724873, 13411855949, - 13411987031, 13412118103, 13412249197, 13412380291, 13412511377, 13412642449, 13412773529, - 13412904607, 13413035687, 13413166813, 13413297901, 13413428999, 13413560081, 13413691153, - 13413822241, 13413953351, 13414084427, 13414215557, 13414346639, 13414477721, 13414608799, - 13414739893, 13414871009, 13415002109, 13415133187, 13415264263, 13415395337, 13415526413, - 13415657501, 13415788583, 13415919659, 13416050743, 13416181853, 13416312941, 13416444023, - 13416575113, 13416706231, 13416837311, 13416968413, 13417099573, 13417230679, 13417361753, - 13417492871, 13417623971, 13417755083, 13417886173, 13418017247, 13418148343, 13418279443, - 13418410517, 13418541629, 13418672711, 13418803787, 13418934871, 13419065963, 13419197047, - 13419328121, 13419459197, 13419590287, 13419721373, 13419852469, 13419983569, 13420114649, - 13420245731, 13420376831, 13420507907, 13420639013, 13420770113, 13420901261, 13421032367, - 13421163449, 13421294533, 13421425613, 13421556691, 13421687779, 13421818859, 13421949971, - 13422081097, 13422212173, 13422343279, 13422474419, 13422605501, 13422736573, 13422867673, - 13422998747, 13423129877, 13423260953, 13423392053, 13423523147, 13423654267, 13423785341, - 13423916417, 13424047489, 13424178577, 13424309653, 13424440769, 13424571857, 13424702957, - 13424834069, 13424965181, 13425096253, 13425227357, 13425358433, 13425489529, 13425620627, - 13425751721, 13425882793, 13426013903, 13426144987, 13426276117, 13426407199, 13426538287, - 13426669363, 13426800437, 13426931509, 13427062679, 13427193751, 13427324849, 13427455949, - 13427587067, 13427718149, 13427849251, 13427980327, 13428111409, 13428242497, 13428373583, - 13428504659, 13428635761, 13428766849, 13428897931, 13429029091, 13429160189, 13429291327, - 13429422427, 13429553539, 13429684649, 13429815739, 13429946863, 13430077943, 13430209061, - 13430340173, 13430471267, 13430602343, 13430733419, 13430864549, 13430995631, 13431126703, - 13431257837, 13431388909, 13431519991, 13431651073, 13431782149, 13431913249, 13432044349, - 13432175429, 13432306501, 13432437593, 13432568713, 13432699789, 13432830883, 13432961957, - 13433093033, 13433224139, 13433355223, 13433486303, 13433617381, 13433748473, 13433879561, - 13434010643, 13434141731, 13434272821, 13434403909, 13434535003, 13434666107, 13434797183, - 13434928267, 13435059359, 13435190437, 13435321567, 13435452707, 13435583809, 13435714933, - 13435846013, 13435977089, 13436108167, 13436239247, 13436370361, 13436501437, 13436632513, - 13436763611, 13436894693, 13437025781, 13437156883, 13437288001, 13437419101, 13437550183, - 13437681289, 13437812371, 13437943483, 13438074571, 13438205647, 13438336729, 13438467803, - 13438598897, 13438729973, 13438861049, 13438992137, 13439123209, 13439254321, 13439385403, - 13439516477, 13439647561, 13439778697, 13439909789, 13440040883, 13440171991, 13440303103, - 13440434197, 13440565273, 13440696359, 13440827447, 13440958519, 13441089601, 13441220699, - 13441351771, 13441482853, 13441613953, 13441745039, 13441876127, 13442007209, 13442138287, - 13442269361, 13442400437, 13442531537, 13442662619, 13442793691, 13442924773, 13443055859, - 13443186971, 13443318067, 13443449167, 13443580253, 13443711331, 13443842473, 13443973561, - 13444104637, 13444235711, 13444366787, 13444497883, 13444628963, 13444760071, 13444891151, - 13445022229, 13445153327, 13445284399, 13445415491, 13445546599, 13445677681, 13445808773, - 13445939977, 13446071057, 13446202141, 13446333223, 13446464327, 13446595411, 13446726533, - 13446857653, 13446988747, 13447119859, 13447250963, 13447382051, 13447513127, 13447644229, - 13447775303, 13447906379, 13448037481, 13448168651, 13448299759, 13448430833, 13448561923, - 13448693033, 13448824111, 13448955217, 13449086297, 13449217373, 13449348511, 13449479599, - 13449610711, 13449741827, 13449872903, 13450003991, 13450135073, 13450266169, 13450397249, - 13450528321, 13450659401, 13450790519, 13450921637, 13451052733, 13451183807, 13451314939, - 13451446069, 13451577157, 13451708239, 13451839321, 13451970397, 13452101473, 13452232601, - 13452363677, 13452494749, 13452625831, 13452756907, 13452888017, 13453019093, 13453150169, - 13453281263, 13453412339, 13453543421, 13453674499, 13453805591, 13453936681, 13454067763, - 13454198867, 13454329957, 13454461037, 13454592121, 13454723197, 13454854271, 13454985343, - 13455116417, 13455247493, 13455378631, 13455509719, 13455640829, 13455771977, 13455903067, - 13456034143, 13456165297, 13456296377, 13456427459, 13456558541, 13456689619, 13456820693, - 13456951777, 13457082851, 13457213929, 13457345003, 13457476103, 13457607179, 13457738257, - 13457869333, 13458000421, 13458131539, 13458262621, 13458393713, 13458524813, 13458655943, - 13458787129, 13458918217, 13459049309, 13459180403, 13459311583, 13459442719, 13459573871, - 13459704971, 13459836043, 13459967123, 13460098207, 13460229329, 13460360429, 13460491501, - 13460622587, 13460753671, 13460884747, 13461015829, 13461146903, 13461277997, 13461409127, - 13461540199, 13461671273, 13461802391, 13461933473, 13462064573, 13462195657, 13462326739, - 13462457839, 13462588957, 13462720049, 13462851131, 13462982231, 13463113303, 13463244407, - 13463375567, 13463506663, 13463637751, 13463768831, 13463899907, 13464030989, 13464162097, - 13464293203, 13464424301, 13464555463, 13464686551, 13464817627, 13464948773, 13465079861, - 13465210949, 13465342067, 13465473157, 13465604263, 13465735373, 13465866493, 13465997569, - 13466128649, 13466259743, 13466390843, 13466521927, 13466653033, 13466784127, 13466915201, - 13467046301, 13467177377, 13467308527, 13467439613, 13467570707, 13467701803, 13467832943, - 13467964031, 13468095103, 13468226227, 13468357303, 13468488379, 13468619453, 13468750541, - 13468881617, 13469012693, 13469143801, 13469274883, 13469405969, 13469537099, 13469668187, - 13469799263, 13469930351, 13470061477, 13470192553, 13470323627, 13470454703, 13470585803, - 13470716893, 13470847993, 13470979079, 13471110161, 13471241233, 13471372357, 13471503431, - 13471634503, 13471765577, 13471896649, 13472027731, 13472158807, 13472289947, 13472421071, - 13472552143, 13472683219, 13472814293, 13472945389, 13473076483, 13473207563, 13473338647, - 13473469727, 13473600823, 13473731923, 13473863003, 13473994081, 13474125163, 13474256273, - 13474387387, 13474518469, 13474649579, 13474780663, 13474911757, 13475042837, 13475173931, - 13475305009, 13475436089, 13475567167, 13475698241, 13475829379, 13475960471, 13476091571, - 13476222649, 13476353783, 13476484859, 13476615949, 13476747023, 13476878099, 13477009207, - 13477140293, 13477271477, 13477402577, 13477533757, 13477664891, 13477796011, 13477927091, - 13478058197, 13478189279, 13478320379, 13478451451, 13478582599, 13478713681, 13478844761, - 13478975833, 13479106913, 13479237991, 13479369091, 13479500171, 13479631261, 13479762341, - 13479893437, 13480024511, 13480155631, 13480286707, 13480417781, 13480548859, 13480679969, - 13480811041, 13480942121, 13481073209, 13481204281, 13481335403, 13481466487, 13481597579, - 13481728651, 13481859737, 13481990813, 13482121903, 13482253013, 13482384109, 13482515209, - 13482646283, 13482777377, 13482908513, 13483039639, 13483170739, 13483301827, 13483432903, - 13483563979, 13483695077, 13483826203, 13483957283, 13484088361, 13484219449, 13484350541, - 13484481623, 13484612699, 13484743777, 13484874877, 13485006023, 13485137111, 13485268273, - 13485399391, 13485530501, 13485661589, 13485792737, 13485923833, 13486054913, 13486185989, - 13486317121, 13486448203, 13486579307, 13486710383, 13486841479, 13486972613, 13487103703, - 13487234777, 13487365867, 13487496943, 13487628041, 13487759141, 13487890237, 13488021331, - 13488152411, 13488283513, 13488414593, 13488545689, 13488676801, 13488807881, 13488939011, - 13489070093, 13489201171, 13489332247, 13489463321, 13489594427, 13489725499, 13489856579, - 13489987673, 13490118757, 13490249833, 13490380909, 13490511997, 13490643107, 13490774183, - 13490905279, 13491036367, 13491167467, 13491298607, 13491429683, 13491560801, 13491691891, - 13491822983, 13491954061, 13492085137, 13492216223, 13492347299, 13492478371, 13492609447, - 13492740551, 13492871629, 13493002709, 13493133799, 13493264881, 13493395963, 13493527037, - 13493658151, 13493789263, 13493920337, 13494051409, 13494182491, 13494313607, 13494444697, - 13494575777, 13494706867, 13494837991, 13494969091, 13495100183, 13495231291, 13495362371, - 13495493497, 13495624577, 13495755649, 13495886749, 13496017841, 13496148929, 13496280037, - 13496411143, 13496542219, 13496673293, 13496804369, 13496935447, 13497066521, 13497197639, - 13497328727, 13497459823, 13497590903, 13497721987, 13497853073, 13497984151, 13498115233, - 13498246319, 13498377443, 13498508537, 13498639631, 13498770707, 13498901789, 13499032861, - 13499163961, 13499295053, 13499426189, 13499557261, 13499688359, 13499819483, 13499950559, - 13500081643, 13500212741, 13500343837, 13500474913, 13500606011, 13500737101, 13500868181, - 13500999257, 13501130399, 13501261493, 13501392581, 13501523669, 13501654763, 13501785863, - 13501916951, 13502048051, 13502179151, 13502310251, 13502441353, 13502572429, 13502703503, - 13502834621, 13502965727, 13503096829, 13503227909, 13503358987, 13503490103, 13503621199, - 13503752309, 13503883381, 13504014493, 13504145581, 13504276661, 13504407733, 13504538813, - 13504669939, 13504801039, 13504932121, 13505063213, 13505194289, 13505325371, 13505456473, - 13505587549, 13505718631, 13505849741, 13505980819, 13506111893, 13506242999, 13506374071, - 13506505249, 13506636331, 13506767419, 13506898499, 13507029607, 13507160699, 13507291799, - 13507422881, 13507553963, 13507685039, 13507816111, 13507947197, 13508078323, 13508209439, - 13508340583, 13508471659, 13508602733, 13508733827, 13508864899, 13508995999, 13509127081, - 13509258197, 13509389293, 13509520369, 13509651457, 13509782537, 13509913631, 13510044739, - 13510175831, 13510306913, 13510437991, 13510569071, 13510700149, 13510831231, 13510962307, - 13511093443, 13511224537, 13511355631, 13511486713, 13511617787, 13511748881, 13511879993, - 13512011087, 13512142159, 13512273283, 13512404387, 13512535499, 13512666571, 13512797647, - 13512928721, 13513059793, 13513190881, 13513321957, 13513453081, 13513584173, 13513715263, - 13513846447, 13513977551, 13514108627, 13514239699, 13514370773, 13514501879, 13514633009, - 13514764111, 13514895257, 13515026351, 13515157429, 13515288511, 13515419609, 13515550703, - 13515681791, 13515812879, 13515943963, 13516075039, 13516206169, 13516337273, 13516468367, - 13516599461, 13516730533, 13516861609, 13516992707, 13517123783, 13517254901, 13517385989, - 13517517061, 13517648149, 13517779271, 13517910401, 13518041491, 13518172597, 13518303671, - 13518434747, 13518565849, 13518696929, 13518828067, 13518959149, 13519090223, 13519221301, - 13519352383, 13519483477, 13519614571, 13519745689, 13519876793, 13520007869, 13520138953, - 13520270053, 13520401151, 13520532241, 13520663339, 13520794453, 13520925533, 13521056623, - 13521187699, 13521318791, 13521449863, 13521580967, 13521712129, 13521843227, 13521974303, - 13522105379, 13522236451, 13522367539, 13522498631, 13522629737, 13522760831, 13522891903, - 13523023013, 13523154109, 13523285263, 13523416351, 13523547437, 13523678521, 13523809597, - 13523940701, 13524071791, 13524202919, 13524334039, 13524465113, 13524596191, 13524727273, - 13524858353, 13524989447, 13525120577, 13525251661, 13525382771, 13525513909, 13525644989, - 13525776109, 13525907221, 13526038319, 13526169409, 13526300497, 13526431571, 13526562659, - 13526693749, 13526824823, 13526955919, 13527087001, 13527218077, 13527349151, 13527480229, - 13527611309, 13527742381, 13527873521, 13528004597, 13528135697, 13528266809, 13528397881, - 13528529023, 13528660097, 13528791169, 13528922243, 13529053319, 13529184391, 13529315467, - 13529446573, 13529577679, 13529708771, 13529839847, 13529970929, 13530102023, 13530233159, - 13530364241, 13530495337, 13530626429, 13530757511, 13530888599, 13531019683, 13531150777, - 13531281857, 13531412953, 13531544029, 13531675103, 13531806193, 13531937269, 13532068393, - 13532199469, 13532330549, 13532461627, 13532592751, 13532723839, 13532854943, 13532986043, - 13533117127, 13533248213, 13533379289, 13533510377, 13533641489, 13533772597, 13533903671, - 13534034743, 13534165829, 13534296943, 13534428031, 13534559119, 13534690207, 13534821281, - 13534952381, 13535083483, 13535214557, 13535345657, 13535476741, 13535607817, 13535738903, - 13535869987, 13536001067, 13536132149, 13536263267, 13536394357, 13536525461, 13536656537, - 13536787613, 13536918701, 13537049777, 13537180859, 13537311943, 13537443071, 13537574143, - 13537705231, 13537836379, 13537967491, 13538098583, 13538229689, 13538360807, 13538491991, - 13538623093, 13538754199, 13538885287, 13539016391, 13539147473, 13539278561, 13539409649, - 13539540737, 13539671819, 13539802907, 13539934003, 13540065127, 13540196221, 13540327303, - 13540458413, 13540589527, 13540720657, 13540851749, 13540982827, 13541113919, 13541245001, - 13541376083, 13541507201, 13541638273, 13541769347, 13541900467, 13542031541, 13542162629, - 13542293707, 13542424787, 13542555877, 13542686977, 13542818059, 13542949151, 13543080253, - 13543211333, 13543342409, 13543473481, 13543604587, 13543735687, 13543866797, 13543997891, - 13544129029, 13544260151, 13544391229, 13544522311, 13544653387, 13544784481, 13544915561, - 13545046637, 13545177757, 13545308831, 13545439931, 13545571019, 13545702097, 13545833183, - 13545964261, 13546095337, 13546226413, 13546357519, 13546488611, 13546619759, 13546750871, - 13546881961, 13547013083, 13547144179, 13547275289, 13547406371, 13547537449, 13547668531, - 13547799611, 13547930699, 13548061799, 13548192871, 13548323947, 13548455069, 13548586141, - 13548717223, 13548848297, 13548979373, 13549110467, 13549241549, 13549372631, 13549503731, - 13549634803, 13549765909, 13549897003, 13550028169, 13550159297, 13550290379, 13550421473, - 13550552579, 13550683661, 13550814749, 13550945827, 13551076919, 13551207997, 13551339077, - 13551470203, 13551601277, 13551732373, 13551863467, 13551994543, 13552125623, 13552256699, - 13552387799, 13552518907, 13552649983, 13552781057, 13552912133, 13553043239, 13553174357, - 13553305433, 13553436509, 13553567593, 13553698723, 13553829799, 13553960887, 13554091987, - 13554223141, 13554354217, 13554485299, 13554616403, 13554747517, 13554878599, 13555009691, - 13555140773, 13555271857, 13555402967, 13555534049, 13555665163, 13555796299, 13555927387, - 13556058469, 13556189579, 13556320667, 13556451749, 13556582849, 13556713939, 13556845051, - 13556976193, 13557107309, 13557238411, 13557369487, 13557500587, 13557631679, 13557762761, - 13557893857, 13558024939, 13558156039, 13558287187, 13558418267, 13558549357, 13558680431, - 13558811503, 13558942601, 13559073677, 13559204753, 13559335837, 13559466913, 13559598011, - 13559729083, 13559860217, 13559991293, 13560122371, 13560253493, 13560384619, 13560515693, - 13560646787, 13560777863, 13560908939, 13561040011, 13561171087, 13561302163, 13561433309, - 13561564427, 13561695527, 13561826599, 13561957679, 13562088763, 13562219861, 13562350951, - 13562482039, 13562613143, 13562744303, 13562875397, 13563006481, 13563137561, 13563268633, - 13563399719, 13563530791, 13563661873, 13563792947, 13563924029, 13564055143, 13564186217, - 13564317293, 13564448411, 13564579487, 13564710571, 13564841651, 13564972739, 13565103847, - 13565234959, 13565366041, 13565497117, 13565628281, 13565759353, 13565890453, 13566021533, - 13566152617, 13566283697, 13566414769, 13566545849, 13566676931, 13566808063, 13566939163, - 13567070291, 13567201369, 13567332461, 13567463543, 13567594619, 13567725709, 13567856803, - 13567987889, 13568118973, 13568250053, 13568381131, 13568512207, 13568643281, 13568774357, - 13568905429, 13569036517, 13569167609, 13569298709, 13569429787, 13569560887, 13569691973, - 13569823049, 13569954127, 13570085201, 13570216307, 13570347391, 13570478539, 13570609627, - 13570740721, 13570871807, 13571002883, 13571133959, 13571265031, 13571396119, 13571527199, - 13571658283, 13571789369, 13571920469, 13572051547, 13572182623, 13572313759, 13572444841, - 13572575927, 13572707009, 13572838217, 13572969379, 13573100477, 13573231559, 13573362661, - 13573493831, 13573624903, 13573755977, 13573887073, 13574018149, 13574149229, 13574280301, - 13574411419, 13574542543, 13574673643, 13574804797, 13574935889, 13575067003, 13575198079, - 13575329153, 13575460243, 13575591317, 13575722389, 13575853463, 13575984551, 13576115627, - 13576246703, 13576377791, 13576508867, 13576639957, 13576771049, 13576902121, 13577033251, - 13577164331, 13577295419, 13577426497, 13577557577, 13577688653, 13577819753, 13577950831, - 13578081911, 13578212993, 13578344077, 13578475151, 13578606227, 13578737317, 13578868397, - 13578999503, 13579130629, 13579261711, 13579392793, 13579523873, 13579654969, 13579786043, - 13579917121, 13580048203, 13580179381, 13580310521, 13580441593, 13580572669, 13580703761, - 13580834843, 13580965927, 13581097009, 13581228083, 13581359161, 13581490243, 13581621331, - 13581752447, 13581883597, 13582014751, 13582145827, 13582276919, 13582408019, 13582539107, - 13582670219, 13582801291, 13582932409, 13583063503, 13583194613, 13583325697, 13583456791, - 13583587873, 13583718949, 13583850031, 13583981107, 13584112183, 13584243259, 13584374339, - 13584505447, 13584636529, 13584767629, 13584898703, 13585029793, 13585160879, 13585291997, - 13585423091, 13585554179, 13585685263, 13585816357, 13585947467, 13586078551, 13586209631, - 13586340739, 13586471813, 13586602891, 13586733973, 13586865079, 13586996201, 13587127273, - 13587258403, 13587389503, 13587520591, 13587651683, 13587782773, 13587913847, 13588044979, - 13588176073, 13588307147, 13588438247, 13588569331, 13588700417, 13588831489, 13588962571, - 13589093659, 13589224813, 13589355907, 13589487007, 13589618111, 13589749231, 13589880329, - 13590011417, 13590142507, 13590273607, 13590404699, 13590535817, 13590666907, 13590797981, - 13590929071, 13591060201, 13591191307, 13591322387, 13591453487, 13591584571, 13591715659, - 13591846771, 13591977871, 13592108947, 13592240021, 13592371103, 13592502191, 13592633267, - 13592764417, 13592895497, 13593026593, 13593157679, 13593288763, 13593419867, 13593550961, - 13593682043, 13593813137, 13593944249, 13594075321, 13594206427, 13594337503, 13594468583, - 13594599677, 13594730761, 13594861853, 13594992941, 13595124041, 13595255137, 13595386229, - 13595517311, 13595648383, 13595779489, 13595910569, 13596041651, 13596172771, 13596303883, - 13596434963, 13596566047, 13596697139, 13596828247, 13596959323, 13597090411, 13597221493, - 13597352581, 13597483687, 13597614763, 13597745933, 13597877011, 13598008129, 13598139229, - 13598270321, 13598401409, 13598532499, 13598663581, 13598794663, 13598925793, 13599056869, - 13599187969, 13599319057, 13599450131, 13599581221, 13599712331, 13599843419, 13599974503, - 13600105601, 13600236673, 13600367747, 13600498823, 13600629943, 13600761023, 13600892147, - 13601023223, 13601154337, 13601285437, 13601416511, 13601547667, 13601678747, 13601809831, - 13601940971, 13602072061, 13602203141, 13602334223, 13602465299, 13602596377, 13602727469, - 13602858551, 13602989639, 13603120711, 13603251791, 13603382869, 13603513969, 13603645103, - 13603776181, 13603907281, 13604038387, 13604169463, 13604300539, 13604431639, 13604562773, - 13604693891, 13604824969, 13604956051, 13605087127, 13605218203, 13605349357, 13605480431, - 13605611519, 13605742597, 13605873679, 13606004767, 13606135841, 13606266913, 13606397993, - 13606529113, 13606660187, 13606791277, 13606922387, 13607053501, 13607184587, 13607315713, - 13607446789, 13607577881, 13607709001, 13607840173, 13607971261, 13608102359, 13608233449, - 13608364559, 13608495683, 13608626777, 13608757849, 13608888941, 13609020043, 13609151159, - 13609282279, 13609413379, 13609544471, 13609675561, 13609806643, 13609937717, 13610068837, - 13610199923, 13610331071, 13610462153, 13610593273, 13610724389, 13610855473, 13610986559, - 13611117679, 13611248753, 13611379843, 13611510917, 13611641999, 13611773093, 13611904169, - 13612035263, 13612166341, 13612297441, 13612428527, 13612559677, 13612690759, 13612821853, - 13612952989, 13613084113, 13613215207, 13613346301, 13613477393, 13613608469, 13613739541, - 13613870629, 13614001703, 13614132793, 13614263879, 13614394987, 13614526073, 13614657167, - 13614788273, 13614919403, 13615050511, 13615181599, 13615312679, 13615443799, 13615574881, - 13615705963, 13615837051, 13615968169, 13616099251, 13616230343, 13616361431, 13616492503, - 13616623597, 13616754677, 13616885801, 13617016913, 13617148031, 13617279103, 13617410197, - 13617541279, 13617672389, 13617803477, 13617934549, 13618065631, 13618196717, 13618327823, - 13618458911, 13618590001, 13618721101, 13618852189, 13618983289, 13619114363, 13619245447, - 13619376553, 13619507639, 13619638717, 13619769859, 13619900951, 13620032053, 13620163127, - 13620294203, 13620425293, 13620556381, 13620687463, 13620818539, 13620949613, 13621080689, - 13621211819, 13621342901, 13621474001, 13621605073, 13621736159, 13621867247, 13621998359, - 13622129453, 13622260541, 13622391637, 13622522737, 13622653813, 13622784919, 13622916011, - 13623047111, 13623178183, 13623309269, 13623440359, 13623571433, 13623702509, 13623833659, - 13623964741, 13624095847, 13624226933, 13624358117, 13624489211, 13624620287, 13624751359, - 13624882451, 13625013559, 13625144633, 13625275723, 13625406803, 13625537903, 13625668981, - 13625800057, 13625931131, 13626062227, 13626193303, 13626324391, 13626455467, 13626586541, - 13626717631, 13626848759, 13626979843, 13627110941, 13627242017, 13627373101, 13627504183, - 13627635331, 13627766437, 13627897513, 13628028593, 13628159711, 13628290789, 13628421871, - 13628552981, 13628684123, 13628815237, 13628946311, 13629077383, 13629208477, 13629339551, - 13629470629, 13629601747, 13629732827, 13629863941, 13629995051, 13630126127, 13630257203, - 13630388279, 13630519351, 13630650437, 13630781513, 13630912621, 13631043709, 13631174783, - 13631305861, 13631436937, 13631568023, 13631699119, 13631830207, 13631961323, 13632092429, - 13632223511, 13632354607, 13632485719, 13632616807, 13632747881, 13632878983, 13633010057, - 13633141133, 13633272209, 13633403339, 13633534427, 13633665499, 13633796581, 13633927771, - 13634058847, 13634189927, 13634321009, 13634452123, 13634583223, 13634714299, 13634845373, - 13634976469, 13635107557, 13635238691, 13635369799, 13635500881, 13635631973, 13635763073, - 13635894193, 13636025297, 13636156447, 13636287521, 13636418597, 13636549697, 13636680769, - 13636811843, 13636942927, 13637074007, 13637205083, 13637336171, 13637467271, 13637598361, - 13637729437, 13637860517, 13637991623, 13638122741, 13638253819, 13638384913, 13638515993, - 13638647093, 13638778169, 13638909257, 13639040329, 13639171409, 13639302577, 13639433657, - 13639564733, 13639695809, 13639826881, 13639957957, 13640089033, 13640220109, 13640351189, - 13640482279, 13640613359, 13640744437, 13640875511, 13641006629, 13641137701, 13641268783, - 13641399917, 13641531011, 13641662101, 13641793199, 13641924287, 13642055377, 13642186477, - 13642317583, 13642448657, 13642579733, 13642710827, 13642841911, 13642973033, 13643104151, - 13643235227, 13643366299, 13643497403, 13643628491, 13643759603, 13643890723, 13644021799, - 13644152887, 13644283973, 13644415049, 13644546131, 13644677203, 13644808327, 13644939409, - 13645070513, 13645201613, 13645332697, 13645463771, 13645594873, 13645725949, 13645857037, - 13645988149, 13646119229, 13646250323, 13646381447, 13646512541, 13646643617, 13646774689, - 13646905799, 13647036961, 13647168071, 13647299147, 13647430231, 13647561337, 13647692447, - 13647823531, 13647954641, 13648085747, 13648216823, 13648347931, 13648479011, 13648610093, - 13648741177, 13648872287, 13649003383, 13649134459, 13649265563, 13649396653, 13649527769, - 13649658851, 13649789939, 13649921029, 13650052123, 13650183247, 13650314333, 13650445427, - 13650576503, 13650707579, 13650838681, 13650969763, 13651100851, 13651231927, 13651363013, - 13651494119, 13651625219, 13651756309, 13651887397, 13652018473, 13652149559, 13652280667, - 13652411771, 13652542861, 13652673943, 13652805119, 13652936233, 13653067343, 13653198421, - 13653329563, 13653460643, 13653591773, 13653722891, 13653854009, 13653985127, 13654116227, - 13654247303, 13654378411, 13654509487, 13654640599, 13654771681, 13654902761, 13655033839, - 13655164927, 13655296001, 13655427073, 13655558171, 13655689337, 13655820427, 13655951501, - 13656082579, 13656213661, 13656344777, 13656475907, 13656606989, 13656738077, 13656869159, - 13657000241, 13657131329, 13657262413, 13657393493, 13657524581, 13657655681, 13657786771, - 13657917857, 13658048933, 13658180009, 13658311123, 13658442197, 13658573281, 13658704361, - 13658835439, 13658966527, 13659097649, 13659228721, 13659359809, 13659490891, 13659621979, - 13659753053, 13659884131, 13660015207, 13660146293, 13660277387, 13660408583, 13660539671, - 13660670747, 13660801841, 13660932931, 13661064007, 13661195083, 13661326201, 13661457289, - 13661588483, 13661719559, 13661850689, 13661981783, 13662112859, 13662243937, 13662375017, - 13662506089, 13662637181, 13662768263, 13662899353, 13663030529, 13663161623, 13663292723, - 13663423831, 13663554929, 13663686067, 13663817147, 13663948231, 13664079323, 13664210419, - 13664341501, 13664472583, 13664603663, 13664734757, 13664865847, 13664996957, 13665128053, - 13665259151, 13665390253, 13665521327, 13665652439, 13665783539, 13665914611, 13666045741, - 13666176889, 13666307983, 13666439057, 13666570171, 13666701271, 13666832351, 13666963433, - 13667094547, 13667225639, 13667356831, 13667487913, 13667618989, 13667750101, 13667881223, - 13668012329, 13668143407, 13668274531, 13668405613, 13668536689, 13668667763, 13668798851, - 13668929927, 13669061009, 13669192081, 13669323163, 13669454257, 13669585367, 13669716443, - 13669847579, 13669978657, 13670109737, 13670240833, 13670371927, 13670503013, 13670634127, - 13670765249, 13670896333, 13671027449, 13671158537, 13671289627, 13671420713, 13671551833, - 13671682907, 13671814007, 13671945113, 13672076237, 13672207309, 13672338389, 13672469471, - 13672600553, 13672731643, 13672862717, 13672993799, 13673124877, 13673256001, 13673387083, - 13673518171, 13673649289, 13673780383, 13673911457, 13674042539, 13674173621, 13674304703, - 13674435791, 13674566897, 13674697969, 13674829139, 13674960217, 13675091299, 13675222381, - 13675353463, 13675484551, 13675615627, 13675746727, 13675877827, 13676008901, 13676140013, - 13676271101, 13676402183, 13676533267, 13676664359, 13676795437, 13676926559, 13677057649, - 13677188761, 13677319837, 13677450911, 13677581993, 13677713083, 13677844177, 13677975253, - 13678106329, 13678237423, 13678368497, 13678499587, 13678630697, 13678761773, 13678892849, - 13679023921, 13679155037, 13679286121, 13679417203, 13679548291, 13679679367, 13679810467, - 13679941571, 13680072649, 13680203729, 13680334817, 13680465889, 13680596971, 13680728051, - 13680859139, 13680990229, 13681121317, 13681252391, 13681383467, 13681514573, 13681645711, - 13681776791, 13681907867, 13682038939, 13682170037, 13682301121, 13682432321, 13682563397, - 13682694481, 13682825579, 13682956711, 13683087787, 13683218863, 13683349961, 13683481051, - 13683612149, 13683743221, 13683874301, 13684005403, 13684136483, 13684267577, 13684398667, - 13684529743, 13684660817, 13684791893, 13684923023, 13685054147, 13685185313, 13685316397, - 13685447473, 13685578549, 13685709623, 13685840717, 13685971807, 13686102883, 13686233963, - 13686365107, 13686496183, 13686627271, 13686758353, 13686889429, 13687020511, 13687151591, - 13687282669, 13687413749, 13687544851, 13687675927, 13687807013, 13687938091, 13688069173, - 13688200247, 13688331323, 13688462401, 13688593489, 13688724563, 13688855647, 13688986763, - 13689117847, 13689248921, 13689380011, 13689511091, 13689642179, 13689773287, 13689904409, - 13690035487, 13690166563, 13690297657, 13690428761, 13690559837, 13690690961, 13690822087, - 13690953161, 13691084233, 13691215337, 13691346433, 13691477531, 13691608603, 13691739727, - 13691870807, 13692001889, 13692132989, 13692264133, 13692395237, 13692526321, 13692657397, - 13692788479, 13692919627, 13693050731, 13693181863, 13693312937, 13693444021, 13693575097, - 13693706189, 13693837273, 13693968349, 13694099453, 13694230531, 13694361649, 13694492729, - 13694623801, 13694754917, 13694885999, 13695017081, 13695148177, 13695279253, 13695410381, - 13695541459, 13695672533, 13695803633, 13695934751, 13696065853, 13696196933, 13696328033, - 13696459141, 13696590241, 13696721317, 13696852397, 13696983539, 13697114621, 13697245739, - 13697376851, 13697507927, 13697639027, 13697770157, 13697901253, 13698032357, 13698163447, - 13698294581, 13698425681, 13698556763, 13698687841, 13698818921, 13698949993, 13699081069, - 13699212157, 13699343239, 13699474333, 13699605407, 13699736521, 13699867627, 13699998707, - 13700129809, 13700260927, 13700392001, 13700523139, 13700654213, 13700785309, 13700916433, - 13701047527, 13701178607, 13701309689, 13701440773, 13701571867, 13701702961, 13701834049, - 13701965213, 13702096301, 13702227373, 13702358489, 13702489561, 13702620641, 13702751729, - 13702882811, 13703013893, 13703145011, 13703276129, 13703407231, 13703538311, 13703669389, - 13703800463, 13703931539, 13704062621, 13704193703, 13704324779, 13704455881, 13704586963, - 13704718037, 13704849121, 13704980203, 13705111283, 13705242361, 13705373443, 13705504529, - 13705635607, 13705766681, 13705897781, 13706028859, 13706159947, 13706291029, 13706422133, - 13706553221, 13706684347, 13706815481, 13706946569, 13707077689, 13707208799, 13707339931, - 13707471013, 13707602087, 13707733181, 13707864341, 13707995429, 13708126507, 13708257593, - 13708388747, 13708519829, 13708650919, 13708782007, 13708913111, 13709044187, 13709175269, - 13709306353, 13709437429, 13709568511, 13709699593, 13709830679, 13709961773, 13710092909, - 13710223997, 13710355091, 13710486173, 13710617309, 13710748399, 13710879499, 13711010581, - 13711141667, 13711272793, 13711403879, 13711534951, 13711666049, 13711797131, 13711928207, - 13712059279, 13712190383, 13712321473, 13712452631, 13712583713, 13712714801, 13712845879, - 13712976971, 13713108049, 13713239149, 13713370259, 13713501331, 13713632417, 13713763489, - 13713894581, 13714025683, 13714156777, 13714287857, 13714418947, 13714550033, 13714681199, - 13714812281, 13714943371, 13715074453, 13715205533, 13715336617, 13715467693, 13715598779, - 13715729879, 13715860979, 13715992057, 13716123131, 13716254213, 13716385301, 13716516389, - 13716647501, 13716778631, 13716909707, 13717040783, 13717171877, 13717302967, 13717434041, - 13717565129, 13717696207, 13717827301, 13717958377, 13718089459, 13718220541, 13718351623, - 13718482709, 13718613803, 13718744899, 13718876011, 13719007091, 13719138163, 13719269251, - 13719400337, 13719531409, 13719662497, 13719793573, 13719924653, 13720055747, 13720186819, - 13720317913, 13720448993, 13720580089, 13720711183, 13720842277, 13720973351, 13721104451, - 13721235523, 13721366627, 13721497709, 13721628839, 13721759923, 13721891009, 13722022109, - 13722153197, 13722284297, 13722415379, 13722546457, 13722677539, 13722808637, 13722939739, - 13723070861, 13723201939, 13723333027, 13723464113, 13723595191, 13723726267, 13723857341, - 13723988419, 13724119579, 13724250689, 13724381761, 13724512847, 13724643937, 13724775013, - 13724906147, 13725037219, 13725168311, 13725299417, 13725430489, 13725561571, 13725692689, - 13725823819, 13725954911, 13726085987, 13726217077, 13726348189, 13726479289, 13726610369, - 13726741499, 13726872583, 13727003747, 13727134819, 13727265991, 13727397097, 13727528179, - 13727659259, 13727790347, 13727921423, 13728052519, 13728183643, 13728314737, 13728445831, - 13728576913, 13728707987, 13728839077, 13728970153, 13729101227, 13729232357, 13729363457, - 13729494529, 13729625627, 13729756721, 13729887823, 13730018899, 13730149991, 13730281063, - 13730412139, 13730543213, 13730674367, 13730805467, 13730936539, 13731067621, 13731198731, - 13731329839, 13731460927, 13731592001, 13731723107, 13731854183, 13731985261, 13732116403, - 13732247479, 13732378559, 13732509631, 13732640731, 13732771807, 13732902893, 13733033983, - 13733165081, 13733296153, 13733427251, 13733558323, 13733689427, 13733820571, 13733951657, - 13734082729, 13734213811, 13734344891, 13734475973, 13734607087, 13734738161, 13734869243, - 13735000379, 13735131451, 13735262537, 13735393613, 13735524713, 13735655797, 13735786891, - 13735918037, 13736049139, 13736180233, 13736311331, 13736442413, 13736573489, 13736704589, - 13736835677, 13736966753, 13737097867, 13737228941, 13737360023, 13737491107, 13737622189, - 13737753277, 13737884351, 13738015439, 13738146547, 13738277653, 13738408819, 13738539907, - 13738670987, 13738802087, 13738933177, 13739064263, 13739195341, 13739326427, 13739457527, - 13739588623, 13739719723, 13739850809, 13739981881, 13740113027, 13740244099, 13740375197, - 13740506293, 13740637367, 13740768443, 13740899527, 13741030607, 13741161683, 13741292783, - 13741423907, 13741555007, 13741686097, 13741817233, 13741948321, 13742079397, 13742210497, - 13742341619, 13742472691, 13742603827, 13742734921, 13742866009, 13742997101, 13743128173, - 13743259273, 13743390373, 13743521483, 13743652577, 13743783659, 13743914747, 13744045831, - 13744176937, 13744308029, 13744439119, 13744570201, 13744701329, 13744832417, 13744963513, - 13745094599, 13745225731, 13745356811, 13745487911, 13745619001, 13745750087, 13745881169, - 13746012271, 13746143357, 13746274441, 13746405527, 13746536603, 13746667691, 13746798797, - 13746929873, 13747060997, 13747192073, 13747323199, 13747454297, 13747585403, 13747716503, - 13747847591, 13747978679, 13748109751, 13748240881, 13748371961, 13748503057, 13748634131, - 13748765279, 13748896351, 13749027427, 13749158519, 13749289591, 13749420689, 13749551773, - 13749682847, 13749813929, 13749945019, 13750076099, 13750207193, 13750338271, 13750469353, - 13750600469, 13750731559, 13750862689, 13750993777, 13751124853, 13751255929, 13751387059, - 13751518133, 13751649217, 13751780321, 13751911423, 13752042523, 13752173623, 13752304721, - 13752435803, 13752566911, 13752697999, 13752829117, 13752960191, 13753091267, 13753222387, - 13753353463, 13753484543, 13753615619, 13753746737, 13753877923, 13754009011, 13754140087, - 13754271169, 13754402243, 13754533321, 13754664397, 13754795471, 13754926561, 13755057637, - 13755188729, 13755319807, 13755450911, 13755582007, 13755713087, 13755844231, 13755975349, - 13756106423, 13756237499, 13756368583, 13756499677, 13756630787, 13756761899, 13756892977, - 13757024051, 13757155171, 13757286253, 13757417341, 13757548447, 13757679521, 13757810597, - 13757941669, 13758072751, 13758203857, 13758334943, 13758466079, 13758597157, 13758728231, - 13758859333, 13758990449, 13759121521, 13759252657, 13759383773, 13759514849, 13759645937, - 13759777019, 13759908157, 13760039231, 13760170321, 13760301403, 13760432503, 13760563577, - 13760694719, 13760825801, 13760956883, 13761087959, 13761219061, 13761350137, 13761481229, - 13761612313, 13761743393, 13761874481, 13762005557, 13762136653, 13762267781, 13762398863, - 13762529947, 13762661027, 13762792129, 13762923221, 13763054297, 13763185393, 13763316503, - 13763447603, 13763578687, 13763709767, 13763840851, 13763971931, 13764103009, 13764234083, - 13764365161, 13764496237, 13764627343, 13764758431, 13764889513, 13765020587, 13765151669, - 13765282747, 13765413821, 13765544917, 13765675993, 13765807079, 13765938157, 13766069231, - 13766200307, 13766331379, 13766462459, 13766593531, 13766724619, 13766855741, 13766986823, - 13767117937, 13767249011, 13767380087, 13767511159, 13767642263, 13767773339, 13767904421, - 13768035499, 13768166611, 13768297709, 13768428827, 13768559921, 13768691003, 13768822117, - 13768953217, 13769084311, 13769215387, 13769346499, 13769477609, 13769608681, 13769739761, - 13769870837, 13770001909, 13770132997, 13770264071, 13770395143, 13770526229, 13770657349, - 13770788467, 13770919553, 13771050647, 13771181719, 13771312799, 13771443883, 13771574977, - 13771706051, 13771837153, 13771968239, 13772099311, 13772230387, 13772361467, 13772492593, - 13772623681, 13772754767, 13772885843, 13773016927, 13773148057, 13773279167, 13773410239, - 13773541343, 13773672421, 13773803501, 13773934579, 13774065653, 13774196749, 13774327823, - 13774458911, 13774589989, 13774721123, 13774852207, 13774983301, 13775114377, 13775245453, - 13775376529, 13775507621, 13775638703, 13775769793, 13775900881, 13776031963, 13776163081, - 13776294163, 13776425239, 13776556319, 13776687391, 13776818477, 13776949591, 13777080673, - 13777211803, 13777342877, 13777473977, 13777605059, 13777736153, 13777867241, 13777998317, - 13778129401, 13778260549, 13778391629, 13778522701, 13778653829, 13778784947, 13778916101, - 13779047189, 13779178289, 13779309367, 13779440447, 13779571541, 13779702619, 13779833729, - 13779964813, 13780095907, 13780226983, 13780358101, 13780489183, 13780620283, 13780751359, - 13780882439, 13781013529, 13781144609, 13781275699, 13781406799, 13781537899, 13781668973, - 13781800051, 13781931139, 13782062213, 13782193291, 13782324397, 13782455471, 13782586591, - 13782717673, 13782848759, 13782979907, 13783110983, 13783242073, 13783373147, 13783504261, - 13783635347, 13783766449, 13783897553, 13784028647, 13784159723, 13784290799, 13784421883, - 13784552963, 13784684101, 13784815181, 13784946269, 13785077363, 13785208441, 13785339517, - 13785470597, 13785601681, 13785732757, 13785863851, 13785994949, 13786126021, 13786257097, - 13786388171, 13786519277, 13786650403, 13786781507, 13786912589, 13787043661, 13787174747, - 13787305841, 13787436913, 13787567993, 13787699069, 13787830141, 13787961241, 13788092317, - 13788223409, 13788354487, 13788485561, 13788616637, 13788747727, 13788878809, 13789009919, - 13789141043, 13789272127, 13789403429, 13789534511, 13789665623, 13789796723, 13789927807, - 13790058881, 13790189957, 13790321033, 13790452141, 13790583221, 13790714297, 13790845381, - 13790976481, 13791107593, 13791238687, 13791369803, 13791500881, 13791631967, 13791763057, - 13791894143, 13792025231, 13792156309, 13792287403, 13792418527, 13792549637, 13792680719, - 13792811801, 13792942903, 13793073979, 13793205067, 13793336177, 13793467273, 13793598353, - 13793729429, 13793860519, 13793991613, 13794122717, 13794253819, 13794384911, 13794515993, - 13794647077, 13794778159, 13794909251, 13795040323, 13795171433, 13795302571, 13795433681, - 13795564793, 13795695869, 13795826953, 13795958027, 13796089129, 13796220209, 13796351291, - 13796482409, 13796613499, 13796744581, 13796875663, 13797006763, 13797137839, 13797268913, - 13797400003, 13797531103, 13797662189, 13797793279, 13797924379, 13798055477, 13798186559, - 13798317661, 13798448801, 13798579877, 13798710949, 13798842059, 13798973171, 13799104309, - 13799235407, 13799366501, 13799497577, 13799628653, 13799759731, 13799890837, 13800021931, - 13800153047, 13800284189, 13800415273, 13800546349, 13800677447, 13800808547, 13800939637, - 13801070737, 13801201811, 13801332929, 13801464073, 13801595153, 13801726243, 13801857341, - 13801988479, 13802119559, 13802250641, 13802381729, 13802512807, 13802643889, 13802774969, - 13802906077, 13803037181, 13803168263, 13803299359, 13803430439, 13803561523, 13803692681, - 13803823753, 13803954863, 13804085947, 13804217023, 13804348121, 13804479253, 13804610371, - 13804741469, 13804872551, 13805003713, 13805134789, 13805265869, 13805396947, 13805528021, - 13805659093, 13805790191, 13805921287, 13806052363, 13806183451, 13806314551, 13806445649, - 13806576757, 13806707851, 13806838937, 13806970013, 13807101101, 13807232177, 13807363277, - 13807494359, 13807625431, 13807756511, 13807887601, 13808018689, 13808149777, 13808280869, - 13808411941, 13808543017, 13808674111, 13808805193, 13808936269, 13809067379, 13809198457, - 13809329531, 13809460603, 13809591707, 13809722779, 13809853859, 13809984943, 13810116041, - 13810247117, 13810378189, 13810509263, 13810640339, 13810771451, 13810902563, 13811033641, - 13811164721, 13811295857, 13811426939, 13811558011, 13811689103, 13811820181, 13811951311, - 13812082423, 13812213497, 13812344597, 13812475687, 13812606763, 13812737839, 13812868987, - 13813000169, 13813131257, 13813262347, 13813393423, 13813524509, 13813655599, 13813786691, - 13813917791, 13814048881, 13814179963, 13814311099, 13814442179, 13814573291, 13814704411, - 13814835539, 13814966621, 13815097693, 13815228767, 13815359863, 13815490943, 13815622061, - 13815753139, 13815884213, 13816015333, 13816146413, 13816277507, 13816408633, 13816539743, - 13816670827, 13816801903, 13816933007, 13817064113, 13817195207, 13817326321, 13817457427, - 13817588531, 13817719603, 13817850679, 13817981767, 13818112927, 13818244003, 13818375113, - 13818506189, 13818637279, 13818768373, 13818899449, 13819030553, 13819161667, 13819292771, - 13819423861, 13819554967, 13819686103, 13819817177, 13819948267, 13820079349, 13820210441, - 13820341523, 13820472629, 13820603701, 13820734819, 13820865917, 13820996993, 13821128077, - 13821259157, 13821390257, 13821521359, 13821652447, 13821783527, 13821914627, 13822045717, - 13822176793, 13822307897, 13822438979, 13822570057, 13822701149, 13822832251, 13822963331, - 13823094407, 13823225483, 13823356571, 13823487647, 13823618737, 13823749829, 13823880947, - 13824012029, 13824143129, 13824274213, 13824405293, 13824536389, 13824667471, 13824798571, - 13824929647, 13825060787, 13825191899, 13825322971, 13825454047, 13825585133, 13825716211, - 13825847297, 13825978373, 13826109529, 13826240609, 13826371703, 13826502779, 13826633897, - 13826765039, 13826896243, 13827027341, 13827158453, 13827289543, 13827420617, 13827551693, - 13827682787, 13827813859, 13827944941, 13828076021, 13828207097, 13828338193, 13828469311, - 13828600399, 13828731517, 13828862627, 13828993699, 13829124781, 13829255857, 13829386931, - 13829518007, 13829649101, 13829780179, 13829911259, 13830042337, 13830173431, 13830304517, - 13830435607, 13830566689, 13830697787, 13830828863, 13830959941, 13831091039, 13831222169, - 13831353247, 13831484333, 13831615411, 13831746493, 13831877593, 13832008667, 13832139833, - 13832270927, 13832402033, 13832533111, 13832664187, 13832795287, 13832926403, 13833057479, - 13833188581, 13833319657, 13833450737, 13833581831, 13833712913, 13833844001, 13833975073, - 13834106191, 13834237273, 13834368347, 13834499473, 13834630559, 13834761683, 13834892759, - 13835023849, 13835154941, 13835286029, 13835417153, 13835548241, 13835679317, 13835810389, - 13835941501, 13836072577, 13836203663, 13836334751, 13836465899, 13836596981, 13836728083, - 13836859159, 13836990269, 13837121351, 13837252423, 13837383499, 13837514573, 13837645667, - 13837776803, 13837907891, 13838038993, 13838170069, 13838301149, 13838432227, 13838563309, - 13838694383, 13838825477, 13838956553, 13839087697, 13839218777, 13839349889, 13839480971, - 13839612089, 13839743171, 13839874253, 13840005331, 13840136411, 13840267543, 13840398617, - 13840529693, 13840660783, 13840791869, 13840922959, 13841054053, 13841185139, 13841316221, - 13841447309, 13841578433, 13841709517, 13841840599, 13841971679, 13842102761, 13842233869, - 13842364961, 13842496033, 13842627121, 13842758207, 13842889297, 13843020371, 13843151471, - 13843282543, 13843413629, 13843544779, 13843675877, 13843806959, 13843938071, 13844069149, - 13844200229, 13844331301, 13844462377, 13844593463, 13844724539, 13844855611, 13844986699, - 13845117791, 13845248887, 13845379967, 13845511039, 13845642119, 13845773203, 13845904313, - 13846035391, 13846166471, 13846297561, 13846428689, 13846559761, 13846690841, 13846821917, - 13846953023, 13847084131, 13847215259, 13847346347, 13847477431, 13847608507, 13847739593, - 13847870669, 13848001777, 13848132863, 13848263951, 13848395063, 13848526157, 13848657239, - 13848788321, 13848919393, 13849050473, 13849181551, 13849312649, 13849443731, 13849574813, - 13849705999, 13849837073, 13849968163, 13850099273, 13850230363, 13850361461, 13850492533, - 13850623607, 13850754683, 13850885801, 13851016901, 13851147977, 13851279059, 13851410189, - 13851541271, 13851672343, 13851803423, 13851934519, 13852065593, 13852196749, 13852327831, - 13852459001, 13852590083, 13852721171, 13852852243, 13852983323, 13853114417, 13853245493, - 13853376599, 13853507687, 13853638769, 13853769869, 13853900959, 13854032041, 13854163121, - 13854294193, 13854425293, 13854556399, 13854687499, 13854818573, 13854949649, 13855080721, - 13855211807, 13855342883, 13855473971, 13855605059, 13855736131, 13855867219, 13855998301, - 13856129401, 13856260501, 13856391583, 13856522663, 13856653747, 13856784841, 13856915929, - 13857047033, 13857178109, 13857309209, 13857440291, 13857571367, 13857702479, 13857833603, - 13857964727, 13858095803, 13858226891, 13858357999, 13858489079, 13858620157, 13858751279, - 13858882363, 13859013461, 13859144567, 13859275663, 13859406779, 13859537863, 13859668957, - 13859800037, 13859931187, 13860062287, 13860193363, 13860324449, 13860455561, 13860586657, - 13860717743, 13860848831, 13860979927, 13861111013, 13861242103, 13861373191, 13861504297, - 13861635391, 13861766491, 13861897571, 13862028689, 13862159767, 13862290859, 13862421949, - 13862553119, 13862684219, 13862815301, 13862946379, 13863077461, 13863208543, 13863339641, - 13863470713, 13863601799, 13863732881, 13863863957, 13863995059, 13864126183, 13864257257, - 13864388341, 13864519423, 13864650497, 13864781569, 13864912651, 13865043743, 13865174839, - 13865305931, 13865437009, 13865568083, 13865699173, 13865830247, 13865961397, 13866092473, - 13866223549, 13866354631, 13866485753, 13866616837, 13866747913, 13866879011, 13867010083, - 13867141181, 13867272281, 13867403359, 13867534459, 13867665611, 13867796693, 13867927793, - 13868058877, 13868189957, 13868321041, 13868452153, 13868583259, 13868714351, 13868845423, - 13868976497, 13869107579, 13869238667, 13869369841, 13869500923, 13869632033, 13869763177, - 13869894271, 13870025359, 13870156471, 13870287589, 13870418699, 13870549783, 13870680893, - 13870811993, 13870943101, 13871074183, 13871205287, 13871336359, 13871467447, 13871598523, - 13871729603, 13871860729, 13871991803, 13872122881, 13872253987, 13872385073, 13872516179, - 13872647273, 13872778391, 13872909469, 13873040549, 13873171633, 13873302719, 13873433809, - 13873564883, 13873695967, 13873827059, 13873958177, 13874089297, 13874220383, 13874351459, - 13874482541, 13874613629, 13874744729, 13874875801, 13875006889, 13875137977, 13875269053, - 13875400151, 13875531233, 13875662329, 13875793411, 13875924487, 13876055563, 13876186637, - 13876317727, 13876448801, 13876579891, 13876710973, 13876842047, 13876973141, 13877104223, - 13877235331, 13877366413, 13877497489, 13877628577, 13877759683, 13877890771, 13878021847, - 13878152921, 13878283997, 13878415087, 13878546163, 13878677249, 13878808367, 13878939439, - 13879070533, 13879201613, 13879332721, 13879463797, 13879594871, 13879725947, 13879857037, - 13879988119, 13880119199, 13880250277, 13880381363, 13880512441, 13880643529, 13880774681, - 13880905763, 13881036899, 13881167977, 13881299057, 13881430133, 13881561277, 13881692351, - 13881823447, 13881954607, 13882085681, 13882216781, 13882347859, 13882478969, 13882610041, - 13882741139, 13882872217, 13883003293, 13883134381, 13883265457, 13883396533, 13883527607, - 13883658683, 13883789761, 13883920847, 13884051941, 13884183023, 13884314099, 13884445171, - 13884576247, 13884707323, 13884838397, 13884969499, 13885100639, 13885231739, 13885362817, - 13885493891, 13885624967, 13885756039, 13885887151, 13886018239, 13886149349, 13886280427, - 13886411507, 13886542589, 13886673667, 13886804747, 13886935823, 13887066901, 13887197981, - 13887329059, 13887460133, 13887591229, 13887722311, 13887853387, 13887984527, 13888115603, - 13888246709, 13888377803, 13888508891, 13888640023, 13888771109, 13888902187, 13889033321, - 13889164427, 13889295517, 13889426591, 13889557663, 13889688739, 13889819819, 13889950901, - 13890081979, 13890213079, 13890344179, 13890475253, 13890606343, 13890737423, 13890868559, - 13890999631, 13891130711, 13891261793, 13891392899, 13891523983, 13891655123, 13891786201, - 13891917287, 13892048419, 13892179501, 13892310589, 13892441687, 13892572777, 13892703857, - 13892834939, 13892966011, 13893097129, 13893228221, 13893359309, 13893490381, 13893621457, - 13893752539, 13893883613, 13894014709, 13894145873, 13894276967, 13894408039, 13894539119, - 13894670191, 13894801279, 13894932377, 13895063461, 13895194559, 13895325637, 13895456711, - 13895587831, 13895718911, 13895850053, 13895981137, 13896112253, 13896243341, 13896374449, - 13896505523, 13896636641, 13896767737, 13896898817, 13897029901, 13897160987, 13897292089, - 13897423219, 13897554329, 13897685401, 13897816487, 13897947577, 13898078671, 13898209751, - 13898340829, 13898471929, 13898603039, 13898734159, 13898865251, 13898996329, 13899127439, - 13899258511, 13899389587, 13899520673, 13899651811, 13899782887, 13899914069, 13900045151, - 13900176233, 13900307327, 13900438441, 13900569563, 13900700711, 13900831787, 13900962871, - 13901093981, 13901225069, 13901356151, 13901487251, 13901618327, 13901749453, 13901880563, - 13902011657, 13902142741, 13902273817, 13902404941, 13902536017, 13902667169, 13902798251, - 13902929323, 13903060421, 13903191503, 13903322591, 13903453721, 13903584803, 13903715879, - 13903846987, 13903978063, 13904109179, 13904240257, 13904371331, 13904502427, 13904633513, - 13904764591, 13904895673, 13905026783, 13905157867, 13905288973, 13905420103, 13905551197, - 13905682283, 13905813377, 13905944471, 13906075543, 13906206623, 13906337707, 13906468789, - 13906599893, 13906730977, 13906862107, 13906993189, 13907124293, 13907255377, 13907386477, - 13907517557, 13907648647, 13907779727, 13907910803, 13908041881, 13908173003, 13908304087, - 13908435187, 13908566267, 13908697351, 13908828491, 13908959563, 13909090667, 13909221743, - 13909352843, 13909483927, 13909615003, 13909746077, 13909877159, 13910008237, 13910139319, - 13910270411, 13910401537, 13910532611, 13910663761, 13910794853, 13910925947, 13911057029, - 13911188107, 13911319199, 13911450271, 13911581347, 13911712469, 13911843551, 13911974669, - 13912105763, 13912236839, 13912367939, 13912499011, 13912630087, 13912761263, 13912892353, - 13913023427, 13913154509, 13913285621, 13913416717, 13913547811, 13913678921, 13913810047, - 13913941133, 13914072253, 13914203357, 13914334453, 13914465571, 13914596681, 13914727753, - 13914858827, 13914989917, 13915121023, 13915252111, 13915383217, 13915514299, 13915645441, - 13915776533, 13915907611, 13916038709, 13916169781, 13916300873, 13916431961, 13916563049, - 13916694131, 13916825231, 13916956307, 13917087397, 13917218587, 13917349709, 13917480809, - 13917611887, 13917742967, 13917874043, 13918005139, 13918136227, 13918267313, 13918398397, - 13918529473, 13918660571, 13918791671, 13918922747, 13919053843, 13919184941, 13919316017, - 13919447099, 13919578177, 13919709289, 13919840381, 13919971453, 13920102533, 13920233623, - 13920364697, 13920495769, 13920626843, 13920757931, 13920889007, 13921020107, 13921151191, - 13921282279, 13921413379, 13921544491, 13921675567, 13921806649, 13921937747, 13922068819, - 13922199931, 13922331061, 13922462149, 13922593297, 13922724391, 13922855497, 13922986591, - 13923117667, 13923248747, 13923379837, 13923510917, 13923641989, 13923773093, 13923904171, - 13924035277, 13924166363, 13924297463, 13924428541, 13924559639, 13924690739, 13924821817, - 13924952891, 13925083993, 13925215069, 13925346163, 13925477273, 13925608349, 13925739427, - 13925870527, 13926001601, 13926132683, 13926263783, 13926394871, 13926525979, 13926657061, - 13926788137, 13926919241, 13927050349, 13927181479, 13927312559, 13927443637, 13927574723, - 13927705807, 13927836883, 13927967957, 13928099063, 13928230201, 13928361281, 13928492353, - 13928623433, 13928754523, 13928885611, 13929016721, 13929147839, 13929278947, 13929410059, - 13929541163, 13929672241, 13929803333, 13929934433, 13930065511, 13930196587, 13930327667, - 13930458743, 13930589833, 13930720919, 13930852009, 13930983097, 13931114179, 13931245313, - 13931376401, 13931507507, 13931638597, 13931769689, 13931900767, 13932031859, 13932162961, - 13932294041, 13932425113, 13932556213, 13932687323, 13932818411, 13932949501, 13933080613, - 13933211701, 13933342777, 13933473859, 13933604963, 13933736041, 13933867117, 13933998191, - 13934129263, 13934260357, 13934391463, 13934522573, 13934653709, 13934784781, 13934915887, - 13935047003, 13935178121, 13935309209, 13935440329, 13935571409, 13935702481, 13935833573, - 13935964733, 13936095809, 13936226911, 13936357999, 13936489093, 13936620223, 13936751303, - 13936882391, 13937013463, 13937144593, 13937275721, 13937406793, 13937537893, 13937668967, - 13937800067, 13937931143, 13938062219, 13938193343, 13938324419, 13938455497, 13938586573, - 13938717659, 13938848741, 13938979843, 13939110919, 13939242007, 13939373089, 13939504181, - 13939635253, 13939766329, 13939897421, 13940028493, 13940159591, 13940290669, 13940421751, - 13940552827, 13940683907, 13940815001, 13940946077, 13941077173, 13941208249, 13941339343, - 13941470429, 13941601523, 13941732653, 13941863731, 13941994837, 13942125949, 13942257041, - 13942388197, 13942519291, 13942650367, 13942781449, 13942912597, 13943043677, 13943174779, - 13943305907, 13943437049, 13943568127, 13943699201, 13943830309, 13943961389, 13944092467, - 13944223543, 13944354623, 13944485743, 13944616849, 13944747953, 13944879029, 13945010113, - 13945141211, 13945272323, 13945403441, 13945534523, 13945665599, 13945796687, 13945927799, - 13946058913, 13946190017, 13946321117, 13946452189, 13946583269, 13946714413, 13946845511, - 13946976607, 13947107743, 13947238843, 13947369937, 13947501031, 13947632117, 13947763213, - 13947894299, 13948025387, 13948156471, 13948287553, 13948418633, 13948549729, 13948680817, - 13948811911, 13948942999, 13949074099, 13949205187, 13949336299, 13949467387, 13949598461, - 13949729533, 13949860627, 13949991707, 13950122783, 13950253903, 13950384979, 13950516089, - 13950647177, 13950778249, 13950909383, 13951040479, 13951171561, 13951302709, 13951433803, - 13951564901, 13951695997, 13951827073, 13951958159, 13952089243, 13952220361, 13952351437, - 13952482529, 13952613613, 13952744693, 13952875789, 13953006863, 13953137953, 13953269089, - 13953400171, 13953531259, 13953662369, 13953793499, 13953924587, 13954055663, 13954186751, - 13954317841, 13954448927, 13954580009, 13954711189, 13954842269, 13954973359, 13955104463, - 13955235557, 13955366651, 13955497723, 13955628821, 13955759903, 13955890999, 13956022081, - 13956153181, 13956284273, 13956415349, 13956546431, 13956677507, 13956808603, 13956939697, - 13957070807, 13957201891, 13957332967, 13957464047, 13957595147, 13957726243, 13957857337, - 13957988413, 13958119517, 13958250589, 13958381693, 13958512781, 13958643859, 13958774941, - 13958906033, 13959037121, 13959168239, 13959299323, 13959430399, 13959561479, 13959692573, - 13959823667, 13959954793, 13960085921, 13960217017, 13960348117, 13960479217, 13960610309, - 13960741441, 13960872529, 13961003621, 13961134709, 13961265781, 13961396857, 13961527949, - 13961659031, 13961790103, 13961921209, 13962052289, 13962183397, 13962314491, 13962445631, - 13962576709, 13962707851, 13962838937, 13962970027, 13963101143, 13963232237, 13963363333, - 13963494407, 13963625509, 13963756613, 13963887689, 13964018767, 13964149891, 13964280991, - 13964412089, 13964543161, 13964674279, 13964805353, 13964936437, 13965067511, 13965198613, - 13965329699, 13965460793, 13965591889, 13965722963, 13965854143, 13965985219, 13966116319, - 13966247419, 13966378501, 13966509629, 13966640711, 13966771813, 13966902913, 13967033989, - 13967165077, 13967296193, 13967427289, 13967558459, 13967689531, 13967820637, 13967951713, - 13968082801, 13968213877, 13968344953, 13968476057, 13968607153, 13968738257, 13968869351, - 13969000457, 13969131571, 13969262647, 13969393733, 13969524809, 13969655897, 13969786969, - 13969918063, 13970049151, 13970180281, 13970311363, 13970442511, 13970573587, 13970704663, - 13970835737, 13970966837, 13971097909, 13971228991, 13971360077, 13971491207, 13971622321, - 13971753401, 13971884477, 13972015637, 13972146763, 13972277863, 13972408963, 13972540079, - 13972671173, 13972802273, 13972933349, 13973064449, 13973195549, 13973326729, 13973457803, - 13973588879, 13973719967, 13973851039, 13973982157, 13974113249, 13974244331, 13974375403, - 13974506501, 13974637609, 13974768719, 13974899833, 13975030921, 13975162009, 13975293109, - 13975424213, 13975555291, 13975686401, 13975817501, 13975948631, 13976079737, 13976210821, - 13976341913, 13976473009, 13976604091, 13976735173, 13976866261, 13976997337, 13977128461, - 13977259559, 13977390631, 13977521711, 13977652811, 13977783887, 13977914963, 13978046039, - 13978177117, 13978308193, 13978439353, 13978570429, 13978701557, 13978832663, 13978963741, - 13979094821, 13979225893, 13979356981, 13979488057, 13979619139, 13979750231, 13979881361, - 13980012437, 13980143509, 13980274601, 13980405701, 13980536803, 13980667889, 13980798967, - 13980930071, 13981061177, 13981192259, 13981323353, 13981454441, 13981585517, 13981716601, - 13981847723, 13981978841, 13982109913, 13982241001, 13982372081, 13982503187, 13982634269, - 13982765351, 13982896427, 13983027503, 13983158599, 13983289673, 13983420779, 13983551863, - 13983682939, 13983814027, 13983945103, 13984076177, 13984207249, 13984338323, 13984469413, - 13984600489, 13984731577, 13984862659, 13984993739, 13985124841, 13985255917, 13985386993, - 13985518067, 13985649173, 13985780267, 13985911367, 13986042509, 13986173603, 13986304687, - 13986435767, 13986566851, 13986697927, 13986829001, 13986960083, 13987091171, 13987222253, - 13987353337, 13987484419, 13987615517, 13987746593, 13987877711, 13988008787, 13988139887, - 13988270969, 13988402047, 13988533121, 13988664197, 13988795269, 13988926349, 13989057473, - 13989188579, 13989319681, 13989450763, 13989581861, 13989712943, 13989844019, 13989975161, - 13990106261, 13990237357, 13990368437, 13990499513, 13990630597, 13990761691, 13990892771, - 13991023843, 13991154917, 13991285989, 13991417071, 13991548147, 13991679259, 13991810341, - 13991941421, 13992072499, 13992203609, 13992334751, 13992465847, 13992596953, 13992728051, - 13992859151, 13992990223, 13993121299, 13993252391, 13993383463, 13993514551, 13993645639, - 13993776739, 13993907819, 13994038909, 13994169989, 13994301067, 13994432161, 13994563291, - 13994694367, 13994825461, 13994956543, 13995087647, 13995218803, 13995349883, 13995481001, - 13995612073, 13995743171, 13995874261, 13996005337, 13996136411, 13996267513, 13996398607, - 13996529711, 13996660789, 13996791869, 13996922963, 13997054047, 13997185129, 13997316247, - 13997447323, 13997578411, 13997709487, 13997840567, 13997971643, 13998102733, 13998233813, - 13998364967, 13998496067, 13998627143, 13998758299, 13998889397, 13999020473, 13999151567, - 13999282651, 13999413761, 13999544837, 13999675909, 13999807021, 13999938157, 14000069273, - 14000200351, 14000331437, 14000462527, 14000593609, 14000724713, 14000855789, 14000986873, - 14001117947, 14001249019, 14001380189, 14001511267, 14001642359, 14001773447, 14001904523, - 14002035629, 14002166729, 14002297807, 14002428899, 14002559993, 14002691069, 14002822151, - 14002953229, 14003084311, 14003215459, 14003346557, 14003477633, 14003608709, 14003739809, - 14003870899, 14004001981, 14004133057, 14004264143, 14004395233, 14004526351, 14004657431, - 14004788561, 14004919633, 14005050767, 14005181851, 14005312939, 14005444031, 14005575121, - 14005706249, 14005837331, 14005968409, 14006099501, 14006230577, 14006361683, 14006492767, - 14006623847, 14006754947, 14006886031, 14007017159, 14007148231, 14007279383, 14007410467, - 14007541543, 14007672619, 14007803707, 14007934781, 14008065871, 14008196947, 14008328029, - 14008459103, 14008590179, 14008721273, 14008852349, 14008983449, 14009114527, 14009245609, - 14009376701, 14009507773, 14009638849, 14009769937, 14009901029, 14010032123, 14010163229, - 14010294317, 14010425431, 14010556523, 14010687599, 14010818693, 14010949769, 14011080847, - 14011211953, 14011343077, 14011474151, 14011605227, 14011736317, 14011867393, 14011998467, - 14012129543, 14012260621, 14012391703, 14012522807, 14012653909, 14012785009, 14012916109, - 14013047189, 14013178303, 14013309397, 14013440489, 14013571571, 14013702649, 14013833753, - 14013964879, 14014095967, 14014227079, 14014358159, 14014489249, 14014620331, 14014751407, - 14014882493, 14015013589, 14015144669, 14015275751, 14015406851, 14015537941, 14015669047, - 14015800147, 14015931257, 14016062341, 14016193417, 14016324503, 14016455587, 14016586663, - 14016717751, 14016848887, 14016980009, 14017111081, 14017242179, 14017373311, 14017504433, - 14017635551, 14017766641, 14017897739, 14018028859, 14018160001, 14018291087, 14018422163, - 14018553259, 14018684333, 14018815423, 14018946497, 14019077573, 14019208757, 14019339863, - 14019470947, 14019602057, 14019733141, 14019864223, 14019995309, 14020126381, 14020257463, - 14020388573, 14020519651, 14020650751, 14020781903, 14020912981, 14021044061, 14021175149, - 14021306267, 14021437349, 14021568437, 14021699509, 14021830609, 14021961683, 14022092803, - 14022223879, 14022354959, 14022486031, 14022617107, 14022748219, 14022879313, 14023010399, - 14023141471, 14023272559, 14023403657, 14023534771, 14023665847, 14023796939, 14023928011, - 14024059099, 14024190209, 14024321281, 14024452357, 14024583439, 14024714537, 14024845609, - 14024976703, 14025107777, 14025238849, 14025369923, 14025501001, 14025632087, 14025763237, - 14025894313, 14026025407, 14026156481, 14026287599, 14026418671, 14026549751, 14026680839, - 14026811917, 14026942991, 14027074079, 14027205187, 14027336299, 14027467381, 14027598461, - 14027729543, 14027860697, 14027991833, 14028122929, 14028254029, 14028385103, 14028516179, - 14028647263, 14028778397, 14028909481, 14029040563, 14029171643, 14029302731, 14029433843, - 14029564937, 14029696013, 14029827103, 14029958191, 14030089267, 14030220349, 14030351429, - 14030482523, 14030613613, 14030744699, 14030875811, 14031006883, 14031137983, 14031269081, - 14031400213, 14031531289, 14031662377, 14031793483, 14031924587, 14032055659, 14032186807, - 14032317913, 14032448987, 14032580099, 14032711201, 14032842281, 14032973359, 14033104433, - 14033235509, 14033366591, 14033497693, 14033628781, 14033759863, 14033890957, 14034022039, - 14034153113, 14034284191, 14034415309, 14034546413, 14034677491, 14034808573, 14034939649, - 14035070729, 14035201801, 14035332887, 14035463963, 14035595047, 14035726121, 14035857263, - 14035988347, 14036119429, 14036250511, 14036381591, 14036512681, 14036643763, 14036774849, - 14036905921, 14037037043, 14037168193, 14037299299, 14037430387, 14037561491, 14037692579, - 14037823699, 14037954793, 14038085909, 14038216993, 14038348091, 14038479163, 14038610239, - 14038741319, 14038872401, 14039003507, 14039134601, 14039265679, 14039396779, 14039527867, - 14039658949, 14039790029, 14039921107, 14040052189, 14040183271, 14040314381, 14040445453, - 14040576533, 14040707617, 14040838729, 14040969823, 14041100903, 14041232011, 14041363103, - 14041494179, 14041625261, 14041756343, 14041887437, 14042018569, 14042149669, 14042280743, - 14042411821, 14042542957, 14042674069, 14042805143, 14042936231, 14043067307, 14043198401, - 14043329477, 14043460553, 14043591629, 14043722711, 14043853823, 14043984907, 14044115989, - 14044247117, 14044378189, 14044509307, 14044640383, 14044771457, 14044902577, 14045033669, - 14045164747, 14045295821, 14045426893, 14045557987, 14045689111, 14045820259, 14045951341, - 14046082417, 14046213497, 14046344579, 14046475657, 14046606751, 14046737839, 14046868937, - 14047000043, 14047131139, 14047262233, 14047393331, 14047524437, 14047655537, 14047786631, - 14047917707, 14048048783, 14048179877, 14048310949, 14048442029, 14048573107, 14048704211, - 14048835299, 14048966383, 14049097459, 14049228533, 14049359627, 14049490711, 14049621799, - 14049752909, 14049883997, 14050015093, 14050146191, 14050277279, 14050408357, 14050539431, - 14050670503, 14050801577, 14050932713, 14051063801, 14051194903, 14051325983, 14051457073, - 14051588219, 14051719313, 14051850403, 14051981477, 14052112577, 14052243701, 14052374783, - 14052505861, 14052636967, 14052768047, 14052899131, 14053030219, 14053161293, 14053292401, - 14053423493, 14053554589, 14053685671, 14053816747, 14053947823, 14054078923, 14054210033, - 14054341123, 14054472199, 14054603281, 14054734417, 14054865511, 14054996587, 14055127699, - 14055258779, 14055389857, 14055520957, 14055652031, 14055783103, 14055914209, 14056045319, - 14056176427, 14056307501, 14056438573, 14056569733, 14056700813, 14056831891, 14056963033, - 14057094137, 14057225243, 14057356349, 14057487443, 14057618537, 14057749613, 14057880689, - 14058011789, 14058142871, 14058273953, 14058405073, 14058536171, 14058667253, 14058798331, - 14058929413, 14059060501, 14059191589, 14059322663, 14059453739, 14059584821, 14059715897, - 14059846987, 14059978069, 14060109149, 14060240221, 14060371307, 14060502433, 14060633549, - 14060764631, 14060895713, 14061026803, 14061157883, 14061288991, 14061420077, 14061551159, - 14061682253, 14061813383, 14061944489, 14062075607, 14062206703, 14062337791, 14062468873, - 14062599973, 14062731049, 14062862129, 14062993261, 14063124349, 14063255429, 14063386523, - 14063517599, 14063648771, 14063779859, 14063910953, 14064042049, 14064173129, 14064304207, - 14064435299, 14064566407, 14064697487, 14064828587, 14064959681, 14065090757, 14065221883, - 14065352957, 14065484047, 14065615141, 14065746217, 14065877291, 14066008379, 14066139457, - 14066270557, 14066401649, 14066532721, 14066663797, 14066794873, 14066925947, 14067057019, - 14067188117, 14067319207, 14067450281, 14067581369, 14067712459, 14067843539, 14067974651, - 14068105729, 14068236811, 14068367891, 14068498963, 14068630039, 14068761131, 14068892203, - 14069023279, 14069154377, 14069285497, 14069416573, 14069547689, 14069678783, 14069809891, - 14069940977, 14070072053, 14070203131, 14070334207, 14070465307, 14070596387, 14070727477, - 14070858559, 14070989651, 14071120733, 14071251809, 14071382903, 14071514029, 14071645117, - 14071776203, 14071907321, 14072038397, 14072169469, 14072300551, 14072431691, 14072562793, - 14072693867, 14072824939, 14072956057, 14073087137, 14073218233, 14073349331, 14073480403, - 14073611507, 14073742583, 14073873689, 14074004771, 14074135847, 14074266953, 14074398031, - 14074529107, 14074660199, 14074791293, 14074922377, 14075053463, 14075184551, 14075315623, - 14075446711, 14075577787, 14075708873, 14075839951, 14075971061, 14076102137, 14076233219, - 14076364321, 14076495403, 14076626479, 14076757577, 14076888689, 14077019777, 14077150891, - 14077281973, 14077413059, 14077544149, 14077675279, 14077806367, 14077937459, 14078068541, - 14078199623, 14078330711, 14078461801, 14078592877, 14078723969, 14078855093, 14078986171, - 14079117329, 14079248413, 14079379493, 14079510569, 14079641663, 14079772739, 14079903841, - 14080034929, 14080166017, 14080297109, 14080428199, 14080559279, 14080690381, 14080821527, - 14080952617, 14081083703, 14081214821, 14081345897, 14081476979, 14081608081, 14081739157, - 14081870239, 14082001313, 14082132437, 14082263509, 14082394637, 14082525733, 14082656827, - 14082787907, 14082918991, 14083050067, 14083181149, 14083312241, 14083443323, 14083574399, - 14083705549, 14083836661, 14083967743, 14084098867, 14084229953, 14084361047, 14084492141, - 14084623237, 14084754317, 14084885413, 14085016493, 14085147617, 14085278689, 14085409771, - 14085540853, 14085671927, 14085803027, 14085934099, 14086065209, 14086196297, 14086327373, - 14086458467, 14086589557, 14086720651, 14086851733, 14086982809, 14087113927, 14087245009, - 14087376089, 14087507173, 14087638247, 14087769323, 14087900399, 14088031513, 14088162631, - 14088293729, 14088424811, 14088555883, 14088686957, 14088818039, 14088949117, 14089080197, - 14089211281, 14089342357, 14089473443, 14089604537, 14089735619, 14089866709, 14089997809, - 14090128883, 14090259961, 14090391041, 14090522129, 14090653243, 14090784317, 14090915407, - 14091046481, 14091177559, 14091308641, 14091439721, 14091570821, 14091701909, 14091832981, - 14091964087, 14092095163, 14092226257, 14092357333, 14092488407, 14092619503, 14092750577, - 14092881679, 14093012809, 14093143907, 14093274991, 14093406071, 14093537179, 14093668273, - 14093799353, 14093930449, 14094061523, 14094192641, 14094323723, 14094454819, 14094585907, - 14094717019, 14094848113, 14094979187, 14095110311, 14095241393, 14095372549, 14095503637, - 14095634723, 14095765819, 14095896901, 14096028007, 14096159089, 14096290181, 14096421299, - 14096552383, 14096683459, 14096814541, 14096945623, 14097076703, 14097207781, 14097338867, - 14097469949, 14097601081, 14097732179, 14097863267, 14097994343, 14098125467, 14098256581, - 14098387663, 14098518743, 14098649863, 14098780967, 14098912043, 14099043131, 14099174273, - 14099305349, 14099436431, 14099567551, 14099698633, 14099829713, 14099960807, 14100091897, - 14100222971, 14100354083, 14100485177, 14100616291, 14100747403, 14100878489, 14101009577, - 14101140749, 14101271827, 14101402969, 14101534043, 14101665133, 14101796237, 14101927331, - 14102058407, 14102189489, 14102320567, 14102451647, 14102582723, 14102713811, 14102844901, - 14102976031, 14103107111, 14103238213, 14103369299, 14103500377, 14103631457, 14103762577, - 14103893659, 14104024757, 14104155869, 14104286971, 14104418059, 14104549139, 14104680257, - 14104811339, 14104942421, 14105073559, 14105204669, 14105335753, 14105466847, 14105597927, - 14105729009, 14105860099, 14105991173, 14106122257, 14106253333, 14106384407, 14106515519, - 14106646637, 14106777743, 14106908903, 14107039981, 14107171069, 14107302179, 14107433269, - 14107564363, 14107695461, 14107826563, 14107957639, 14108088713, 14108219809, 14108350909, - 14108482027, 14108613107, 14108744179, 14108875259, 14109006337, 14109137417, 14109268519, - 14109399607, 14109530723, 14109661823, 14109792937, 14109924047, 14110055149, 14110186231, - 14110317313, 14110448399, 14110579471, 14110710553, 14110841651, 14110972741, 14111103821, - 14111234941, 14111366021, 14111497097, 14111628199, 14111759297, 14111890393, 14112021479, - 14112152603, 14112283727, 14112414853, 14112545969, 14112677077, 14112808159, 14112939259, - 14113070341, 14113201447, 14113332557, 14113463633, 14113594717, 14113725817, 14113856947, - 14113988029, 14114119121, 14114250193, 14114381329, 14114512459, 14114643551, 14114774623, - 14114905711, 14115036809, 14115167903, 14115298993, 14115430079, 14115561151, 14115692233, - 14115823313, 14115954407, 14116085479, 14116216553, 14116347631, 14116478749, 14116609883, - 14116740997, 14116872103, 14117003207, 14117134403, 14117265493, 14117396567, 14117527661, - 14117658761, 14117789897, 14117921071, 14118052153, 14118183241, 14118314321, 14118445433, - 14118576533, 14118707653, 14118838739, 14118969827, 14119100917, 14119231991, 14119363091, - 14119494163, 14119625239, 14119756319, 14119887391, 14120018467, 14120149591, 14120280701, - 14120411777, 14120542903, 14120673979, 14120805053, 14120936131, 14121067217, 14121198331, - 14121329407, 14121460481, 14121591563, 14121722647, 14121853747, 14121984853, 14122115941, - 14122247033, 14122378111, 14122509211, 14122640293, 14122771367, 14122902491, 14123033581, - 14123164669, 14123295749, 14123426833, 14123557909, 14123688983, 14123820071, 14123951173, - 14124082249, 14124213371, 14124344453, 14124475529, 14124606607, 14124737687, 14124868783, - 14124999857, 14125130953, 14125262051, 14125393147, 14125524227, 14125655309, 14125786429, - 14125917503, 14126048591, 14126179747, 14126310827, 14126441911, 14126572997, 14126704087, - 14126835161, 14126966233, 14127097307, 14127228389, 14127359461, 14127490579, 14127621667, - 14127752761, 14127883841, 14128014913, 14128146001, 14128277083, 14128408169, 14128539263, - 14128670357, 14128801447, 14128932523, 14129063603, 14129194679, 14129325757, 14129456849, - 14129587921, 14129719001, 14129850103, 14129981189, 14130112273, 14130243349, 14130374431, - 14130505559, 14130636631, 14130767767, 14130898871, 14131029949, 14131161049, 14131292137, - 14131423237, 14131554331, 14131685429, 14131816529, 14131947601, 14132078677, 14132209759, - 14132340851, 14132471933, 14132603027, 14132734127, 14132865217, 14132996299, 14133127381, - 14133258463, 14133389561, 14133520657, 14133651767, 14133782857, 14133913943, 14134045039, - 14134176143, 14134307237, 14134438319, 14134569391, 14134700467, 14134831541, 14134962631, - 14135093711, 14135224801, 14135355911, 14135486987, 14135618059, 14135749141, 14135880217, - 14136011311, 14136142399, 14136273479, 14136404551, 14136535639, 14136666749, 14136797821, - 14136928907, 14137060013, 14137191119, 14137322219, 14137453301, 14137584401, 14137715477, - 14137846589, 14137977761, 14138108839, 14138239943, 14138371019, 14138502097, 14138633221, - 14138764361, 14138895457, 14139026557, 14139157649, 14139288727, 14139419803, 14139550921, - 14139682019, 14139813113, 14139944197, 14140075273, 14140206383, 14140337467, 14140468543, - 14140599619, 14140730749, 14140861831, 14140992907, 14141123981, 14141255053, 14141386213, - 14141517311, 14141648383, 14141779469, 14141910593, 14142041699, 14142172841, 14142303913, - 14142434987, 14142566059, 14142697133, 14142828209, 14142959297, 14143090393, 14143221493, - 14143352569, 14143483649, 14143614743, 14143745831, 14143876927, 14144008003, 14144139083, - 14144270167, 14144401261, 14144532343, 14144663417, 14144794493, 14144925577, 14145056659, - 14145187733, 14145318821, 14145449959, 14145581033, 14145712151, 14145843223, 14145974317, - 14146105423, 14146236499, 14146367593, 14146498679, 14146629769, 14146760891, 14146891963, - 14147023067, 14147154139, 14147285287, 14147416411, 14147547487, 14147678569, 14147809661, - 14147940743, 14148071849, 14148202973, 14148334049, 14148465167, 14148596243, 14148727339, - 14148858433, 14148989513, 14149120627, 14149251703, 14149382789, 14149513867, 14149644941, - 14149776013, 14149907159, 14150038241, 14150169347, 14150300431, 14150431513, 14150562617, - 14150693701, 14150824799, 14150955883, 14151087017, 14151218089, 14151349181, 14151480257, - 14151611377, 14151742453, 14151873563, 14152004683, 14152135793, 14152266889, 14152397989, - 14152529077, 14152660183, 14152791281, 14152922383, 14153053457, 14153184553, 14153315641, - 14153446717, 14153577853, 14153708971, 14153840047, 14153971123, 14154102197, 14154233333, - 14154364409, 14154495497, 14154626573, 14154757691, 14154888763, 14155019843, 14155150969, - 14155282049, 14155413131, 14155544213, 14155675291, 14155806373, 14155937491, 14156068583, - 14156199661, 14156330753, 14156461861, 14156593043, 14156724119, 14156855197, 14156986271, - 14157117371, 14157248453, 14157379531, 14157510629, 14157641713, 14157772877, 14157904003, - 14158035091, 14158166177, 14158297253, 14158428391, 14158559491, 14158690571, 14158821659, - 14158952737, 14159083819, 14159214907, 14159345989, 14159477063, 14159608147, 14159739241, - 14159870317, 14160001393, 14160132529, 14160263639, 14160394733, 14160525811, 14160656893, - 14160787973, 14160919079, 14161050157, 14161181231, 14161312303, 14161443403, 14161574477, - 14161705559, 14161836679, 14161967783, 14162098859, 14162229941, 14162361013, 14162492147, - 14162623243, 14162754379, 14162885479, 14163016561, 14163147671, 14163278771, 14163409873, - 14163540947, 14163672031, 14163803107, 14163934247, 14164065319, 14164196411, 14164327501, - 14164458593, 14164589687, 14164720789, 14164851863, 14164982939, 14165114057, 14165245139, - 14165376227, 14165507303, 14165638493, 14165769587, 14165900663, 14166031771, 14166162851, - 14166293927, 14166425027, 14166556177, 14166687251, 14166818353, 14166949427, 14167080541, - 14167211621, 14167342699, 14167473799, 14167604879, 14167735957, 14167867057, 14167998157, - 14168129267, 14168260357, 14168391449, 14168522527, 14168653601, 14168784683, 14168915759, - 14169046841, 14169177923, 14169309001, 14169440093, 14169571201, 14169702289, 14169833441, - 14169964577, 14170095713, 14170226831, 14170357913, 14170489007, 14170620083, 14170751213, - 14170882331, 14171013407, 14171144513, 14171275603, 14171406679, 14171537753, 14171668831, - 14171799907, 14171930987, 14172062071, 14172193181, 14172324277, 14172455383, 14172586489, - 14172717563, 14172848663, 14172979739, 14173110821, 14173241893, 14173373009, 14173504087, - 14173635163, 14173766263, 14173897337, 14174028457, 14174159557, 14174290631, 14174421719, - 14174552921, 14174684021, 14174815097, 14174946179, 14175077251, 14175208331, 14175339433, - 14175470509, 14175601607, 14175732691, 14175863777, 14175994883, 14176125989, 14176257083, - 14176388173, 14176519261, 14176650337, 14176781417, 14176912499, 14177043571, 14177174663, - 14177305739, 14177436811, 14177567983, 14177699057, 14177830133, 14177961211, 14178092303, - 14178223387, 14178354461, 14178485551, 14178616631, 14178747749, 14178878827, 14179009903, - 14179141007, 14179272113, 14179403221, 14179534331, 14179665503, 14179796581, 14179927679, - 14180058769, 14180189867, 14180320943, 14180452021, 14180583127, 14180714213, 14180845297, - 14180976379, 14181107467, 14181238543, 14181369619, 14181500771, 14181631843, 14181762923, - 14181894017, 14182025153, 14182156237, 14182287311, 14182418389, 14182549541, 14182680643, - 14182811729, 14182942831, 14183073913, 14183205007, 14183336099, 14183467211, 14183598283, - 14183729363, 14183860441, 14183991541, 14184122647, 14184253723, 14184384803, 14184515897, - 14184646991, 14184778067, 14184909139, 14185040239, 14185171327, 14185302421, 14185433501, - 14185564573, 14185695647, 14185826723, 14185957823, 14186088907, 14186219981, 14186351059, - 14186482139, 14186613229, 14186744309, 14186875399, 14187006521, 14187137593, 14187268703, - 14187399791, 14187530879, 14187661963, 14187793063, 14187924139, 14188055221, 14188186297, - 14188317401, 14188448473, 14188579547, 14188710623, 14188841729, 14188972801, 14189103911, - 14189235007, 14189366101, 14189497187, 14189628301, 14189759401, 14189890487, 14190021607, - 14190152689, 14190283763, 14190414859, 14190545933, 14190677009, 14190808091, 14190939197, - 14191070287, 14191201363, 14191332443, 14191463543, 14191594633, 14191725733, 14191856807, - 14191987937, 14192119009, 14192250101, 14192381197, 14192512337, 14192643431, 14192774503, - 14192905579, 14193036667, 14193167761, 14193298841, 14193429917, 14193561037, 14193692129, - 14193823207, 14193954293, 14194085377, 14194216471, 14194347553, 14194478647, 14194609763, - 14194740899, 14194871983, 14195003063, 14195134139, 14195265239, 14195396311, 14195527427, - 14195658523, 14195789627, 14195920709, 14196051781, 14196182933, 14196314021, 14196445093, - 14196576187, 14196707281, 14196838367, 14196969439, 14197100521, 14197231613, 14197362703, - 14197493789, 14197624873, 14197755977, 14197887061, 14198018143, 14198149219, 14198280307, - 14198411411, 14198542493, 14198673607, 14198804687, 14198935769, 14199066841, 14199197923, - 14199329009, 14199460111, 14199591191, 14199722279, 14199853351, 14199984433, 14200115509, - 14200246589, 14200377671, 14200508771, 14200639879, 14200770959, 14200902073, 14201033153, - 14201164259, 14201295347, 14201426419, 14201557499, 14201688601, 14201819677, 14201950769, - 14202081841, 14202212951, 14202344071, 14202475169, 14202606269, 14202737359, 14202868453, - 14202999581, 14203130653, 14203261747, 14203392851, 14203523947, 14203655021, 14203786117, - 14203917199, 14204048281, 14204179357, 14204310451, 14204441551, 14204572639, 14204703713, - 14204834807, 14204965969, 14205097069, 14205228181, 14205359279, 14205490367, 14205621457, - 14205752557, 14205883633, 14206014731, 14206145803, 14206276937, 14206408009, 14206539101, - 14206670207, 14206801307, 14206932401, 14207063483, 14207194567, 14207325647, 14207456737, - 14207587819, 14207718923, 14207850017, 14207981131, 14208112229, 14208243317, 14208374399, - 14208505483, 14208636569, 14208767659, 14208898751, 14209029827, 14209160921, 14209292021, - 14209423117, 14209554209, 14209685291, 14209816403, 14209947491, 14210078563, 14210209661, - 14210340751, 14210471837, 14210602921, 14210734007, 14210865079, 14210996231, 14211127417, - 14211258493, 14211389579, 14211520667, 14211651781, 14211782903, 14211913979, 14212045073, - 14212176161, 14212307243, 14212438321, 14212569443, 14212700527, 14212831601, 14212962691, - 14213093767, 14213224841, 14213355913, 14213486993, 14213618087, 14213749223, 14213880323, - 14214011419, 14214142499, 14214273587, 14214404671, 14214535793, 14214666929, 14214798029, - 14214929137, 14215060333, 14215191433, 14215322533, 14215453607, 14215584689, 14215715771, - 14215846861, 14215977991, 14216109079, 14216240167, 14216371259, 14216502337, 14216633413, - 14216764487, 14216895571, 14217026683, 14217157781, 14217288901, 14217419989, 14217551071, - 14217682163, 14217813257, 14217944357, 14218075451, 14218206557, 14218337629, 14218468729, - 14218599809, 14218730881, 14218861991, 14218993099, 14219124181, 14219255261, 14219386333, - 14219517413, 14219648491, 14219779571, 14219910643, 14220041783, 14220172873, 14220303947, - 14220435029, 14220566111, 14220697199, 14220828277, 14220959377, 14221090451, 14221221529, - 14221352603, 14221483711, 14221614787, 14221745873, 14221876957, 14222008051, 14222139131, - 14222270233, 14222401307, 14222532397, 14222663549, 14222794657, 14222925809, 14223056909, - 14223187981, 14223319063, 14223450203, 14223581299, 14223712381, 14223843463, 14223974551, - 14224105657, 14224236739, 14224367821, 14224498907, 14224630019, 14224761127, 14224892237, - 14225023381, 14225154487, 14225285573, 14225416657, 14225547751, 14225678827, 14225809921, - 14225941007, 14226072121, 14226203207, 14226334289, 14226465367, 14226596509, 14226727583, - 14226858689, 14226989773, 14227120877, 14227251953, 14227383029, 14227514129, 14227645247, - 14227776341, 14227907417, 14228038499, 14228169577, 14228300663, 14228431747, 14228562823, - 14228694001, 14228825113, 14228956207, 14229087281, 14229218383, 14229349457, 14229480563, - 14229611647, 14229742727, 14229873803, 14230004891, 14230135993, 14230267097, 14230398173, - 14230529267, 14230660343, 14230791427, 14230922501, 14231053589, 14231184689, 14231315773, - 14231446847, 14231577949, 14231709031, 14231840107, 14231971181, 14232102257, 14232233333, - 14232364451, 14232495533, 14232626657, 14232757733, 14232888823, 14233019929, 14233151011, - 14233282103, 14233413193, 14233544293, 14233675367, 14233806439, 14233937513, 14234068613, - 14234199691, 14234330767, 14234461897, 14234592971, 14234724073, 14234855147, 14234986223, - 14235117301, 14235248383, 14235379469, 14235510547, 14235641677, 14235772757, 14235903841, - 14236034951, 14236166023, 14236297109, 14236428181, 14236559261, 14236690333, 14236821461, - 14236952581, 14237083657, 14237214769, 14237345953, 14237477027, 14237608127, 14237739211, - 14237870293, 14238001423, 14238132539, 14238263621, 14238394717, 14238525809, 14238656893, - 14238787987, 14238919091, 14239050181, 14239181273, 14239312379, 14239443473, 14239574593, - 14239705673, 14239836757, 14239967857, 14240098933, 14240230007, 14240361137, 14240492209, - 14240623363, 14240754439, 14240885513, 14241016597, 14241147703, 14241278801, 14241409873, - 14241540967, 14241672041, 14241803117, 14241934211, 14242065293, 14242196383, 14242327457, - 14242458631, 14242589719, 14242720861, 14242851937, 14242983011, 14243114087, 14243245169, - 14243376289, 14243507363, 14243638447, 14243769571, 14243900659, 14244031733, 14244162809, - 14244293911, 14244425033, 14244556153, 14244687287, 14244818383, 14244949463, 14245080541, - 14245211647, 14245342747, 14245473829, 14245604911, 14245735993, 14245867117, 14245998203, - 14246129299, 14246260393, 14246391499, 14246522593, 14246653691, 14246784791, 14246915867, - 14247047051, 14247178129, 14247309211, 14247440297, 14247571379, 14247702451, 14247833549, - 14247964649, 14248095733, 14248226819, 14248357909, 14248489037, 14248620203, 14248751291, - 14248882369, 14249013469, 14249144557, 14249275639, 14249406719, 14249537849, 14249668933, - 14249800021, 14249931119, 14250062191, 14250193267, 14250324391, 14250455537, 14250586619, - 14250717697, 14250848771, 14250979843, 14251110917, 14251242023, 14251373107, 14251504199, - 14251635283, 14251766363, 14251897523, 14252028599, 14252159683, 14252290757, 14252421847, - 14252552953, 14252684063, 14252815169, 14252946241, 14253077351, 14253208447, 14253339539, - 14253470617, 14253601709, 14253732833, 14253863909, 14253995011, 14254126111, 14254257191, - 14254388311, 14254519403, 14254650481, 14254781561, 14254912663, 14255043743, 14255174833, - 14255305931, 14255437033, 14255568133, 14255699209, 14255830327, 14255961427, 14256092527, - 14256223649, 14256354757, 14256485839, 14256616919, 14256747991, 14256879067, 14257010153, - 14257141231, 14257272313, 14257403389, 14257534481, 14257665557, 14257796629, 14257927709, - 14258058847, 14258189927, 14258321029, 14258452121, 14258583203, 14258714333, 14258845409, - 14258976503, 14259107587, 14259238663, 14259369737, 14259500809, 14259631913, 14259763051, - 14259894163, 14260025243, 14260156321, 14260287407, 14260418503, 14260549577, 14260680689, - 14260811783, 14260942873, 14261073949, 14261205037, 14261336123, 14261467201, 14261598317, - 14261729401, 14261860489, 14261991571, 14262122683, 14262253763, 14262384841, 14262515921, - 14262647083, 14262778157, 14262909229, 14263040369, 14263171501, 14263302631, 14263433753, - 14263564829, 14263695911, 14263826989, 14263958077, 14264089153, 14264220233, 14264351359, - 14264482481, 14264613563, 14264744713, 14264875799, 14265006871, 14265137951, 14265269063, - 14265400141, 14265531223, 14265662297, 14265793369, 14265924461, 14266055549, 14266186621, - 14266317701, 14266448821, 14266579903, 14266710977, 14266842067, 14266973143, 14267104297, - 14267235373, 14267366471, 14267497561, 14267628643, 14267759719, 14267890801, 14268021907, - 14268152993, 14268284077, 14268415153, 14268546247, 14268677341, 14268808459, 14268939533, - 14269070611, 14269201691, 14269332769, 14269463843, 14269594939, 14269726013, 14269857089, - 14269988189, 14270119289, 14270250383, 14270381467, 14270512547, 14270643677, 14270774759, - 14270905837, 14271036947, 14271168049, 14271299143, 14271430237, 14271561323, 14271692401, - 14271823583, 14271954667, 14272085743, 14272216877, 14272347949, 14272479029, 14272610137, - 14272741237, 14272872323, 14273003449, 14273134529, 14273265607, 14273396689, 14273527769, - 14273658853, 14273789927, 14273921029, 14274052123, 14274183199, 14274314273, 14274445351, - 14274576427, 14274707519, 14274838597, 14274969671, 14275100761, 14275231847, 14275362953, - 14275494041, 14275625113, 14275756193, 14275887281, 14276018357, 14276149469, 14276280541, - 14276411651, 14276542729, 14276673811, 14276804887, 14276936017, 14277067099, 14277198193, - 14277329267, 14277460349, 14277591437, 14277722519, 14277853633, 14277984727, 14278115827, - 14278246903, 14278378057, 14278509137, 14278640219, 14278771319, 14278902403, 14279033491, - 14279164577, 14279295661, 14279426779, 14279557879, 14279688953, 14279820053, 14279951233, - 14280082343, 14280213419, 14280344497, 14280475613, 14280606751, 14280737833, 14280868907, - 14280999979, 14281131127, 14281262231, 14281393333, 14281524409, 14281655483, 14281786567, - 14281917647, 14282048741, 14282179829, 14282310967, 14282442073, 14282573147, 14282704231, - 14282835337, 14282966419, 14283097513, 14283228599, 14283359683, 14283490757, 14283621841, - 14283752953, 14283884029, 14284015121, 14284146203, 14284277291, 14284408363, 14284539439, - 14284670527, 14284801607, 14284932719, 14285063839, 14285194919, 14285325991, 14285457077, - 14285588171, 14285719271, 14285850353, 14285981443, 14286112531, 14286243637, 14286374717, - 14286505817, 14286636899, 14286767977, 14286899051, 14287030133, 14287161221, 14287292297, - 14287423379, 14287554451, 14287685539, 14287816643, 14287947733, 14288078821, 14288209927, - 14288341003, 14288472109, 14288603233, 14288734307, 14288865379, 14288996459, 14289127543, - 14289258629, 14289389701, 14289520781, 14289651881, 14289782963, 14289914059, 14290045151, - 14290176233, 14290307309, 14290438381, 14290569473, 14290700569, 14290831663, 14290962737, - 14291093821, 14291224907, 14291355997, 14291487083, 14291618219, 14291749379, 14291880469, - 14292011543, 14292142619, 14292273713, 14292404803, 14292535897, 14292667001, 14292798077, - 14292929173, 14293060253, 14293191329, 14293322429, 14293453501, 14293584593, 14293715671, - 14293846757, 14293977839, 14294108981, 14294240063, 14294371249, 14294502329, 14294633401, - 14294764487, 14294895649, 14295026743, 14295157853, 14295288937, 14295420017, 14295551089, - 14295682169, 14295813251, 14295944339, 14296075411, 14296206497, 14296337569, 14296468651, - 14296599749, 14296730843, 14296861921, 14296993021, 14297124103, 14297255177, 14297386253, - 14297517341, 14297648423, 14297779499, 14297910611, 14298041707, 14298172783, 14298303893, - 14298434977, 14298566063, 14298697157, 14298828251, 14298959341, 14299090417, 14299221589, - 14299352677, 14299483753, 14299614841, 14299745927, 14299877017, 14300008091, 14300139187, - 14300270291, 14300401403, 14300532487, 14300663579, 14300794687, 14300925811, 14301056941, - 14301188017, 14301319129, 14301450203, 14301581339, 14301712423, 14301843499, 14301974579, - 14302105667, 14302236749, 14302367873, 14302498961, 14302630033, 14302761133, 14302892213, - 14303023331, 14303154433, 14303285509, 14303416597, 14303547689, 14303678789, 14303809879, - 14303940953, 14304072031, 14304203153, 14304334279, 14304465389, 14304596461, 14304727559, - 14304858679, 14304989789, 14305120861, 14305251949, 14305383077, 14305514159, 14305645241, - 14305776341, 14305907419, 14306038499, 14306169629, 14306300711, 14306431879, 14306562967, - 14306694053, 14306825129, 14306956219, 14307087299, 14307218461, 14307349559, 14307480641, - 14307611761, 14307742837, 14307873917, 14308005073, 14308136147, 14308267241, 14308398319, - 14308529429, 14308660511, 14308791587, 14308922671, 14309053757, 14309184847, 14309315989, - 14309447071, 14309578159, 14309709241, 14309840357, 14309971469, 14310102557, 14310233687, - 14310364759, 14310495889, 14310626963, 14310758053, 14310889163, 14311020259, 14311151353, - 14311282451, 14311413539, 14311544659, 14311675751, 14311806841, 14311937953, 14312069069, - 14312200157, 14312331239, 14312462371, 14312593457, 14312724539, 14312855639, 14312986711, - 14313117799, 14313248893, 14313379967, 14313511039, 14313642127, 14313773207, 14313904279, - 14314035361, 14314166437, 14314297511, 14314428629, 14314559711, 14314690787, 14314821881, - 14314952959, 14315084051, 14315215127, 14315346217, 14315477329, 14315608403, 14315739499, - 14315870603, 14316001681, 14316132757, 14316263831, 14316394903, 14316525991, 14316657079, - 14316788159, 14316919237, 14317050311, 14317181387, 14317312487, 14317443607, 14317574683, - 14317705771, 14317836847, 14317967941, 14318099041, 14318230163, 14318361247, 14318492327, - 14318623409, 14318754523, 14318885611, 14319016693, 14319147767, 14319278849, 14319409931, - 14319541003, 14319672079, 14319803153, 14319934271, 14320065349, 14320196467, 14320327543, - 14320458617, 14320589711, 14320720837, 14320851917, 14320982989, 14321114063, 14321245151, - 14321376227, 14321507303, 14321638381, 14321769463, 14321900557, 14322031631, 14322162793, - 14322293873, 14322424951, 14322556051, 14322687149, 14322818227, 14322949337, 14323080419, - 14323211491, 14323342609, 14323473683, 14323604833, 14323735913, 14323866989, 14323998079, - 14324129177, 14324260309, 14324391391, 14324522467, 14324653573, 14324784653, 14324915783, - 14325046871, 14325177943, 14325309041, 14325440117, 14325571207, 14325702301, 14325833381, - 14325964453, 14326095529, 14326226617, 14326357733, 14326488811, 14326619927, 14326751009, - 14326882081, 14327013157, 14327144239, 14327275327, 14327406449, 14327537531, 14327668603, - 14327799677, 14327930779, 14328061879, 14328192979, 14328324071, 14328455143, 14328586241, - 14328717341, 14328848431, 14328979519, 14329110629, 14329241713, 14329372793, 14329503869, - 14329634941, 14329766051, 14329897123, 14330028259, 14330159339, 14330290433, 14330421571, - 14330552659, 14330683739, 14330814917, 14330945989, 14331077063, 14331208159, 14331339289, - 14331470383, 14331601469, 14331732553, 14331863633, 14331994739, 14332125827, 14332256899, - 14332387981, 14332519057, 14332650179, 14332781261, 14332912357, 14333043503, 14333174591, - 14333305667, 14333436781, 14333567879, 14333698957, 14333830031, 14333961137, 14334092209, - 14334223289, 14334354373, 14334485471, 14334616559, 14334747641, 14334878713, 14335009849, - 14335140949, 14335272071, 14335403143, 14335534253, 14335665347, 14335796443, 14335927579, - 14336058689, 14336189771, 14336320891, 14336451967, 14336583049, 14336714141, 14336845241, - 14336976323, 14337107399, 14337238477, 14337369559, 14337500633, 14337631741, 14337762863, - 14337893951, 14338025057, 14338156141, 14338287241, 14338418317, 14338549403, 14338680527, - 14338811623, 14338942721, 14339073817, 14339204911, 14339336017, 14339467147, 14339598271, - 14339729351, 14339860427, 14339991499, 14340122617, 14340253717, 14340384809, 14340515911, - 14340647029, 14340778169, 14340909241, 14341040317, 14341171417, 14341302499, 14341433591, - 14341564663, 14341695779, 14341826869, 14341957961, 14342089037, 14342220121, 14342351203, - 14342482277, 14342613361, 14342744489, 14342875567, 14343006659, 14343137741, 14343268829, - 14343399947, 14343531043, 14343662129, 14343793213, 14343924307, 14344055387, 14344186459, - 14344317587, 14344448771, 14344579849, 14344710923, 14344842019, 14344973119, 14345104229, - 14345235313, 14345366417, 14345497489, 14345628581, 14345759653, 14345890751, 14346021853, - 14346152981, 14346284101, 14346415189, 14346546299, 14346677467, 14346808543, 14346939643, - 14347070719, 14347201793, 14347332887, 14347463981, 14347595083, 14347726201, 14347857281, - 14347988357, 14348119433, 14348250557, 14348381659, 14348512751, 14348643823, 14348774897, - 14348905973, 14349037057, 14349168133, 14349299207, 14349430307, 14349561409, 14349692543, - 14349823619, 14349954691, 14350085819, 14350216921, 14350348039, 14350479149, 14350610221, - 14350741303, 14350872409, 14351003521, 14351134607, 14351265701, 14351396783, 14351527867, - 14351658941, 14351790041, 14351921117, 14352052217, 14352183289, 14352314399, 14352445531, - 14352576607, 14352707683, 14352838763, 14352969847, 14353100947, 14353232057, 14353363181, - 14353494289, 14353625383, 14353756481, 14353887557, 14354018647, 14354149721, 14354280817, - 14354411891, 14354543009, 14354674109, 14354805181, 14354936257, 14355067351, 14355198433, - 14355329543, 14355460643, 14355591739, 14355722827, 14355853927, 14355985013, 14356116091, - 14356247173, 14356378249, 14356509329, 14356640429, 14356771529, 14356902601, 14357033693, - 14357164781, 14357295857, 14357426939, 14357558011, 14357689147, 14357820233, 14357951317, - 14358082433, 14358213511, 14358344597, 14358475697, 14358606791, 14358737903, 14358868991, - 14359000067, 14359131139, 14359262231, 14359393313, 14359524391, 14359655473, 14359786561, - 14359917653, 14360048761, 14360179877, 14360310949, 14360442029, 14360573111, 14360704187, - 14360835263, 14360966351, 14361097441, 14361228517, 14361359609, 14361490687, 14361621779, - 14361752869, 14361884003, 14362015111, 14362146187, 14362277273, 14362408349, 14362539427, - 14362670521, 14362801597, 14362932673, 14363063753, 14363194831, 14363325917, 14363456993, - 14363588069, 14363719187, 14363850269, 14363981383, 14364112493, 14364243581, 14364374653, - 14364505787, 14364636887, 14364767981, 14364899057, 14365030157, 14365161277, 14365292363, - 14365423477, 14365554563, 14365685639, 14365816711, 14365947809, 14366078897, 14366209973, - 14366341063, 14366472151, 14366603233, 14366734313, 14366865433, 14366996533, 14367127613, - 14367258707, 14367389819, 14367520897, 14367651997, 14367783139, 14367914233, 14368045339, - 14368176437, 14368307539, 14368438619, 14368569707, 14368700803, 14368831879, 14368962967, - 14369094043, 14369225119, 14369356193, 14369487281, 14369618363, 14369749439, 14369880589, - 14370011671, 14370142751, 14370273847, 14370404933, 14370536021, 14370667109, 14370798203, - 14370929297, 14371060409, 14371191487, 14371322573, 14371453651, 14371584727, 14371715851, - 14371846961, 14371978073, 14372109151, 14372240263, 14372371339, 14372502421, 14372633501, - 14372764579, 14372895673, 14373026749, 14373157837, 14373288913, 14373420043, 14373551141, - 14373682237, 14373813343, 14373944419, 14374075511, 14374206593, 14374337671, 14374468799, - 14374599893, 14374730989, 14374862077, 14374993183, 14375124259, 14375255333, 14375386427, - 14375517511, 14375648593, 14375779673, 14375910763, 14376041899, 14376172973, 14376304069, - 14376435167, 14376566249, 14376697417, 14376828497, 14376959593, 14377090687, 14377221767, - 14377352867, 14377483943, 14377615051, 14377746133, 14377877209, 14378008291, 14378139371, - 14378270461, 14378401537, 14378532613, 14378663729, 14378794853, 14378925937, 14379057023, - 14379188101, 14379319243, 14379450317, 14379581399, 14379712471, 14379843553, 14379974663, - 14380105757, 14380236839, 14380367917, 14380498991, 14380630129, 14380761203, 14380892291, - 14381023369, 14381154449, 14381285533, 14381416613, 14381547707, 14381678783, 14381809873, - 14381940953, 14382072071, 14382203153, 14382334247, 14382465371, 14382596447, 14382727531, - 14382858613, 14382989693, 14383120769, 14383251889, 14383382963, 14383514039, 14383645117, - 14383776193, 14383907267, 14384038349, 14384169427, 14384300507, 14384431583, 14384562691, - 14384693773, 14384824897, 14384955997, 14385087127, 14385218209, 14385349343, 14385480419, - 14385611503, 14385742597, 14385873673, 14386004753, 14386135831, 14386266913, 14386397989, - 14386529063, 14386660147, 14386791247, 14386922323, 14387053399, 14387184481, 14387315563, - 14387446637, 14387577739, 14387708813, 14387839903, 14387970983, 14388102067, 14388233173, - 14388364283, 14388495383, 14388626479, 14388757553, 14388888641, 14389019783, 14389150871, - 14389281943, 14389413047, 14389544137, 14389675229, 14389806307, 14389937381, 14390068457, - 14390199541, 14390330659, 14390461769, 14390592847, 14390723939, 14390855041, 14390986153, - 14391117233, 14391248329, 14391379403, 14391510493, 14391641597, 14391772691, 14391903767, - 14392034863, 14392165951, 14392297133, 14392428221, 14392559309, 14392690393, 14392821511, - 14392952621, 14393083703, 14393214809, 14393345887, 14393476991, 14393608087, 14393739193, - 14393870269, 14394001351, 14394132469, 14394263551, 14394394687, 14394525779, 14394656869, - 14394787943, 14394919039, 14395050113, 14395181233, 14395312331, 14395443421, 14395574533, - 14395705609, 14395836683, 14395967771, 14396098859, 14396229931, 14396361011, 14396492107, - 14396623181, 14396754313, 14396885411, 14397016489, 14397147587, 14397278663, 14397409757, - 14397540877, 14397671957, 14397803053, 14397934139, 14398065229, 14398196311, 14398327393, - 14398458509, 14398589587, 14398720717, 14398851823, 14398982909, 14399113987, 14399245061, - 14399376137, 14399507281, 14399638369, 14399769463, 14399900579, 14400031661, 14400162809, - 14400293903, 14400424981, 14400556067, 14400687167, 14400818273, 14400949361, 14401080461, - 14401211537, 14401342621, 14401473731, 14401604803, 14401735879, 14401866961, 14401998059, - 14402129227, 14402260309, 14402391391, 14402522483, 14402653571, 14402784647, 14402915719, - 14403046817, 14403177907, 14403308981, 14403440057, 14403571177, 14403702259, 14403833351, - 14403964439, 14404095527, 14404226611, 14404357697, 14404488781, 14404619869, 14404750957, - 14404882039, 14405013149, 14405144231, 14405275307, 14405406397, 14405537479, 14405668579, - 14405799659, 14405930731, 14406061819, 14406192893, 14406324029, 14406455113, 14406586189, - 14406717287, 14406848359, 14406979471, 14407110589, 14407241669, 14407372741, 14407503823, - 14407634947, 14407766047, 14407897121, 14408028209, 14408159303, 14408290399, 14408421493, - 14408552579, 14408683673, 14408814767, 14408945893, 14409076993, 14409208091, 14409339209, - 14409470293, 14409601391, 14409732583, 14409863669, 14409994769, 14410125889, 14410257041, - 14410388119, 14410519213, 14410650323, 14410781501, 14410912679, 14411043809, 14411174923, - 14411305999, 14411437133, 14411568221, 14411699311, 14411830397, 14411961469, 14412092543, - 14412223619, 14412354701, 14412485783, 14412616859, 14412747959, 14412879031, 14413010107, - 14413141181, 14413272259, 14413403413, 14413534517, 14413665593, 14413796669, 14413927747, - 14414058829, 14414189981, 14414321083, 14414452181, 14414583259, 14414714333, 14414845439, - 14414976607, 14415107711, 14415238811, 14415369887, 14415500971, 14415632089, 14415763169, - 14415894271, 14416025383, 14416156457, 14416287533, 14416418629, 14416549727, 14416680823, - 14416811917, 14416943003, 14417074103, 14417205193, 14417336273, 14417467357, 14417598439, - 14417729569, 14417860651, 14417991733, 14418122827, 14418253903, 14418384989, 14418516067, - 14418647143, 14418778261, 14418909347, 14419040431, 14419171517, 14419302613, 14419433719, - 14419564801, 14419695937, 14419827013, 14419958117, 14420089193, 14420220313, 14420351401, - 14420482579, 14420613659, 14420744731, 14420875829, 14421006917, 14421137999, 14421269113, - 14421400199, 14421531317, 14421662389, 14421793487, 14421924593, 14422055671, 14422186769, - 14422317853, 14422448939, 14422580033, 14422711133, 14422842229, 14422973333, 14423104411, - 14423235503, 14423366591, 14423497667, 14423628763, 14423759843, 14423890927, 14424022009, - 14424153113, 14424284197, 14424415273, 14424546349, 14424677467, 14424808543, 14424939653, - 14425070761, 14425201841, 14425332991, 14425464073, 14425595153, 14425726351, 14425857431, - 14425988543, 14426119627, 14426250701, 14426381773, 14426512883, 14426643961, 14426775053, - 14426906213, 14427037291, 14427168389, 14427299461, 14427430543, 14427561623, 14427692711, - 14427823783, 14427954887, 14428086007, 14428217099, 14428348189, 14428479277, 14428610359, - 14428741447, 14428872527, 14429003651, 14429134763, 14429265857, 14429396941, 14429528023, - 14429659103, 14429790181, 14429921257, 14430052339, 14430183431, 14430314519, 14430445607, - 14430576707, 14430707779, 14430838859, 14430969953, 14431101077, 14431232159, 14431363241, - 14431494313, 14431625399, 14431756481, 14431887557, 14432018639, 14432149723, 14432280823, - 14432411921, 14432543009, 14432674097, 14432805193, 14432936339, 14433067417, 14433198503, - 14433329597, 14433460703, 14433591779, 14433722869, 14433853963, 14433985081, 14434116161, - 14434247263, 14434378363, 14434509457, 14434640543, 14434771627, 14434902701, 14435033773, - 14435164847, 14435295977, 14435427053, 14435558129, 14435689237, 14435820331, 14435951417, - 14436082489, 14436213593, 14436344683, 14436475771, 14436606851, 14436737941, 14436869021, - 14437000121, 14437131227, 14437262303, 14437393381, 14437524461, 14437655579, 14437786661, - 14437917751, 14438048839, 14438179913, 14438310989, 14438442121, 14438573197, 14438704277, - 14438835353, 14438966447, 14439097579, 14439228653, 14439359729, 14439490829, 14439621901, - 14439753007, 14439884087, 14440015193, 14440146269, 14440277351, 14440408459, 14440539541, - 14440670623, 14440801723, 14440932799, 14441063881, 14441194987, 14441326087, 14441457169, - 14441588257, 14441719373, 14441850457, 14441981549, 14442112669, 14442243763, 14442374839, - 14442505927, 14442637037, 14442768113, 14442899227, 14443030321, 14443161401, 14443292483, - 14443423583, 14443554667, 14443685759, 14443816843, 14443947937, 14444079011, 14444210083, - 14444341157, 14444472233, 14444603309, 14444734387, 14444865517, 14444996597, 14445127673, - 14445258749, 14445389831, 14445520907, 14445651991, 14445783109, 14445914201, 14446045279, - 14446176379, 14446307461, 14446438547, 14446569679, 14446700753, 14446831879, 14446962979, - 14447094061, 14447225147, 14447356243, 14447487319, 14447618443, 14447749517, 14447880637, - 14448011797, 14448142873, 14448273977, 14448405071, 14448536171, 14448667253, 14448798341, - 14448929447, 14449060519, 14449191593, 14449322689, 14449453769, 14449584841, 14449715927, - 14449847003, 14449978079, 14450109151, 14450240243, 14450371319, 14450502419, 14450633507, - 14450764579, 14450895661, 14451026761, 14451157837, 14451288919, 14451420013, 14451551143, - 14451682237, 14451813317, 14451944399, 14452075471, 14452206589, 14452337663, 14452468741, - 14452599817, 14452730921, 14452861999, 14452993097, 14453124247, 14453255339, 14453386447, - 14453517527, 14453648617, 14453779709, 14453910829, 14454041933, 14454173033, 14454304127, - 14454435199, 14454566279, 14454697351, 14454828433, 14454959543, 14455090651, 14455221727, - 14455352803, 14455483943, 14455615021, 14455746101, 14455877209, 14456008289, 14456139367, - 14456270459, 14456401549, 14456532659, 14456663747, 14456794871, 14456925947, 14457057029, - 14457188101, 14457319183, 14457450269, 14457581443, 14457712517, 14457843611, 14457974693, - 14458105771, 14458236893, 14458367969, 14458499059, 14458630177, 14458761257, 14458892333, - 14459023451, 14459154533, 14459285671, 14459416757, 14459547847, 14459678923, 14459810009, - 14459941117, 14460072197, 14460203299, 14460334379, 14460465469, 14460596561, 14460727637, - 14460858749, 14460989897, 14461120979, 14461252063, 14461383253, 14461514329, 14461645433, - 14461776517, 14461907591, 14462038667, 14462169829, 14462300987, 14462432069, 14462563147, - 14462694251, 14462825323, 14462956441, 14463087517, 14463218617, 14463349699, 14463480799, - 14463611909, 14463742991, 14463874063, 14464005163, 14464136273, 14464267379, 14464398467, - 14464529561, 14464660649, 14464791787, 14464922861, 14465053943, 14465185019, 14465316109, - 14465447197, 14465578279, 14465709353, 14465840449, 14465971571, 14466102661, 14466233773, - 14466364873, 14466495961, 14466627047, 14466758161, 14466889247, 14467020329, 14467151417, - 14467282507, 14467413589, 14467544681, 14467675771, 14467806883, 14467937959, 14468069051, - 14468200133, 14468331239, 14468462311, 14468593387, 14468724461, 14468855561, 14468986669, - 14469117749, 14469248831, 14469379927, 14469511031, 14469642113, 14469773189, 14469904261, - 14470035341, 14470166413, 14470297511, 14470428619, 14470559723, 14470690823, 14470821899, - 14470952981, 14471084059, 14471215139, 14471346269, 14471477359, 14471608447, 14471739521, - 14471870593, 14472001673, 14472132799, 14472263873, 14472394957, 14472526063, 14472657151, - 14472788251, 14472919327, 14473050437, 14473181519, 14473312613, 14473443779, 14473574867, - 14473705957, 14473837031, 14473968139, 14474099239, 14474230313, 14474361397, 14474492491, - 14474623613, 14474754691, 14474885851, 14475016957, 14475148033, 14475279107, 14475410179, - 14475541319, 14475672437, 14475803509, 14475934589, 14476065661, 14476196741, 14476327813, - 14476458947, 14476590101, 14476721219, 14476852297, 14476983371, 14477114453, 14477245553, - 14477376653, 14477507753, 14477638891, 14477769979, 14477901073, 14478032159, 14478163289, - 14478294373, 14478425477, 14478556571, 14478687659, 14478818743, 14478949817, 14479080947, - 14479212061, 14479343143, 14479474249, 14479605331, 14479736419, 14479867543, 14479998641, - 14480129717, 14480260807, 14480391881, 14480522977, 14480654057, 14480785157, 14480916259, - 14481047393, 14481178471, 14481309551, 14481440681, 14481571781, 14481702857, 14481833959, - 14481965039, 14482096117, 14482227191, 14482358281, 14482489361, 14482620491, 14482751581, - 14482882679, 14483013829, 14483144903, 14483275979, 14483407061, 14483538143, 14483669219, - 14483800333, 14483931421, 14484062531, 14484193687, 14484324817, 14484455893, 14484586999, - 14484718081, 14484849157, 14484980267, 14485111349, 14485242449, 14485373543, 14485504637, - 14485635709, 14485766837, 14485897981, 14486029087, 14486160163, 14486291249, 14486422337, - 14486553457, 14486684533, 14486815613, 14486946689, 14487077771, 14487208843, 14487339917, - 14487470993, 14487602069, 14487733159, 14487864241, 14487995329, 14488126421, 14488257517, - 14488388599, 14488519679, 14488650769, 14488781849, 14488912957, 14489044039, 14489175137, - 14489306263, 14489437349, 14489568421, 14489699503, 14489830577, 14489961653, 14490092731, - 14490223823, 14490354943, 14490486019, 14490617093, 14490748169, 14490879287, 14491010371, - 14491141447, 14491272527, 14491403603, 14491534703, 14491665779, 14491796867, 14491927949, - 14492059039, 14492190143, 14492321227, 14492452309, 14492583401, 14492714477, 14492845553, - 14492976643, 14493107729, 14493238807, 14493369893, 14493500969, 14493632057, 14493763129, - 14493894209, 14494025309, 14494156477, 14494287607, 14494418761, 14494549847, 14494680971, - 14494812047, 14494943119, 14495074193, 14495205299, 14495336393, 14495467471, 14495598563, - 14495729659, 14495860759, 14495991833, 14496122911, 14496253997, 14496385073, 14496516187, - 14496647293, 14496778379, 14496909451, 14497040543, 14497171621, 14497302767, 14497433891, - 14497564967, 14497696043, 14497827139, 14497958213, 14498089303, 14498220379, 14498351501, - 14498482577, 14498613677, 14498744791, 14498875883, 14499006983, 14499138067, 14499269149, - 14499400229, 14499531337, 14499662417, 14499793489, 14499924587, 14500055683, 14500186759, - 14500317877, 14500448957, 14500580041, 14500711117, 14500842217, 14500973303, 14501104381, - 14501235473, 14501366549, 14501497643, 14501628751, 14501759827, 14501890903, 14502021977, - 14502153139, 14502284219, 14502415303, 14502546427, 14502677507, 14502808597, 14502939707, - 14503070789, 14503201883, 14503332973, 14503464067, 14503595153, 14503726231, 14503857307, - 14503988437, 14504119519, 14504250623, 14504381719, 14504512811, 14504643913, 14504774987, - 14504906063, 14505037163, 14505168319, 14505299399, 14505430477, 14505561589, 14505692683, - 14505823789, 14505954877, 14506085953, 14506217039, 14506348123, 14506479217, 14506610291, - 14506741373, 14506872451, 14507003531, 14507134651, 14507265727, 14507396831, 14507527921, - 14507659003, 14507790083, 14507921177, 14508052283, 14508183373, 14508314453, 14508445577, - 14508576653, 14508707747, 14508838831, 14508969929, 14509101011, 14509232099, 14509363177, - 14509494269, 14509625353, 14509756427, 14509887499, 14510018573, 14510149763, 14510280881, - 14510411953, 14510543039, 14510674127, 14510805217, 14510936411, 14511067489, 14511198577, - 14511329681, 14511460753, 14511591839, 14511722921, 14511853999, 14511985093, 14512116233, - 14512247333, 14512378417, 14512509509, 14512640587, 14512771661, 14512902739, 14513033813, - 14513164889, 14513295961, 14513427043, 14513558159, 14513689291, 14513820407, 14513951479, - 14514082553, 14514213647, 14514344729, 14514475817, 14514606889, 14514738047, 14514869119, - 14515000193, 14515131277, 14515262353, 14515393429, 14515524521, 14515655593, 14515786667, - 14515917791, 14516048879, 14516180027, 14516311109, 14516442233, 14516573333, 14516704409, - 14516835497, 14516966593, 14517097669, 14517228743, 14517359863, 14517490943, 14517622019, - 14517753119, 14517884197, 14518015271, 14518146367, 14518277443, 14518408537, 14518539689, - 14518670779, 14518801877, 14518932971, 14519064071, 14519195179, 14519326259, 14519457331, - 14519588441, 14519719531, 14519850641, 14519981747, 14520112843, 14520243961, 14520375041, - 14520506129, 14520637217, 14520768347, 14520899431, 14521030507, 14521161623, 14521292701, - 14521423811, 14521554889, 14521685977, 14521817069, 14521948153, 14522079251, 14522210333, - 14522341411, 14522472511, 14522603591, 14522734669, 14522865743, 14522996843, 14523127919, - 14523258991, 14523390103, 14523521179, 14523652259, 14523783367, 14523914441, 14524045513, - 14524176599, 14524307689, 14524438771, 14524569859, 14524700947, 14524832059, 14524963153, - 14525094263, 14525225339, 14525356487, 14525487563, 14525618641, 14525749753, 14525880827, - 14526011939, 14526143039, 14526274153, 14526405241, 14526536407, 14526667489, 14526798577, - 14526929657, 14527060729, 14527191829, 14527322903, 14527453991, 14527585067, 14527716167, - 14527847287, 14527978363, 14528109443, 14528240549, 14528371621, 14528502697, 14528633771, - 14528764849, 14528895923, 14529027011, 14529158087, 14529289169, 14529420259, 14529551431, - 14529682561, 14529813689, 14529944773, 14530075853, 14530206941, 14530338023, 14530469117, - 14530600199, 14530731287, 14530862369, 14530993441, 14531124557, 14531255639, 14531386711, - 14531517821, 14531648897, 14531779973, 14531911193, 14532042277, 14532173353, 14532304447, - 14532435557, 14532566641, 14532697769, 14532828853, 14532959933, 14533091039, 14533222111, - 14533353199, 14533484291, 14533615363, 14533746481, 14533877557, 14534008639, 14534139721, - 14534270801, 14534401913, 14534533031, 14534664127, 14534795221, 14534926319, 14535057419, - 14535188497, 14535319577, 14535450649, 14535581741, 14535712813, 14535843911, 14535975029, - 14536106107, 14536237189, 14536368277, 14536499407, 14536630501, 14536761593, 14536892693, - 14537023769, 14537154857, 14537285933, 14537417017, 14537548099, 14537679179, 14537810293, - 14537941387, 14538072467, 14538203573, 14538334651, 14538465743, 14538596819, 14538727909, - 14538859019, 14538990091, 14539121167, 14539252249, 14539383349, 14539514453, 14539645529, - 14539776607, 14539907687, 14540038789, 14540169913, 14540300987, 14540432113, 14540563189, - 14540694331, 14540825413, 14540956489, 14541087601, 14541218689, 14541349783, 14541480883, - 14541611957, 14541743089, 14541874229, 14542005301, 14542136437, 14542267511, 14542398589, - 14542529693, 14542660771, 14542791859, 14542922959, 14543054069, 14543185169, 14543316257, - 14543447329, 14543578447, 14543709541, 14543840617, 14543971693, 14544102791, 14544233863, - 14544364937, 14544496027, 14544627133, 14544758243, 14544889319, 14545020437, 14545151531, - 14545282621, 14545413703, 14545544789, 14545675867, 14545806941, 14545938037, 14546069129, - 14546200213, 14546331323, 14546462423, 14546593499, 14546724571, 14546855651, 14546986771, - 14547117853, 14547248941, 14547380051, 14547511151, 14547642233, 14547773321, 14547904403, - 14548035493, 14548166579, 14548297711, 14548428841, 14548559953, 14548691051, 14548822163, - 14548953271, 14549084369, 14549215441, 14549346583, 14549477713, 14549608817, 14549739913, - 14549870989, 14550002069, 14550133151, 14550264251, 14550395323, 14550526421, 14550657503, - 14550788719, 14550919819, 14551050893, 14551181971, 14551313057, 14551444133, 14551575281, - 14551706353, 14551837427, 14551968527, 14552099599, 14552230681, 14552361757, 14552492833, - 14552623907, 14552755081, 14552886157, 14553017287, 14553148411, 14553279493, 14553410569, - 14553541643, 14553672719, 14553803837, 14553934919, 14554066073, 14554197227, 14554328359, - 14554459463, 14554590541, 14554721653, 14554852757, 14554983847, 14555114921, 14555245993, - 14555377069, 14555508223, 14555639297, 14555770429, 14555901527, 14556032629, 14556163711, - 14556294811, 14556425903, 14556556991, 14556688079, 14556819169, 14556950351, 14557081481, - 14557212611, 14557343693, 14557474783, 14557605857, 14557736951, 14557868023, 14557999097, - 14558130221, 14558261293, 14558392369, 14558523449, 14558654521, 14558785603, 14558916677, - 14559047761, 14559178873, 14559309967, 14559441047, 14559572141, 14559703217, 14559834301, - 14559965389, 14560096469, 14560227553, 14560358639, 14560489717, 14560620803, 14560751879, - 14560882981, 14561014073, 14561145199, 14561276273, 14561407381, 14561538463, 14561669539, - 14561800663, 14561931739, 14562062831, 14562193903, 14562325013, 14562456101, 14562587177, - 14562718253, 14562849337, 14562980423, 14563111499, 14563242581, 14563373677, 14563504771, - 14563635847, 14563766929, 14563898051, 14564029201, 14564160311, 14564291383, 14564422459, - 14564553587, 14564684677, 14564815751, 14564946901, 14565077977, 14565209111, 14565340201, - 14565471331, 14565602419, 14565733519, 14565864617, 14565995693, 14566126787, 14566257863, - 14566388981, 14566520081, 14566651153, 14566782233, 14566913359, 14567044441, 14567175517, - 14567306599, 14567437691, 14567568773, 14567699851, 14567830933, 14567962037, 14568093151, - 14568224249, 14568355327, 14568486403, 14568617491, 14568748609, 14568879701, 14569010789, - 14569141877, 14569272953, 14569404037, 14569535111, 14569666219, 14569797293, 14569928383, - 14570059477, 14570190589, 14570321663, 14570452823, 14570583901, 14570714987, 14570846071, - 14570977193, 14571108301, 14571239377, 14571370469, 14571501551, 14571632623, 14571763699, - 14571894791, 14572025873, 14572156967, 14572288063, 14572419149, 14572550261, 14572681363, - 14572812461, 14572943533, 14573074609, 14573205707, 14573336803, 14573467879, 14573598971, - 14573730077, 14573861171, 14573992247, 14574123331, 14574254447, 14574385559, 14574516643, - 14574647729, 14574778811, 14574909883, 14575040981, 14575172057, 14575303153, 14575434233, - 14575565309, 14575696381, 14575827479, 14575958581, 14576089673, 14576220803, 14576351887, - 14576482969, 14576614051, 14576745181, 14576876257, 14577007331, 14577138419, 14577269503, - 14577400603, 14577531701, 14577662789, 14577793861, 14577924941, 14578056013, 14578187093, - 14578318177, 14578449251, 14578580327, 14578711451, 14578842539, 14578973623, 14579104697, - 14579235793, 14579366899, 14579497973, 14579629087, 14579760199, 14579891273, 14580022361, - 14580153451, 14580284527, 14580415621, 14580546697, 14580677779, 14580808859, 14580939937, - 14581071031, 14581202179, 14581333297, 14581464371, 14581595477, 14581726559, 14581857643, - 14581988719, 14582119817, 14582250899, 14582381981, 14582513081, 14582644163, 14582775247, - 14582906383, 14583037459, 14583168563, 14583299639, 14583430721, 14583561823, 14583692939, - 14583824069, 14583955151, 14584086247, 14584217321, 14584348393, 14584479479, 14584610563, - 14584741693, 14584872773, 14585003861, 14585135017, 14585266099, 14585397193, 14585528297, - 14585659409, 14585790487, 14585921591, 14586052667, 14586183757, 14586314843, 14586445921, - 14586577043, 14586708121, 14586839227, 14586970379, 14587101461, 14587232533, 14587363673, - 14587494773, 14587625861, 14587756943, 14587888019, 14588019109, 14588150243, 14588281319, - 14588412413, 14588543507, 14588674591, 14588805683, 14588936771, 14589067849, 14589198959, - 14589330037, 14589461123, 14589592247, 14589723329, 14589854423, 14589985507, 14590116589, - 14590247677, 14590378763, 14590509851, 14590640957, 14590772029, 14590903153, 14591034251, - 14591165327, 14591296403, 14591427481, 14591558563, 14591689709, 14591820781, 14591951863, - 14592082937, 14592214079, 14592345161, 14592476237, 14592607313, 14592738421, 14592869519, - 14593000607, 14593131703, 14593262777, 14593393849, 14593524929, 14593656013, 14593787099, - 14593918181, 14594049257, 14594180333, 14594311429, 14594442509, 14594573603, 14594704739, - 14594835811, 14594966899, 14595097973, 14595229049, 14595360133, 14595491221, 14595622319, - 14595753391, 14595884467, 14596015543, 14596146619, 14596277713, 14596408819, 14596539911, - 14596670989, 14596802069, 14596933171, 14597064283, 14597195357, 14597326561, 14597457647, - 14597588749, 14597719823, 14597850941, 14597982031, 14598113137, 14598244253, 14598375331, - 14598506423, 14598637499, 14598768599, 14598899701, 14599030793, 14599161869, 14599292947, - 14599424023, 14599555099, 14599686191, 14599817263, 14599948397, 14600079499, 14600210587, - 14600341663, 14600472737, 14600603837, 14600734913, 14600866039, 14600997143, 14601128221, - 14601259301, 14601390469, 14601521569, 14601652669, 14601783751, 14601914837, 14602045919, - 14602177001, 14602308079, 14602439177, 14602570273, 14602701349, 14602832437, 14602963519, - 14603094607, 14603225687, 14603356763, 14603487841, 14603618923, 14603750003, 14603881091, - 14604012169, 14604143293, 14604274367, 14604405449, 14604536521, 14604667607, 14604798707, - 14604929813, 14605060889, 14605192013, 14605323143, 14605454251, 14605585363, 14605716443, - 14605847521, 14605978609, 14606109689, 14606240783, 14606371867, 14606502959, 14606634061, - 14606765161, 14606896253, 14607027329, 14607158407, 14607289493, 14607420593, 14607551687, - 14607682801, 14607813901, 14607944983, 14608076059, 14608207153, 14608338259, 14608469347, - 14608600427, 14608731541, 14608862629, 14608993703, 14609124779, 14609255867, 14609387047, - 14609518129, 14609649239, 14609780323, 14609911409, 14610042631, 14610173707, 14610304801, - 14610435883, 14610566987, 14610698087, 14610829199, 14610960281, 14611091359, 14611222447, - 14611353529, 14611484609, 14611615699, 14611746781, 14611877899, 14612008979, 14612140087, - 14612271181, 14612402263, 14612533337, 14612664421, 14612795501, 14612926639, 14613057773, - 14613188867, 14613319949, 14613451037, 14613582133, 14613713239, 14613844337, 14613975413, - 14614106489, 14614237577, 14614368653, 14614499729, 14614630819, 14614761899, 14614892993, - 14615024093, 14615155169, 14615286247, 14615417351, 14615548439, 14615679517, 14615810593, - 14615941673, 14616072763, 14616203837, 14616334963, 14616466037, 14616597113, 14616728207, - 14616859297, 14616990397, 14617121501, 14617252589, 14617383719, 14617514801, 14617645919, - 14617777007, 14617908119, 14618039197, 14618170291, 14618301407, 14618432503, 14618563579, - 14618694697, 14618825821, 14618956951, 14619088031, 14619219113, 14619350191, 14619481267, - 14619612353, 14619743431, 14619874513, 14620005641, 14620136719, 14620267807, 14620398917, - 14620530011, 14620661129, 14620792211, 14620923283, 14621054359, 14621185441, 14621316517, - 14621447597, 14621578669, 14621709763, 14621840837, 14621971909, 14622103039, 14622234181, - 14622365267, 14622496351, 14622627463, 14622758543, 14622889637, 14623020721, 14623151801, - 14623282909, 14623413983, 14623545121, 14623676227, 14623807313, 14623938391, 14624069483, - 14624200559, 14624331647, 14624462737, 14624593813, 14624724893, 14624855981, 14624987089, - 14625118171, 14625249251, 14625380327, 14625511403, 14625642481, 14625773597, 14625904679, - 14626035757, 14626166837, 14626297921, 14626429033, 14626560121, 14626691279, 14626822387, - 14626953491, 14627084603, 14627215679, 14627346751, 14627477869, 14627608967, 14627740087, - 14627871173, 14628002269, 14628133343, 14628264439, 14628395521, 14628526603, 14628657697, - 14628788789, 14628919867, 14629050959, 14629182041, 14629313129, 14629444223, 14629575307, - 14629706411, 14629837483, 14629968583, 14630099657, 14630230733, 14630361841, 14630492971, - 14630624059, 14630755151, 14630886229, 14631017341, 14631148421, 14631279571, 14631410657, - 14631541781, 14631672877, 14631803951, 14631935023, 14632066109, 14632197187, 14632328297, - 14632459397, 14632590521, 14632721671, 14632852763, 14632983851, 14633114933, 14633246083, - 14633377159, 14633508259, 14633639333, 14633770511, 14633901587, 14634032681, 14634163757, - 14634294929, 14634426011, 14634557089, 14634688177, 14634819299, 14634950371, 14635081451, - 14635212533, 14635343621, 14635474703, 14635605791, 14635736867, 14635867993, 14635999099, - 14636130241, 14636261359, 14636392487, 14636523563, 14636654701, 14636785777, 14636916851, - 14637047927, 14637179023, 14637310111, 14637441197, 14637572273, 14637703361, 14637834457, - 14637965539, 14638096631, 14638227713, 14638358837, 14638489937, 14638621013, 14638752091, - 14638883177, 14639014261, 14639145341, 14639276423, 14639407499, 14639538601, 14639669683, - 14639800787, 14639931893, 14640062981, 14640194059, 14640325153, 14640456227, 14640587317, - 14640718423, 14640849527, 14640980647, 14641111729, 14641242821, 14641373897, 14641504973, - 14641636067, 14641767233, 14641898321, 14642029393, 14642160509, 14642291591, 14642422681, - 14642553767, 14642684893, 14642815987, 14642947069, 14643078169, 14643209291, 14643340367, - 14643471473, 14643602551, 14643733631, 14643864707, 14643995801, 14644126877, 14644257949, - 14644389049, 14644520129, 14644651201, 14644782281, 14644913363, 14645044471, 14645175557, - 14645306639, 14645437711, 14645568797, 14645699891, 14645830981, 14645962061, 14646093139, - 14646224273, 14646355351, 14646486467, 14646617549, 14646748631, 14646879707, 14647010779, - 14647141871, 14647272977, 14647404053, 14647535131, 14647666213, 14647797293, 14647928423, - 14648059499, 14648190611, 14648321683, 14648452813, 14648583889, 14648715007, 14648846099, - 14648977199, 14649108317, 14649239399, 14649370487, 14649501563, 14649632651, 14649763811, - 14649894907, 14650025989, 14650157077, 14650288151, 14650419247, 14650550323, 14650681459, - 14650812541, 14650943633, 14651074721, 14651205847, 14651336929, 14651468063, 14651599147, - 14651730251, 14651861351, 14651992423, 14652123503, 14652254621, 14652385703, 14652516797, - 14652647917, 14652778991, 14652910121, 14653041253, 14653172329, 14653303409, 14653434517, - 14653565593, 14653696691, 14653827779, 14653958861, 14654089937, 14654221013, 14654352101, - 14654483177, 14654614259, 14654745373, 14654876471, 14655007579, 14655138713, 14655269803, - 14655400943, 14655532033, 14655663119, 14655794203, 14655925307, 14656056407, 14656187521, - 14656318597, 14656449671, 14656580777, 14656711871, 14656843031, 14656974121, 14657105201, - 14657236309, 14657367397, 14657498509, 14657629603, 14657760679, 14657891767, 14658022859, - 14658153947, 14658285023, 14658416137, 14658547213, 14658678301, 14658809387, 14658940459, - 14659071547, 14659202671, 14659333747, 14659464889, 14659595969, 14659727053, 14659858127, - 14659989221, 14660120303, 14660251391, 14660382469, 14660513551, 14660644627, 14660775721, - 14660906801, 14661037967, 14661169079, 14661300197, 14661431269, 14661562361, 14661693437, - 14661824531, 14661955619, 14662086727, 14662217821, 14662348903, 14662480033, 14662611107, - 14662742179, 14662873307, 14663004397, 14663135497, 14663266589, 14663397673, 14663528797, - 14663659877, 14663790959, 14663922043, 14664053119, 14664184237, 14664315313, 14664446387, - 14664577481, 14664708563, 14664839647, 14664970721, 14665101853, 14665232957, 14665364089, - 14665495171, 14665626253, 14665757341, 14665888417, 14666019541, 14666150647, 14666281723, - 14666412823, 14666543921, 14666674993, 14666806073, 14666937151, 14667068267, 14667199343, - 14667330427, 14667461509, 14667592607, 14667723689, 14667854801, 14667985901, 14668116979, - 14668248059, 14668379149, 14668510223, 14668641313, 14668772387, 14668903477, 14669034559, - 14669165633, 14669296739, 14669427811, 14669558921, 14669690011, 14669821121, 14669952223, - 14670083371, 14670214457, 14670345539, 14670476629, 14670607709, 14670738791, 14670869911, - 14671000987, 14671132079, 14671263179, 14671394279, 14671525373, 14671656463, 14671787549, - 14671918711, 14672049797, 14672180903, 14672311981, 14672443057, 14672574151, 14672705227, - 14672836301, 14672967409, 14673098483, 14673229559, 14673360643, 14673491719, 14673622807, - 14673753911, 14673884983, 14674016069, 14674147151, 14674278257, 14674409357, 14674540459, - 14674671551, 14674802641, 14674933717, 14675064823, 14675195933, 14675327033, 14675458117, - 14675589209, 14675720287, 14675851361, 14675982443, 14676113521, 14676244603, 14676375683, - 14676506791, 14676637873, 14676768959, 14676900061, 14677031143, 14677162223, 14677293307, - 14677424381, 14677555469, 14677686563, 14677817639, 14677948717, 14678079797, 14678210891, - 14678341969, 14678473049, 14678604131, 14678735231, 14678866303, 14678997379, 14679128459, - 14679259559, 14679390647, 14679521807, 14679652879, 14679783973, 14679915053, 14680046131, - 14680177207, 14680308337, 14680439443, 14680570523, 14680701617, 14680832701, 14680963807, - 14681094941, 14681226013, 14681357107, 14681488181, 14681619283, 14681750387, 14681881477, - 14682012563, 14682143639, 14682274721, 14682405809, 14682536893, 14682667969, 14682799063, - 14682930139, 14683061213, 14683192291, 14683323379, 14683454473, 14683585589, 14683716737, - 14683847813, 14683978889, 14684109971, 14684241071, 14684372147, 14684503241, 14684634317, - 14684765423, 14684896511, 14685027583, 14685158659, 14685289771, 14685420859, 14685551987, - 14685683069, 14685814159, 14685945247, 14686076329, 14686207441, 14686338523, 14686469627, - 14686600699, 14686731779, 14686862873, 14686993961, 14687125087, 14687256197, 14687387287, - 14687518393, 14687649469, 14687780551, 14687911661, 14688042769, 14688173867, 14688304949, - 14688436057, 14688567149, 14688698257, 14688829361, 14688960437, 14689091537, 14689222627, - 14689353733, 14689484807, 14689615879, 14689746959, 14689878079, 14690009161, 14690140253, - 14690271347, 14690402431, 14690533511, 14690664601, 14690795711, 14690926793, 14691057877, - 14691188999, 14691320129, 14691451207, 14691582313, 14691713423, 14691844543, 14691975631, - 14692106713, 14692237823, 14692368931, 14692500007, 14692631099, 14692762199, 14692893277, - 14693024351, 14693155429, 14693286533, 14693417623, 14693548703, 14693679799, 14693810917, - 14693942041, 14694073169, 14694204241, 14694335333, 14694466421, 14694597503, 14694728597, - 14694859691, 14694990787, 14695121869, 14695252961, 14695384037, 14695515137, 14695646221, - 14695777303, 14695908377, 14696039483, 14696170571, 14696301689, 14696432767, 14696563879, - 14696694953, 14696826031, 14696957117, 14697088193, 14697219289, 14697350377, 14697481471, - 14697612571, 14697743677, 14697874799, 14698005893, 14698137007, 14698268141, 14698399213, - 14698530307, 14698661423, 14698792517, 14698923607, 14699054687, 14699185763, 14699316847, - 14699447921, 14699579017, 14699710097, 14699841193, 14699972311, 14700103417, 14700234499, - 14700365597, 14700496673, 14700627757, 14700758879, 14700889963, 14701021037, 14701152119, - 14701283209, 14701414297, 14701545371, 14701676447, 14701807531, 14701938611, 14702069689, - 14702200781, 14702331857, 14702462947, 14702594033, 14702725123, 14702856199, 14702987297, - 14703118379, 14703249461, 14703380533, 14703511609, 14703642731, 14703773849, 14703904921, - 14704036007, 14704167097, 14704298183, 14704429277, 14704560349, 14704691447, 14704822523, - 14704953619, 14705084761, 14705215901, 14705346979, 14705478097, 14705609183, 14705740307, - 14705871421, 14706002513, 14706133591, 14706264667, 14706395771, 14706526843, 14706657937, - 14706789017, 14706920093, 14707051171, 14707182299, 14707313393, 14707444471, 14707575559, - 14707706641, 14707837747, 14707968851, 14708099941, 14708231023, 14708362111, 14708493193, - 14708624267, 14708755367, 14708886497, 14709017641, 14709148721, 14709279797, 14709410887, - 14709541963, 14709673037, 14709804113, 14709935237, 14710066331, 14710197451, 14710328533, - 14710459609, 14710590683, 14710721759, 14710852861, 14710983941, 14711115043, 14711246167, - 14711377271, 14711508349, 14711639429, 14711770523, 14711901661, 14712032767, 14712163883, - 14712294973, 14712426067, 14712557143, 14712688241, 14712819349, 14712950423, 14713081549, - 14713212629, 14713343761, 14713474837, 14713605913, 14713737089, 14713868173, 14713999259, - 14714130371, 14714261459, 14714392549, 14714523749, 14714654821, 14714785933, 14714917013, - 14715048143, 14715179233, 14715310307, 14715441401, 14715572491, 14715703567, 14715834671, - 14715965783, 14716096861, 14716227959, 14716359079, 14716490153, 14716621253, 14716752341, - 14716883497, 14717014583, 14717145671, 14717276767, 14717407843, 14717538923, 14717669999, - 14717801117, 14717932193, 14718063281, 14718194357, 14718325441, 14718456521, 14718587599, - 14718718681, 14718849811, 14718980897, 14719111987, 14719243109, 14719374191, 14719505291, - 14719636363, 14719767451, 14719898527, 14720029613, 14720160727, 14720291821, 14720422903, - 14720553979, 14720685053, 14720816141, 14720947247, 14721078347, 14721209429, 14721340559, - 14721471649, 14721602723, 14721733801, 14721864919, 14721996001, 14722127089, 14722258181, - 14722389257, 14722520333, 14722651421, 14722782509, 14722913587, 14723044669, 14723175767, - 14723306911, 14723437987, 14723569079, 14723700161, 14723831237, 14723962333, 14724093407, - 14724224483, 14724355601, 14724486683, 14724617767, 14724748847, 14724879929, 14725011011, - 14725142099, 14725273219, 14725404293, 14725535411, 14725666513, 14725797589, 14725928669, - 14726059771, 14726190847, 14726321921, 14726452999, 14726584079, 14726715197, 14726846297, - 14726977393, 14727108497, 14727239591, 14727370729, 14727501869, 14727632993, 14727764113, - 14727895199, 14728026323, 14728157407, 14728288481, 14728419553, 14728550689, 14728681811, - 14728812883, 14728943969, 14729075059, 14729206133, 14729337211, 14729468291, 14729599363, - 14729730467, 14729861551, 14729992709, 14730123799, 14730254899, 14730385973, 14730517073, - 14730648151, 14730779227, 14730910319, 14731041397, 14731172497, 14731303589, 14731434667, - 14731565767, 14731696867, 14731827953, 14731959041, 14732090119, 14732221213, 14732352293, - 14732483417, 14732614493, 14732745569, 14732876647, 14733007771, 14733138853, 14733269933, - 14733401017, 14733532109, 14733663299, 14733794381, 14733925469, 14734056613, 14734187701, - 14734318777, 14734449871, 14734580951, 14734712029, 14734843139, 14734974227, 14735105323, - 14735236403, 14735367497, 14735498597, 14735629687, 14735760761, 14735891851, 14736022963, - 14736154063, 14736285163, 14736416269, 14736547361, 14736678433, 14736809509, 14736940591, - 14737071691, 14737202773, 14737333867, 14737464941, 14737596019, 14737727117, 14737858199, - 14737989271, 14738120417, 14738251511, 14738382583, 14738513677, 14738644757, 14738775851, - 14738906927, 14739038051, 14739169129, 14739300223, 14739431303, 14739562399, 14739693499, - 14739824611, 14739955687, 14740086799, 14740217909, 14740348981, 14740480063, 14740611139, - 14740742221, 14740873319, 14741004433, 14741135561, 14741266669, 14741397743, 14741528899, - 14741660033, 14741791109, 14741922191, 14742053269, 14742184343, 14742315421, 14742446501, - 14742577601, 14742708707, 14742839791, 14742970883, 14743102001, 14743233073, 14743364149, - 14743495243, 14743626367, 14743757461, 14743888561, 14744019671, 14744150747, 14744281829, - 14744412937, 14744544011, 14744675087, 14744806169, 14744937253, 14745068329, 14745199423, - 14745330497, 14745461587, 14745592681, 14745723763, 14745854839, 14745985927, 14746117007, - 14746248089, 14746379171, 14746510349, 14746641439, 14746772527, 14746903601, 14747034677, - 14747165759, 14747296841, 14747427941, 14747559017, 14747690099, 14747821171, 14747952269, - 14748083411, 14748214487, 14748345569, 14748476683, 14748607763, 14748738859, 14748869957, - 14749001063, 14749132159, 14749263239, 14749394351, 14749525481, 14749656577, 14749787651, - 14749918759, 14750049857, 14750180969, 14750312041, 14750443117, 14750574217, 14750705297, - 14750836417, 14750967521, 14751098657, 14751229763, 14751360851, 14751491941, 14751623039, - 14751754111, 14751885229, 14752016303, 14752147379, 14752278557, 14752409671, 14752540769, - 14752671877, 14752802993, 14752934099, 14753065183, 14753196277, 14753327363, 14753458453, - 14753589577, 14753720671, 14753851751, 14753982829, 14754113903, 14754245021, 14754376097, - 14754507169, 14754638257, 14754769339, 14754900427, 14755031549, 14755162637, 14755293719, - 14755424819, 14755555897, 14755686971, 14755818047, 14755949141, 14756080319, 14756211443, - 14756342527, 14756473601, 14756604701, 14756735801, 14756866889, 14756997977, 14757129073, - 14757260183, 14757391283, 14757522389, 14757653473, 14757784553, 14757915643, 14758046747, - 14758177823, 14758308899, 14758440007, 14758571083, 14758702159, 14758833251, 14758964359, - 14759095433, 14759226509, 14759357597, 14759488673, 14759619779, 14759750881, 14759882003, - 14760013087, 14760144233, 14760275353, 14760406429, 14760537509, 14760668581, 14760799733, - 14760930809, 14761061899, 14761192981, 14761324079, 14761455151, 14761586227, 14761717301, - 14761848377, 14761979459, 14762110537, 14762241619, 14762372731, 14762503807, 14762634881, - 14762765957, 14762897069, 14763028211, 14763159289, 14763290389, 14763421481, 14763552553, - 14763683687, 14763814823, 14763945913, 14764077001, 14764208101, 14764339199, 14764470289, - 14764601399, 14764732471, 14764863557, 14764994653, 14765125729, 14765256811, 14765387909, - 14765518991, 14765650091, 14765781167, 14765912257, 14766043337, 14766174443, 14766305531, - 14766436603, 14766567733, 14766698833, 14766829921, 14766961043, 14767092127, 14767223203, - 14767354307, 14767485379, 14767616459, 14767747541, 14767878623, 14768009699, 14768140799, - 14768272033, 14768403157, 14768534237, 14768665313, 14768796391, 14768927483, 14769058571, - 14769189727, 14769320831, 14769451937, 14769583021, 14769714101, 14769845177, 14769976267, - 14770107353, 14770238447, 14770369531, 14770500607, 14770631819, 14770762901, 14770893997, - 14771025083, 14771156173, 14771287261, 14771418419, 14771549519, 14771680631, 14771811707, - 14771942803, 14772073889, 14772204973, 14772336067, 14772467189, 14772598277, 14772729383, - 14772860471, 14772991553, 14773122629, 14773253713, 14773384793, 14773515877, 14773646963, - 14773778057, 14773909151, 14774040257, 14774171339, 14774302441, 14774433547, 14774564621, - 14774695711, 14774826793, 14774957881, 14775089033, 14775220111, 14775351193, 14775482299, - 14775613373, 14775744461, 14775875539, 14776006613, 14776137713, 14776268797, 14776399873, - 14776530947, 14776662023, 14776793131, 14776924213, 14777055289, 14777186401, 14777317481, - 14777448589, 14777579671, 14777710763, 14777841877, 14777972999, 14778104071, 14778235159, - 14778366257, 14778497333, 14778628421, 14778759539, 14778890641, 14779021717, 14779152809, - 14779283881, 14779414987, 14779546073, 14779677151, 14779808237, 14779939313, 14780070407, - 14780201521, 14780332601, 14780463673, 14780594753, 14780725831, 14780856913, 14780988007, - 14781119107, 14781250181, 14781381253, 14781512357, 14781643433, 14781774523, 14781905597, - 14782036679, 14782167761, 14782298837, 14782429933, 14782561037, 14782692121, 14782823197, - 14782954297, 14783085397, 14783216479, 14783347609, 14783478701, 14783609803, 14783740879, - 14783872001, 14784003083, 14784134159, 14784265283, 14784396371, 14784527453, 14784658529, - 14784789601, 14784920677, 14785051763, 14785182887, 14785313969, 14785445053, 14785576129, - 14785707221, 14785838329, 14785969411, 14786100493, 14786231573, 14786362673, 14786493769, - 14786624843, 14786755927, 14786887033, 14787018107, 14787149183, 14787280273, 14787411347, - 14787542423, 14787673507, 14787804623, 14787935711, 14788066807, 14788197887, 14788329011, - 14788460083, 14788591171, 14788722251, 14788853341, 14788984433, 14789115559, 14789246677, - 14789377753, 14789508859, 14789639933, 14789771011, 14789902087, 14790033169, 14790164261, - 14790295367, 14790426439, 14790557531, 14790688609, 14790819707, 14790950819, 14791081909, - 14791213049, 14791344133, 14791475213, 14791606301, 14791737377, 14791868459, 14791999549, - 14792130637, 14792261713, 14792392847, 14792523937, 14792655013, 14792786087, 14792917163, - 14793048241, 14793179347, 14793310423, 14793441499, 14793572581, 14793703679, 14793834751, - 14793965827, 14794096913, 14794228049, 14794359131, 14794490209, 14794621291, 14794752403, - 14794883507, 14795014613, 14795145689, 14795276761, 14795407843, 14795538917, 14795670013, - 14795801089, 14795932163, 14796063239, 14796194333, 14796325409, 14796456517, 14796587599, - 14796718733, 14796849839, 14796980921, 14797111993, 14797243067, 14797374143, 14797505237, - 14797636327, 14797767409, 14797898491, 14798029573, 14798160649, 14798291723, 14798422817, - 14798553919, 14798685019, 14798816099, 14798947187, 14799078269, 14799209377, 14799340469, - 14799471541, 14799602621, 14799733703, 14799864791, 14799995989, 14800127071, 14800258153, - 14800389239, 14800520323, 14800651427, 14800782517, 14800913591, 14801044667, 14801175761, - 14801306857, 14801437933, 14801569067, 14801700217, 14801831293, 14801962423, 14802093521, - 14802224597, 14802355691, 14802486773, 14802617849, 14802748957, 14802880073, 14803011149, - 14803142239, 14803273313, 14803404437, 14803535533, 14803666639, 14803797733, 14803928807, - 14804059883, 14804190959, 14804322053, 14804453137, 14804584231, 14804715313, 14804846443, - 14804977549, 14805108629, 14805239711, 14805370793, 14805501869, 14805632971, 14805764047, - 14805895127, 14806026259, 14806157339, 14806288423, 14806419553, 14806550659, 14806681751, - 14806812827, 14806943923, 14807074999, 14807206111, 14807337221, 14807468317, 14807599421, - 14807730499, 14807861581, 14807992691, 14808123763, 14808254861, 14808385973, 14808517079, - 14808648163, 14808779243, 14808910321, 14809041397, 14809172473, 14809303547, 14809434641, - 14809565717, 14809696793, 14809827881, 14809958971, 14810090047, 14810221133, 14810352299, - 14810483381, 14810614487, 14810745571, 14810876653, 14811007727, 14811138817, 14811269929, - 14811401027, 14811532139, 14811663221, 14811794297, 14811925369, 14812056449, 14812187521, - 14812318607, 14812449679, 14812580753, 14812711841, 14812842949, 14812974031, 14813105113, - 14813236189, 14813367277, 14813498351, 14813629427, 14813760499, 14813891591, 14814022693, - 14814153793, 14814284887, 14814415981, 14814547067, 14814678149, 14814809231, 14814940307, - 14815071407, 14815202527, 14815333601, 14815464679, 14815595789, 14815726879, 14815858009, - 14815989101, 14816120183, 14816251291, 14816382367, 14816513441, 14816644519, 14816775599, - 14816906683, 14817037757, 14817168833, 14817299921, 14817430993, 14817562127, 14817693199, - 14817824303, 14817955423, 14818086497, 14818217587, 14818348681, 14818479763, 14818610879, - 14818741961, 14818873057, 14819004133, 14819135213, 14819266339, 14819397413, 14819528533, - 14819659609, 14819790691, 14819921797, 14820052901, 14820183991, 14820315067, 14820446159, - 14820577283, 14820708367, 14820839443, 14820970537, 14821101623, 14821232801, 14821363889, - 14821494967, 14821626107, 14821757183, 14821888259, 14822019343, 14822150437, 14822281519, - 14822412617, 14822543707, 14822674787, 14822805859, 14822936941, 14823068027, 14823199099, - 14823330173, 14823461269, 14823592379, 14823723469, 14823854543, 14823985637, 14824116709, - 14824247813, 14824378889, 14824509961, 14824641059, 14824772161, 14824903243, 14825034317, - 14825165389, 14825296463, 14825427557, 14825558641, 14825689733, 14825820817, 14825951891, - 14826082963, 14826214049, 14826345139, 14826476219, 14826607297, 14826738391, 14826869501, - 14827000583, 14827131721, 14827262839, 14827393921, 14827525081, 14827656163, 14827787267, - 14827918349, 14828049443, 14828180533, 14828311609, 14828442697, 14828573789, 14828704897, - 14828836039, 14828967151, 14829098227, 14829229301, 14829360391, 14829491489, 14829622567, - 14829753683, 14829884827, 14830015901, 14830146973, 14830278053, 14830409159, 14830540243, - 14830671341, 14830802423, 14830933499, 14831064613, 14831195713, 14831326787, 14831457871, - 14831589011, 14831720129, 14831851207, 14831982301, 14832113381, 14832244481, 14832375557, - 14832506641, 14832637733, 14832768829, 14832899941, 14833031021, 14833162111, 14833293187, - 14833424297, 14833555381, 14833686473, 14833817567, 14833948643, 14834079727, 14834210813, - 14834341909, 14834473033, 14834604131, 14834735207, 14834866373, 14834997451, 14835128549, - 14835259639, 14835390733, 14835521819, 14835652891, 14835783967, 14835915089, 14836046213, - 14836177333, 14836308457, 14836439531, 14836570709, 14836701791, 14836832873, 14836963969, - 14837095057, 14837226137, 14837357219, 14837488307, 14837619413, 14837750489, 14837881567, - 14838012647, 14838143743, 14838274817, 14838405961, 14838537047, 14838668129, 14838799207, - 14838930343, 14839061437, 14839192553, 14839323641, 14839454719, 14839585807, 14839716883, - 14839847959, 14839979059, 14840110157, 14840241259, 14840372399, 14840503477, 14840634559, - 14840765633, 14840896723, 14841027797, 14841158887, 14841289961, 14841421033, 14841552119, - 14841683203, 14841814277, 14841945373, 14842076449, 14842207573, 14842338653, 14842469743, - 14842600819, 14842731901, 14842862981, 14842994069, 14843125177, 14843256251, 14843387369, - 14843518457, 14843649571, 14843780669, 14843911757, 14844042959, 14844174049, 14844305129, - 14844436241, 14844567329, 14844698441, 14844829537, 14844960619, 14845091693, 14845222771, - 14845353851, 14845484933, 14845616033, 14845747117, 14845878239, 14846009363, 14846140457, - 14846271569, 14846402693, 14846533769, 14846664941, 14846796017, 14846927107, 14847058201, - 14847189289, 14847320381, 14847451453, 14847582559, 14847713633, 14847844717, 14847975827, - 14848106939, 14848238063, 14848369163, 14848500319, 14848631429, 14848762541, 14848893643, - 14849024797, 14849155873, 14849287021, 14849418107, 14849549189, 14849680301, 14849811401, - 14849942477, 14850073549, 14850204643, 14850335729, 14850466837, 14850597919, 14850729011, - 14850860099, 14850991171, 14851122331, 14851253411, 14851384507, 14851515589, 14851646713, - 14851777807, 14851908889, 14852039963, 14852171039, 14852302181, 14852433283, 14852564371, - 14852695457, 14852826529, 14852957621, 14853088739, 14853219817, 14853350933, 14853482069, - 14853613199, 14853744293, 14853875369, 14854006459, 14854137533, 14854268617, 14854399699, - 14854530797, 14854661873, 14854792961, 14854924039, 14855055113, 14855186189, 14855317261, - 14855448359, 14855579441, 14855710547, 14855841653, 14855972753, 14856103861, 14856234947, - 14856366071, 14856497143, 14856628247, 14856759329, 14856890407, 14857021483, 14857152571, - 14857283663, 14857414769, 14857545851, 14857676987, 14857808059, 14857939139, 14858070217, - 14858201299, 14858332393, 14858463493, 14858594581, 14858725709, 14858856799, 14858987881, - 14859118979, 14859250093, 14859381217, 14859512341, 14859643433, 14859774509, 14859905611, - 14860036687, 14860167761, 14860298851, 14860429933, 14860561057, 14860692131, 14860823231, - 14860954321, 14861085401, 14861216473, 14861347547, 14861478629, 14861609701, 14861740807, - 14861871887, 14862002993, 14862134081, 14862265153, 14862396253, 14862527327, 14862658411, - 14862789541, 14862920621, 14863051733, 14863182853, 14863313999, 14863445071, 14863576157, - 14863707233, 14863838309, 14863969391, 14864100521, 14864231621, 14864362717, 14864493811, - 14864624933, 14864756033, 14864887133, 14865018247, 14865149393, 14865280481, 14865411553, - 14865542633, 14865673717, 14865804803, 14865935911, 14866067011, 14866198129, 14866329211, - 14866460299, 14866591373, 14866722457, 14866853539, 14866984667, 14867115761, 14867246833, - 14867377949, 14867509037, 14867640157, 14867771249, 14867902337, 14868033419, 14868164497, - 14868295573, 14868426667, 14868557819, 14868688897, 14868820013, 14868951089, 14869082167, - 14869213253, 14869344379, 14869475471, 14869606547, 14869737643, 14869868729, 14869999831, - 14870130907, 14870262019, 14870393093, 14870524177, 14870655257, 14870786351, 14870917463, - 14871048551, 14871179623, 14871310703, 14871441787, 14871572861, 14871703963, 14871835051, - 14871966139, 14872097213, 14872228297, 14872359377, 14872490461, 14872621549, 14872752647, - 14872883723, 14873014811, 14873145887, 14873276987, 14873408063, 14873539193, 14873670289, - 14873801399, 14873932477, 14874063551, 14874194639, 14874325723, 14874456823, 14874587909, - 14874719017, 14874850127, 14874981217, 14875112309, 14875243381, 14875374461, 14875505539, - 14875636649, 14875767721, 14875898797, 14876029891, 14876160977, 14876292077, 14876423183, - 14876554271, 14876685377, 14876816453, 14876947601, 14877078673, 14877209771, 14877340921, - 14877472013, 14877603089, 14877734167, 14877865243, 14877996373, 14878127471, 14878258547, - 14878389619, 14878520719, 14878651793, 14878782871, 14878913963, 14879045039, 14879176129, - 14879307217, 14879438317, 14879569391, 14879700487, 14879831569, 14879962673, 14880093763, - 14880224839, 14880355961, 14880487049, 14880618133, 14880749269, 14880880363, 14881011443, - 14881142587, 14881273661, 14881404737, 14881535843, 14881666927, 14881798027, 14881929119, - 14882060209, 14882191309, 14882322437, 14882453519, 14882584603, 14882715691, 14882846789, - 14882977861, 14883108979, 14883240059, 14883371141, 14883502243, 14883633353, 14883764431, - 14883895517, 14884026589, 14884157707, 14884288787, 14884419917, 14884551023, 14884682117, - 14884813189, 14884944467, 14885075549, 14885206627, 14885337707, 14885468827, 14885599901, - 14885731019, 14885862091, 14885993179, 14886124259, 14886255331, 14886386467, 14886517573, - 14886648649, 14886779729, 14886910823, 14887041901, 14887172977, 14887304063, 14887435151, - 14887566233, 14887697339, 14887828471, 14887959557, 14888090719, 14888221879, 14888352959, - 14888484031, 14888615129, 14888746219, 14888877317, 14889008417, 14889139511, 14889270607, - 14889401783, 14889532877, 14889663953, 14889795047, 14889926123, 14890057201, 14890188283, - 14890319369, 14890450451, 14890581527, 14890712611, 14890843691, 14890974767, 14891105881, - 14891237003, 14891368087, 14891499191, 14891630263, 14891761349, 14891892439, 14892023519, - 14892154631, 14892285763, 14892416837, 14892547919, 14892679007, 14892810083, 14892941159, - 14893072267, 14893203343, 14893334429, 14893465507, 14893596593, 14893727669, 14893858747, - 14893989823, 14894120929, 14894252003, 14894383109, 14894514191, 14894645267, 14894776357, - 14894907437, 14895038527, 14895169607, 14895300691, 14895431819, 14895562901, 14895693991, - 14895825071, 14895956143, 14896087223, 14896218299, 14896349381, 14896480481, 14896611559, - 14896742669, 14896873741, 14897004823, 14897135899, 14897267041, 14897398141, 14897529217, - 14897660291, 14897791367, 14897922449, 14898053531, 14898184603, 14898315683, 14898446803, - 14898577907, 14898708983, 14898840071, 14898971159, 14899102237, 14899233367, 14899364489, - 14899495579, 14899626661, 14899757749, 14899888823, 14900019899, 14900150989, 14900282123, - 14900413201, 14900544283, 14900675359, 14900806433, 14900937509, 14901068617, 14901199693, - 14901330779, 14901461857, 14901592933, 14901724039, 14901855113, 14901986219, 14902117331, - 14902248409, 14902379507, 14902510591, 14902641679, 14902772777, 14902903849, 14903034929, - 14903166119, 14903297191, 14903428273, 14903559379, 14903690453, 14903821531, 14903952617, - 14904083699, 14904214811, 14904345887, 14904476971, 14904608063, 14904739141, 14904870259, - 14905001339, 14905132427, 14905263509, 14905394593, 14905525667, 14905656739, 14905787837, - 14905918927, 14906050001, 14906181079, 14906312177, 14906443259, 14906574341, 14906705449, - 14906836523, 14906967619, 14907098707, 14907229781, 14907360869, 14907491959, 14907623039, - 14907754117, 14907885197, 14908016309, 14908147393, 14908278491, 14908409683, 14908540769, - 14908671887, 14908802971, 14908934083, 14909065231, 14909196319, 14909327399, 14909458471, - 14909589553, 14909720633, 14909851711, 14909982793, 14910113893, 14910244967, 14910376073, - 14910507181, 14910638257, 14910769339, 14910900419, 14911031497, 14911162579, 14911293659, - 14911424741, 14911555873, 14911686947, 14911818023, 14911949131, 14912080217, 14912211337, - 14912342437, 14912473517, 14912604593, 14912735681, 14912866763, 14912997871, 14913128947, - 14913260077, 14913391159, 14913522251, 14913653341, 14913784423, 14913915503, 14914046579, - 14914177667, 14914308749, 14914439831, 14914570927, 14914702013, 14914833107, 14914964179, - 14915095253, 14915226341, 14915357417, 14915488499, 14915619581, 14915750687, 14915881759, - 14916012847, 14916143929, 14916275029, 14916406129, 14916537269, 14916668353, 14916799427, - 14916930503, 14917061639, 14917192721, 14917323821, 14917454957, 14917586041, 14917717123, - 14917848203, 14917979327, 14918110399, 14918241473, 14918372569, 14918503667, 14918634769, - 14918765881, 14918896973, 14919028067, 14919159179, 14919290251, 14919421327, 14919552421, - 14919683551, 14919814681, 14919945811, 14920076917, 14920208011, 14920339097, 14920470203, - 14920601299, 14920732417, 14920863493, 14920994603, 14921125693, 14921256767, 14921387863, - 14921518993, 14921650087, 14921781167, 14921912249, 14922043349, 14922174427, 14922305527, - 14922436609, 14922567701, 14922698789, 14922829877, 14922960959, 14923092053, 14923223131, - 14923354217, 14923485299, 14923616417, 14923747511, 14923878611, 14924009689, 14924140771, - 14924271883, 14924402963, 14924534063, 14924665157, 14924796241, 14924927323, 14925058417, - 14925189511, 14925320587, 14925451763, 14925582851, 14925713953, 14925845059, 14925976141, - 14926107233, 14926238347, 14926369457, 14926500551, 14926631633, 14926762727, 14926893803, - 14927024897, 14927155973, 14927287057, 14927418131, 14927549213, 14927680289, 14927811373, - 14927942483, 14928073579, 14928204653, 14928335743, 14928466823, 14928597911, 14928729073, - 14928860147, 14928991237, 14929122311, 14929253407, 14929384487, 14929515611, 14929646689, - 14929777771, 14929908857, 14930039989, 14930171077, 14930302157, 14930433241, 14930564321, - 14930695411, 14930826497, 14930957599, 14931088691, 14931219773, 14931350879, 14931481969, - 14931613057, 14931744133, 14931875207, 14932006279, 14932137379, 14932268453, 14932399543, - 14932530637, 14932661767, 14932792867, 14932923953, 14933055047, 14933186119, 14933317193, - 14933448269, 14933579383, 14933710471, 14933841553, 14933972629, 14934103729, 14934234823, - 14934365933, 14934497113, 14934628187, 14934759311, 14934890413, 14935021487, 14935152571, - 14935283677, 14935414789, 14935545869, 14935676941, 14935808023, 14935939099, 14936070179, - 14936201261, 14936332343, 14936463461, 14936594573, 14936725649, 14936856721, 14936987803, - 14937118877, 14937249949, 14937381049, 14937512143, 14937643223, 14937774307, 14937905387, - 14938036483, 14938167571, 14938298651, 14938429729, 14938560803, 14938691921, 14938823021, - 14938954103, 14939085181, 14939216269, 14939347349, 14939478431, 14939609513, 14939740589, - 14939871671, 14940002743, 14940133843, 14940264931, 14940396011, 14940527087, 14940658217, - 14940789341, 14940920417, 14941051501, 14941182583, 14941313657, 14941444741, 14941575821, - 14941706893, 14941837973, 14941969109, 14942100209, 14942231281, 14942362399, 14942493479, - 14942624573, 14942755691, 14942886769, 14943017857, 14943148939, 14943280013, 14943411101, - 14943542189, 14943673267, 14943804341, 14943935417, 14944066573, 14944197649, 14944328731, - 14944459837, 14944590937, 14944722041, 14944853137, 14944984231, 14945115313, 14945246389, - 14945377519, 14945508601, 14945639689, 14945770769, 14945901851, 14946032929, 14946164021, - 14946295097, 14946426169, 14946557251, 14946688331, 14946819451, 14946950527, 14947081621, - 14947212737, 14947343809, 14947474939, 14947606021, 14947737107, 14947868179, 14947999267, - 14948130361, 14948261467, 14948392601, 14948523713, 14948654843, 14948785937, 14948917021, - 14949048097, 14949179239, 14949310339, 14949441413, 14949572497, 14949703583, 14949834671, - 14949965749, 14950096883, 14950227967, 14950359131, 14950490207, 14950621297, 14950752373, - 14950883477, 14951014601, 14951145683, 14951276783, 14951407871, 14951538949, 14951670043, - 14951801129, 14951932211, 14952063283, 14952194417, 14952325489, 14952456577, 14952587669, - 14952718741, 14952849829, 14952980923, 14953112063, 14953243147, 14953374257, 14953505351, - 14953636429, 14953767503, 14953898579, 14954029661, 14954160761, 14954291843, 14954422921, - 14954553997, 14954685071, 14954816147, 14954947219, 14955078301, 14955209389, 14955340481, - 14955471607, 14955602681, 14955733787, 14955864863, 14955995953, 14956127029, 14956258153, - 14956389229, 14956520309, 14956651387, 14956782469, 14956913551, 14957044667, 14957175767, - 14957306849, 14957437931, 14957569009, 14957700137, 14957831257, 14957962333, 14958093407, - 14958224483, 14958355637, 14958486733, 14958617833, 14958748927, 14958880009, 14959011083, - 14959142183, 14959273279, 14959404359, 14959535431, 14959666517, 14959797613, 14959928701, - 14960059819, 14960190907, 14960321983, 14960453083, 14960584183, 14960715269, 14960846347, - 14960977441, 14961108529, 14961239627, 14961370733, 14961501859, 14961633007, 14961764087, - 14961895159, 14962026319, 14962157417, 14962288567, 14962419713, 14962550789, 14962681861, - 14962812947, 14962944067, 14963075213, 14963206303, 14963337383, 14963468489, 14963599579, - 14963730679, 14963861761, 14963992853, 14964123973, 14964255067, 14964386167, 14964517259, - 14964648371, 14964779497, 14964910577, 14965041667, 14965172843, 14965303937, 14965435027, - 14965566113, 14965697191, 14965828303, 14965959397, 14966090473, 14966221553, 14966352691, - 14966483827, 14966614907, 14966745979, 14966877059, 14967008143, 14967139219, 14967270341, - 14967401437, 14967532571, 14967663661, 14967794747, 14967925853, 14968056967, 14968188041, - 14968319117, 14968450201, 14968581301, 14968712417, 14968843499, 14968974607, 14969105681, - 14969236771, 14969367887, 14969498959, 14969630057, 14969761139, 14969892221, 14970023293, - 14970154369, 14970285469, 14970416543, 14970547619, 14970678691, 14970809803, 14970940903, - 14971071989, 14971203061, 14971334141, 14971465213, 14971596293, 14971727417, 14971858501, - 14971989601, 14972120689, 14972251771, 14972382853, 14972513981, 14972645057, 14972776151, - 14972907227, 14973038317, 14973169403, 14973300557, 14973431633, 14973562711, 14973693797, - 14973824869, 14973955951, 14974087027, 14974218139, 14974349227, 14974480327, 14974611409, - 14974742509, 14974873597, 14975004691, 14975135789, 14975266871, 14975397961, 14975529067, - 14975660159, 14975791273, 14975922371, 14976053467, 14976184543, 14976315623, 14976446729, - 14976577813, 14976708899, 14976839981, 14976971063, 14977102169, 14977233247, 14977364323, - 14977495439, 14977626523, 14977757603, 14977888687, 14978019787, 14978150879, 14978281957, - 14978413031, 14978544107, 14978675203, 14978806363, 14978937481, 14979068569, 14979199661, - 14979330761, 14979461837, 14979592933, 14979724007, 14979855103, 14979986207, 14980117279, - 14980248359, 14980379441, 14980510547, 14980641619, 14980772693, 14980903787, 14981034863, - 14981165951, 14981297029, 14981428151, 14981559233, 14981690309, 14981821381, 14981952473, - 14982083569, 14982214649, 14982345739, 14982476813, 14982607889, 14982738961, 14982870037, - 14983001147, 14983132247, 14983263341, 14983394423, 14983525507, 14983656601, 14983787723, - 14983918799, 14984049881, 14984180963, 14984312051, 14984443169, 14984574317, 14984705389, - 14984836469, 14984967541, 14985098627, 14985229703, 14985360779, 14985491863, 14985622963, - 14985754037, 14985885121, 14986016207, 14986147291, 14986278397, 14986409497, 14986540571, - 14986671643, 14986802731, 14986933807, 14987064923, 14987196013, 14987327149, 14987458261, - 14987589361, 14987720441, 14987851513, 14987982587, 14988113677, 14988244757, 14988375833, - 14988506987, 14988638101, 14988769177, 14988900257, 14989031329, 14989162421, 14989293509, - 14989424581, 14989555657, 14989686757, 14989817923, 14989949003, 14990080093, 14990211167, - 14990342281, 14990473361, 14990604479, 14990735567, 14990866663, 14990997751, 14991128827, - 14991259951, 14991391067, 14991522191, 14991653291, 14991784397, 14991915509, 14992046591, - 14992177687, 14992308761, 14992439843, 14992570919, 14992701991, 14992833071, 14992964167, - 14993095241, 14993226319, 14993357411, 14993488483, 14993619593, 14993750689, 14993881789, - 14994012863, 14994143977, 14994275057, 14994406129, 14994537247, 14994668333, 14994799409, - 14994930491, 14995061579, 14995192717, 14995323839, 14995454917, 14995585993, 14995717069, - 14995848157, 14995979233, 14996110309, 14996241391, 14996372467, 14996503553, 14996634629, - 14996765717, 14996896819, 14997027901, 14997158989, 14997290111, 14997421189, 14997552281, - 14997683353, 14997814451, 14997945539, 14998076669, 14998207771, 14998338869, 14998469953, - 14998601077, 14998732157, 14998863233, 14998994321, 14999125397, 14999256487, 14999387587, - 14999518687, 14999649773, 14999780857, 14999911933, 15000043033, 15000174121, 15000305197, - 15000436273, 15000567349, 15000698437, 15000829541, 15000960613, 15001091689, 15001222763, - 15001353931, 15001485007, 15001616159, 15001747259, 15001878343, 15002009497, 15002140627, - 15002271727, 15002402819, 15002533991, 15002665063, 15002796173, 15002927297, 15003058387, - 15003189497, 15003320597, 15003451681, 15003582779, 15003713861, 15003844943, 15003976021, - 15004107113, 15004238191, 15004369283, 15004500419, 15004631549, 15004762673, 15004893749, - 15005024833, 15005155951, 15005287111, 15005418217, 15005549303, 15005680409, 15005811511, - 15005942591, 15006073699, 15006204781, 15006335867, 15006466961, 15006598049, 15006729139, - 15006860213, 15006991291, 15007122379, 15007253473, 15007384571, 15007515659, 15007646761, - 15007777847, 15007908931, 15008040031, 15008171107, 15008302207, 15008433287, 15008564369, - 15008695451, 15008826529, 15008957609, 15009088747, 15009219821, 15009350957, 15009482029, - 15009613111, 15009744221, 15009875299, 15010006391, 15010137487, 15010268563, 15010399673, - 15010530763, 15010661849, 15010792939, 15010924039, 15011055119, 15011186243, 15011317337, - 15011448467, 15011579551, 15011710631, 15011841703, 15011972809, 15012103913, 15012235009, - 15012366091, 15012497167, 15012628249, 15012759323, 15012890407, 15013021493, 15013152587, - 15013283683, 15013414789, 15013545871, 15013676957, 15013808071, 15013939151, 15014070223, - 15014201317, 15014332397, 15014463469, 15014594593, 15014725697, 15014856793, 15014987873, - 15015118969, 15015250049, 15015381131, 15015512219, 15015643337, 15015774413, 15015905491, - 15016036591, 15016167679, 15016298797, 15016429891, 15016561003, 15016692077, 15016823149, - 15016954223, 15017085299, 15017216519, 15017347591, 15017478719, 15017609791, 15017740873, - 15017871949, 15018003029, 15018134107, 15018265181, 15018396269, 15018527341, 15018658429, - 15018789529, 15018920611, 15019051721, 15019182799, 15019313873, 15019444961, 15019576037, - 15019707137, 15019838227, 15019969331, 15020100427, 15020231537, 15020362691, 15020493773, - 15020624867, 15020755969, 15020887051, 15021018127, 15021149201, 15021280277, 15021411373, - 15021542449, 15021673531, 15021804641, 15021935717, 15022066789, 15022197863, 15022328939, - 15022460069, 15022591159, 15022722263, 15022853359, 15022984481, 15023115593, 15023246669, - 15023377753, 15023508833, 15023639909, 15023770997, 15023902109, 15024033197, 15024164279, - 15024295387, 15024426499, 15024557627, 15024688733, 15024819853, 15024950939, 15025082011, - 15025213121, 15025344197, 15025475359, 15025606433, 15025737539, 15025868617, 15025999697, - 15026130787, 15026261881, 15026392963, 15026524039, 15026655139, 15026786233, 15026917307, - 15027048409, 15027179501, 15027310621, 15027441719, 15027572809, 15027703891, 15027834979, - 15027966059, 15028097131, 15028228219, 15028359319, 15028490459, 15028621579, 15028752653, - 15028883741, 15029014843, 15029145931, 15029277061, 15029408153, 15029539243, 15029670323, - 15029801489, 15029932591, 15030063701, 15030194779, 15030325853, 15030456929, 15030588073, - 15030719147, 15030850259, 15030981331, 15031112407, 15031243483, 15031374583, 15031505681, - 15031636771, 15031767853, 15031898927, 15032030011, 15032161099, 15032292173, 15032423269, - 15032554367, 15032685439, 15032816521, 15032947607, 15033078727, 15033209809, 15033340967, - 15033472039, 15033603131, 15033734251, 15033865339, 15033996413, 15034127489, 15034258571, - 15034389661, 15034520749, 15034651861, 15034782941, 15034914023, 15035045101, 15035176187, - 15035307269, 15035438347, 15035569429, 15035700527, 15035831677, 15035962751, 15036093823, - 15036224897, 15036355987, 15036487069, 15036618197, 15036749279, 15036880363, 15037011449, - 15037142539, 15037273621, 15037404737, 15037535857, 15037666933, 15037798037, 15037929191, - 15038060309, 15038191403, 15038322499, 15038453579, 15038584663, 15038715817, 15038846891, - 15038977973, 15039109049, 15039240131, 15039371227, 15039502337, 15039633437, 15039764521, - 15039895601, 15040026697, 15040157777, 15040288871, 15040419997, 15040551073, 15040682149, - 15040813259, 15040944419, 15041075503, 15041206591, 15041337691, 15041468789, 15041599901, - 15041730973, 15041862047, 15041993119, 15042124247, 15042255329, 15042386537, 15042517619, - 15042648727, 15042779803, 15042910877, 15043041961, 15043173037, 15043304113, 15043435237, - 15043566311, 15043697411, 15043828487, 15043959559, 15044090701, 15044221811, 15044352887, - 15044483963, 15044615039, 15044746111, 15044877193, 15045008267, 15045139391, 15045270463, - 15045401593, 15045532669, 15045663749, 15045794833, 15045925933, 15046057021, 15046188133, - 15046319209, 15046450337, 15046581427, 15046712507, 15046843597, 15046974751, 15047105831, - 15047236921, 15047368019, 15047499133, 15047630207, 15047761279, 15047892473, 15048023581, - 15048154687, 15048285793, 15048416897, 15048548029, 15048679189, 15048810269, 15048941363, - 15049072483, 15049203557, 15049334633, 15049465741, 15049596833, 15049727923, 15049859023, - 15049990121, 15050121193, 15050252297, 15050383393, 15050514469, 15050645543, 15050776621, - 15050907719, 15051038797, 15051169871, 15051300959, 15051432079, 15051563167, 15051694253, - 15051825377, 15051956501, 15052087577, 15052218661, 15052349749, 15052480823, 15052611941, - 15052743037, 15052874119, 15053005211, 15053136283, 15053267357, 15053398433, 15053529539, - 15053660621, 15053791699, 15053922839, 15054053921, 15054184993, 15054316073, 15054447151, - 15054578269, 15054709349, 15054840421, 15054971497, 15055102577, 15055233679, 15055364767, - 15055495843, 15055626947, 15055758031, 15055889113, 15056020229, 15056151317, 15056282389, - 15056413483, 15056544571, 15056675657, 15056806901, 15056937977, 15057069059, 15057200153, - 15057331241, 15057462337, 15057593429, 15057724501, 15057855577, 15057986659, 15058117759, - 15058248851, 15058379923, 15058511011, 15058642103, 15058773239, 15058904407, 15059035487, - 15059166641, 15059297719, 15059428819, 15059559913, 15059690993, 15059822081, 15059953159, - 15060084251, 15060215327, 15060346403, 15060477557, 15060608639, 15060739711, 15060870887, - 15061002001, 15061133099, 15061264201, 15061395281, 15061526357, 15061657439, 15061788527, - 15061919629, 15062050727, 15062181817, 15062312893, 15062443969, 15062575043, 15062706137, - 15062837213, 15062968351, 15063099427, 15063230521, 15063361603, 15063492677, 15063623753, - 15063754829, 15063885923, 15064017029, 15064148123, 15064279201, 15064410329, 15064541407, - 15064672489, 15064803577, 15064934683, 15065065759, 15065196859, 15065327939, 15065459021, - 15065590121, 15065721197, 15065852279, 15065983351, 15066114439, 15066245521, 15066376627, - 15066507763, 15066638837, 15066769937, 15066901033, 15067032131, 15067163261, 15067294337, - 15067425413, 15067556489, 15067687627, 15067818707, 15067949789, 15068080877, 15068211959, - 15068343061, 15068474189, 15068605261, 15068736341, 15068867441, 15068998603, 15069129679, - 15069260771, 15069391903, 15069522997, 15069654077, 15069785179, 15069916297, 15070047379, - 15070178471, 15070309547, 15070440629, 15070571729, 15070702807, 15070833901, 15070964983, - 15071096107, 15071227201, 15071358307, 15071489437, 15071620511, 15071751599, 15071882671, - 15072013769, 15072144863, 15072275969, 15072407069, 15072538141, 15072669223, 15072800317, - 15072931399, 15073062503, 15073193591, 15073324723, 15073455797, 15073586893, 15073717987, - 15073849069, 15073980161, 15074111251, 15074242357, 15074373437, 15074504531, 15074635613, - 15074766709, 15074897813, 15075028889, 15075159961, 15075291073, 15075422203, 15075553279, - 15075684367, 15075815477, 15075946553, 15076077631, 15076208723, 15076339813, 15076470907, - 15076601989, 15076733069, 15076864163, 15076995247, 15077126341, 15077257427, 15077388541, - 15077519651, 15077650793, 15077781893, 15077912987, 15078044081, 15078175187, 15078306263, - 15078437357, 15078568481, 15078699569, 15078830647, 15078961727, 15079092857, 15079223977, - 15079355077, 15079486187, 15079617323, 15079748419, 15079879517, 15080010601, 15080141683, - 15080272777, 15080403869, 15080534941, 15080666021, 15080797169, 15080928271, 15081059351, - 15081190427, 15081321499, 15081452623, 15081583757, 15081714833, 15081845981, 15081977077, - 15082108163, 15082239239, 15082370333, 15082501409, 15082632493, 15082763611, 15082894741, - 15083025817, 15083156927, 15083288009, 15083419121, 15083550221, 15083681311, 15083812423, - 15083943503, 15084074591, 15084205663, 15084336739, 15084467813, 15084598897, 15084730013, - 15084861101, 15084992189, 15085123267, 15085254347, 15085385437, 15085516519, 15085647623, - 15085778711, 15085909793, 15086040877, 15086171957, 15086303041, 15086434127, 15086565211, - 15086696321, 15086827403, 15086958487, 15087089573, 15087220649, 15087351737, 15087482827, - 15087613901, 15087745007, 15087876107, 15088007189, 15088138319, 15088269401, 15088400491, - 15088531573, 15088662691, 15088793771, 15088924843, 15089055929, 15089187011, 15089318119, - 15089449201, 15089580281, 15089711353, 15089842457, 15089973539, 15090104611, 15090235697, - 15090366793, 15090497879, 15090628979, 15090760067, 15090891149, 15091022231, 15091153327, - 15091284433, 15091415519, 15091546597, 15091677701, 15091808773, 15091939853, 15092070979, - 15092202121, 15092333203, 15092464307, 15092595421, 15092726501, 15092857573, 15092988649, - 15093119759, 15093250897, 15093381973, 15093513079, 15093644179, 15093775259, 15093906353, - 15094037443, 15094168541, 15094299659, 15094430761, 15094561841, 15094692947, 15094824061, - 15094955153, 15095086229, 15095217311, 15095348459, 15095479549, 15095610697, 15095741789, - 15095872879, 15096003953, 15096135029, 15096266111, 15096397229, 15096528319, 15096659401, - 15096790519, 15096921617, 15097052701, 15097183781, 15097314853, 15097445927, 15097576999, - 15097708111, 15097839199, 15097970273, 15098101373, 15098232449, 15098363537, 15098494613, - 15098625721, 15098756831, 15098887939, 15099019027, 15099150103, 15099281203, 15099412313, - 15099543413, 15099674489, 15099805597, 15099936697, 15100067819, 15100198937, 15100330031, - 15100461107, 15100592183, 15100723289, 15100854383, 15100985483, 15101116559, 15101247649, - 15101378729, 15101509807, 15101640881, 15101771981, 15101903077, 15102034151, 15102165227, - 15102296309, 15102427429, 15102558503, 15102689611, 15102820687, 15102951761, 15103082909, - 15103213997, 15103345099, 15103476187, 15103607261, 15103738367, 15103869439, 15104000521, - 15104131607, 15104262739, 15104393819, 15104524931, 15104656097, 15104787209, 15104918291, - 15105049369, 15105180473, 15105311561, 15105442637, 15105573731, 15105704863, 15105835937, - 15105967039, 15106098113, 15106229191, 15106360309, 15106491409, 15106622483, 15106753621, - 15106884703, 15107015809, 15107146891, 15107277989, 15107409071, 15107540197, 15107671289, - 15107802389, 15107933527, 15108064603, 15108195677, 15108326759, 15108457873, 15108588977, - 15108720083, 15108851189, 15108982277, 15109113373, 15109244471, 15109375559, 15109506637, - 15109637731, 15109768813, 15109899911, 15110031043, 15110162131, 15110293241, 15110424317, - 15110555437, 15110686511, 15110817583, 15110948659, 15111079733, 15111210809, 15111341891, - 15111472979, 15111604073, 15111735157, 15111866251, 15111997337, 15112128413, 15112259489, - 15112390589, 15112521689, 15112652761, 15112783853, 15112914931, 15113046023, 15113177099, - 15113308181, 15113439283, 15113570363, 15113701439, 15113832523, 15113963597, 15114094669, - 15114225767, 15114356857, 15114487957, 15114619057, 15114750137, 15114881209, 15115012303, - 15115143413, 15115274491, 15115405567, 15115536647, 15115667719, 15115798849, 15115929929, - 15116061041, 15116192129, 15116323213, 15116454293, 15116585381, 15116716457, 15116847541, - 15116978647, 15117109723, 15117240823, 15117371921, 15117503017, 15117634093, 15117765203, - 15117896279, 15118027363, 15118158479, 15118289581, 15118420673, 15118551793, 15118682881, - 15118813961, 15118945063, 15119076199, 15119207281, 15119338363, 15119469439, 15119600513, - 15119731591, 15119862673, 15119993747, 15120124823, 15120255901, 15120386977, 15120518081, - 15120649169, 15120780253, 15120911359, 15121042471, 15121173569, 15121304663, 15121435753, - 15121566869, 15121697959, 15121829111, 15121960193, 15122091287, 15122222369, 15122353457, - 15122484529, 15122615611, 15122746699, 15122877773, 15123008863, 15123139937, 15123271013, - 15123402097, 15123533177, 15123664279, 15123795371, 15123926497, 15124057591, 15124188701, - 15124319797, 15124450879, 15124582001, 15124713139, 15124844219, 15124975297, 15125106371, - 15125237447, 15125368543, 15125499647, 15125630719, 15125761799, 15125892883, 15126023981, - 15126155053, 15126286159, 15126417239, 15126548321, 15126679439, 15126810577, 15126941651, - 15127072733, 15127203829, 15127334921, 15127465993, 15127597087, 15127728181, 15127859269, - 15127990343, 15128121431, 15128252521, 15128383597, 15128514673, 15128645771, 15128776849, - 15128907923, 15129038999, 15129170087, 15129301183, 15129432287, 15129563363, 15129694453, - 15129825637, 15129956717, 15130087829, 15130218911, 15130350071, 15130481143, 15130612219, - 15130743317, 15130874411, 15131005511, 15131136679, 15131267759, 15131398837, 15131529929, - 15131661011, 15131792113, 15131923199, 15132054283, 15132185389, 15132316487, 15132447559, - 15132578651, 15132709727, 15132840817, 15132971911, 15133103017, 15133234093, 15133365173, - 15133496249, 15133627339, 15133758413, 15133889497, 15134020613, 15134151701, 15134282783, - 15134413873, 15134544959, 15134676041, 15134807153, 15134938253, 15135069337, 15135200441, - 15135331517, 15135462613, 15135593687, 15135724837, 15135855923, 15135987017, 15136118099, - 15136249253, 15136380331, 15136511407, 15136642487, 15136773571, 15136904659, 15137035733, - 15137166827, 15137297899, 15137428973, 15137560051, 15137691181, 15137822303, 15137953393, - 15138084497, 15138215581, 15138346679, 15138477773, 15138608857, 15138739933, 15138871021, - 15139002113, 15139133189, 15139264267, 15139395347, 15139526431, 15139657567, 15139788641, - 15139919761, 15140050843, 15140182021, 15140313121, 15140444213, 15140575319, 15140706407, - 15140837489, 15140968561, 15141099683, 15141230827, 15141361943, 15141493027, 15141624103, - 15141755191, 15141886283, 15142017379, 15142148459, 15142279571, 15142410683, 15142541773, - 15142672847, 15142803931, 15142935007, 15143066153, 15143197241, 15143328367, 15143459467, - 15143590541, 15143721623, 15143852723, 15143983823, 15144114929, 15144246011, 15144377119, - 15144508199, 15144639287, 15144770359, 15144901483, 15145032613, 15145163689, 15145294783, - 15145425857, 15145556929, 15145688023, 15145819097, 15145950191, 15146081263, 15146212351, - 15146343427, 15146474503, 15146605601, 15146736701, 15146867797, 15146998871, 15147129953, - 15147261029, 15147392101, 15147523213, 15147654289, 15147785381, 15147916507, 15148047587, - 15148178671, 15148309747, 15148440907, 15148571981, 15148703131, 15148834213, 15148965287, - 15149096383, 15149227463, 15149358541, 15149489657, 15149620769, 15149751847, 15149882933, - 15150014027, 15150145099, 15150276181, 15150407263, 15150538369, 15150669451, 15150800579, - 15150931673, 15151062767, 15151193851, 15151324931, 15151456009, 15151587119, 15151718191, - 15151849289, 15151980401, 15152111477, 15152242549, 15152373629, 15152504711, 15152635783, - 15152766883, 15152897959, 15153029039, 15153160151, 15153291233, 15153422321, 15153553397, - 15153684509, 15153815587, 15153946669, 15154077749, 15154208827, 15154339901, 15154471009, - 15154602107, 15154733207, 15154864327, 15154995439, 15155126513, 15155257613, 15155388691, - 15155519777, 15155650859, 15155781937, 15155913037, 15156044173, 15156175259, 15156306349, - 15156437441, 15156568541, 15156699617, 15156830707, 15156961801, 15157092877, 15157223957, - 15157355029, 15157486109, 15157617191, 15157748329, 15157879411, 15158010541, 15158141623, - 15158272697, 15158403773, 15158534849, 15158665957, 15158797039, 15158928119, 15159059203, - 15159190279, 15159321371, 15159452443, 15159583529, 15159714601, 15159845681, 15159976753, - 15160107827, 15160238921, 15160370039, 15160501117, 15160632199, 15160763273, 15160894363, - 15161025479, 15161156557, 15161287663, 15161418743, 15161549867, 15161680939, 15161812021, - 15161943101, 15162074183, 15162205297, 15162336383, 15162467483, 15162598567, 15162729671, - 15162860747, 15162991859, 15163122943, 15163254031, 15163385123, 15163516223, 15163647311, - 15163778389, 15163909463, 15164040547, 15164171623, 15164302801, 15164433887, 15164564971, - 15164696047, 15164827127, 15164958257, 15165089341, 15165220423, 15165351527, 15165482639, - 15165613747, 15165744821, 15165875897, 15166006987, 15166138069, 15166269149, 15166400231, - 15166531309, 15166662389, 15166793471, 15166924543, 15167055637, 15167186813, 15167317901, - 15167448973, 15167580049, 15167711171, 15167842273, 15167973349, 15168104431, 15168235513, - 15168366593, 15168497681, 15168628753, 15168759829, 15168890911, 15169021993, 15169153079, - 15169284173, 15169415249, 15169546333, 15169677431, 15169808527, 15169939633, 15170070719, - 15170201791, 15170332907, 15170463989, 15170595103, 15170726177, 15170857313, 15170988401, - 15171119477, 15171250553, 15171381653, 15171512729, 15171643831, 15171774907, 15171905993, - 15172037071, 15172168153, 15172299229, 15172430323, 15172561403, 15172692503, 15172823587, - 15172954669, 15173085751, 15173216827, 15173347961, 15173479033, 15173610107, 15173741227, - 15173872319, 15174003407, 15174134531, 15174265607, 15174396701, 15174527773, 15174658853, - 15174789947, 15174921019, 15175052117, 15175183201, 15175314311, 15175445419, 15175576501, - 15175707643, 15175838731, 15175969817, 15176100899, 15176231981, 15176363089, 15176494187, - 15176625301, 15176756377, 15176887471, 15177018547, 15177149639, 15177280717, 15177411791, - 15177542869, 15177673957, 15177805051, 15177936127, 15178067249, 15178198327, 15178329409, - 15178460503, 15178591607, 15178722703, 15178853821, 15178984901, 15179115989, 15179247071, - 15179378143, 15179509223, 15179640353, 15179771447, 15179902523, 15180033599, 15180164683, - 15180295777, 15180426853, 15180557929, 15180689039, 15180820117, 15180951209, 15181082303, - 15181213379, 15181344481, 15181475557, 15181606631, 15181737707, 15181868789, 15181999883, - 15182131007, 15182262079, 15182393153, 15182524321, 15182655487, 15182786561, 15182917657, - 15183048743, 15183179821, 15183310903, 15183441983, 15183573061, 15183704183, 15183835259, - 15183966331, 15184097431, 15184228547, 15184359667, 15184490771, 15184621853, 15184752931, - 15184884019, 15185015159, 15185146231, 15185277313, 15185408453, 15185539541, 15185670649, - 15185801723, 15185932813, 15186063889, 15186194971, 15186326059, 15186457141, 15186588227, - 15186719341, 15186850439, 15186981527, 15187112609, 15187243727, 15187374859, 15187505933, - 15187637033, 15187768109, 15187899191, 15188030267, 15188161349, 15188292451, 15188423671, - 15188554747, 15188685821, 15188816927, 15188948017, 15189079109, 15189210193, 15189341267, - 15189472351, 15189603427, 15189734513, 15189865679, 15189996803, 15190127879, 15190259009, - 15190390081, 15190521161, 15190652237, 15190783319, 15190914457, 15191045561, 15191176657, - 15191307767, 15191438861, 15191569963, 15191701051, 15191832151, 15191963257, 15192094361, - 15192225481, 15192356573, 15192487663, 15192618739, 15192749827, 15192880919, 15193012001, - 15193143079, 15193274227, 15193405313, 15193536427, 15193667539, 15193798619, 15193929739, - 15194060867, 15194191939, 15194323013, 15194454091, 15194585201, 15194716283, 15194847359, - 15194978453, 15195109543, 15195240637, 15195371713, 15195502831, 15195633907, 15195764981, - 15195896069, 15196027141, 15196158217, 15196289293, 15196420387, 15196551473, 15196682671, - 15196813799, 15196944881, 15197075969, 15197207041, 15197338127, 15197469211, 15197600303, - 15197731391, 15197862469, 15197993563, 15198124691, 15198255829, 15198386909, 15198517993, - 15198649069, 15198780173, 15198911293, 15199042399, 15199173491, 15199304587, 15199435733, - 15199566827, 15199697917, 15199828991, 15199960099, 15200091191, 15200222287, 15200353373, - 15200484463, 15200615587, 15200746697, 15200877793, 15201008869, 15201139963, 15201271037, - 15201402131, 15201533227, 15201664307, 15201795379, 15201926459, 15202057547, 15202188637, - 15202319749, 15202450843, 15202581991, 15202713083, 15202844179, 15202975253, 15203106337, - 15203237431, 15203368519, 15203499593, 15203630671, 15203761747, 15203892827, 15204023941, - 15204155017, 15204286099, 15204417181, 15204548263, 15204679361, 15204810437, 15204941509, - 15205072627, 15205203721, 15205334819, 15205465903, 15205597007, 15205728103, 15205859177, - 15205990273, 15206121397, 15206252473, 15206383547, 15206514619, 15206645693, 15206776769, - 15206907841, 15207038929, 15207170047, 15207301121, 15207432203, 15207563297, 15207694399, - 15207825487, 15207956597, 15208087679, 15208218757, 15208349831, 15208480909, 15208612019, - 15208743091, 15208874183, 15209005267, 15209136367, 15209267443, 15209398543, 15209529637, - 15209660723, 15209791801, 15209922911, 15210054019, 15210185119, 15210316223, 15210447299, - 15210578401, 15210709477, 15210840571, 15210971719, 15211102813, 15211233893, 15211365007, - 15211496087, 15211627229, 15211758313, 15211889401, 15212020513, 15212151589, 15212282689, - 15212413781, 15212544881, 15212675953, 15212807047, 15212938127, 15213069211, 15213200287, - 15213331379, 15213462463, 15213593557, 15213724649, 15213855733, 15213986819, 15214117903, - 15214248977, 15214380067, 15214511159, 15214642243, 15214773347, 15214904423, 15215035543, - 15215166619, 15215297723, 15215428843, 15215559923, 15215691013, 15215822107, 15215953187, - 15216084283, 15216215393, 15216346477, 15216477571, 15216608651, 15216739751, 15216870827, - 15217001909, 15217132991, 15217264169, 15217395251, 15217526333, 15217657439, 15217788533, - 15217919677, 15218050807, 15218181899, 15218312981, 15218444089, 15218575181, 15218706277, - 15218837353, 15218968439, 15219099551, 15219230639, 15219361723, 15219492797, 15219623873, - 15219754969, 15219886051, 15220017161, 15220148233, 15220279309, 15220410449, 15220541533, - 15220672613, 15220803713, 15220934801, 15221065877, 15221196967, 15221328041, 15221459131, - 15221590211, 15221721293, 15221852383, 15221983459, 15222114539, 15222245657, 15222376733, - 15222507821, 15222638909, 15222769997, 15222901103, 15223032179, 15223163287, 15223294379, - 15223425457, 15223556563, 15223687729, 15223818811, 15223949887, 15224080979, 15224212063, - 15224343187, 15224474267, 15224605387, 15224736463, 15224867551, 15224998631, 15225129721, - 15225260807, 15225391889, 15225522967, 15225654043, 15225785119, 15225916219, 15226047323, - 15226178419, 15226309499, 15226440583, 15226571663, 15226702747, 15226833821, 15226964939, - 15227096039, 15227227117, 15227358191, 15227489287, 15227620379, 15227751467, 15227882539, - 15228013631, 15228144707, 15228275779, 15228406873, 15228537977, 15228669061, 15228800177, - 15228931297, 15229062377, 15229193459, 15229324549, 15229455739, 15229586837, 15229717933, - 15229849009, 15229980107, 15230111189, 15230242267, 15230373341, 15230504417, 15230635501, - 15230766613, 15230897687, 15231028801, 15231159893, 15231290983, 15231422071, 15231553147, - 15231684253, 15231815341, 15231946487, 15232077577, 15232208773, 15232339853, 15232470949, - 15232602059, 15232733177, 15232864267, 15232995373, 15233126449, 15233257549, 15233388629, - 15233519723, 15233650799, 15233781911, 15233912983, 15234044057, 15234175141, 15234306221, - 15234437299, 15234568379, 15234699457, 15234830537, 15234961613, 15235092689, 15235223771, - 15235354903, 15235486031, 15235617143, 15235748233, 15235879319, 15236010409, 15236141483, - 15236272589, 15236403671, 15236534771, 15236665853, 15236796989, 15236928097, 15237059171, - 15237190289, 15237321361, 15237452453, 15237583547, 15237714649, 15237845731, 15237976823, - 15238107991, 15238239083, 15238370171, 15238501279, 15238632389, 15238763489, 15238894603, - 15239025691, 15239156783, 15239287873, 15239418967, 15239550041, 15239681117, 15239812193, - 15239943281, 15240074359, 15240205481, 15240336577, 15240467653, 15240598729, 15240729841, - 15240860953, 15240992051, 15241123127, 15241254199, 15241385279, 15241516391, 15241647467, - 15241778593, 15241909667, 15242040743, 15242171869, 15242302979, 15242434057, 15242565139, - 15242696291, 15242827363, 15242958461, 15243089551, 15243220627, 15243351707, 15243482789, - 15243613909, 15243745001, 15243876107, 15244007221, 15244138313, 15244269413, 15244400513, - 15244531591, 15244662679, 15244793777, 15244924897, 15245055979, 15245187079, 15245318197, - 15245449333, 15245580409, 15245711561, 15245842639, 15245973751, 15246104873, 15246235957, - 15246367063, 15246498139, 15246629221, 15246760327, 15246891419, 15247022491, 15247153567, - 15247284659, 15247415759, 15247546841, 15247677979, 15247809067, 15247940159, 15248071247, - 15248202331, 15248333407, 15248464489, 15248595569, 15248726641, 15248857717, 15248988791, - 15249119887, 15249251023, 15249382097, 15249513173, 15249644251, 15249775361, 15249906481, - 15250037573, 15250168649, 15250299773, 15250430851, 15250561939, 15250693033, 15250824109, - 15250955227, 15251086309, 15251217427, 15251348513, 15251479631, 15251610713, 15251741809, - 15251872969, 15252004043, 15252135169, 15252266257, 15252397379, 15252528451, 15252659557, - 15252790633, 15252921731, 15253052813, 15253183909, 15253314997, 15253446083, 15253577219, - 15253708291, 15253839421, 15253970521, 15254101601, 15254232689, 15254363771, 15254494867, - 15254625941, 15254757017, 15254888111, 15255019187, 15255150319, 15255281401, 15255412483, - 15255543559, 15255674639, 15255805711, 15255936793, 15256067887, 15256198967, 15256330081, - 15256461163, 15256592237, 15256723319, 15256854401, 15256985501, 15257116577, 15257247727, - 15257378821, 15257509901, 15257640997, 15257772073, 15257903147, 15258034223, 15258165317, - 15258296489, 15258427567, 15258558661, 15258689737, 15258820823, 15258951901, 15259082987, - 15259214083, 15259345183, 15259476257, 15259607329, 15259738409, 15259869487, 15260000579, - 15260131681, 15260262769, 15260393867, 15260524999, 15260656079, 15260787173, 15260918249, - 15261049333, 15261180419, 15261311497, 15261442601, 15261573721, 15261704803, 15261835907, - 15261966989, 15262098097, 15262229173, 15262360313, 15262491389, 15262622467, 15262753549, - 15262884653, 15263015773, 15263146849, 15263277929, 15263409037, 15263540111, 15263671193, - 15263802269, 15263933351, 15264064441, 15264195563, 15264326677, 15264457763, 15264588869, - 15264719993, 15264851099, 15264982177, 15265113319, 15265244441, 15265375549, 15265506637, - 15265637719, 15265768801, 15265899877, 15266030959, 15266162039, 15266293121, 15266424221, - 15266555299, 15266686403, 15266817499, 15266948581, 15267079673, 15267210823, 15267341897, - 15267472981, 15267604061, 15267735157, 15267866281, 15267997399, 15268128521, 15268259603, - 15268390783, 15268521881, 15268652963, 15268784081, 15268915163, 15269046307, 15269177381, - 15269308499, 15269439613, 15269570713, 15269701807, 15269832913, 15269964001, 15270095077, - 15270226189, 15270357269, 15270488377, 15270619451, 15270750529, 15270881611, 15271012697, - 15271143781, 15271274857, 15271405973, 15271537081, 15271668227, 15271799311, 15271930391, - 15272061463, 15272192561, 15272323639, 15272454727, 15272585807, 15272716913, 15272848001, - 15272979097, 15273110179, 15273241253, 15273372379, 15273503471, 15273634577, 15273765667, - 15273896783, 15274027861, 15274158937, 15274290011, 15274421083, 15274552187, 15274683287, - 15274814371, 15274945459, 15275076547, 15275207653, 15275338739, 15275469817, 15275600947, - 15275732023, 15275863147, 15275994229, 15276125309, 15276256381, 15276387481, 15276518627, - 15276649777, 15276780859, 15276911933, 15277043017, 15277174093, 15277305283, 15277436371, - 15277567451, 15277698547, 15277829621, 15277960697, 15278091769, 15278222879, 15278353973, - 15278485063, 15278616151, 15278747243, 15278878423, 15279009509, 15279140621, 15279271697, - 15279402769, 15279533861, 15279664951, 15279796033, 15279927119, 15280058197, 15280189279, - 15280320359, 15280451443, 15280582517, 15280713601, 15280844707, 15280975813, 15281106899, - 15281238017, 15281369093, 15281500181, 15281631259, 15281762347, 15281893441, 15282024521, - 15282155599, 15282286673, 15282417809, 15282548893, 15282679969, 15282811043, 15282942119, - 15283073209, 15283204283, 15283335409, 15283466507, 15283597579, 15283728653, 15283859761, - 15283990861, 15284121947, 15284253029, 15284384201, 15284515307, 15284646383, 15284777477, - 15284908559, 15285039647, 15285170777, 15285301873, 15285432961, 15285564053, 15285695147, - 15285826219, 15285957301, 15286088417, 15286219537, 15286350619, 15286481701, 15286612787, - 15286743887, 15286874987, 15287006069, 15287137141, 15287268253, 15287399383, 15287530481, - 15287661581, 15287792671, 15287923759, 15288054853, 15288185929, 15288317047, 15288448127, - 15288579209, 15288710299, 15288841391, 15288972499, 15289103581, 15289234657, 15289365731, - 15289496843, 15289627937, 15289759019, 15289890137, 15290021233, 15290152307, 15290283391, - 15290414479, 15290545561, 15290676671, 15290807789, 15290938907, 15291069979, 15291201097, - 15291332233, 15291463309, 15291594403, 15291725543, 15291856631, 15291987749, 15292118837, - 15292249919, 15292381009, 15292512089, 15292643173, 15292774253, 15292905359, 15293036441, - 15293167517, 15293298599, 15293429717, 15293560811, 15293691887, 15293822959, 15293954089, - 15294085171, 15294216253, 15294347389, 15294478481, 15294609601, 15294740677, 15294871751, - 15295002917, 15295133993, 15295265093, 15295396189, 15295527287, 15295658431, 15295789519, - 15295920691, 15296051773, 15296182861, 15296313943, 15296445029, 15296576101, 15296707193, - 15296838281, 15296969371, 15297100447, 15297231527, 15297362659, 15297493793, 15297624871, - 15297755971, 15297887051, 15298018171, 15298149271, 15298280377, 15298411451, 15298542527, - 15298673603, 15298804753, 15298935889, 15299066971, 15299198077, 15299329183, 15299460271, - 15299591357, 15299722433, 15299853557, 15299984647, 15300115759, 15300246839, 15300377923, - 15300509033, 15300640139, 15300771253, 15300902333, 15301033421, 15301164503, 15301295579, - 15301426703, 15301557833, 15301688923, 15301820057, 15301951151, 15302082223, 15302213299, - 15302344439, 15302475511, 15302606591, 15302737699, 15302868781, 15302999857, 15303130933, - 15303262019, 15303393113, 15303524239, 15303655313, 15303786397, 15303917471, 15304048553, - 15304179629, 15304310713, 15304441813, 15304572911, 15304704011, 15304835093, 15304966181, - 15305097271, 15305228347, 15305359423, 15305490503, 15305621587, 15305752663, 15305883743, - 15306014833, 15306145919, 15306277073, 15306408157, 15306539233, 15306670321, 15306801401, - 15306932477, 15307063559, 15307194677, 15307325771, 15307456847, 15307587947, 15307719029, - 15307850111, 15307981189, 15308112293, 15308243381, 15308374453, 15308505557, 15308636633, - 15308767709, 15308898863, 15309029959, 15309161051, 15309292127, 15309423203, 15309554303, - 15309685441, 15309816517, 15309947591, 15310078697, 15310209787, 15310340873, 15310471963, - 15310603037, 15310734143, 15310865233, 15310996333, 15311127437, 15311258527, 15311389603, - 15311520677, 15311651767, 15311782859, 15311913973, 15312045079, 15312176189, 15312307301, - 15312438391, 15312569483, 15312700561, 15312831643, 15312962767, 15313093879, 15313224991, - 15313356083, 15313487173, 15313618249, 15313749323, 15313880399, 15314011487, 15314142559, - 15314273641, 15314404769, 15314535851, 15314666947, 15314798071, 15314929183, 15315060269, - 15315191347, 15315322447, 15315453521, 15315584629, 15315715729, 15315846811, 15315977891, - 15316109077, 15316240187, 15316371281, 15316502381, 15316633471, 15316764553, 15316895641, - 15317026723, 15317157799, 15317288891, 15317420021, 15317551097, 15317682179, 15317813299, - 15317944379, 15318075457, 15318206531, 15318337603, 15318468709, 15318599837, 15318730961, - 15318862033, 15318993119, 15319124291, 15319255403, 15319386487, 15319517573, 15319648649, - 15319779731, 15319910821, 15320041901, 15320172979, 15320304053, 15320435131, 15320566249, - 15320697473, 15320828569, 15320959679, 15321090751, 15321221837, 15321352927, 15321484033, - 15321615139, 15321746257, 15321877357, 15322008491, 15322139603, 15322270703, 15322401817, - 15322532917, 15322664003, 15322795091, 15322926169, 15323057257, 15323188337, 15323319413, - 15323450509, 15323581607, 15323712707, 15323843783, 15323974859, 15324105947, 15324237031, - 15324368153, 15324499241, 15324630359, 15324761483, 15324892577, 15325023689, 15325154773, - 15325285907, 15325416979, 15325548097, 15325679177, 15325810261, 15325941349, 15326072479, - 15326203561, 15326334677, 15326465761, 15326596837, 15326727917, 15326859019, 15326990093, - 15327121211, 15327252287, 15327383363, 15327514441, 15327645517, 15327776663, 15327907783, - 15328038863, 15328169947, 15328301029, 15328432117, 15328563197, 15328694299, 15328825399, - 15328956481, 15329087591, 15329218679, 15329349751, 15329480827, 15329611949, 15329743031, - 15329874113, 15330005189, 15330136279, 15330267353, 15330398443, 15330529517, 15330660593, - 15330791669, 15330922753, 15331053869, 15331184951, 15331316027, 15331447121, 15331578221, - 15331709359, 15331840441, 15331971521, 15332102593, 15332233667, 15332364743, 15332495821, - 15332626901, 15332757977, 15332889071, 15333020161, 15333151243, 15333282331, 15333413461, - 15333544609, 15333675701, 15333806791, 15333937877, 15334068949, 15334200041, 15334331123, - 15334462237, 15334593367, 15334724467, 15334855561, 15334986637, 15335117711, 15335248813, - 15335379901, 15335510987, 15335642059, 15335773139, 15335904217, 15336035333, 15336166421, - 15336297523, 15336428609, 15336559717, 15336690793, 15336821953, 15336953057, 15337084129, - 15337215203, 15337346279, 15337477361, 15337608449, 15337739587, 15337870699, 15338001823, - 15338132933, 15338264023, 15338395123, 15338526227, 15338657357, 15338788429, 15338919503, - 15339050593, 15339181681, 15339312767, 15339443881, 15339574961, 15339706091, 15339837251, - 15339968339, 15340099417, 15340230491, 15340361567, 15340492639, 15340623757, 15340754857, - 15340885999, 15341017123, 15341148209, 15341279329, 15341410423, 15341541497, 15341672603, - 15341803717, 15341934809, 15342065911, 15342197063, 15342328151, 15342459227, 15342590309, - 15342721399, 15342852487, 15342983563, 15343114663, 15343245751, 15343376837, 15343507909, - 15343638991, 15343770083, 15343901159, 15344032247, 15344163337, 15344294419, 15344425507, - 15344556593, 15344687671, 15344818763, 15344949869, 15345080951, 15345212063, 15345343193, - 15345474341, 15345605423, 15345736513, 15345867599, 15345998671, 15346129787, 15346260887, - 15346391969, 15346523069, 15346654163, 15346785247, 15346916329, 15347047433, 15347178521, - 15347309597, 15347440711, 15347571809, 15347702891, 15347833987, 15347965069, 15348096151, - 15348227291, 15348358379, 15348489469, 15348620569, 15348751643, 15348882739, 15349013819, - 15349144891, 15349275983, 15349407067, 15349538143, 15349669219, 15349800317, 15349931393, - 15350062477, 15350193559, 15350324657, 15350455739, 15350586827, 15350717903, 15350849021, - 15350980123, 15351111233, 15351242323, 15351373403, 15351504481, 15351635569, 15351766657, - 15351897749, 15352028833, 15352159909, 15352291109, 15352422187, 15352553287, 15352684363, - 15352815451, 15352946527, 15353077609, 15353208697, 15353339789, 15353470861, 15353601941, - 15353733023, 15353864111, 15353995187, 15354126289, 15354257363, 15354388447, 15354519529, - 15354650603, 15354781691, 15354912763, 15355043863, 15355174987, 15355306061, 15355437193, - 15355568279, 15355699391, 15355830463, 15355961549, 15356092627, 15356223703, 15356354803, - 15356485889, 15356616973, 15356748047, 15356879129, 15357010211, 15357141323, 15357272459, - 15357403547, 15357534629, 15357665707, 15357796781, 15357927877, 15358058951, 15358190059, - 15358321151, 15358452227, 15358583299, 15358714373, 15358845487, 15358976569, 15359107649, - 15359238731, 15359369807, 15359500879, 15359631983, 15359763059, 15359894141, 15360025223, - 15360156313, 15360287399, 15360418477, 15360549553, 15360680653, 15360811733, 15360942823, - 15361073909, 15361205047, 15361336121, 15361467197, 15361598347, 15361729441, 15361860551, - 15361991651, 15362122739, 15362253871, 15362384953, 15362516051, 15362647129, 15362778239, - 15362909321, 15363040487, 15363171569, 15363302651, 15363433741, 15363564829, 15363695911, - 15363827033, 15363958109, 15364089197, 15364220269, 15364351363, 15364482439, 15364613519, - 15364744597, 15364875697, 15365006819, 15365137891, 15365269043, 15365400121, 15365531213, - 15365662289, 15365793367, 15365924447, 15366055519, 15366186607, 15366317683, 15366448813, - 15366579919, 15366711001, 15366842077, 15366973151, 15367104223, 15367235309, 15367366381, - 15367497461, 15367628623, 15367759703, 15367890793, 15368021869, 15368152957, 15368284031, - 15368415109, 15368546197, 15368677283, 15368808359, 15368939479, 15369070553, 15369201643, - 15369332729, 15369463801, 15369594887, 15369725971, 15369857081, 15369988157, 15370119239, - 15370250351, 15370381459, 15370512533, 15370643609, 15370774681, 15370905761, 15371036911, - 15371167993, 15371299081, 15371430163, 15371561243, 15371692321, 15371823421, 15371954509, - 15372085591, 15372216679, 15372347759, 15372478841, 15372609953, 15372741067, 15372872159, - 15373003231, 15373134311, 15373265417, 15373396513, 15373527599, 15373658711, 15373789813, - 15373920901, 15374052007, 15374183119, 15374314217, 15374445301, 15374576383, 15374707459, - 15374838547, 15374969647, 15375100729, 15375231811, 15375362929, 15375494039, 15375625123, - 15375756217, 15375887309, 15376018381, 15376149473, 15376280567, 15376411663, 15376542743, - 15376673821, 15376804903, 15376936013, 15377067109, 15377198189, 15377329321, 15377460401, - 15377591473, 15377722553, 15377853637, 15377984711, 15378115789, 15378246901, 15378378019, - 15378509101, 15378640187, 15378771259, 15378902377, 15379033477, 15379164583, 15379295719, - 15379426807, 15379557881, 15379688963, 15379820059, 15379951133, 15380082239, 15380213351, - 15380344423, 15380475497, 15380606581, 15380737657, 15380868731, 15380999819, 15381130913, - 15381261997, 15381393169, 15381524251, 15381655327, 15381786401, 15381917531, 15382048603, - 15382179677, 15382310767, 15382441853, 15382572967, 15382704049, 15382835161, 15382966253, - 15383097349, 15383228459, 15383359559, 15383490643, 15383621717, 15383752801, 15383883883, - 15384014959, 15384146051, 15384277133, 15384408227, 15384539309, 15384670381, 15384801493, - 15384932587, 15385063711, 15385194793, 15385325909, 15385457033, 15385588121, 15385719203, - 15385850297, 15385981379, 15386112457, 15386243563, 15386374639, 15386505751, 15386636843, - 15386767919, 15386899009, 15387030103, 15387161197, 15387292289, 15387423377, 15387554473, - 15387685559, 15387816677, 15387947767, 15388078843, 15388209931, 15388341019, 15388472093, - 15388603193, 15388734301, 15388865381, 15388996453, 15389127529, 15389258627, 15389389703, - 15389520781, 15389651857, 15389782979, 15389914079, 15390045169, 15390176287, 15390307433, - 15390438527, 15390569611, 15390700757, 15390831853, 15390962941, 15391094027, 15391225103, - 15391356179, 15391487257, 15391618337, 15391749419, 15391880503, 15392011619, 15392142721, - 15392273797, 15392404871, 15392535967, 15392667041, 15392798119, 15392929199, 15393060301, - 15393191381, 15393322471, 15393453557, 15393584683, 15393715807, 15393846883, 15393977959, - 15394109033, 15394240123, 15394371203, 15394502281, 15394633357, 15394764431, 15394895519, - 15395026627, 15395157719, 15395288813, 15395419889, 15395550971, 15395682067, 15395813141, - 15395944219, 15396075329, 15396206411, 15396337501, 15396468599, 15396599677, 15396730757, - 15396861881, 15396992957, 15397124053, 15397255129, 15397386229, 15397517461, 15397648597, - 15397779707, 15397910797, 15398041933, 15398173019, 15398304101, 15398435177, 15398566259, - 15398697337, 15398828411, 15398959489, 15399090583, 15399221683, 15399352873, 15399483971, - 15399615059, 15399746137, 15399877211, 15400008311, 15400139389, 15400270477, 15400401587, - 15400532663, 15400663739, 15400794847, 15400925927, 15401057029, 15401188123, 15401319203, - 15401450299, 15401581397, 15401712511, 15401843599, 15401974717, 15402105809, 15402236887, - 15402367961, 15402499039, 15402630119, 15402761203, 15402892321, 15403023403, 15403154489, - 15403285561, 15403416667, 15403547749, 15403678837, 15403809929, 15403941037, 15404072119, - 15404203223, 15404334307, 15404465399, 15404596489, 15404727571, 15404858663, 15404989741, - 15405120833, 15405251921, 15405383039, 15405514169, 15405645271, 15405776383, 15405907459, - 15406038551, 15406169629, 15406300717, 15406431793, 15406562879, 15406693963, 15406825043, - 15406956143, 15407087219, 15407218297, 15407349371, 15407480449, 15407611529, 15407742673, - 15407873773, 15408004873, 15408135971, 15408267053, 15408398179, 15408529271, 15408660353, - 15408791443, 15408922523, 15409053601, 15409184683, 15409315759, 15409446883, 15409577987, - 15409709093, 15409840169, 15409971253, 15410102341, 15410233459, 15410364551, 15410495641, - 15410626729, 15410757821, 15410888929, 15411020003, 15411151099, 15411282203, 15411413279, - 15411544391, 15411675473, 15411806549, 15411937621, 15412068703, 15412199791, 15412330877, - 15412462033, 15412593107, 15412724203, 15412855313, 15412986427, 15413117501, 15413248621, - 15413379727, 15413510851, 15413641937, 15413773013, 15413904211, 15414035407, 15414166541, - 15414297631, 15414428713, 15414559801, 15414690881, 15414821953, 15414953051, 15415084151, - 15415215289, 15415346389, 15415477463, 15415608547, 15415739629, 15415870711, 15416001791, - 15416132863, 15416263987, 15416395067, 15416526161, 15416657237, 15416788363, 15416919449, - 15417050531, 15417181673, 15417312769, 15417443849, 15417574927, 15417706027, 15417837119, - 15417968213, 15418099297, 15418230383, 15418361459, 15418492547, 15418623641, 15418754773, - 15418885849, 15419016923, 15419148023, 15419279129, 15419410219, 15419541301, 15419672381, - 15419803453, 15419934539, 15420065659, 15420196763, 15420327841, 15420458939, 15420590041, - 15420721163, 15420852241, 15420983371, 15421114459, 15421245533, 15421376639, 15421507727, - 15421638823, 15421769903, 15421901059, 15422032169, 15422163259, 15422294341, 15422425423, - 15422556503, 15422687627, 15422818717, 15422949799, 15423080873, 15423211957, 15423343031, - 15423474107, 15423605189, 15423736297, 15423867373, 15423998449, 15424129547, 15424260637, - 15424391711, 15424522801, 15424653889, 15424785037, 15424916131, 15425047441, 15425178541, - 15425309629, 15425440733, 15425571827, 15425702909, 15425833987, 15425965067, 15426096139, - 15426227237, 15426358351, 15426489431, 15426620507, 15426751601, 15426882697, 15427013773, - 15427144861, 15427275959, 15427407089, 15427538207, 15427669319, 15427800403, 15427931483, - 15428062571, 15428193673, 15428324759, 15428455837, 15428586913, 15428717987, 15428849063, - 15428980157, 15429111293, 15429242371, 15429373457, 15429504533, 15429635621, 15429766721, - 15429897817, 15430028897, 15430160017, 15430291091, 15430422191, 15430553263, 15430684433, - 15430815511, 15430946593, 15431077679, 15431208781, 15431339879, 15431470961, 15431602103, - 15431733193, 15431864267, 15431995343, 15432126421, 15432257497, 15432388577, 15432519653, - 15432650729, 15432781879, 15432912967, 15433044049, 15433175189, 15433306271, 15433437353, - 15433568431, 15433699507, 15433830611, 15433961701, 15434092829, 15434223901, 15434354977, - 15434486059, 15434617139, 15434748221, 15434879297, 15435010399, 15435141481, 15435272579, - 15435403717, 15435534791, 15435665863, 15435796939, 15435928019, 15436059091, 15436190167, - 15436321253, 15436452329, 15436583411, 15436714499, 15436845607, 15436976699, 15437107811, - 15437238893, 15437370019, 15437501143, 15437632241, 15437763317, 15437894389, 15438025517, - 15438156593, 15438287713, 15438418837, 15438549911, 15438680987, 15438812071, 15438943147, - 15439074239, 15439205351, 15439336427, 15439467551, 15439598689, 15439729763, 15439860841, - 15439991921, 15440123029, 15440254117, 15440385197, 15440516297, 15440647373, 15440778467, - 15440909573, 15441040661, 15441171737, 15441302879, 15441433957, 15441565033, 15441696157, - 15441827237, 15441958319, 15442089401, 15442220533, 15442351619, 15442482691, 15442613827, - 15442744907, 15442875989, 15443007079, 15443138153, 15443269249, 15443400367, 15443531473, - 15443662579, 15443793689, 15443924777, 15444055919, 15444187021, 15444318103, 15444449179, - 15444580259, 15444711341, 15444842419, 15444973513, 15445104637, 15445235759, 15445366873, - 15445497953, 15445629037, 15445760153, 15445891249, 15446022377, 15446153467, 15446284549, - 15446415643, 15446546729, 15446677811, 15446808913, 15446939999, 15447071077, 15447202153, - 15447333247, 15447464371, 15447595451, 15447726611, 15447857683, 15447988763, 15448119889, - 15448251041, 15448382161, 15448513261, 15448644349, 15448775423, 15448906601, 15449037689, - 15449168771, 15449299843, 15449430929, 15449562019, 15449693093, 15449824199, 15449955271, - 15450086357, 15450217429, 15450348577, 15450479651, 15450610751, 15450741827, 15450872923, - 15451003999, 15451135079, 15451266167, 15451397243, 15451528331, 15451659403, 15451790491, - 15451921567, 15452052661, 15452183737, 15452314831, 15452445947, 15452577067, 15452708153, - 15452839247, 15452970319, 15453101401, 15453232489, 15453363599, 15453494677, 15453625751, - 15453756887, 15453888061, 15454019137, 15454150247, 15454281319, 15454412401, 15454543483, - 15454674569, 15454805669, 15454936753, 15455067839, 15455198917, 15455330017, 15455461093, - 15455592197, 15455723273, 15455854367, 15455985439, 15456116549, 15456247739, 15456378811, - 15456509921, 15456641027, 15456772103, 15456903181, 15457034273, 15457165351, 15457296433, - 15457427519, 15457558591, 15457689677, 15457820753, 15457951843, 15458082917, 15458214001, - 15458345093, 15458476169, 15458607253, 15458738327, 15458869487, 15459000559, 15459131641, - 15459262717, 15459393793, 15459524869, 15459655973, 15459787073, 15459918151, 15460049251, - 15460180327, 15460311401, 15460442479, 15460573559, 15460704659, 15460835737, 15460966813, - 15461097887, 15461228963, 15461360087, 15461491223, 15461622307, 15461753383, 15461884469, - 15462015553, 15462146633, 15462277771, 15462408887, 15462539971, 15462671057, 15462802133, - 15462933209, 15463064293, 15463195367, 15463326539, 15463457617, 15463588697, 15463719769, - 15463850851, 15463981933, 15464113009, 15464244083, 15464375161, 15464506259, 15464637343, - 15464768447, 15464899531, 15465030613, 15465161687, 15465292789, 15465423877, 15465554953, - 15465686039, 15465817117, 15465948191, 15466079297, 15466210391, 15466341463, 15466472573, - 15466603673, 15466734763, 15466865857, 15466996931, 15467128009, 15467259089, 15467390209, - 15467521291, 15467652379, 15467783491, 15467914591, 15468045757, 15468176897, 15468308017, - 15468439093, 15468570191, 15468701273, 15468832361, 15468963443, 15469094533, 15469225663, - 15469356829, 15469487911, 15469618991, 15469750063, 15469881157, 15470012237, 15470143313, - 15470274401, 15470405477, 15470536559, 15470667631, 15470798741, 15470929819, 15471060937, - 15471192013, 15471323143, 15471454237, 15471585331, 15471716419, 15471847493, 15471978569, - 15472109647, 15472240739, 15472371829, 15472502951, 15472634029, 15472765103, 15472896181, - 15473027261, 15473158343, 15473289427, 15473420513, 15473551631, 15473682709, 15473813791, - 15473944877, 15474075961, 15474207037, 15474338167, 15474469243, 15474600341, 15474731449, - 15474862547, 15474993623, 15475124699, 15475255799, 15475386881, 15475517969, 15475649047, - 15475780121, 15475911197, 15476042273, 15476173373, 15476304521, 15476435603, 15476566753, - 15476697839, 15476828959, 15476960039, 15477091141, 15477222221, 15477353323, 15477484453, - 15477615641, 15477746719, 15477877819, 15478008943, 15478140023, 15478271111, 15478402183, - 15478533271, 15478664387, 15478795469, 15478926557, 15479057641, 15479188733, 15479319809, - 15479450887, 15479581967, 15479713063, 15479844151, 15479975227, 15480106309, 15480237427, - 15480368509, 15480499607, 15480630743, 15480761843, 15480892939, 15481024033, 15481155119, - 15481286201, 15481417291, 15481548371, 15481679443, 15481810517, 15481941613, 15482072693, - 15482203783, 15482334863, 15482465993, 15482597107, 15482728253, 15482859349, 15482990429, - 15483121519, 15483252607, 15483383711, 15483514841, 15483645937, 15483777013, 15483908093, - 15484039183, 15484170281, 15484301363, 15484432487, 15484563583, 15484694669, 15484825799, - 15484956887, 15485087971, 15485219047, 15485350121, 15485481217, 15485612297, 15485743373, - 15485874473, 15486005611, 15486136703, 15486267799, 15486398881, 15486529969, 15486661061, - 15486792133, 15486923227, 15487054309, 15487185383, 15487316479, 15487447571, 15487578643, - 15487709729, 15487840811, 15487971911, 15488102983, 15488234089, 15488365187, 15488496269, - 15488627377, 15488758471, 15488889583, 15489020707, 15489151813, 15489282889, 15489413993, - 15489545069, 15489676159, 15489807241, 15489938333, 15490069421, 15490200511, 15490331611, - 15490462699, 15490593779, 15490724857, 15490855949, 15490987037, 15491118119, 15491249197, - 15491380291, 15491511367, 15491642459, 15491773589, 15491904677, 15492035803, 15492166883, - 15492297971, 15492429059, 15492560131, 15492691213, 15492822343, 15492953431, 15493084511, - 15493215611, 15493346707, 15493477789, 15493608901, 15493739983, 15493871117, 15494002189, - 15494133271, 15494264413, 15494395513, 15494526611, 15494657723, 15494788847, 15494919929, - 15495051001, 15495182089, 15495313189, 15495444277, 15495575353, 15495706433, 15495837509, - 15495968581, 15496099679, 15496230751, 15496361827, 15496492943, 15496624027, 15496755101, - 15496886177, 15497017297, 15497148379, 15497279459, 15497410531, 15497541617, 15497672731, - 15497803843, 15497934919, 15498066047, 15498197129, 15498328217, 15498459313, 15498590449, - 15498721523, 15498852601, 15498983719, 15499114819, 15499245893, 15499376987, 15499508069, - 15499639147, 15499770263, 15499901341, 15500032417, 15500163499, 15500294609, 15500425687, - 15500556781, 15500687879, 15500818951, 15500950043, 15501081149, 15501212239, 15501343339, - 15501474433, 15501605531, 15501736609, 15501867683, 15501998761, 15502129931, 15502261051, - 15502392133, 15502523221, 15502654333, 15502785421, 15502916509, 15503047583, 15503178667, - 15503309747, 15503440831, 15503571907, 15503702999, 15503834081, 15503965171, 15504096253, - 15504227339, 15504358423, 15504489527, 15504620609, 15504751721, 15504882821, 15505013929, - 15505145077, 15505276159, 15505407283, 15505538369, 15505669441, 15505800523, 15505931603, - 15506062681, 15506193757, 15506324833, 15506455919, 15506587049, 15506718191, 15506849269, - 15506980343, 15507111443, 15507242519, 15507373613, 15507504707, 15507635789, 15507766861, - 15507897967, 15508029071, 15508160177, 15508291273, 15508422367, 15508553477, 15508684553, - 15508815643, 15508946723, 15509077861, 15509208971, 15509340043, 15509471129, 15509602211, - 15509733289, 15509864399, 15509995471, 15510126557, 15510257641, 15510388727, 15510519841, - 15510650999, 15510782071, 15510913177, 15511044253, 15511175327, 15511306409, 15511437497, - 15511568603, 15511699681, 15511830781, 15511961879, 15512092991, 15512224067, 15512355151, - 15512486261, 15512617333, 15512748431, 15512879509, 15513010637, 15513141719, 15513272813, - 15513403897, 15513535039, 15513666127, 15513797203, 15513928301, 15514059403, 15514190491, - 15514321573, 15514452659, 15514583731, 15514714823, 15514845901, 15514976977, 15515108087, - 15515239169, 15515370251, 15515501347, 15515632441, 15515763547, 15515894623, 15516025703, - 15516156779, 15516287881, 15516418969, 15516550069, 15516681143, 15516812303, 15516943397, - 15517074491, 15517205579, 15517336663, 15517467739, 15517598849, 15517729943, 15517861063, - 15517992167, 15518123279, 15518254403, 15518385517, 15518516591, 15518647663, 15518778809, - 15518909881, 15519040993, 15519172073, 15519303193, 15519434297, 15519565403, 15519696481, - 15519827593, 15519958669, 15520089757, 15520220843, 15520351919, 15520482997, 15520614073, - 15520745147, 15520876219, 15521007329, 15521138417, 15521269493, 15521400577, 15521531653, - 15521662777, 15521793863, 15521924963, 15522056051, 15522187139, 15522318211, 15522449311, - 15522580393, 15522711563, 15522842659, 15522973733, 15523104811, 15523235899, 15523366981, - 15523498061, 15523629157, 15523760267, 15523891387, 15524022461, 15524153537, 15524284661, - 15524415733, 15524546833, 15524677907, 15524808991, 15524940143, 15525071239, 15525202367, - 15525333451, 15525464543, 15525595619, 15525726707, 15525857779, 15525988853, 15526119937, - 15526251019, 15526382101, 15526513231, 15526644307, 15526775387, 15526906459, 15527037587, - 15527168669, 15527299751, 15527430827, 15527561921, 15527693017, 15527824111, 15527955217, - 15528086293, 15528217379, 15528348457, 15528479537, 15528610639, 15528741719, 15528872791, - 15529003873, 15529134953, 15529266031, 15529397197, 15529528307, 15529659389, 15529790461, - 15529921543, 15530052673, 15530183761, 15530314837, 15530445911, 15530576983, 15530708093, - 15530839183, 15530970277, 15531101363, 15531232477, 15531363563, 15531494659, 15531625789, - 15531756893, 15531887993, 15532019089, 15532150169, 15532281257, 15532412377, 15532543451, - 15532674523, 15532805611, 15532936693, 15533067821, 15533198897, 15533330009, 15533461091, - 15533592163, 15533723251, 15533854367, 15533985457, 15534116551, 15534247667, 15534378763, - 15534509867, 15534640943, 15534772037, 15534903119, 15535034213, 15535165297, 15535296377, - 15535427461, 15535558567, 15535689647, 15535820723, 15535951811, 15536083021, 15536214103, - 15536345219, 15536476331, 15536607451, 15536738531, 15536869609, 15537000683, 15537131783, - 15537262891, 15537393973, 15537525079, 15537656159, 15537787247, 15537918359, 15538049477, - 15538180577, 15538311673, 15538442747, 15538573819, 15538704899, 15538836059, 15538967153, - 15539098231, 15539229311, 15539360407, 15539491493, 15539622569, 15539753653, 15539884729, - 15540015833, 15540146917, 15540277993, 15540409067, 15540540161, 15540671327, 15540802423, - 15540933509, 15541064593, 15541195669, 15541326743, 15541457849, 15541588981, 15541720091, - 15541851167, 15541982249, 15542113339, 15542244433, 15542375521, 15542506601, 15542637703, - 15542768783, 15542899909, 15543031019, 15543162127, 15543293203, 15543424279, 15543555353, - 15543686437, 15543817517, 15543948601, 15544079687, 15544210771, 15544341847, 15544472947, - 15544604057, 15544735147, 15544866223, 15544997297, 15545128387, 15545259467, 15545390543, - 15545521619, 15545652713, 15545783801, 15545914883, 15546046013, 15546177109, 15546308207, - 15546439291, 15546570373, 15546701453, 15546832529, 15546963631, 15547094767, 15547225847, - 15547356941, 15547488013, 15547619099, 15547750171, 15547881269, 15548012407, 15548143487, - 15548274587, 15548405671, 15548536781, 15548667853, 15548798953, 15548930027, 15549061123, - 15549192199, 15549323287, 15549454363, 15549585473, 15549716557, 15549847639, 15549978749, - 15550109821, 15550240907, 15550371983, 15550503103, 15550634219, 15550765301, 15550896373, - 15551027477, 15551158559, 15551289659, 15551420743, 15551551909, 15551683051, 15551814133, - 15551945249, 15552076321, 15552207439, 15552338519, 15552469591, 15552600691, 15552731819, - 15552862909, 15552994007, 15553125083, 15553256203, 15553387309, 15553518391, 15553649477, - 15553780553, 15553911629, 15554042701, 15554173793, 15554304877, 15554435971, 15554567059, - 15554698153, 15554829233, 15554960359, 15555091441, 15555222521, 15555353623, 15555484709, - 15555615797, 15555746881, 15555877963, 15556009057, 15556140133, 15556271219, 15556402297, - 15556533389, 15556664471, 15556795571, 15556926659, 15557057767, 15557188859, 15557319931, - 15557451023, 15557582129, 15557713231, 15557844329, 15557975453, 15558106537, 15558237619, - 15558368711, 15558499783, 15558630859, 15558761987, 15558893093, 15559024211, 15559155377, - 15559286467, 15559417541, 15559548619, 15559679713, 15559810787, 15559941863, 15560072951, - 15560204027, 15560335099, 15560466193, 15560597303, 15560728387, 15560859487, 15560990603, - 15561121679, 15561252827, 15561383911, 15561514999, 15561646127, 15561777241, 15561908317, - 15562039403, 15562170493, 15562301567, 15562432651, 15562563733, 15562694813, 15562825921, - 15562957147, 15563088227, 15563219311, 15563350403, 15563481481, 15563612573, 15563743669, - 15563874743, 15564005833, 15564136981, 15564268079, 15564399173, 15564530269, 15564661349, - 15564792433, 15564923567, 15565054651, 15565185767, 15565316867, 15565447939, 15565579013, - 15565710103, 15565841251, 15565972349, 15566103451, 15566234531, 15566365621, 15566496697, - 15566627849, 15566758937, 15566890013, 15567021089, 15567152177, 15567283253, 15567414329, - 15567545417, 15567676519, 15567807599, 15567938681, 15568069763, 15568200841, 15568331917, - 15568463011, 15568594123, 15568725217, 15568856293, 15568987381, 15569118469, 15569249551, - 15569380637, 15569511709, 15569642821, 15569773943, 15569905037, 15570036127, 15570167231, - 15570298307, 15570429419, 15570560501, 15570691573, 15570822689, 15570953767, 15571084871, - 15571215953, 15571347031, 15571478129, 15571609231, 15571740311, 15571871387, 15572002471, - 15572133557, 15572264671, 15572395753, 15572526877, 15572657953, 15572789027, 15572920117, - 15573051203, 15573182291, 15573313367, 15573444451, 15573575569, 15573706657, 15573837731, - 15573968873, 15574099969, 15574231069, 15574362143, 15574493219, 15574624313, 15574755451, - 15574886581, 15575017673, 15575148767, 15575279843, 15575410957, 15575542127, 15575673221, - 15575804317, 15575935423, 15576066557, 15576197633, 15576328717, 15576459791, 15576590879, - 15576722023, 15576853139, 15576984229, 15577115311, 15577246411, 15577377503, 15577508593, - 15577639667, 15577770781, 15577901861, 15578032937, 15578164027, 15578295127, 15578426203, - 15578557277, 15578688409, 15578819489, 15578950627, 15579081703, 15579212821, 15579343919, - 15579474997, 15579606079, 15579737207, 15579868289, 15579999419, 15580130507, 15580261583, - 15580392677, 15580523753, 15580654849, 15580785953, 15580917041, 15581048123, 15581179213, - 15581310307, 15581441389, 15581572477, 15581703611, 15581834683, 15581965783, 15582096857, - 15582227963, 15582359047, 15582490123, 15582621199, 15582752363, 15582883439, 15583014511, - 15583145593, 15583276703, 15583407803, 15583538941, 15583670029, 15583801193, 15583932271, - 15584063347, 15584194447, 15584325529, 15584456687, 15584587787, 15584718869, 15584849963, - 15584981053, 15585112129, 15585243217, 15585374293, 15585505379, 15585636523, 15585767597, - 15585898709, 15586029799, 15586160879, 15586291957, 15586423033, 15586554119, 15586685203, - 15586816277, 15586947359, 15587078447, 15587209567, 15587340677, 15587471759, 15587602841, - 15587733919, 15587865001, 15587996087, 15588127189, 15588258269, 15588389347, 15588520421, - 15588651509, 15588782581, 15588913709, 15589044791, 15589175863, 15589307009, 15589438097, - 15589569181, 15589700261, 15589831357, 15589962431, 15590093509, 15590224591, 15590355679, - 15590486753, 15590617837, 15590748911, 15590880007, 15591011087, 15591142183, 15591273263, - 15591404341, 15591535417, 15591666533, 15591797621, 15591928739, 15592059817, 15592190891, - 15592321991, 15592453133, 15592584209, 15592715287, 15592846363, 15592977461, 15593108581, - 15593239663, 15593370763, 15593501851, 15593632931, 15593764007, 15593895091, 15594026191, - 15594157291, 15594288371, 15594419471, 15594550553, 15594681637, 15594812713, 15594943813, - 15595074893, 15595206013, 15595337117, 15595468219, 15595599293, 15595730377, 15595861451, - 15595992527, 15596123633, 15596254717, 15596385793, 15596516917, 15596648003, 15596779141, - 15596910221, 15597041303, 15597172391, 15597303473, 15597434557, 15597565663, 15597696743, - 15597827851, 15597958979, 15598090069, 15598221181, 15598352279, 15598483393, 15598614481, - 15598745557, 15598876673, 15599007757, 15599138857, 15599269937, 15599401031, 15599532107, - 15599663251, 15599794339, 15599925437, 15600056519, 15600187627, 15600318703, 15600449779, - 15600580867, 15600711941, 15600843017, 15600974107, 15601105217, 15601236289, 15601367363, - 15601498439, 15601629517, 15601760653, 15601891733, 15602022809, 15602153951, 15602285029, - 15602416163, 15602547263, 15602678363, 15602809441, 15602940517, 15603071639, 15603202711, - 15603333787, 15603464917, 15603595999, 15603727103, 15603858181, 15603989311, 15604120387, - 15604251463, 15604382543, 15604513621, 15604644697, 15604775773, 15604906861, 15605037949, - 15605169029, 15605300101, 15605431183, 15605562293, 15605693381, 15605824453, 15605955553, - 15606086641, 15606217747, 15606348829, 15606479921, 15606610993, 15606742087, 15606873199, - 15607004291, 15607135493, 15607266583, 15607397669, 15607528751, 15607659857, 15607790941, - 15607922041, 15608053121, 15608184197, 15608315287, 15608446361, 15608577437, 15608708509, - 15608839583, 15608970709, 15609101789, 15609232879, 15609363967, 15609495071, 15609626143, - 15609757253, 15609888373, 15610019489, 15610150573, 15610281653, 15610412743, 15610543853, - 15610674967, 15610806073, 15610937161, 15611068247, 15611199367, 15611330491, 15611461571, - 15611592671, 15611723759, 15611854859, 15611985941, 15612117013, 15612248137, 15612379219, - 15612510293, 15612641389, 15612772471, 15612903557, 15613034629, 15613165709, 15613296799, - 15613427873, 15613558957, 15613690031, 15613821103, 15613952213, 15614083291, 15614214389, - 15614345477, 15614476561, 15614607677, 15614738753, 15614869847, 15615000949, 15615132053, - 15615263129, 15615394231, 15615525361, 15615656473, 15615787549, 15615918631, 15616049711, - 15616180787, 15616311859, 15616442983, 15616574081, 15616705171, 15616836253, 15616967383, - 15617098499, 15617229587, 15617360677, 15617491781, 15617622859, 15617753947, 15617885021, - 15618016129, 15618147241, 15618278323, 15618409399, 15618540523, 15618671633, 15618802729, - 15618933823, 15619064927, 15619196003, 15619327081, 15619458181, 15619589261, 15619720367, - 15619851449, 15619982531, 15620113609, 15620244779, 15620375851, 15620507027, 15620638147, - 15620769221, 15620900299, 15621031381, 15621162463, 15621293537, 15621424619, 15621555701, - 15621686783, 15621817873, 15621948949, 15622080037, 15622211167, 15622342243, 15622473329, - 15622604401, 15622735477, 15622866557, 15622997629, 15623128709, 15623259787, 15623390863, - 15623521939, 15623653091, 15623784223, 15623915309, 15624046391, 15624177473, 15624308591, - 15624439669, 15624570743, 15624701893, 15624833053, 15624964151, 15625095229, 15625226333, - 15625357417, 15625488491, 15625619563, 15625750639, 15625881763, 15626012869, 15626143957, - 15626275057, 15626406161, 15626537263, 15626668339, 15626799481, 15626930623, 15627061699, - 15627192799, 15627323903, 15627454979, 15627586063, 15627717139, 15627848219, 15627979321, - 15628110397, 15628241479, 15628372559, 15628503641, 15628634759, 15628765937, 15628897019, - 15629028101, 15629159179, 15629290331, 15629421419, 15629552527, 15629683631, 15629814719, - 15629945869, 15630076967, 15630208057, 15630339143, 15630470279, 15630601361, 15630732463, - 15630863543, 15630994619, 15631125781, 15631256857, 15631387931, 15631519021, 15631650109, - 15631781227, 15631912333, 15632043431, 15632174561, 15632305643, 15632436769, 15632567911, - 15632698987, 15632830139, 15632961271, 15633092357, 15633223429, 15633354511, 15633485587, - 15633616667, 15633747797, 15633878893, 15634009967, 15634141093, 15634272167, 15634403261, - 15634534361, 15634665433, 15634796537, 15634927619, 15635058701, 15635189809, 15635320891, - 15635451983, 15635583059, 15635714161, 15635845241, 15635976353, 15636107441, 15636238619, - 15636369691, 15636500777, 15636631853, 15636762991, 15636894089, 15637025171, 15637156243, - 15637287401, 15637418477, 15637549579, 15637680659, 15637811747, 15637942823, 15638073923, - 15638205007, 15638336081, 15638467153, 15638598259, 15638729363, 15638860451, 15638991629, - 15639122731, 15639253859, 15639384931, 15639516029, 15639647147, 15639778223, 15639909319, - 15640040393, 15640171493, 15640302569, 15640433647, 15640564721, 15640695797, 15640826881, - 15640957957, 15641089039, 15641220113, 15641351189, 15641482267, 15641613347, 15641744423, - 15641875511, 15642006607, 15642137717, 15642268813, 15642399937, 15642531029, 15642662173, - 15642793249, 15642924329, 15643055419, 15643186513, 15643317623, 15643448701, 15643579813, - 15643710893, 15643841981, 15643973113, 15644104219, 15644235301, 15644366377, 15644497481, - 15644628569, 15644759651, 15644890777, 15645021881, 15645152993, 15645284099, 15645415199, - 15645546283, 15645677387, 15645808471, 15645939577, 15646070653, 15646201793, 15646332869, - 15646463941, 15646595017, 15646726103, 15646857209, 15646988323, 15647119409, 15647250523, - 15647381599, 15647512679, 15647643757, 15647774837, 15647905909, 15648037021, 15648168097, - 15648299231, 15648430309, 15648561391, 15648692473, 15648823573, 15648954689, 15649085773, - 15649216871, 15649347947, 15649479031, 15649610153, 15649741249, 15649872347, 15650003419, - 15650134517, 15650265607, 15650396683, 15650527757, 15650658857, 15650789939, 15650921029, - 15651052103, 15651183193, 15651314281, 15651445357, 15651576467, 15651707549, 15651838661, - 15651969743, 15652100833, 15652231909, 15652362989, 15652494061, 15652625143, 15652756261, - 15652887359, 15653018441, 15653149513, 15653280607, 15653411773, 15653542871, 15653674019, - 15653805109, 15653936219, 15654067309, 15654198389, 15654329473, 15654460609, 15654591707, - 15654722779, 15654853871, 15654984953, 15655116047, 15655247131, 15655378243, 15655509341, - 15655640447, 15655771531, 15655902673, 15656033753, 15656164831, 15656295943, 15656427097, - 15656558179, 15656689253, 15656820331, 15656951447, 15657082561, 15657213641, 15657344719, - 15657475819, 15657606929, 15657738059, 15657869179, 15658000261, 15658131407, 15658262479, - 15658393571, 15658524649, 15658655731, 15658786811, 15658917913, 15659049013, 15659180099, - 15659311177, 15659442329, 15659573417, 15659704493, 15659835571, 15659966659, 15660097741, - 15660228821, 15660359933, 15660491029, 15660622127, 15660753221, 15660884329, 15661015427, - 15661146509, 15661277633, 15661408717, 15661539827, 15661670909, 15661802027, 15661933121, - 15662064259, 15662195359, 15662326469, 15662457563, 15662588639, 15662719741, 15662850851, - 15662981927, 15663113003, 15663244147, 15663375227, 15663506377, 15663637453, 15663768563, - 15663899639, 15664030717, 15664161809, 15664292921, 15664424003, 15664555091, 15664686179, - 15664817269, 15664948379, 15665079467, 15665210579, 15665341661, 15665472737, 15665603893, - 15665734969, 15665866043, 15665997121, 15666128213, 15666259313, 15666390427, 15666521501, - 15666652613, 15666783733, 15666914821, 15667045903, 15667177003, 15667308079, 15667439231, - 15667570309, 15667701391, 15667832501, 15667963583, 15668094667, 15668225773, 15668356871, - 15668488009, 15668619089, 15668750173, 15668881253, 15669012427, 15669143537, 15669274627, - 15669405757, 15669536843, 15669667957, 15669799031, 15669930119, 15670061191, 15670192271, - 15670323343, 15670454431, 15670585507, 15670716587, 15670847671, 15670978753, 15671109859, - 15671240939, 15671372113, 15671503189, 15671634281, 15671765353, 15671896447, 15672027559, - 15672158639, 15672289741, 15672420833, 15672551929, 15672683003, 15672814093, 15672945173, - 15673076261, 15673207349, 15673338437, 15673469561, 15673600633, 15673731707, 15673862779, - 15673993861, 15674124937, 15674256043, 15674387119, 15674518219, 15674649311, 15674780399, - 15674911477, 15675042587, 15675173659, 15675304823, 15675435901, 15675566987, 15675698083, - 15675829187, 15675960259, 15676091359, 15676222453, 15676353527, 15676484599, 15676615681, - 15676746769, 15676877861, 15677008933, 15677140007, 15677271091, 15677402171, 15677533243, - 15677664319, 15677795423, 15677926499, 15678057641, 15678188759, 15678319837, 15678450943, - 15678582043, 15678713119, 15678844211, 15678975331, 15679106467, 15679237573, 15679368673, - 15679499761, 15679630867, 15679761941, 15679893059, 15680024159, 15680155243, 15680286353, - 15680417471, 15680548547, 15680679631, 15680810723, 15680941849, 15681072931, 15681204037, - 15681335123, 15681466253, 15681597341, 15681728429, 15681859537, 15681990619, 15682121701, - 15682252783, 15682383869, 15682514951, 15682646027, 15682777109, 15682908181, 15683039263, - 15683170337, 15683301421, 15683432503, 15683563583, 15683694671, 15683825743, 15683956817, - 15684087901, 15684219011, 15684350153, 15684481229, 15684612323, 15684743411, 15684874493, - 15685005601, 15685136737, 15685267817, 15685398889, 15685529963, 15685661039, 15685792123, - 15685923217, 15686054311, 15686185399, 15686316493, 15686447597, 15686578681, 15686709763, - 15686840861, 15686971933, 15687103021, 15687234113, 15687365189, 15687496261, 15687627377, - 15687758467, 15687889549, 15688020661, 15688151767, 15688282853, 15688413929, 15688545017, - 15688676147, 15688807259, 15688938347, 15689069437, 15689200517, 15689331599, 15689462681, - 15689593757, 15689724859, 15689855941, 15689987099, 15690118229, 15690249313, 15690380441, - 15690511517, 15690642599, 15690773671, 15690904799, 15691035883, 15691166969, 15691298059, - 15691429133, 15691560217, 15691691297, 15691822373, 15691953461, 15692084537, 15692215633, - 15692346713, 15692477803, 15692608907, 15692740009, 15692871083, 15693002179, 15693133259, - 15693264337, 15693395413, 15693526507, 15693657607, 15693788681, 15693919781, 15694050857, - 15694181953, 15694313029, 15694444123, 15694575223, 15694706303, 15694837391, 15694968467, - 15695099543, 15695230633, 15695361709, 15695492801, 15695623883, 15695754989, 15695886091, - 15696017243, 15696148339, 15696279421, 15696410497, 15696541571, 15696672647, 15696803719, - 15696934807, 15697065883, 15697197023, 15697328099, 15697459177, 15697590253, 15697721381, - 15697852481, 15697983607, 15698114681, 15698245789, 15698376887, 15698507987, 15698639087, - 15698770181, 15698901289, 15699032383, 15699163457, 15699294551, 15699425627, 15699556709, - 15699687823, 15699818899, 15699950003, 15700081093, 15700212191, 15700343287, 15700474369, - 15700605457, 15700736533, 15700867621, 15700998713, 15701129797, 15701260879, 15701391971, - 15701523043, 15701654159, 15701785243, 15701916379, 15702047453, 15702178567, 15702309647, - 15702440753, 15702571847, 15702702929, 15702834053, 15702965129, 15703096237, 15703227311, - 15703358443, 15703489519, 15703620629, 15703751711, 15703882783, 15704013917, 15704145001, - 15704276111, 15704407183, 15704538257, 15704669329, 15704800409, 15704931497, 15705062591, - 15705193697, 15705324781, 15705455893, 15705586991, 15705718099, 15705849193, 15705980293, - 15706111387, 15706242463, 15706373621, 15706504763, 15706635859, 15706766941, 15706898021, - 15707029099, 15707160173, 15707291267, 15707422351, 15707553443, 15707684539, 15707815631, - 15707946719, 15708077867, 15708208951, 15708340157, 15708471269, 15708602341, 15708733423, - 15708864499, 15708995591, 15709126669, 15709257749, 15709388833, 15709519909, 15709651007, - 15709782083, 15709913159, 15710044309, 15710175389, 15710306473, 15710437571, 15710568661, - 15710699791, 15710830909, 15710961983, 15711093059, 15711224147, 15711355277, 15711486353, - 15711617429, 15711748513, 15711879593, 15712010711, 15712141801, 15712272893, 15712403981, - 15712535053, 15712666127, 15712797209, 15712928293, 15713059367, 15713190461, 15713321543, - 15713452621, 15713583731, 15713714803, 15713845877, 15713976989, 15714108079, 15714239173, - 15714370283, 15714501373, 15714632449, 15714763549, 15714894641, 15715025713, 15715156789, - 15715287871, 15715418963, 15715550041, 15715681153, 15715812263, 15715943357, 15716074463, - 15716205541, 15716336641, 15716467729, 15716598803, 15716729929, 15716861011, 15716992117, - 15717123223, 15717254297, 15717385391, 15717516469, 15717647549, 15717778631, 15717909707, - 15718040837, 15718171919, 15718302991, 15718434089, 15718565173, 15718696267, 15718827347, - 15718958429, 15719089523, 15719220599, 15719351671, 15719482777, 15719613857, 15719744951, - 15719876027, 15720007153, 15720138229, 15720269303, 15720400393, 15720531469, 15720662549, - 15720793643, 15720924721, 15721055809, 15721186907, 15721318013, 15721449097, 15721580239, - 15721711321, 15721842407, 15721973503, 15722104609, 15722235719, 15722366833, 15722497927, - 15722629001, 15722760077, 15722891159, 15723022247, 15723153337, 15723284431, 15723415507, - 15723546583, 15723677659, 15723808733, 15723939821, 15724070909, 15724201981, 15724333069, - 15724464167, 15724595239, 15724726327, 15724857403, 15724988533, 15725119607, 15725250727, - 15725381813, 15725512897, 15725643971, 15725775067, 15725906153, 15726037231, 15726168317, - 15726299389, 15726430477, 15726561553, 15726692633, 15726823711, 15726954787, 15727085867, - 15727216951, 15727348031, 15727479113, 15727610191, 15727741291, 15727872451, 15728003539, - 15728134637, 15728265719, 15728396807, 15728527907, 15728659027, 15728790113, 15728921207, - 15729052279, 15729183433, 15729314537, 15729445609, 15729576703, 15729707779, 15729838853, - 15729969943, 15730101043, 15730232123, 15730363199, 15730494271, 15730625389, 15730756477, - 15730887577, 15731018657, 15731149747, 15731280833, 15731411909, 15731542987, 15731674111, - 15731805211, 15731936299, 15732067381, 15732198479, 15732329609, 15732460687, 15732591779, - 15732722861, 15732853957, 15732985031, 15733116137, 15733247249, 15733378337, 15733509431, - 15733640557, 15733771631, 15733902707, 15734033789, 15734164867, 15734295959, 15734427083, - 15734558219, 15734689331, 15734820427, 15734951501, 15735082591, 15735213671, 15735344783, - 15735475909, 15735607009, 15735738127, 15735869203, 15736000337, 15736131457, 15736262561, - 15736393633, 15736524709, 15736655791, 15736786907, 15736917983, 15737049061, 15737180159, - 15737311273, 15737442377, 15737573473, 15737704553, 15737835653, 15737966747, 15738097831, - 15738228923, 15738360049, 15738491147, 15738622223, 15738753311, 15738884387, 15739015469, - 15739146569, 15739277681, 15739408787, 15739539863, 15739670971, 15739802047, 15739933159, - 15740064233, 15740195333, 15740326451, 15740457589, 15740588671, 15740719837, 15740850949, - 15740982067, 15741113173, 15741244249, 15741375323, 15741506413, 15741637501, 15741768587, - 15741899659, 15742030739, 15742161817, 15742292911, 15742423987, 15742555117, 15742686199, - 15742817297, 15742948411, 15743079553, 15743210629, 15743341729, 15743472839, 15743603917, - 15743734997, 15743866079, 15743997229, 15744128303, 15744259379, 15744390481, 15744521557, - 15744652633, 15744783709, 15744914791, 15745045871, 15745176961, 15745308041, 15745439119, - 15745570219, 15745701313, 15745832423, 15745963549, 15746094643, 15746225731, 15746356891, - 15746487971, 15746619059, 15746750141, 15746881247, 15747012349, 15747143443, 15747274591, - 15747405673, 15747536759, 15747667847, 15747798931, 15747930013, 15748061093, 15748192181, - 15748323259, 15748454341, 15748585429, 15748716509, 15748847689, 15748978769, 15749109851, - 15749240981, 15749372057, 15749503151, 15749634233, 15749765309, 15749896387, 15750027463, - 15750158537, 15750289619, 15750420701, 15750551783, 15750682861, 15750813941, 15750945017, - 15751076093, 15751207169, 15751338271, 15751469347, 15751600451, 15751731547, 15751862627, - 15751993703, 15752124797, 15752255887, 15752387029, 15752518109, 15752649271, 15752780353, - 15752911429, 15753042511, 15753173609, 15753304703, 15753435779, 15753566897, 15753697969, - 15753829087, 15753960191, 15754091273, 15754222397, 15754353479, 15754484563, 15754615663, - 15754746739, 15754877867, 15755008939, 15755140019, 15755271109, 15755402189, 15755533303, - 15755664389, 15755795521, 15755926597, 15756057677, 15756188759, 15756319847, 15756450937, - 15756582013, 15756713087, 15756844183, 15756975277, 15757106389, 15757237499, 15757368577, - 15757499657, 15757630729, 15757761809, 15757892933, 15758024011, 15758155087, 15758286227, - 15758417347, 15758548423, 15758679523, 15758810611, 15758941687, 15759072767, 15759203893, - 15759335021, 15759466109, 15759597181, 15759728273, 15759859393, 15759990481, 15760121561, - 15760252637, 15760383719, 15760514831, 15760645919, 15760777031, 15760908103, 15761039191, - 15761170277, 15761301383, 15761432461, 15761563541, 15761694643, 15761825731, 15761956817, - 15762087907, 15762218981, 15762350059, 15762481153, 15762612251, 15762743357, 15762874433, - 15763005521, 15763136617, 15763267691, 15763398769, 15763529867, 15763660963, 15763792039, - 15763923113, 15764054221, 15764185319, 15764316391, 15764447467, 15764578541, 15764709707, - 15764840789, 15764971889, 15765103001, 15765234193, 15765365303, 15765496379, 15765627481, - 15765758557, 15765889631, 15766020709, 15766151789, 15766282867, 15766413947, 15766545029, - 15766676119, 15766807207, 15766938293, 15767069393, 15767200481, 15767331563, 15767462657, - 15767593729, 15767724809, 15767855951, 15767987029, 15768118117, 15768249191, 15768380293, - 15768511379, 15768642467, 15768773561, 15768904637, 15769035719, 15769166801, 15769297967, - 15769429057, 15769560137, 15769691209, 15769822303, 15769953443, 15770084521, 15770215619, - 15770346733, 15770477851, 15770608939, 15770740087, 15770871161, 15771002239, 15771133319, - 15771264401, 15771395473, 15771526553, 15771657631, 15771788723, 15771919799, 15772050893, - 15772182007, 15772313093, 15772444169, 15772575277, 15772706351, 15772837429, 15772968511, - 15773099611, 15773230699, 15773361823, 15773492923, 15773624021, 15773755147, 15773886229, - 15774017309, 15774148381, 15774279461, 15774410563, 15774541691, 15774672799, 15774803881, - 15774934969, 15775066061, 15775197133, 15775328237, 15775459313, 15775590401, 15775721473, - 15775852621, 15775983739, 15776114833, 15776245913, 15776377021, 15776508103, 15776639191, - 15776770267, 15776901383, 15777032473, 15777163579, 15777294691, 15777425767, 15777556867, - 15777687943, 15777819023, 15777950137, 15778081211, 15778212337, 15778343431, 15778474507, - 15778605581, 15778736653, 15778867771, 15778998847, 15779129929, 15779261011, 15779392103, - 15779523197, 15779654273, 15779785349, 15779916437, 15780047519, 15780178591, 15780309697, - 15780440771, 15780571843, 15780702929, 15780834029, 15780965111, 15781096193, 15781227269, - 15781358377, 15781489459, 15781620587, 15781751659, 15781882751, 15782013827, 15782144941, - 15782276047, 15782407129, 15782538203, 15782669317, 15782800403, 15782931523, 15783062611, - 15783193687, 15783324797, 15783455881, 15783586963, 15783718087, 15783849167, 15783980341, - 15784111417, 15784242493, 15784373587, 15784504661, 15784635743, 15784766821, 15784897901, - 15785028991, 15785160071, 15785291149, 15785422229, 15785553319, 15785684417, 15785815489, - 15785946593, 15786077683, 15786208787, 15786339887, 15786470983, 15786602063, 15786733141, - 15786864227, 15786995317, 15787126393, 15787257467, 15787388557, 15787519639, 15787650727, - 15787781819, 15787912891, 15788043979, 15788175071, 15788306153, 15788437267, 15788568361, - 15788699441, 15788830517, 15788961589, 15789092747, 15789223837, 15789354913, 15789486047, - 15789617141, 15789748237, 15789879311, 15790010407, 15790141481, 15790272557, 15790403639, - 15790534751, 15790665833, 15790796909, 15790927993, 15791059073, 15791190179, 15791321281, - 15791452381, 15791583491, 15791714573, 15791845661, 15791976751, 15792107827, 15792238921, - 15792370019, 15792501091, 15792632179, 15792763253, 15792894329, 15793025401, 15793156493, - 15793287569, 15793418651, 15793549753, 15793680853, 15793811939, 15793943057, 15794074151, - 15794205247, 15794336333, 15794467411, 15794598539, 15794729641, 15794860727, 15794991803, - 15795122951, 15795254029, 15795385103, 15795516239, 15795647323, 15795778417, 15795909517, - 15796040591, 15796171691, 15796302787, 15796433897, 15796564999, 15796696103, 15796827199, - 15796958323, 15797089493, 15797220581, 15797351663, 15797482769, 15797613847, 15797744929, - 15797876027, 15798007111, 15798138217, 15798269299, 15798400391, 15798531467, 15798662563, - 15798793657, 15798924767, 15799055843, 15799186919, 15799318019, 15799449101, 15799580177, - 15799711253, 15799842427, 15799973521, 15800104637, 15800235751, 15800366839, 15800497919, - 15800628997, 15800760139, 15800891221, 15801022301, 15801153449, 15801284539, 15801415639, - 15801546713, 15801677819, 15801808903, 15801939991, 15802071079, 15802202153, 15802333237, - 15802464313, 15802595399, 15802726477, 15802857557, 15802988629, 15803119711, 15803250821, - 15803381897, 15803512969, 15803644049, 15803775227, 15803906351, 15804037423, 15804168521, - 15804299633, 15804430709, 15804561793, 15804692887, 15804824029, 15804955109, 15805086181, - 15805217287, 15805348367, 15805479463, 15805610539, 15805741639, 15805872721, 15806003797, - 15806134871, 15806265947, 15806397029, 15806528113, 15806659201, 15806790277, 15806921363, - 15807052463, 15807183547, 15807314639, 15807445739, 15807576821, 15807707899, 15807838999, - 15807970097, 15808101187, 15808232333, 15808363447, 15808494521, 15808625593, 15808756669, - 15808887749, 15809018821, 15809149897, 15809280973, 15809412053, 15809543149, 15809674277, - 15809805383, 15809936533, 15810067619, 15810198697, 15810329863, 15810460949, 15810592033, - 15810723109, 15810854197, 15810985277, 15811116367, 15811247497, 15811378577, 15811509677, - 15811640777, 15811771853, 15811902937, 15812034011, 15812165087, 15812296189, 15812427271, - 15812558369, 15812689441, 15812820533, 15812951617, 15813082693, 15813213769, 15813344849, - 15813475961, 15813607037, 15813738137, 15813869209, 15814000291, 15814131419, 15814262539, - 15814393649, 15814524743, 15814655821, 15814786903, 15814917983, 15815049091, 15815180177, - 15815311249, 15815442341, 15815573437, 15815704511, 15815835593, 15815966671, 15816097757, - 15816228847, 15816359939, 15816491051, 15816622123, 15816753209, 15816884297, 15817015387, - 15817146473, 15817277551, 15817408639, 15817539713, 15817670821, 15817801907, 15817932979, - 15818064107, 15818195209, 15818326289, 15818457371, 15818588459, 15818719541, 15818850617, - 15818981707, 15819112783, 15819243919, 15819374993, 15819506071, 15819637151, 15819768247, - 15819899357, 15820030451, 15820161523, 15820292603, 15820423687, 15820554793, 15820685879, - 15820816951, 15820948049, 15821079149, 15821210227, 15821341309, 15821472389, 15821603593, - 15821734667, 15821865749, 15821996831, 15822127907, 15822258997, 15822390079, 15822521161, - 15822652259, 15822783343, 15822914417, 15823045519, 15823176601, 15823307761, 15823438837, - 15823569941, 15823701053, 15823832131, 15823963219, 15824094331, 15824225437, 15824356519, - 15824487593, 15824618671, 15824749771, 15824880857, 15825011933, 15825143057, 15825274147, - 15825405313, 15825536399, 15825667541, 15825798629, 15825929737, 15826060841, 15826191917, - 15826323041, 15826454117, 15826585199, 15826716281, 15826847363, 15826978451, 15827109523, - 15827240599, 15827371699, 15827502791, 15827633911, 15827764987, 15827896061, 15828027133, - 15828158237, 15828289417, 15828420547, 15828551663, 15828682747, 15828813821, 15828944893, - 15829075967, 15829207049, 15829338157, 15829469237, 15829600327, 15829731419, 15829862501, - 15829993573, 15830124649, 15830255731, 15830386837, 15830517919, 15830649017, 15830780093, - 15830911171, 15831042257, 15831173333, 15831304487, 15831435563, 15831566677, 15831697757, - 15831828841, 15831959939, 15832091029, 15832222117, 15832353203, 15832484281, 15832615361, - 15832746473, 15832877549, 15833008637, 15833139719, 15833270813, 15833401889, 15833532961, - 15833664053, 15833795143, 15833926223, 15834057301, 15834188527, 15834319603, 15834450691, - 15834581773, 15834712969, 15834844049, 15834975157, 15835106281, 15835237357, 15835368431, - 15835499521, 15835630619, 15835761703, 15835892789, 15836023873, 15836154947, 15836286049, - 15836417147, 15836548243, 15836679317, 15836810393, 15836941517, 15837072607, 15837203693, - 15837334783, 15837465871, 15837596947, 15837728041, 15837859129, 15837990229, 15838121303, - 15838252421, 15838383497, 15838514597, 15838645673, 15838776761, 15838907863, 15839038967, - 15839170043, 15839301143, 15839432233, 15839563319, 15839694407, 15839825489, 15839956589, - 15840087691, 15840218791, 15840349867, 15840480941, 15840612017, 15840743111, 15840874201, - 15841005277, 15841136359, 15841267433, 15841398553, 15841529629, 15841660721, 15841791793, - 15841922869, 15842053949, 15842185127, 15842316199, 15842447281, 15842578363, 15842709499, - 15842840581, 15842971679, 15843102763, 15843233851, 15843364949, 15843496051, 15843627167, - 15843758251, 15843889331, 15844020427, 15844151501, 15844282579, 15844413667, 15844544753, - 15844675831, 15844806907, 15844937987, 15845069083, 15845200199, 15845331277, 15845462351, - 15845593429, 15845724511, 15845855651, 15845986777, 15846117863, 15846248989, 15846380063, - 15846511141, 15846642221, 15846773321, 15846904393, 15847035467, 15847166549, 15847297633, - 15847428719, 15847559807, 15847690879, 15847821961, 15847953073, 15848084173, 15848215277, - 15848346413, 15848477501, 15848608591, 15848739671, 15848870761, 15849001849, 15849132953, - 15849264031, 15849395117, 15849526243, 15849657319, 15849788399, 15849919471, 15850050563, - 15850181651, 15850312727, 15850443803, 15850574881, 15850705957, 15850837049, 15850968131, - 15851099269, 15851230393, 15851361499, 15851492617, 15851623757, 15851754833, 15851885957, - 15852017029, 15852148111, 15852279197, 15852410279, 15852541363, 15852672463, 15852803537, - 15852934693, 15853065779, 15853196861, 15853327969, 15853459043, 15853590127, 15853721203, - 15853852283, 15853983359, 15854114443, 15854245523, 15854376623, 15854507719, 15854638843, - 15854769947, 15854901037, 15855032131, 15855163267, 15855294361, 15855425441, 15855556517, - 15855687599, 15855818731, 15855949853, 15856080943, 15856212037, 15856343131, 15856474211, - 15856605293, 15856736381, 15856867459, 15856998569, 15857129669, 15857260759, 15857391857, - 15857522953, 15857654041, 15857785117, 15857916203, 15858047339, 15858178417, 15858309497, - 15858440579, 15858571657, 15858702749, 15858833867, 15858964949, 15859096021, 15859227103, - 15859358183, 15859489267, 15859620347, 15859751419, 15859882513, 15860013623, 15860144749, - 15860275829, 15860406941, 15860538017, 15860669089, 15860800169, 15860931257, 15861062341, - 15861193417, 15861324491, 15861455579, 15861586681, 15861717761, 15861848881, 15861979967, - 15862111039, 15862242127, 15862373203, 15862504291, 15862635401, 15862766473, 15862897549, - 15863028667, 15863159743, 15863290823, 15863421901, 15863552987, 15863684077, 15863815153, - 15863946247, 15864077347, 15864208421, 15864339499, 15864470591, 15864601663, 15864732743, - 15864863851, 15864994979, 15865126061, 15865257151, 15865388239, 15865519333, 15865650407, - 15865781479, 15865912553, 15866043643, 15866174747, 15866305831, 15866436917, 15866568001, - 15866699087, 15866830211, 15866961289, 15867092369, 15867223447, 15867354539, 15867485639, - 15867616729, 15867747821, 15867878893, 15868009987, 15868141067, 15868272187, 15868403263, - 15868534379, 15868665493, 15868796609, 15868927691, 15869058769, 15869189873, 15869320993, - 15869452069, 15869583269, 15869714351, 15869845447, 15869976523, 15870107609, 15870238693, - 15870369769, 15870500873, 15870631949, 15870763037, 15870894113, 15871025207, 15871156339, - 15871287413, 15871418543, 15871549621, 15871680697, 15871811777, 15871942871, 15872073949, - 15872205029, 15872336111, 15872467207, 15872598281, 15872729357, 15872860439, 15872991521, - 15873122593, 15873253673, 15873384811, 15873515897, 15873646979, 15873778051, 15873909131, - 15874040227, 15874171301, 15874302391, 15874433473, 15874564547, 15874695623, 15874826701, - 15874957783, 15875088863, 15875219951, 15875351039, 15875482141, 15875613227, 15875744317, - 15875875417, 15876006499, 15876137603, 15876268687, 15876399863, 15876530941, 15876662017, - 15876793133, 15876924227, 15877055303, 15877186379, 15877317479, 15877448551, 15877579631, - 15877710703, 15877841779, 15877972853, 15878103937, 15878235049, 15878366149, 15878497231, - 15878628307, 15878759399, 15878890481, 15879021577, 15879152669, 15879283741, 15879414821, - 15879545911, 15879677041, 15879808127, 15879939199, 15880070279, 15880201361, 15880332499, - 15880463611, 15880594699, 15880725799, 15880856881, 15880987973, 15881119061, 15881250139, - 15881381233, 15881512337, 15881643509, 15881774603, 15881905681, 15882036773, 15882167879, - 15882298963, 15882430061, 15882561137, 15882692209, 15882823337, 15882954427, 15883085579, - 15883216681, 15883347757, 15883478869, 15883609967, 15883741057, 15883872143, 15884003243, - 15884134363, 15884265457, 15884396531, 15884527619, 15884658709, 15884789803, 15884920963, - 15885052091, 15885183169, 15885314257, 15885445403, 15885576479, 15885707573, 15885838691, - 15885969773, 15886100941, 15886232053, 15886363127, 15886494241, 15886625393, 15886756537, - 15886887647, 15887018723, 15887149823, 15887280943, 15887412029, 15887543141, 15887674217, - 15887805293, 15887936369, 15888067453, 15888198539, 15888329627, 15888460699, 15888591779, - 15888722873, 15888854011, 15888985103, 15889116209, 15889247317, 15889378391, 15889509469, - 15889640561, 15889771661, 15889902757, 15890033891, 15890164963, 15890296039, 15890427121, - 15890558213, 15890689291, 15890820389, 15890951507, 15891082601, 15891213683, 15891344761, - 15891475879, 15891606971, 15891738061, 15891869137, 15892000247, 15892131329, 15892262401, - 15892393483, 15892524577, 15892655651, 15892786727, 15892917829, 15893048903, 15893179987, - 15893311097, 15893442181, 15893573261, 15893704357, 15893835437, 15893966513, 15894097619, - 15894228719, 15894359837, 15894490921, 15894622019, 15894753113, 15894884219, 15895015291, - 15895146373, 15895277467, 15895408549, 15895539629, 15895670711, 15895801841, 15895932919, - 15896064017, 15896195089, 15896326177, 15896457253, 15896588329, 15896719453, 15896850601, - 15896981687, 15897112799, 15897243919, 15897375001, 15897506077, 15897637163, 15897768251, - 15897899323, 15898030409, 15898161509, 15898292581, 15898423661, 15898554757, 15898685861, - 15898816933, 15898948031, 15899079127, 15899210231, 15899341309, 15899472437, 15899603521, - 15899734597, 15899865673, 15899996771, 15900127849, 15900258929, 15900390001, 15900521113, - 15900652193, 15900783271, 15900914377, 15901045453, 15901176527, 15901307599, 15901438727, - 15901569811, 15901700939, 15901832033, 15901963313, 15902094419, 15902225491, 15902356571, - 15902487649, 15902618723, 15902749817, 15902880899, 15903012007, 15903143117, 15903274253, - 15903405341, 15903536423, 15903667499, 15903798611, 15903929683, 15904060793, 15904191881, - 15904322963, 15904454039, 15904585121, 15904716271, 15904847347, 15904978493, 15905109587, - 15905240753, 15905371843, 15905502917, 15905634001, 15905765077, 15905896187, 15906027259, - 15906158357, 15906289429, 15906420521, 15906551599, 15906682697, 15906813877, 15906944957, - 15907076041, 15907207157, 15907338259, 15907469339, 15907600411, 15907731503, 15907862657, - 15907993811, 15908124917, 15908256017, 15908387093, 15908518201, 15908649307, 15908780411, - 15908911511, 15909042593, 15909173701, 15909304777, 15909435877, 15909566983, 15909698059, - 15909829163, 15909960239, 15910091311, 15910222399, 15910353493, 15910484591, 15910615681, - 15910746767, 15910877849, 15911008921, 15911140013, 15911271097, 15911402219, 15911533307, - 15911664413, 15911795519, 15911926619, 15912057697, 15912188783, 15912319873, 15912450947, - 15912582053, 15912713147, 15912844219, 15912975347, 15913106459, 15913237531, 15913368613, - 15913499713, 15913630807, 15913761881, 15913892959, 15914024059, 15914155139, 15914286217, - 15914417317, 15914548423, 15914679497, 15914810573, 15914941699, 15915072773, 15915203869, - 15915334949, 15915466037, 15915597119, 15915728203, 15915859291, 15915990379, 15916121503, - 15916252591, 15916383673, 15916514753, 15916645831, 15916776907, 15916907989, 15917039077, - 15917170151, 15917301223, 15917432341, 15917563423, 15917694503, 15917825603, 15917956697, - 15918087769, 15918218843, 15918349943, 15918481021, 15918612097, 15918743171, 15918874247, - 15919005337, 15919136459, 15919267537, 15919398701, 15919529777, 15919660871, 15919791971, - 15919923073, 15920054159, 15920185271, 15920316343, 15920447437, 15920578549, 15920709647, - 15920840723, 15920971921, 15921103027, 15921234127, 15921365219, 15921496309, 15921627443, - 15921758521, 15921889609, 15922020703, 15922151779, 15922282897, 15922413977, 15922545077, - 15922676179, 15922807259, 15922938359, 15923069467, 15923200543, 15923331617, 15923462689, - 15923593783, 15923724893, 15923856029, 15923987129, 15924118219, 15924249311, 15924380393, - 15924511483, 15924642563, 15924773653, 15924904729, 15925035881, 15925166969, 15925298069, - 15925429153, 15925560227, 15925691311, 15925822391, 15925953493, 15926084597, 15926215673, - 15926346749, 15926477849, 15926608939, 15926740019, 15926871091, 15927002171, 15927133253, - 15927264389, 15927395527, 15927526621, 15927657701, 15927788777, 15927919907, 15928051001, - 15928182097, 15928313201, 15928444309, 15928575413, 15928706491, 15928837609, 15928968689, - 15929099803, 15929230879, 15929361977, 15929493067, 15929624201, 15929755277, 15929886377, - 15930017513, 15930148603, 15930279679, 15930410773, 15930541871, 15930672943, 15930804061, - 15930935143, 15931066223, 15931197307, 15931328423, 15931459513, 15931590589, 15931721681, - 15931852759, 15931983839, 15932114911, 15932246009, 15932377103, 15932508191, 15932639263, - 15932770339, 15932901437, 15933032551, 15933163661, 15933294739, 15933425819, 15933556907, - 15933688003, 15933819103, 15933950203, 15934081277, 15934212367, 15934343459, 15934474541, - 15934605613, 15934736689, 15934867763, 15934998853, 15935129927, 15935261009, 15935392103, - 15935523187, 15935654263, 15935785343, 15935916421, 15936047531, 15936178627, 15936309731, - 15936440809, 15936571891, 15936702997, 15936834073, 15936965153, 15937096277, 15937227349, - 15937358443, 15937489543, 15937620637, 15937751789, 15937882871, 15938013997, 15938145073, - 15938276183, 15938407321, 15938538409, 15938669503, 15938800589, 15938931677, 15939062773, - 15939193849, 15939324923, 15939456007, 15939587101, 15939718187, 15939849259, 15939980339, - 15940111417, 15940242517, 15940373591, 15940504663, 15940635743, 15940766819, 15940897901, - 15941028997, 15941160071, 15941291161, 15941422247, 15941553349, 15941684441, 15941815531, - 15941946611, 15942077731, 15942208819, 15942339901, 15942470983, 15942602063, 15942733159, - 15942864271, 15942995347, 15943126427, 15943257503, 15943388581, 15943519679, 15943650757, - 15943781837, 15943912937, 15944044037, 15944175113, 15944306207, 15944437279, 15944568359, - 15944699443, 15944830543, 15944961629, 15945092717, 15945223793, 15945354941, 15945486017, - 15945617101, 15945748183, 15945879281, 15946010359, 15946141433, 15946272509, 15946403587, - 15946534697, 15946665803, 15946796891, 15946927987, 15947059061, 15947190151, 15947321233, - 15947452307, 15947583383, 15947714459, 15947845531, 15947976617, 15948107689, 15948238799, - 15948369971, 15948501059, 15948632201, 15948763297, 15948894371, 15949025453, 15949156549, - 15949287649, 15949418743, 15949549831, 15949680917, 15949811989, 15949943089, 15950074171, - 15950205251, 15950336323, 15950467397, 15950598557, 15950729671, 15950860763, 15950991851, - 15951122923, 15951254083, 15951385181, 15951516263, 15951647347, 15951778459, 15951909539, - 15952040633, 15952171717, 15952302833, 15952433911, 15952564993, 15952696073, 15952827169, - 15952958279, 15953089393, 15953220473, 15953351581, 15953482661, 15953613737, 15953744827, - 15953875933, 15954007007, 15954138133, 15954269269, 15954400361, 15954531451, 15954662587, - 15954793661, 15954924757, 15955055833, 15955186921, 15955318033, 15955449113, 15955580191, - 15955711349, 15955842421, 15955973497, 15956104573, 15956235679, 15956366759, 15956497861, - 15956628943, 15956760047, 15956891123, 15957022201, 15957153299, 15957284381, 15957415457, - 15957546559, 15957677651, 15957808729, 15957939821, 15958070917, 15958201991, 15958333081, - 15958464163, 15958595269, 15958726349, 15958857461, 15958988569, 15959119651, 15959250731, - 15959381803, 15959512913, 15959644031, 15959775103, 15959906213, 15960037307, 15960168403, - 15960299479, 15960430553, 15960561709, 15960692801, 15960823883, 15960954973, 15961086077, - 15961217161, 15961348241, 15961479319, 15961610407, 15961741511, 15961872671, 15962003753, - 15962134831, 15962265953, 15962397053, 15962528171, 15962659243, 15962790331, 15962921411, - 15963052493, 15963183589, 15963314677, 15963445759, 15963576887, 15963708011, 15963839147, - 15963970219, 15964101347, 15964232447, 15964363543, 15964494617, 15964625723, 15964756811, - 15964887893, 15965018977, 15965150107, 15965281207, 15965412313, 15965543389, 15965674463, - 15965805587, 15965936663, 15966067753, 15966198841, 15966329917, 15966461029, 15966592163, - 15966723263, 15966854339, 15966985417, 15967116491, 15967247599, 15967378681, 15967509889, - 15967640993, 15967772069, 15967903141, 15968034239, 15968165329, 15968296441, 15968427521, - 15968558621, 15968689697, 15968820779, 15968951857, 15969082933, 15969214021, 15969345109, - 15969476209, 15969607327, 15969738401, 15969869477, 15970000559, 15970131631, 15970262719, - 15970393807, 15970524887, 15970655963, 15970787047, 15970918121, 15971049197, 15971180273, - 15971311357, 15971442433, 15971573507, 15971704607, 15971835679, 15971966753, 15972097837, - 15972228917, 15972359993, 15972491081, 15972622157, 15972753233, 15972884309, 15973015393, - 15973146493, 15973277597, 15973408669, 15973539773, 15973670863, 15973801937, 15973933009, - 15974064143, 15974195239, 15974326339, 15974457437, 15974588519, 15974719591, 15974850691, - 15974981779, 15975112871, 15975243979, 15975375079, 15975506177, 15975637253, 15975768331, - 15975899417, 15976030501, 15976161611, 15976292699, 15976423789, 15976554887, 15976685981, - 15976817053, 15976948139, 15977079289, 15977210399, 15977341477, 15977472587, 15977603687, - 15977734793, 15977865889, 15977996999, 15978128077, 15978259169, 15978390289, 15978521381, - 15978652511, 15978783637, 15978914713, 15979045813, 15979176893, 15979307969, 15979439117, - 15979570193, 15979701277, 15979832359, 15979963477, 15980094553, 15980225629, 15980356703, - 15980487811, 15980618887, 15980749969, 15980881061, 15981012149, 15981143231, 15981274327, - 15981405421, 15981536513, 15981667591, 15981798709, 15981929833, 15982060973, 15982192081, - 15982323173, 15982454263, 15982585369, 15982716523, 15982847611, 15982978699, 15983109803, - 15983240879, 15983372003, 15983503079, 15983634167, 15983765249, 15983896333, 15984027439, - 15984158537, 15984289613, 15984420707, 15984551837, 15984682937, 15984814031, 15984945103, - 15985076179, 15985207267, 15985338349, 15985469449, 15985600541, 15985731617, 15985862693, - 15985993781, 15986124877, 15986256019, 15986387099, 15986518189, 15986649269, 15986780353, - 15986911433, 15987042553, 15987173641, 15987304721, 15987435803, 15987566879, 15987697981, - 15987829063, 15987960187, 15988091267, 15988222343, 15988353461, 15988484539, 15988615613, - 15988746689, 15988877797, 15989008873, 15989139997, 15989271101, 15989402183, 15989533279, - 15989664391, 15989795491, 15989926583, 15990057661, 15990188741, 15990319817, 15990450919, - 15990582011, 15990713083, 15990844157, 15990975271, 15991106347, 15991237441, 15991368517, - 15991499611, 15991630729, 15991761817, 15991892909, 15992023997, 15992155073, 15992286161, - 15992417239, 15992548331, 15992679407, 15992810521, 15992941603, 15993072713, 15993203789, - 15993334891, 15993465979, 15993597091, 15993728213, 15993859307, 15993990391, 15994121471, - 15994252591, 15994383677, 15994514843, 15994645963, 15994777061, 15994908179, 15995039297, - 15995170391, 15995301463, 15995432581, 15995563657, 15995694731, 15995825831, 15995956903, - 15996087979, 15996219091, 15996350179, 15996481309, 15996612389, 15996743491, 15996874609, - 15997005683, 15997136759, 15997267837, 15997398929, 15997530011, 15997661083, 15997792169, - 15997923251, 15998054329, 15998185499, 15998316571, 15998447653, 15998578733, 15998709827, - 15998840903, 15998971997, 15999103139, 15999234241, 15999365341, 15999496507, 15999627583, - 15999758669, 15999889747, 16000020857, 16000151957, 16000283051, 16000414169, 16000545283, - 16000676357, 16000807429, 16000938511, 16001069603, 16001200681, 16001331757, 16001462899, - 16001593991, 16001725093, 16001856251, 16001987327, 16002118403, 16002249493, 16002380593, - 16002511667, 16002642757, 16002773879, 16002904979, 16003036061, 16003167211, 16003298287, - 16003429363, 16003560439, 16003691533, 16003822669, 16003953751, 16004084849, 16004215933, - 16004347033, 16004478109, 16004609191, 16004740273, 16004871353, 16005002459, 16005133567, - 16005264641, 16005395729, 16005526847, 16005657919, 16005789043, 16005920123, 16006051219, - 16006182299, 16006313371, 16006444477, 16006575577, 16006706663, 16006837739, 16006968833, - 16007099959, 16007231047, 16007362177, 16007493289, 16007624377, 16007755471, 16007886553, - 16008017629, 16008148711, 16008279839, 16008410939, 16008542023, 16008673111, 16008804187, - 16008935263, 16009066343, 16009197433, 16009328521, 16009459619, 16009590731, 16009721837, - 16009852909, 16009984009, 16010115119, 16010246227, 16010377307, 16010508379, 16010639453, - 16010770537, 16010901637, 16011032717, 16011163793, 16011294869, 16011425971, 16011557047, - 16011688127, 16011819199, 16011950299, 16012081381, 16012212481, 16012343617, 16012474711, - 16012605787, 16012736893, 16012867967, 16012999069, 16013130223, 16013261311, 16013392477, - 16013523563, 16013654687, 16013785769, 16013916859, 16014047999, 16014179123, 16014310219, - 16014441293, 16014572383, 16014703457, 16014834533, 16014965611, 16015096717, 16015227797, - 16015358897, 16015489991, 16015621081, 16015752161, 16015883249, 16016014349, 16016145503, - 16016276579, 16016407669, 16016538751, 16016669831, 16016800909, 16016931991, 16017063071, - 16017194159, 16017325243, 16017456337, 16017587413, 16017718511, 16017849583, 16017980663, - 16018111741, 16018242839, 16018373951, 16018505029, 16018636187, 16018767263, 16018898383, - 16019029459, 16019160559, 16019291677, 16019422759, 16019553833, 16019684911, 16019816017, - 16019947103, 16020078187, 16020209263, 16020340339, 16020471427, 16020602513, 16020733667, - 16020864749, 16020995863, 16021126939, 16021258013, 16021389119, 16021520197, 16021651277, - 16021782349, 16021913461, 16022044561, 16022175643, 16022306743, 16022437829, 16022568907, - 16022699983, 16022831057, 16022962129, 16023093211, 16023224323, 16023355399, 16023486473, - 16023617549, 16023748639, 16023879721, 16024010837, 16024141937, 16024273037, 16024404113, - 16024535227, 16024666303, 16024797379, 16024928503, 16025059577, 16025190661, 16025321749, - 16025452841, 16025583913, 16025714987, 16025846231, 16025977349, 16026108493, 16026239573, - 16026370673, 16026501791, 16026632893, 16026763981, 16026895081, 16027026163, 16027157243, - 16027288363, 16027419449, 16027550531, 16027681603, 16027812679, 16027943761, 16028074847, - 16028205923, 16028337007, 16028468107, 16028599231, 16028730329, 16028861489, 16028992571, - 16029123673, 16029254749, 16029385831, 16029516911, 16029648043, 16029779201, 16029910307, - 16030041439, 16030172539, 16030303631, 16030434731, 16030565839, 16030696939, 16030828019, - 16030959101, 16031090197, 16031221273, 16031352347, 16031483423, 16031614519, 16031745593, - 16031876671, 16032007763, 16032138869, 16032269947, 16032401029, 16032532111, 16032663209, - 16032794317, 16032925397, 16033056511, 16033187591, 16033318667, 16033449739, 16033580819, - 16033711933, 16033843043, 16033974127, 16034105233, 16034236319, 16034367403, 16034498477, - 16034629577, 16034760653, 16034891771, 16035022909, 16035154027, 16035285109, 16035416227, - 16035547331, 16035678413, 16035809519, 16035940619, 16036071731, 16036202813, 16036333891, - 16036464967, 16036596047, 16036727123, 16036858199, 16036989313, 16037120389, 16037251471, - 16037382553, 16037513633, 16037644717, 16037775811, 16037906933, 16038038041, 16038169139, - 16038300211, 16038431303, 16038562403, 16038693491, 16038824569, 16038955649, 16039086727, - 16039217809, 16039348981, 16039480063, 16039611149, 16039742237, 16039873313, 16040004389, - 16040135479, 16040266553, 16040397641, 16040528719, 16040659799, 16040790889, 16040922061, - 16041053153, 16041184231, 16041315337, 16041446411, 16041577543, 16041708619, 16041839701, - 16041970783, 16042101863, 16042232959, 16042364033, 16042495109, 16042626287, 16042757371, - 16042888453, 16043019533, 16043150633, 16043281741, 16043412877, 16043543951, 16043675033, - 16043806109, 16043937211, 16044068309, 16044199387, 16044330503, 16044461591, 16044592679, - 16044723767, 16044854863, 16044985939, 16045117061, 16045248137, 16045379213, 16045510291, - 16045641377, 16045772459, 16045903589, 16046034661, 16046165783, 16046296873, 16046427961, - 16046559059, 16046690171, 16046821253, 16046952347, 16047083431, 16047214571, 16047345659, - 16047476737, 16047607819, 16047738911, 16047870019, 16048001111, 16048132189, 16048263299, - 16048394423, 16048525523, 16048656619, 16048787693, 16048918777, 16049049853, 16049180929, - 16049312063, 16049443139, 16049574223, 16049705311, 16049836393, 16049967467, 16050098557, - 16050229639, 16050360727, 16050491867, 16050622967, 16050754081, 16050885163, 16051016281, - 16051147381, 16051278497, 16051409603, 16051540711, 16051671803, 16051802881, 16051934009, - 16052065097, 16052196197, 16052327303, 16052458381, 16052589463, 16052720539, 16052851627, - 16052982721, 16053113809, 16053244931, 16053376057, 16053507137, 16053638221, 16053769301, - 16053900389, 16054031479, 16054162559, 16054293643, 16054424717, 16054555793, 16054686881, - 16054818001, 16054949077, 16055080157, 16055211241, 16055342357, 16055473549, 16055604659, - 16055735789, 16055866861, 16055997949, 16056129107, 16056260261, 16056391349, 16056522473, - 16056653549, 16056784663, 16056915737, 16057046869, 16057178041, 16057309123, 16057440197, - 16057571377, 16057702477, 16057833581, 16057964701, 16058095777, 16058226851, 16058357923, - 16058489011, 16058620091, 16058751169, 16058882267, 16059013343, 16059144449, 16059275543, - 16059406661, 16059537743, 16059668827, 16059799901, 16059930989, 16060062079, 16060193159, - 16060324243, 16060455329, 16060586401, 16060717483, 16060848563, 16060979659, 16061110759, - 16061241851, 16061372939, 16061504027, 16061635129, 16061766251, 16061897333, 16062028427, - 16062159511, 16062290633, 16062421717, 16062552809, 16062683881, 16062814981, 16062946073, - 16063077179, 16063208261, 16063339343, 16063470421, 16063601501, 16063732579, 16063863659, - 16063994741, 16064125813, 16064256893, 16064387987, 16064519071, 16064650153, 16064781251, - 16064912323, 16065043409, 16065174493, 16065305587, 16065436663, 16065567769, 16065698903, - 16065829987, 16065961097, 16066092179, 16066223263, 16066354363, 16066485439, 16066616521, - 16066747597, 16066878673, 16067009801, 16067140907, 16067272009, 16067403083, 16067534177, - 16067665253, 16067796337, 16067927431, 16068058519, 16068189593, 16068320677, 16068451757, - 16068582833, 16068713909, 16068844997, 16068976081, 16069107167, 16069238249, 16069369361, - 16069500443, 16069631527, 16069762627, 16069893709, 16070024783, 16070155859, 16070286931, - 16070418029, 16070549129, 16070680231, 16070811307, 16070942389, 16071073477, 16071204557, - 16071335633, 16071466709, 16071597791, 16071728903, 16071859981, 16071991093, 16072122179, - 16072253261, 16072384333, 16072515421, 16072646543, 16072777631, 16072908703, 16073039783, - 16073170877, 16073301953, 16073433029, 16073564113, 16073695217, 16073826313, 16073957387, - 16074088463, 16074219619, 16074350693, 16074481769, 16074612857, 16074743947, 16074875027, - 16075006109, 16075137229, 16075268327, 16075399409, 16075530481, 16075661629, 16075792703, - 16075923803, 16076054881, 16076185991, 16076317067, 16076448139, 16076579243, 16076710333, - 16076841413, 16076972491, 16077103573, 16077234689, 16077365797, 16077496871, 16077627989, - 16077759091, 16077890209, 16078021327, 16078152413, 16078283489, 16078414577, 16078545673, - 16078676767, 16078807841, 16078938913, 16079069989, 16079201063, 16079332147, 16079463287, - 16079594387, 16079725471, 16079856571, 16079987681, 16080118757, 16080249851, 16080380959, - 16080512033, 16080643151, 16080774223, 16080905363, 16081036451, 16081167593, 16081298693, - 16081429799, 16081560871, 16081691947, 16081823057, 16081954157, 16082085251, 16082216323, - 16082347409, 16082478481, 16082609617, 16082740691, 16082871769, 16083002851, 16083133931, - 16083265019, 16083396151, 16083527237, 16083658319, 16083789391, 16083920477, 16084051559, - 16084182649, 16084313743, 16084444879, 16084576003, 16084707091, 16084838233, 16084969321, - 16085100397, 16085231521, 16085362621, 16085493703, 16085624837, 16085755909, 16085887001, - 16086018107, 16086149179, 16086280253, 16086411361, 16086542443, 16086673529, 16086804641, - 16086935723, 16087066823, 16087197967, 16087329061, 16087460153, 16087591237, 16087722317, - 16087853407, 16087984483, 16088115559, 16088246659, 16088377759, 16088508859, 16088639939, - 16088771033, 16088902169, 16089033241, 16089164317, 16089295433, 16089426523, 16089557623, - 16089688697, 16089819769, 16089950843, 16090081921, 16090213003, 16090344119, 16090475207, - 16090606289, 16090737389, 16090868477, 16090999577, 16091130689, 16091261777, 16091392883, - 16091523967, 16091655077, 16091786159, 16091917277, 16092048353, 16092179449, 16092310523, - 16092441613, 16092572701, 16092703789, 16092834887, 16092965981, 16093097077, 16093228157, - 16093359241, 16093490327, 16093621457, 16093752569, 16093883693, 16094014793, 16094145869, - 16094276951, 16094408027, 16094539127, 16094670209, 16094801399, 16094932537, 16095063617, - 16095194741, 16095325849, 16095456931, 16095588029, 16095719149, 16095850237, 16095981313, - 16096112453, 16096243589, 16096374677, 16096505819, 16096636901, 16096767979, 16096899059, - 16097030137, 16097161231, 16097292311, 16097423393, 16097554483, 16097685559, 16097816641, - 16097947783, 16098078883, 16098209957, 16098341059, 16098472211, 16098603299, 16098734383, - 16098865459, 16098996547, 16099127621, 16099258709, 16099389781, 16099520867, 16099651949, - 16099783033, 16099914113, 16100045201, 16100176289, 16100307371, 16100438477, 16100569561, - 16100700667, 16100831753, 16100962841, 16101093913, 16101225001, 16101356099, 16101487183, - 16101618317, 16101749399, 16101880481, 16102011559, 16102142633, 16102273763, 16102404859, - 16102535963, 16102667051, 16102798139, 16102929217, 16103060293, 16103191381, 16103322457, - 16103453549, 16103584639, 16103715743, 16103846821, 16103977913, 16104109001, 16104240079, - 16104371189, 16104502289, 16104633383, 16104764491, 16104895567, 16105026647, 16105157729, - 16105288811, 16105419899, 16105550977, 16105682053, 16105813147, 16105944221, 16106075299, - 16106206381, 16106337473, 16106468597, 16106599669, 16106730797, 16106861873, 16106992963, - 16107124037, 16107255119, 16107386203, 16107517291, 16107648383, 16107779461, 16107910603, - 16108041683, 16108172771, 16108303847, 16108434931, 16108566017, 16108697153, 16108828237, - 16108959313, 16109090407, 16109221523, 16109352613, 16109483693, 16109614769, 16109745881, - 16109876987, 16110008071, 16110139153, 16110270227, 16110401327, 16110532423, 16110663523, - 16110794603, 16110925697, 16111056823, 16111187933, 16111319009, 16111450087, 16111581193, - 16111712297, 16111843387, 16111974481, 16112105573, 16112236661, 16112367737, 16112498851, - 16112629927, 16112761001, 16112892073, 16113023149, 16113154249, 16113285337, 16113416453, - 16113547543, 16113678649, 16113809743, 16113940837, 16114071913, 16114202989, 16114334077, - 16114465151, 16114596247, 16114727341, 16114858447, 16114989523, 16115120597, 16115251693, - 16115382769, 16115513857, 16115644939, 16115776067, 16115907149, 16116038227, 16116169301, - 16116300391, 16116431483, 16116562577, 16116693661, 16116824743, 16116955817, 16117086911, - 16117217983, 16117349063, 16117480157, 16117611241, 16117742317, 16117873393, 16118004527, - 16118135599, 16118266693, 16118397793, 16118528939, 16118660023, 16118791147, 16118922221, - 16119053297, 16119184391, 16119315521, 16119446599, 16119577711, 16119708799, 16119839887, - 16119970981, 16120102133, 16120233209, 16120364311, 16120495387, 16120626493, 16120757591, - 16120888681, 16121019779, 16121150861, 16121281961, 16121413043, 16121544139, 16121675221, - 16121806301, 16121937427, 16122068519, 16122199591, 16122330671, 16122461779, 16122592853, - 16122723943, 16122855017, 16122986101, 16123117181, 16123248287, 16123379359, 16123510433, - 16123641529, 16123772629, 16123903717, 16124034791, 16124165903, 16124296997, 16124428081, - 16124559161, 16124690251, 16124821331, 16124952439, 16125083537, 16125214669, 16125345749, - 16125476831, 16125607903, 16125738983, 16125870107, 16126001179, 16126132261, 16126263371, - 16126394489, 16126525579, 16126656653, 16126787731, 16126918817, 16127049889, 16127180983, - 16127312093, 16127443187, 16127574269, 16127705411, 16127836507, 16127967593, 16128098669, - 16128229757, 16128360851, 16128491947, 16128623033, 16128754111, 16128885247, 16129016327, - 16129147421, 16129278523, 16129409627, 16129540729, 16129671809, 16129802993, 16129934131, - 16130065229, 16130196301, 16130327377, 16130458451, 16130589577, 16130720653, 16130851757, - 16130982869, 16131113941, 16131245021, 16131376139, 16131507239, 16131638311, 16131769391, - 16131900469, 16132031551, 16132162637, 16132293787, 16132424863, 16132555949, 16132687033, - 16132818133, 16132949219, 16133080303, 16133211377, 16133342483, 16133473567, 16133604649, - 16133735741, 16133866817, 16133997941, 16134129013, 16134260089, 16134391181, 16134522289, - 16134653363, 16134784447, 16134915551, 16135046623, 16135177753, 16135308829, 16135439909, - 16135571017, 16135702091, 16135833167, 16135964329, 16136095453, 16136226529, 16136357609, - 16136488681, 16136619773, 16136750857, 16136881939, 16137013021, 16137144139, 16137275221, - 16137406309, 16137537391, 16137668507, 16137799591, 16137930667, 16138061759, 16138192843, - 16138323919, 16138455031, 16138586137, 16138717213, 16138848317, 16138979447, 16139110571, - 16139241653, 16139372747, 16139503837, 16139634923, 16139766001, 16139897083, 16140028183, - 16140159317, 16140290471, 16140421597, 16140552677, 16140683773, 16140814873, 16140945959, - 16141077031, 16141208137, 16141339219, 16141470299, 16141601383, 16141732471, 16141863547, - 16141994681, 16142125777, 16142256859, 16142387951, 16142519027, 16142650109, 16142781203, - 16142912281, 16143043369, 16143174461, 16143305537, 16143436613, 16143567697, 16143698773, - 16143829847, 16143960929, 16144092001, 16144223083, 16144354199, 16144485277, 16144616351, - 16144747447, 16144878539, 16145009611, 16145140723, 16145271809, 16145402891, 16145533967, - 16145665049, 16145796167, 16145927267, 16146058343, 16146189431, 16146320543, 16146451621, - 16146582707, 16146713783, 16146844867, 16146976037, 16147107149, 16147238273, 16147369349, - 16147500427, 16147631503, 16147762597, 16147893677, 16148024773, 16148155847, 16148286953, - 16148418037, 16148549117, 16148680199, 16148811277, 16148942377, 16149073609, 16149204703, - 16149335777, 16149466867, 16149597983, 16149729073, 16149860171, 16149991271, 16150122371, - 16150253443, 16150384531, 16150515629, 16150646711, 16150777807, 16150908881, 16151039981, - 16151171083, 16151302163, 16151433293, 16151564371, 16151695447, 16151826547, 16151957671, - 16152088759, 16152219833, 16152350909, 16152481991, 16152613063, 16152744137, 16152875267, - 16153006391, 16153137463, 16153268597, 16153399673, 16153530749, 16153661833, 16153792931, - 16153924021, 16154055101, 16154186173, 16154317247, 16154448329, 16154579401, 16154710487, - 16154841559, 16154972651, 16155103729, 16155234841, 16155365953, 16155497027, 16155628103, - 16155759203, 16155890287, 16156021373, 16156152497, 16156283597, 16156414733, 16156545871, - 16156676969, 16156808051, 16156939129, 16157070211, 16157201287, 16157332391, 16157463463, - 16157594569, 16157725657, 16157856731, 16157987843, 16158118919, 16158250021, 16158381097, - 16158512203, 16158643283, 16158774367, 16158905459, 16159036547, 16159167637, 16159298741, - 16159429817, 16159560889, 16159691971, 16159823083, 16159954159, 16160085241, 16160216321, - 16160347403, 16160478479, 16160609551, 16160740663, 16160871737, 16161002939, 16161134047, - 16161265139, 16161396217, 16161527297, 16161658369, 16161789487, 16161920591, 16162051721, - 16162182797, 16162313873, 16162445011, 16162576121, 16162707217, 16162838309, 16162969391, - 16163100463, 16163231537, 16163362609, 16163493701, 16163624863, 16163755987, 16163887073, - 16164018187, 16164149273, 16164280367, 16164411469, 16164542591, 16164673663, 16164804751, - 16164935873, 16165066949, 16165198073, 16165329163, 16165460237, 16165591313, 16165722389, - 16165853519, 16165984661, 16166115767, 16166246839, 16166377933, 16166509013, 16166640101, - 16166771209, 16166902289, 16167033383, 16167164459, 16167295537, 16167426617, 16167557711, - 16167688783, 16167819869, 16167950957, 16168082057, 16168213157, 16168344287, 16168475381, - 16168606457, 16168737569, 16168868641, 16168999739, 16169130833, 16169261929, 16169393021, - 16169524093, 16169655167, 16169786327, 16169917427, 16170048599, 16170179723, 16170310823, - 16170441901, 16170572989, 16170704083, 16170835157, 16170966233, 16171097311, 16171228387, - 16171359473, 16171490551, 16171621633, 16171752719, 16171883797, 16172014897, 16172146007, - 16172277091, 16172408249, 16172539333, 16172670419, 16172801497, 16172932579, 16173063671, - 16173194743, 16173325867, 16173456967, 16173588047, 16173719119, 16173850213, 16173981293, - 16174112411, 16174243483, 16174374607, 16174505701, 16174636781, 16174767881, 16174898977, - 16175030057, 16175161153, 16175292239, 16175423317, 16175554453, 16175685529, 16175816609, - 16175947691, 16176078769, 16176209867, 16176340951, 16176472063, 16176603143, 16176734263, - 16176865351, 16176996457, 16177127537, 16177258619, 16177389751, 16177520831, 16177651907, - 16177782979, 16177914253, 16178045327, 16178176409, 16178307491, 16178438593, 16178569669, - 16178700749, 16178831869, 16178962967, 16179094067, 16179225187, 16179356261, 16179487343, - 16179618421, 16179749501, 16179880601, 16180011713, 16180142791, 16180273883, 16180404973, - 16180536083, 16180667177, 16180798273, 16180929361, 16181060437, 16181191547, 16181322683, - 16181453777, 16181584849, 16181715943, 16181847023, 16181978101, 16182109253, 16182240377, - 16182371483, 16182502577, 16182633673, 16182764837, 16182895909, 16183026989, 16183158071, - 16183289149, 16183420289, 16183551389, 16183682479, 16183813553, 16183944643, 16184075807, - 16184206891, 16184337973, 16184469079, 16184600161, 16184731237, 16184862371, 16184993449, - 16185124531, 16185255607, 16185386717, 16185517853, 16185648931, 16185780071, 16185911149, - 16186042289, 16186173373, 16186304471, 16186435561, 16186566667, 16186697749, 16186828843, - 16186959961, 16187091043, 16187222131, 16187353223, 16187484317, 16187615419, 16187746493, - 16187877577, 16188008653, 16188139729, 16188270817, 16188401893, 16188532979, 16188664061, - 16188795137, 16188926263, 16189057427, 16189188517, 16189319611, 16189450721, 16189581817, - 16189712899, 16189844029, 16189975117, 16190106263, 16190237341, 16190368417, 16190499509, - 16190630581, 16190761667, 16190892761, 16191023897, 16191154997, 16191286109, 16191417239, - 16191548353, 16191679463, 16191810559, 16191941653, 16192072777, 16192203851, 16192334927, - 16192466021, 16192597097, 16192728179, 16192859273, 16192990349, 16193121463, 16193252549, - 16193383621, 16193514697, 16193645771, 16193776849, 16193907929, 16194039011, 16194170137, - 16194301231, 16194432307, 16194563381, 16194694541, 16194825631, 16194956711, 16195087877, - 16195218967, 16195350151, 16195481261, 16195612333, 16195743409, 16195874521, 16196005601, - 16196136673, 16196267771, 16196398871, 16196529977, 16196661071, 16196792173, 16196923273, - 16197054373, 16197185503, 16197316589, 16197447677, 16197578773, 16197709849, 16197840949, - 16197972029, 16198103101, 16198234223, 16198365299, 16198496399, 16198627477, 16198758599, - 16198889677, 16199020777, 16199151851, 16199282929, 16199414039, 16199545133, 16199676209, - 16199807293, 16199938387, 16200069461, 16200200539, 16200331649, 16200462743, 16200593861, - 16200724933, 16200856013, 16200987109, 16201118203, 16201249279, 16201380383, 16201511483, - 16201642559, 16201773641, 16201904717, 16202035831, 16202166949, 16202298029, 16202429119, - 16202560207, 16202691283, 16202822399, 16202953471, 16203084553, 16203215629, 16203346703, - 16203477781, 16203608887, 16203739963, 16203871069, 16204002167, 16204133249, 16204264333, - 16204395409, 16204526483, 16204657589, 16204788683, 16204919761, 16205050843, 16205181931, - 16205313031, 16205444161, 16205575273, 16205706359, 16205837471, 16205968553, 16206099653, - 16206230737, 16206361811, 16206492899, 16206623999, 16206755077, 16206886217, 16207017289, - 16207148381, 16207279453, 16207410559, 16207541653, 16207672753, 16207803839, 16207934923, - 16208066057, 16208197163, 16208328277, 16208459387, 16208590499, 16208721611, 16208852687, - 16208983793, 16209114917, 16209245989, 16209377089, 16209508169, 16209639287, 16209770359, - 16209901439, 16210032511, 16210163609, 16210294687, 16210425767, 16210556849, 16210687921, - 16210818997, 16210950071, 16211081149, 16211212247, 16211343341, 16211474437, 16211605511, - 16211736613, 16211867717, 16211998807, 16212129887, 16212260963, 16212392041, 16212523121, - 16212654193, 16212785273, 16212916397, 16213047517, 16213178617, 16213309727, 16213440799, - 16213571879, 16213702957, 16213834093, 16213965193, 16214096281, 16214227363, 16214358443, - 16214489527, 16214620601, 16214751731, 16214882807, 16215013891, 16215144997, 16215276083, - 16215407171, 16215538271, 16215669359, 16215800431, 16215931561, 16216062671, 16216193783, - 16216324903, 16216455979, 16216587109, 16216718207, 16216849289, 16216980401, 16217111473, - 16217242607, 16217373691, 16217504819, 16217635909, 16217766991, 16217898083, 16218029227, - 16218160331, 16218291407, 16218422513, 16218553607, 16218684689, 16218815771, 16218946847, - 16219077943, 16219209029, 16219340113, 16219471187, 16219602307, 16219733441, 16219864513, - 16219995599, 16220126687, 16220257769, 16220388853, 16220519929, 16220651003, 16220782093, - 16220913167, 16221044243, 16221175331, 16221306407, 16221437489, 16221568567, 16221699661, - 16221830789, 16221961891, 16222092977, 16222224071, 16222355203, 16222486327, 16222617401, - 16222748533, 16222879609, 16223010689, 16223141813, 16223272909, 16223403997, 16223535109, - 16223666191, 16223797307, 16223928401, 16224059479, 16224190571, 16224321653, 16224452743, - 16224583849, 16224714943, 16224846023, 16224977137, 16225108213, 16225239361, 16225370443, - 16225501529, 16225632613, 16225763731, 16225894819, 16226025899, 16226156977, 16226288063, - 16226419171, 16226550251, 16226681381, 16226812457, 16226943587, 16227074663, 16227205747, - 16227336883, 16227467983, 16227599071, 16227730147, 16227861229, 16227992317, 16228123411, - 16228254529, 16228385617, 16228516691, 16228647767, 16228778843, 16228909943, 16229041027, - 16229172103, 16229303177, 16229434253, 16229565329, 16229696423, 16229827541, 16229958623, - 16230089717, 16230220801, 16230351913, 16230483001, 16230614083, 16230745177, 16230876253, - 16231007369, 16231138447, 16231269529, 16231400609, 16231531691, 16231662809, 16231793891, - 16231924993, 16232056069, 16232187161, 16232318237, 16232449349, 16232580439, 16232711533, - 16232842609, 16232973739, 16233104813, 16233235891, 16233366973, 16233498079, 16233629189, - 16233760267, 16233891397, 16234022489, 16234153567, 16234284641, 16234415783, 16234546897, - 16234678039, 16234809119, 16234940269, 16235071399, 16235202491, 16235333573, 16235464673, - 16235595767, 16235726851, 16235857933, 16235989013, 16236120091, 16236251167, 16236382259, - 16236513331, 16236644419, 16236775537, 16236906629, 16237037797, 16237168873, 16237299977, - 16237431083, 16237562161, 16237693261, 16237824367, 16237955477, 16238086561, 16238217637, - 16238348717, 16238479819, 16238610917, 16238742011, 16238873129, 16239004211, 16239135293, - 16239266411, 16239397483, 16239528559, 16239659641, 16239790729, 16239921853, 16240052953, - 16240184027, 16240315109, 16240446181, 16240577263, 16240708339, 16240839451, 16240970549, - 16241101621, 16241232701, 16241363849, 16241494963, 16241626069, 16241757151, 16241888239, - 16242019327, 16242150401, 16242281483, 16242412591, 16242543671, 16242674743, 16242805819, - 16242936949, 16243068041, 16243199129, 16243330277, 16243461371, 16243592447, 16243723537, - 16243854629, 16243985729, 16244116813, 16244247893, 16244378977, 16244510053, 16244641129, - 16244772227, 16244903387, 16245034537, 16245165613, 16245296687, 16245427777, 16245558859, - 16245689951, 16245821089, 16245952187, 16246083263, 16246214351, 16246345471, 16246476563, - 16246607653, 16246738751, 16246869833, 16247000927, 16247132017, 16247263093, 16247394167, - 16247525251, 16247656331, 16247787407, 16247918501, 16248049619, 16248180721, 16248311803, - 16248442877, 16248574021, 16248705181, 16248836291, 16248967373, 16249098499, 16249229611, - 16249360753, 16249491833, 16249622923, 16249753997, 16249885097, 16250016193, 16250147279, - 16250278361, 16250409449, 16250540531, 16250671627, 16250802719, 16250933807, 16251064901, - 16251196037, 16251327119, 16251458221, 16251589301, 16251720377, 16251851467, 16251982559, - 16252113637, 16252244711, 16252375787, 16252506863, 16252637969, 16252769053, 16252900187, - 16253031269, 16253162347, 16253293447, 16253424599, 16253555677, 16253686751, 16253817823, - 16253948899, 16254080027, 16254211117, 16254342191, 16254473281, 16254604363, 16254735437, - 16254866513, 16254997607, 16255128679, 16255259759, 16255390847, 16255522033, 16255653109, - 16255784189, 16255915279, 16256046377, 16256177471, 16256308543, 16256439623, 16256570713, - 16256701837, 16256832959, 16256964049, 16257095131, 16257226211, 16257357301, 16257488389, - 16257619517, 16257750611, 16257881699, 16258012831, 16258143917, 16258274993, 16258406071, - 16258537147, 16258668221, 16258799309, 16258930381, 16259061499, 16259192603, 16259323723, - 16259454803, 16259585957, 16259717041, 16259848133, 16259979223, 16260110323, 16260241421, - 16260372521, 16260503603, 16260634679, 16260765751, 16260896887, 16261027967, 16261159087, - 16261290179, 16261421269, 16261552357, 16261683461, 16261814561, 16261945643, 16262076731, - 16262207807, 16262338909, 16262469989, 16262601071, 16262732177, 16262863259, 16262994331, - 16263125467, 16263256547, 16263387641, 16263518731, 16263649817, 16263780901, 16263911977, - 16264043051, 16264174151, 16264305247, 16264436381, 16264567481, 16264698559, 16264829641, - 16264960771, 16265091847, 16265222927, 16265354041, 16265485121, 16265616221, 16265747317, - 16265878403, 16266009481, 16266140557, 16266271639, 16266402751, 16266533939, 16266665011, - 16266796111, 16266927191, 16267058299, 16267189399, 16267320481, 16267451567, 16267582651, - 16267713757, 16267844837, 16267976009, 16268107087, 16268238167, 16268369261, 16268500343, - 16268631433, 16268762507, 16268893579, 16269024661, 16269155743, 16269286837, 16269417929, - 16269549001, 16269680113, 16269811211, 16269942287, 16270073359, 16270204441, 16270335527, - 16270466633, 16270597709, 16270728911, 16270860029, 16270991161, 16271122237, 16271253347, - 16271384453, 16271515543, 16271646617, 16271777701, 16271908799, 16272039937, 16272171023, - 16272302099, 16272433181, 16272564263, 16272695399, 16272826519, 16272957599, 16273088683, - 16273219783, 16273350859, 16273481933, 16273613011, 16273744111, 16273875223, 16274006311, - 16274137409, 16274268499, 16274399573, 16274530669, 16274661743, 16274792881, 16274924021, - 16275055103, 16275186197, 16275317281, 16275448381, 16275579517, 16275710603, 16275841763, - 16275972841, 16276103917, 16276235021, 16276366163, 16276497337, 16276628413, 16276759487, - 16276890593, 16277021693, 16277152817, 16277283889, 16277414971, 16277546063, 16277677201, - 16277808277, 16277939371, 16278070453, 16278201551, 16278332627, 16278463699, 16278594779, - 16278725851, 16278856933, 16278988039, 16279119127, 16279250209, 16279381379, 16279512461, - 16279643543, 16279774639, 16279905727, 16280036821, 16280167919, 16280299039, 16280430113, - 16280561221, 16280692319, 16280823409, 16280954527, 16281085603, 16281216689, 16281347783, - 16281478883, 16281609961, 16281741037, 16281872119, 16282003193, 16282134269, 16282265357, - 16282396517, 16282527589, 16282658699, 16282789799, 16282920881, 16283051959, 16283183089, - 16283314193, 16283445271, 16283576411, 16283707487, 16283838577, 16283969651, 16284100733, - 16284231809, 16284362881, 16284493961, 16284625039, 16284756119, 16284887249, 16285018381, - 16285149481, 16285280569, 16285411661, 16285542743, 16285673857, 16285804939, 16285936027, - 16286067157, 16286198261, 16286329337, 16286460427, 16286591507, 16286722631, 16286853703, - 16286984797, 16287115937, 16287247063, 16287378157, 16287509239, 16287640331, 16287771403, - 16287902503, 16288033577, 16288164653, 16288295767, 16288426867, 16288557949, 16288689047, - 16288820161, 16288951249, 16289082371, 16289213443, 16289344517, 16289475593, 16289606701, - 16289737781, 16289868853, 16289999963, 16290131059, 16290262139, 16290393227, 16290524303, - 16290655387, 16290786461, 16290917537, 16291048651, 16291179743, 16291310839, 16291441927, - 16291573007, 16291704089, 16291835213, 16291966319, 16292097391, 16292228479, 16292359553, - 16292490647, 16292621731, 16292752831, 16292883973, 16293015049, 16293146131, 16293277279, - 16293408377, 16293539477, 16293670669, 16293801743, 16293932819, 16294063921, 16294195019, - 16294326137, 16294457227, 16294588313, 16294719391, 16294850479, 16294981553, 16295112653, - 16295243749, 16295374829, 16295505931, 16295637031, 16295768117, 16295899189, 16296030269, - 16296161353, 16296292477, 16296423551, 16296554623, 16296685697, 16296816799, 16296947893, - 16297078979, 16297210051, 16297341157, 16297472239, 16297603319, 16297734461, 16297865533, - 16297996613, 16298127689, 16298258783, 16298389871, 16298520949, 16298652047, 16298783119, - 16298914193, 16299045271, 16299176401, 16299307513, 16299438637, 16299569731, 16299700811, - 16299831923, 16299963011, 16300094113, 16300225187, 16300356263, 16300487339, 16300618417, - 16300749511, 16300880591, 16301011667, 16301142757, 16301273861, 16301404979, 16301536087, - 16301667169, 16301798273, 16301929361, 16302060443, 16302191561, 16302322657, 16302453731, - 16302584803, 16302715931, 16302847009, 16302978119, 16303109213, 16303240297, 16303371389, - 16303502461, 16303633547, 16303764629, 16303895749, 16304026853, 16304157937, 16304289037, - 16304420117, 16304551201, 16304682281, 16304813353, 16304944457, 16305075533, 16305206629, - 16305337703, 16305468779, 16305599857, 16305730949, 16305862049, 16305993127, 16306124201, - 16306255289, 16306386373, 16306517471, 16306648549, 16306779623, 16306910777, 16307041873, - 16307172989, 16307304061, 16307435141, 16307566241, 16307697391, 16307828489, 16307959573, - 16308090649, 16308221723, 16308352799, 16308483907, 16308615047, 16308746141, 16308877219, - 16309008299, 16309139411, 16309270493, 16309401601, 16309532689, 16309663763, 16309794863, - 16309925959, 16310057041, 16310188121, 16310319203, 16310450287, 16310581363, 16310712437, - 16310843509, 16310974597, 16311105689, 16311236797, 16311367909, 16311498989, 16311630089, - 16311761183, 16311892273, 16312023397, 16312154471, 16312285547, 16312416629, 16312547711, - 16312678813, 16312809899, 16312941011, 16313072101, 16313203177, 16313334311, 16313465407, - 16313596487, 16313727583, 16313858707, 16313989823, 16314120929, 16314252007, 16314383087, - 16314514159, 16314645247, 16314776327, 16314907417, 16315038527, 16315169609, 16315300681, - 16315431757, 16315562833, 16315693913, 16315825003, 16315956103, 16316087219, 16316218297, - 16316349391, 16316480501, 16316611607, 16316742751, 16316873849, 16317004939, 16317136021, - 16317267133, 16317398221, 16317529297, 16317660379, 16317791459, 16317922567, 16318053643, - 16318184717, 16318315801, 16318446883, 16318577969, 16318709059, 16318840171, 16318971257, - 16319102329, 16319233409, 16319364493, 16319495573, 16319626657, 16319757781, 16319888863, - 16320019943, 16320151019, 16320282091, 16320413279, 16320544417, 16320675517, 16320806617, - 16320937693, 16321068769, 16321199857, 16321330931, 16321462007, 16321593157, 16321724231, - 16321855321, 16321986413, 16322117491, 16322248639, 16322379713, 16322510791, 16322641877, - 16322772979, 16322904139, 16323035273, 16323166357, 16323297451, 16323428551, 16323559639, - 16323690731, 16323821819, 16323952903, 16324084033, 16324215107, 16324346191, 16324477297, - 16324608379, 16324739467, 16324870561, 16325001653, 16325132731, 16325263807, 16325394889, - 16325525977, 16325657059, 16325788139, 16325919229, 16326050339, 16326181411, 16326312511, - 16326443587, 16326574721, 16326705839, 16326836921, 16326968017, 16327099091, 16327230197, - 16327361269, 16327492369, 16327623449, 16327754537, 16327885649, 16328016721, 16328147809, - 16328278913, 16328409989, 16328541079, 16328672153, 16328803237, 16328934311, 16329065461, - 16329196553, 16329327631, 16329458729, 16329589811, 16329720917, 16329852031, 16329983129, - 16330114211, 16330245289, 16330376369, 16330507451, 16330638539, 16330769617, 16330900709, - 16331031823, 16331162933, 16331294011, 16331425111, 16331556221, 16331687321, 16331818457, - 16331949541, 16332080617, 16332211697, 16332342809, 16332473897, 16332604969, 16332736073, - 16332867149, 16332998221, 16333129301, 16333260379, 16333391471, 16333522589, 16333653671, - 16333784749, 16333915867, 16334046941, 16334178079, 16334309213, 16334440289, 16334571401, - 16334702473, 16334833573, 16334964781, 16335095869, 16335226969, 16335358051, 16335489127, - 16335620239, 16335751321, 16335882413, 16336013489, 16336144597, 16336275671, 16336406783, - 16336537891, 16336668967, 16336800071, 16336931153, 16337062297, 16337193391, 16337324467, - 16337455543, 16337586647, 16337717729, 16337848817, 16337979899, 16338110981, 16338242059, - 16338373159, 16338504257, 16338635347, 16338766439, 16338897529, 16339028603, 16339159699, - 16339290839, 16339421957, 16339553033, 16339684129, 16339815209, 16339946323, 16340077433, - 16340208541, 16340339621, 16340470693, 16340601779, 16340732851, 16340863951, 16340995061, - 16341126143, 16341257269, 16341388423, 16341519529, 16341650609, 16341781691, 16341912859, - 16342043933, 16342175029, 16342306117, 16342437239, 16342568321, 16342699397, 16342830479, - 16342961561, 16343092637, 16343223709, 16343354801, 16343485883, 16343616983, 16343748067, - 16343879161, 16344010283, 16344141361, 16344272519, 16344403591, 16344534671, 16344665783, - 16344796859, 16344927953, 16345059047, 16345190119, 16345321199, 16345452311, 16345583383, - 16345714547, 16345845619, 16345976723, 16346107807, 16346238949, 16346370067, 16346501161, - 16346632259, 16346763359, 16346894441, 16347025523, 16347156629, 16347287701, 16347418781, - 16347549887, 16347680989, 16347812071, 16347943181, 16348074277, 16348205371, 16348336457, - 16348467529, 16348598627, 16348729723, 16348860797, 16348991881, 16349122963, 16349254037, - 16349385119, 16349516231, 16349647361, 16349778443, 16349909519, 16350040601, 16350171737, - 16350302867, 16350433951, 16350565027, 16350696119, 16350827191, 16350958279, 16351089353, - 16351220441, 16351351517, 16351482613, 16351613699, 16351744789, 16351875863, 16352006953, - 16352138039, 16352269127, 16352400221, 16352531357, 16352662441, 16352793521, 16352924641, - 16353055727, 16353186809, 16353317887, 16353448961, 16353580039, 16353711131, 16353842221, - 16353973297, 16354104373, 16354235449, 16354366547, 16354497623, 16354628701, 16354759777, - 16354890869, 16355021987, 16355153081, 16355284171, 16355415269, 16355546357, 16355677447, - 16355808541, 16355939617, 16356070733, 16356201821, 16356332897, 16356463993, 16356595081, - 16356726163, 16356857243, 16356988321, 16357119491, 16357250563, 16357381639, 16357512719, - 16357643833, 16357774919, 16357906007, 16358037079, 16358168159, 16358299247, 16358430379, - 16358561467, 16358692547, 16358823647, 16358954737, 16359085829, 16359216911, 16359347987, - 16359479107, 16359610213, 16359741331, 16359872483, 16360003571, 16360134653, 16360265731, - 16360396807, 16360527913, 16360658989, 16360790063, 16360921141, 16361052221, 16361183297, - 16361314391, 16361445479, 16361576579, 16361707657, 16361838749, 16361969867, 16362100969, - 16362232057, 16362363137, 16362494263, 16362625337, 16362756427, 16362887591, 16363018681, - 16363149779, 16363280881, 16363411979, 16363543057, 16363674137, 16363805219, 16363936291, - 16364067373, 16364198491, 16364329571, 16364460643, 16364591717, 16364722799, 16364853929, - 16364985031, 16365116143, 16365247229, 16365378307, 16365509387, 16365640493, 16365771607, - 16365902687, 16366033759, 16366164833, 16366295971, 16366427087, 16366558183, 16366689359, - 16366820443, 16366951529, 16367082629, 16367213783, 16367344867, 16367475959, 16367607101, - 16367738183, 16367869279, 16368000373, 16368131459, 16368262531, 16368393623, 16368524699, - 16368655777, 16368786851, 16368917927, 16369048999, 16369180097, 16369311263, 16369442347, - 16369573447, 16369704523, 16369835597, 16369966673, 16370097761, 16370228839, 16370359913, - 16370491009, 16370622083, 16370753233, 16370884307, 16371015379, 16371146509, 16371277583, - 16371408701, 16371539773, 16371670849, 16371801923, 16371933119, 16372064239, 16372195327, - 16372326409, 16372457483, 16372588577, 16372719661, 16372850737, 16372981829, 16373112919, - 16373244001, 16373375113, 16373506301, 16373637403, 16373768479, 16373899603, 16374030683, - 16374161821, 16374292897, 16374423973, 16374555047, 16374686147, 16374817223, 16374948307, - 16375079387, 16375210463, 16375341569, 16375472651, 16375603771, 16375734887, 16375866019, - 16375997117, 16376128199, 16376259283, 16376390357, 16376521457, 16376652569, 16376783641, - 16376914727, 16377045799, 16377176941, 16377308021, 16377439121, 16377570197, 16377701269, - 16377832379, 16377963451, 16378094531, 16378225607, 16378356689, 16378487767, 16378618853, - 16378749931, 16378881017, 16379012101, 16379143199, 16379274271, 16379405381, 16379536477, - 16379667593, 16379798737, 16379929829, 16380060901, 16380191977, 16380323081, 16380454177, - 16380585259, 16380716351, 16380847453, 16380978617, 16381109707, 16381240781, 16381371863, - 16381502947, 16381634023, 16381765109, 16381896227, 16382027323, 16382158421, 16382289529, - 16382420623, 16382551709, 16382682821, 16382813903, 16382945021, 16383076109, 16383207193, - 16383338269, 16383469363, 16383600473, 16383731549, 16383862637, 16383993709, 16384124803, - 16384255891, 16384387009, 16384518097, 16384649191, 16384780277, 16384911377, 16385042461, - 16385173577, 16385304697, 16385435789, 16385566913, 16385698027, 16385829101, 16385960177, - 16386091277, 16386222353, 16386353443, 16386484523, 16386615599, 16386746683, 16386877777, - 16387008887, 16387139959, 16387271039, 16387402121, 16387533199, 16387664281, 16387795381, - 16387926487, 16388057603, 16388188711, 16388319791, 16388450909, 16388581997, 16388713079, - 16388844181, 16388975263, 16389106351, 16389237427, 16389368503, 16389499639, 16389630713, - 16389761789, 16389892873, 16390023961, 16390155059, 16390286131, 16390417223, 16390548319, - 16390679399, 16390810487, 16390941569, 16391072647, 16391203723, 16391334797, 16391465989, - 16391597071, 16391728189, 16391859271, 16391990347, 16392121477, 16392252589, 16392383713, - 16392514813, 16392645901, 16392776977, 16392908057, 16393039141, 16393170217, 16393301299, - 16393432379, 16393563457, 16393694531, 16393825603, 16393956727, 16394087807, 16394218891, - 16394349971, 16394481053, 16394612153, 16394743231, 16394874347, 16395005443, 16395136523, - 16395267601, 16395398711, 16395529819, 16395660913, 16395792011, 16395923087, 16396054177, - 16396185259, 16396316341, 16396447517, 16396578593, 16396709669, 16396840769, 16396971881, - 16397102959, 16397234047, 16397365129, 16397496209, 16397627293, 16397758387, 16397889463, - 16398020581, 16398151657, 16398282767, 16398413951, 16398545039, 16398676163, 16398807289, - 16398938363, 16399069447, 16399200577, 16399331657, 16399462741, 16399593817, 16399724897, - 16399855973, 16399987081, 16400118179, 16400249279, 16400380363, 16400511437, 16400642537, - 16400773639, 16400904743, 16401035887, 16401167009, 16401298093, 16401429193, 16401560317, - 16401691393, 16401822467, 16401953543, 16402084631, 16402215737, 16402346833, 16402477913, - 16402608991, 16402740089, 16402871201, 16403002283, 16403133421, 16403264497, 16403395621, - 16403526703, 16403657779, 16403788867, 16403919943, 16404051031, 16404182141, 16404313223, - 16404444299, 16404575371, 16404706463, 16404837587, 16404968663, 16405099741, 16405230817, - 16405361893, 16405492991, 16405624073, 16405755251, 16405886327, 16406017409, 16406148497, - 16406279587, 16406410679, 16406541757, 16406672861, 16406803961, 16406935067, 16407066139, - 16407197273, 16407328361, 16407459449, 16407590527, 16407721661, 16407852761, 16407983849, - 16408114939, 16408246037, 16408377121, 16408508261, 16408639339, 16408770431, 16408901513, - 16409032603, 16409163679, 16409294771, 16409425843, 16409556937, 16409688017, 16409819113, - 16409950199, 16410081313, 16410212389, 16410343463, 16410474559, 16410605633, 16410736709, - 16410867821, 16410998897, 16411129981, 16411261063, 16411392163, 16411523269, 16411654349, - 16411785427, 16411916509, 16412047609, 16412178683, 16412309773, 16412440879, 16412571971, - 16412703049, 16412834143, 16412965223, 16413096319, 16413227393, 16413358469, 16413489551, - 16413620627, 16413751721, 16413882799, 16414013887, 16414144991, 16414276133, 16414407257, - 16414538353, 16414669429, 16414800527, 16414931629, 16415062721, 16415193853, 16415324927, - 16415455999, 16415587091, 16415718181, 16415849257, 16415980333, 16416111407, 16416242501, - 16416373591, 16416504691, 16416635789, 16416766913, 16416898007, 16417029091, 16417160173, - 16417291277, 16417422349, 16417553423, 16417684541, 16417815619, 16417946729, 16418077801, - 16418208889, 16418339969, 16418471059, 16418602133, 16418733211, 16418864291, 16418995367, - 16419126481, 16419257573, 16419388651, 16419519757, 16419650861, 16419781943, 16419913019, - 16420044097, 16420175179, 16420306267, 16420437347, 16420568443, 16420699571, 16420830661, - 16420961797, 16421092921, 16421224021, 16421355109, 16421486201, 16421617273, 16421748353, - 16421879443, 16422010519, 16422141607, 16422272683, 16422403759, 16422534833, 16422665911, - 16422797033, 16422928121, 16423059199, 16423190279, 16423321367, 16423452439, 16423583537, - 16423714651, 16423845731, 16423976813, 16424107897, 16424238977, 16424370049, 16424501141, - 16424632243, 16424763323, 16424894407, 16425025483, 16425156593, 16425287687, 16425418777, - 16425549863, 16425680963, 16425812057, 16425943129, 16426074233, 16426205329, 16426336429, - 16426467529, 16426598609, 16426729681, 16426860763, 16426991837, 16427122937, 16427254013, - 16427385109, 16427516191, 16427647267, 16427778349, 16427909423, 16428040511, 16428171601, - 16428302689, 16428433781, 16428564857, 16428695947, 16428827027, 16428958109, 16429089181, - 16429220267, 16429351343, 16429482427, 16429613561, 16429744637, 16429875713, 16430006797, - 16430137873, 16430268979, 16430400053, 16430531141, 16430662223, 16430793299, 16430924383, - 16431055469, 16431186553, 16431317647, 16431448757, 16431579833, 16431710951, 16431842069, - 16431973141, 16432104257, 16432235357, 16432366439, 16432497511, 16432628617, 16432759703, - 16432890811, 16433021893, 16433152997, 16433284103, 16433415223, 16433546303, 16433677387, - 16433808463, 16433939539, 16434070657, 16434201739, 16434332821, 16434463897, 16434594973, - 16434726083, 16434857167, 16434988249, 16435119331, 16435250407, 16435381511, 16435512593, - 16435643687, 16435774781, 16435905907, 16436036989, 16436168071, 16436299157, 16436430247, - 16436561327, 16436692399, 16436823479, 16436954561, 16437085667, 16437216767, 16437347851, - 16437478933, 16437610019, 16437741097, 16437872179, 16438003261, 16438134341, 16438265429, - 16438396531, 16438527613, 16438658689, 16438789769, 16438920857, 16439051939, 16439183017, - 16439314093, 16439445181, 16439576269, 16439707367, 16439838463, 16439969573, 16440100657, - 16440231749, 16440362837, 16440493919, 16440624997, 16440756089, 16440887167, 16441018247, - 16441149341, 16441280423, 16441411513, 16441542599, 16441673707, 16441804781, 16441935859, - 16442066957, 16442198029, 16442329109, 16442460187, 16442591273, 16442722381, 16442853457, - 16442984531, 16443115609, 16443246683, 16443377779, 16443508951, 16443640051, 16443771143, - 16443902221, 16444033301, 16444164391, 16444295471, 16444426573, 16444557673, 16444688749, - 16444819823, 16444950913, 16445081993, 16445213069, 16445344159, 16445475253, 16445606363, - 16445737439, 16445868553, 16445999629, 16446130711, 16446261869, 16446392969, 16446524057, - 16446655129, 16446786229, 16446917321, 16447048411, 16447179491, 16447310609, 16447441693, - 16447572781, 16447703861, 16447834943, 16447966033, 16448097121, 16448228221, 16448359321, - 16448490433, 16448621509, 16448752589, 16448883679, 16449014773, 16449145847, 16449276931, - 16449408007, 16449539081, 16449670157, 16449801229, 16449932311, 16450063391, 16450194463, - 16450325539, 16450456619, 16450587697, 16450718807, 16450849879, 16450980967, 16451112053, - 16451243161, 16451374273, 16451505347, 16451636429, 16451767513, 16451898611, 16452029717, - 16452160799, 16452291871, 16452422947, 16452554029, 16452685133, 16452816253, 16452947333, - 16453078409, 16453209481, 16453340569, 16453471669, 16453602761, 16453733837, 16453864927, - 16453996001, 16454127077, 16454258189, 16454389261, 16454520361, 16454651443, 16454782549, - 16454913661, 16455044759, 16455175831, 16455307003, 16455438137, 16455569231, 16455700321, - 16455831409, 16455962483, 16456093603, 16456224679, 16456355777, 16456486903, 16456618019, - 16456749121, 16456880197, 16457011273, 16457142379, 16457273477, 16457404609, 16457535701, - 16457666777, 16457797879, 16457929001, 16458060103, 16458191203, 16458322289, 16458453379, - 16458584489, 16458715571, 16458846659, 16458977741, 16459108817, 16459239889, 16459370971, - 16459502057, 16459633133, 16459764221, 16459895297, 16460026381, 16460157481, 16460288569, - 16460419681, 16460550773, 16460681857, 16460812939, 16460944043, 16461075131, 16461206231, - 16461337331, 16461468403, 16461599519, 16461730601, 16461861673, 16461992783, 16462123903, - 16462255079, 16462386151, 16462517231, 16462648303, 16462779397, 16462910473, 16463041561, - 16463172637, 16463303723, 16463434807, 16463565883, 16463697017, 16463828153, 16463959277, - 16464090367, 16464221441, 16464352571, 16464483643, 16464614717, 16464745789, 16464876881, - 16465007983, 16465139059, 16465270163, 16465401263, 16465532339, 16465663439, 16465794511, - 16465925617, 16466056721, 16466187827, 16466318941, 16466450071, 16466581181, 16466712259, - 16466843357, 16466974439, 16467105511, 16467236629, 16467367729, 16467498829, 16467629909, - 16467761017, 16467892109, 16468023191, 16468154291, 16468285367, 16468416457, 16468547549, - 16468678631, 16468809703, 16468940779, 16469071867, 16469202949, 16469334031, 16469465113, - 16469596193, 16469727271, 16469858347, 16469989421, 16470120503, 16470251663, 16470382771, - 16470513847, 16470644921, 16470776017, 16470907109, 16471038211, 16471169311, 16471300387, - 16471431481, 16471562573, 16471693657, 16471824749, 16471955869, 16472086951, 16472218073, - 16472349149, 16472480221, 16472611313, 16472742389, 16472873467, 16473004567, 16473135661, - 16473266737, 16473397813, 16473528893, 16473659977, 16473791053, 16473922151, 16474053223, - 16474184323, 16474315471, 16474446553, 16474577653, 16474708729, 16474839841, 16474970921, - 16475102057, 16475233133, 16475364247, 16475495329, 16475626411, 16475757511, 16475888593, - 16476019667, 16476150767, 16476281849, 16476412933, 16476544027, 16476675101, 16476806189, - 16476937261, 16477068341, 16477199429, 16477330523, 16477461607, 16477592683, 16477723813, - 16477854931, 16477986061, 16478117143, 16478248229, 16478379319, 16478510401, 16478641477, - 16478772553, 16478903663, 16479034739, 16479165811, 16479296891, 16479427967, 16479559039, - 16479690121, 16479821207, 16479952327, 16480083401, 16480214501, 16480345589, 16480476679, - 16480607777, 16480738873, 16480869989, 16481001077, 16481132167, 16481263247, 16481394329, - 16481525407, 16481656481, 16481787583, 16481918671, 16482049777, 16482180863, 16482311941, - 16482443093, 16482574169, 16482705247, 16482836323, 16482967399, 16483098521, 16483229647, - 16483360727, 16483491853, 16483622927, 16483754017, 16483885091, 16484016191, 16484147269, - 16484278399, 16484409479, 16484540561, 16484671699, 16484802773, 16484933849, 16485064927, - 16485196009, 16485327101, 16485458177, 16485589277, 16485720379, 16485851471, 16485982613, - 16486113701, 16486244809, 16486375897, 16486506991, 16486638083, 16486769171, 16486900289, - 16487031371, 16487162443, 16487293531, 16487424631, 16487555713, 16487686799, 16487817889, - 16487948963, 16488080039, 16488211133, 16488342239, 16488473327, 16488604411, 16488735511, - 16488866587, 16488997673, 16489128751, 16489259833, 16489390913, 16489521989, 16489653071, - 16489784147, 16489915231, 16490046317, 16490177399, 16490308477, 16490439601, 16490570693, - 16490701771, 16490832857, 16490963981, 16491095063, 16491226139, 16491357241, 16491488323, - 16491619423, 16491750503, 16491881579, 16492012687, 16492143781, 16492274893, 16492405987, - 16492537079, 16492668161, 16492799233, 16492930309, 16493061383, 16493192461, 16493323541, - 16493454617, 16493585737, 16493716817, 16493847919, 16493979041, 16494110119, 16494241213, - 16494372289, 16494503369, 16494634459, 16494765533, 16494896611, 16495027687, 16495158761, - 16495289893, 16495420979, 16495552061, 16495683157, 16495814339, 16495945423, 16496076511, - 16496207597, 16496338673, 16496469757, 16496600839, 16496731913, 16496863021, 16496994103, - 16497125179, 16497256277, 16497387373, 16497518447, 16497649523, 16497780619, 16497911699, - 16498042777, 16498173869, 16498304947, 16498436047, 16498567153, 16498698329, 16498829441, - 16498960559, 16499091659, 16499222767, 16499353841, 16499484943, 16499616037, 16499747123, - 16499878211, 16500009293, 16500140387, 16500271483, 16500402601, 16500533677, 16500664753, - 16500795851, 16500926929, 16501058011, 16501189087, 16501320211, 16501451371, 16501582451, - 16501713577, 16501844719, 16501975793, 16502106883, 16502237959, 16502369069, 16502500169, - 16502631269, 16502762347, 16502893423, 16503024497, 16503155579, 16503286693, 16503417767, - 16503548879, 16503679957, 16503811061, 16503942139, 16504073213, 16504204303, 16504335461, - 16504466551, 16504597631, 16504728731, 16504859803, 16504990883, 16505121961, 16505253041, - 16505384123, 16505515199, 16505646301, 16505777419, 16505908493, 16506039587, 16506170683, - 16506301811, 16506432883, 16506563981, 16506695059, 16506826159, 16506957281, 16507088359, - 16507219447, 16507350551, 16507481629, 16507612729, 16507743827, 16507874917, 16508005991, - 16508137097, 16508268181, 16508399269, 16508530387, 16508661469, 16508792549, 16508923637, - 16509054767, 16509185897, 16509316969, 16509448057, 16509579131, 16509710209, 16509841291, - 16509972371, 16510103483, 16510234561, 16510365653, 16510496729, 16510627801, 16510758907, - 16510889999, 16511021113, 16511152201, 16511283277, 16511414351, 16511545439, 16511676523, - 16511807621, 16511938711, 16512069787, 16512200893, 16512331981, 16512463081, 16512594169, - 16512725249, 16512856337, 16512987461, 16513118593, 16513249673, 16513380749, 16513511831, - 16513642907, 16513773989, 16513905097, 16514036173, 16514167273, 16514298347, 16514429419, - 16514560499, 16514691581, 16514822657, 16514953747, 16515084821, 16515215897, 16515346979, - 16515478051, 16515609181, 16515740257, 16515871447, 16516002533, 16516133611, 16516264717, - 16516395811, 16516526951, 16516658071, 16516789151, 16516920227, 16517051303, 16517182393, - 16517313479, 16517444551, 16517575643, 16517706721, 16517837839, 16517968919, 16518099991, - 16518231089, 16518362191, 16518493291, 16518624383, 16518755459, 16518886543, 16519017653, - 16519148813, 16519279937, 16519411019, 16519542119, 16519673201, 16519804373, 16519935451, - 16520066551, 16520197633, 16520328707, 16520459779, 16520590859, 16520721949, 16520853029, - 16520984113, 16521115243, 16521246317, 16521377399, 16521508519, 16521639593, 16521770669, - 16521901771, 16522032853, 16522163981, 16522295089, 16522426181, 16522557277, 16522688389, - 16522819519, 16522950761, 16523081837, 16523212933, 16523344037, 16523475113, 16523606201, - 16523737289, 16523868371, 16523999467, 16524130547, 16524261619, 16524392699, 16524523777, - 16524654859, 16524785957, 16524917029, 16525048109, 16525179257, 16525310339, 16525441411, - 16525572527, 16525703609, 16525834709, 16525965803, 16526096891, 16526227967, 16526359081, - 16526490193, 16526621269, 16526752343, 16526883419, 16527014503, 16527145603, 16527276719, - 16527407807, 16527538883, 16527669979, 16527801071, 16527932143, 16528063217, 16528194301, - 16528325381, 16528456471, 16528587577, 16528718651, 16528849723, 16528980841, 16529111927, - 16529243009, 16529374109, 16529505227, 16529636303, 16529767379, 16529898457, 16530029531, - 16530160643, 16530291731, 16530422803, 16530553889, 16530684971, 16530816047, 16530947141, - 16531078217, 16531209319, 16531340407, 16531471501, 16531602599, 16531733749, 16531864823, - 16531995919, 16532127019, 16532258167, 16532389241, 16532520343, 16532651417, 16532782499, - 16532913641, 16533044719, 16533175811, 16533306883, 16533437971, 16533569069, 16533700147, - 16533831227, 16533962303, 16534093403, 16534224481, 16534355623, 16534486711, 16534617791, - 16534748863, 16534879973, 16535011057, 16535142133, 16535273207, 16535404351, 16535535427, - 16535666501, 16535797573, 16535928671, 16536059759, 16536190831, 16536321929, 16536453023, - 16536584101, 16536715187, 16536846281, 16536977363, 16537108459, 16537239553, 16537370711, - 16537501811, 16537632883, 16537763981, 16537895071, 16538026157, 16538157239, 16538288339, - 16538419439, 16538550527, 16538681611, 16538812777, 16538943857, 16539074933, 16539206009, - 16539337097, 16539468173, 16539599267, 16539730351, 16539861433, 16539992531, 16540123603, - 16540254677, 16540385789, 16540516871, 16540647967, 16540779053, 16540910213, 16541041301, - 16541172413, 16541303489, 16541434597, 16541565671, 16541696753, 16541827889, 16541958967, - 16542090043, 16542221149, 16542352243, 16542483337, 16542614443, 16542745517, 16542876593, - 16543007707, 16543138789, 16543269863, 16543400957, 16543532039, 16543663141, 16543794217, - 16543925291, 16544056363, 16544187461, 16544318569, 16544449703, 16544580781, 16544711857, - 16544842943, 16544974049, 16545105151, 16545236261, 16545367343, 16545498439, 16545629561, - 16545760661, 16545891749, 16546022821, 16546153903, 16546284991, 16546416079, 16546547153, - 16546678261, 16546809337, 16546940411, 16547071483, 16547202559, 16547333657, 16547464753, - 16547595833, 16547726927, 16547858009, 16547989097, 16548120181, 16548251273, 16548382373, - 16548513451, 16548644569, 16548775651, 16548906743, 16549037837, 16549168921, 16549300007, - 16549431083, 16549562179, 16549693289, 16549824367, 16549955449, 16550086523, 16550217599, - 16550348687, 16550479769, 16550610887, 16550741983, 16550873057, 16551004147, 16551135269, - 16551266357, 16551397433, 16551528541, 16551659653, 16551790729, 16551921847, 16552053031, - 16552184107, 16552315189, 16552446263, 16552577389, 16552708483, 16552839587, 16552970723, - 16553101811, 16553232889, 16553363963, 16553495059, 16553626183, 16553757313, 16553888399, - 16554019549, 16554150623, 16554281699, 16554412793, 16554543869, 16554674947, 16554806041, - 16554937117, 16555068203, 16555199321, 16555330403, 16555461491, 16555592569, 16555723661, - 16555854739, 16555985867, 16556116957, 16556248039, 16556379131, 16556510207, 16556641303, - 16556772377, 16556903477, 16557034561, 16557165659, 16557296771, 16557427879, 16557558967, - 16557690047, 16557821129, 16557952217, 16558083299, 16558214447, 16558345547, 16558476619, - 16558607707, 16558738843, 16558869919, 16559001001, 16559132077, 16559263169, 16559394259, - 16559525351, 16559656433, 16559787571, 16559918651, 16560049733, 16560180817, 16560311899, - 16560442991, 16560574073, 16560705181, 16560836321, 16560967441, 16561098517, 16561229591, - 16561360663, 16561491763, 16561622837, 16561753909, 16561885003, 16562016103, 16562147191, - 16562278331, 16562409431, 16562540507, 16562671591, 16562802689, 16562933767, 16563064853, - 16563195991, 16563327073, 16563458179, 16563589313, 16563720409, 16563851509, 16563982609, - 16564113703, 16564244777, 16564375853, 16564506929, 16564638047, 16564769147, 16564900229, - 16565031323, 16565162459, 16565293543, 16565424637, 16565555723, 16565686831, 16565817941, - 16565949031, 16566080131, 16566211217, 16566342301, 16566473401, 16566604501, 16566735583, - 16566866677, 16566997751, 16567128863, 16567259939, 16567391033, 16567522129, 16567653211, - 16567784329, 16567915421, 16568046529, 16568177603, 16568308721, 16568439799, 16568570891, - 16568701973, 16568833109, 16568964211, 16569095287, 16569226361, 16569357433, 16569488513, - 16569619601, 16569750707, 16569881813, 16570012951, 16570144067, 16570275187, 16570406263, - 16570537337, 16570668419, 16570799503, 16570930601, 16571061743, 16571192821, 16571323897, - 16571454997, 16571586139, 16571717219, 16571848291, 16571979371, 16572110453, 16572241573, - 16572372647, 16572503719, 16572634831, 16572765919, 16572897013, 16573028107, 16573159181, - 16573290257, 16573421341, 16573552423, 16573683559, 16573814657, 16573945747, 16574076881, - 16574207957, 16574339029, 16574470109, 16574601181, 16574732329, 16574863421, 16574994493, - 16575125573, 16575256657, 16575387733, 16575518807, 16575649897, 16575780971, 16575912047, - 16576043119, 16576174193, 16576305283, 16576436417, 16576567493, 16576698583, 16576829677, - 16576960759, 16577091889, 16577222993, 16577354111, 16577485241, 16577616329, 16577747447, - 16577878519, 16578009653, 16578140731, 16578271811, 16578402889, 16578533963, 16578665069, - 16578796211, 16578927311, 16579058387, 16579189469, 16579320581, 16579451657, 16579582751, - 16579713827, 16579844933, 16579976011, 16580107091, 16580238197, 16580369327, 16580500411, - 16580631493, 16580762587, 16580893687, 16581024781, 16581155869, 16581286949, 16581418093, - 16581549167, 16581680243, 16581811327, 16581942427, 16582073551, 16582204631, 16582335779, - 16582466861, 16582597949, 16582729043, 16582860121, 16582991197, 16583122289, 16583253361, - 16583384501, 16583515607, 16583646763, 16583777869, 16583908973, 16584040061, 16584171133, - 16584302243, 16584433379, 16584564487, 16584695563, 16584826651, 16584957731, 16585088831, - 16585219913, 16585350989, 16585482079, 16585613153, 16585744247, 16585875343, 16586006419, - 16586137493, 16586268571, 16586399663, 16586530747, 16586661827, 16586792899, 16586924041, - 16587055141, 16587186221, 16587317293, 16587448399, 16587579487, 16587710567, 16587841639, - 16587972757, 16588103893, 16588234997, 16588366087, 16588497169, 16588628257, 16588759331, - 16588890419, 16589021503, 16589152577, 16589283677, 16589414773, 16589545849, 16589676949, - 16589808031, 16589939111, 16590070183, 16590201283, 16590332411, 16590463507, 16590594707, - 16590725783, 16590856873, 16590987971, 16591119047, 16591250173, 16591381259, 16591512331, - 16591643447, 16591774547, 16591905677, 16592036753, 16592167831, 16592298917, 16592430007, - 16592561131, 16592692211, 16592823301, 16592954387, 16593085471, 16593216547, 16593347647, - 16593478757, 16593609833, 16593740921, 16593872011, 16594003091, 16594134187, 16594265263, - 16594396349, 16594527421, 16594658519, 16594789597, 16594920689, 16595051777, 16595182883, - 16595313971, 16595445089, 16595576167, 16595707267, 16595838353, 16595969441, 16596100559, - 16596231661, 16596362743, 16596493841, 16596624923, 16596756013, 16596887093, 16597018177, - 16597149269, 16597280341, 16597411417, 16597542499, 16597673591, 16597804721, 16597935799, - 16598066893, 16598197999, 16598329081, 16598460157, 16598591231, 16598722321, 16598853407, - 16598984489, 16599115627, 16599246733, 16599377819, 16599508901, 16599640009, 16599771107, - 16599902203, 16600033319, 16600164407, 16600295479, 16600426553, 16600557637, 16600688711, - 16600819847, 16600950953, 16601082031, 16601213137, 16601344247, 16601475323, 16601606401, - 16601737487, 16601868593, 16601999707, 16602130789, 16602261869, 16602392959, 16602524039, - 16602655117, 16602786191, 16602917299, 16603048393, 16603179493, 16603310609, 16603441681, - 16603572809, 16603703899, 16603834991, 16603966091, 16604097163, 16604228261, 16604359333, - 16604490433, 16604621519, 16604752639, 16604883719, 16605014807, 16605145891, 16605276977, - 16605408089, 16605539213, 16605670339, 16605801437, 16605932543, 16606063627, 16606194707, - 16606325779, 16606456859, 16606587931, 16606719011, 16606850083, 16606981159, 16607112239, - 16607243321, 16607374393, 16607505491, 16607636621, 16607767697, 16607898781, 16608029857, - 16608160939, 16608292049, 16608423191, 16608554279, 16608685351, 16608816439, 16608947543, - 16609078643, 16609209767, 16609340843, 16609471933, 16609603009, 16609734133, 16609865267, - 16609996343, 16610127437, 16610258543, 16610389673, 16610520761, 16610651833, 16610782913, - 16610914037, 16611045181, 16611176261, 16611307333, 16611438449, 16611569537, 16611700631, - 16611831703, 16611962791, 16612093909, 16612224997, 16612356077, 16612487167, 16612618247, - 16612749319, 16612880441, 16613011531, 16613142619, 16613273717, 16613404799, 16613535877, - 16613666963, 16613798041, 16613929117, 16614060191, 16614191291, 16614322363, 16614453437, - 16614584527, 16614715613, 16614846701, 16614977789, 16615108921, 16615240009, 16615371109, - 16615502203, 16615633313, 16615764409, 16615895519, 16616026601, 16616157703, 16616288783, - 16616419877, 16616550949, 16616682037, 16616813113, 16616944193, 16617075287, 16617206363, - 16617337439, 16617468521, 16617599627, 16617730729, 16617861847, 16617992929, 16618124009, - 16618255097, 16618386179, 16618517261, 16618648363, 16618779439, 16618910531, 16619041613, - 16619172793, 16619303929, 16619435081, 16619566157, 16619697247, 16619828321, 16619959429, - 16620090503, 16620221587, 16620352699, 16620483787, 16620614903, 16620746027, 16620877123, - 16621008241, 16621139317, 16621270409, 16621401487, 16621532561, 16621663687, 16621794769, - 16621925849, 16622057027, 16622188139, 16622319221, 16622450293, 16622581379, 16622712497, - 16622843597, 16622974699, 16623105787, 16623236863, 16623367939, 16623499027, 16623630109, - 16623761207, 16623892361, 16624023443, 16624154549, 16624285637, 16624416727, 16624547837, - 16624678933, 16624810049, 16624941133, 16625072231, 16625203307, 16625334449, 16625465599, - 16625596681, 16625727761, 16625858861, 16625990011, 16626121093, 16626252173, 16626383273, - 16626514391, 16626645523, 16626776641, 16626907741, 16627038863, 16627169963, 16627301113, - 16627432189, 16627563283, 16627694389, 16627825507, 16627956599, 16628087681, 16628218757, - 16628349847, 16628481007, 16628612081, 16628743249, 16628874323, 16629005417, 16629136493, - 16629267569, 16629398641, 16629529717, 16629660847, 16629791923, 16629922997, 16630054073, - 16630185151, 16630316231, 16630447349, 16630578427, 16630709509, 16630840601, 16630971673, - 16631102753, 16631233837, 16631364923, 16631496023, 16631627137, 16631758217, 16631889299, - 16632020393, 16632151493, 16632282577, 16632413669, 16632544741, 16632675817, 16632806893, - 16632937967, 16633069069, 16633200151, 16633331237, 16633462309, 16633593401, 16633724473, - 16633855549, 16633986641, 16634117723, 16634248811, 16634379893, 16634510987, 16634642071, - 16634773147, 16634904229, 16635035321, 16635166397, 16635297587, 16635428737, 16635559847, - 16635690923, 16635821999, 16635953077, 16636084183, 16636215257, 16636346341, 16636477427, - 16636608517, 16636739611, 16636870717, 16637001791, 16637132867, 16637263939, 16637395037, - 16637526109, 16637657297, 16637788393, 16637919503, 16638050609, 16638181723, 16638312827, - 16638443903, 16638574999, 16638706111, 16638837199, 16638968309, 16639099409, 16639230497, - 16639361573, 16639492663, 16639623751, 16639754827, 16639885909, 16640016997, 16640148079, - 16640279179, 16640410253, 16640541343, 16640672537, 16640803633, 16640934733, 16641065807, - 16641196883, 16641327991, 16641459067, 16641590167, 16641721259, 16641852349, 16641983447, - 16642114547, 16642245629, 16642376701, 16642507801, 16642638899, 16642769971, 16642901063, - 16643032141, 16643163241, 16643294341, 16643425429, 16643556541, 16643687653, 16643818727, - 16643949799, 16644080899, 16644212003, 16644343087, 16644474173, 16644605267, 16644736379, - 16644867469, 16644998551, 16645129637, 16645260721, 16645391803, 16645522897, 16645653971, - 16645785049, 16645916123, 16646047219, 16646178317, 16646309411, 16646440501, 16646571589, - 16646702707, 16646833783, 16646964871, 16647095951, 16647227029, 16647358111, 16647489251, - 16647620329, 16647751403, 16647882497, 16648013593, 16648144673, 16648275767, 16648406939, - 16648538083, 16648669159, 16648800239, 16648931311, 16649062403, 16649193481, 16649324557, - 16649455643, 16649586731, 16649717831, 16649848937, 16649980019, 16650111119, 16650242209, - 16650373297, 16650504371, 16650635461, 16650766541, 16650897617, 16651028699, 16651159771, - 16651290857, 16651421959, 16651553053, 16651684163, 16651815253, 16651946393, 16652077469, - 16652208583, 16652339663, 16652470739, 16652601817, 16652732903, 16652863999, 16652995091, - 16653126173, 16653257317, 16653388403, 16653519499, 16653650579, 16653781693, 16653912773, - 16654043881, 16654174961, 16654306103, 16654437181, 16654568269, 16654699343, 16654830463, - 16654961539, 16655092621, 16655223709, 16655354809, 16655485943, 16655617063, 16655748157, - 16655879267, 16656010339, 16656141413, 16656272491, 16656403601, 16656534677, 16656665759, - 16656796841, 16656927919, 16657058993, 16657190117, 16657321199, 16657452283, 16657583363, - 16657714453, 16657845571, 16657976663, 16658107757, 16658238853, 16658370083, 16658501213, - 16658632297, 16658763371, 16658894443, 16659025529, 16659156601, 16659287719, 16659418843, - 16659549919, 16659681019, 16659812173, 16659943249, 16660074337, 16660205431, 16660336529, - 16660467601, 16660598693, 16660729777, 16660860857, 16660991939, 16661123021, 16661254133, - 16661385217, 16661516303, 16661647403, 16661778479, 16661909587, 16662040691, 16662171791, - 16662302863, 16662433967, 16662565039, 16662696157, 16662827243, 16662958421, 16663089511, - 16663220593, 16663351667, 16663482761, 16663613839, 16663744931, 16663876003, 16664007079, - 16664138159, 16664269247, 16664400343, 16664531423, 16664662499, 16664793583, 16664924687, - 16665055763, 16665186847, 16665317927, 16665449051, 16665580123, 16665711203, 16665842287, - 16665973369, 16666104443, 16666235557, 16666366637, 16666497709, 16666628789, 16666759861, - 16666890941, 16667022049, 16667153123, 16667284201, 16667415283, 16667546359, 16667677441, - 16667808517, 16667939627, 16668070709, 16668201811, 16668332911, 16668463993, 16668595103, - 16668726187, 16668857269, 16668988351, 16669119427, 16669250501, 16669381601, 16669512689, - 16669643773, 16669774861, 16669905971, 16670037047, 16670168143, 16670299253, 16670430341, - 16670561443, 16670692547, 16670823629, 16670954717, 16671085789, 16671216883, 16671347969, - 16671479051, 16671610127, 16671741209, 16671872281, 16672003367, 16672134439, 16672265531, - 16672396627, 16672527701, 16672658773, 16672789871, 16672920959, 16673052031, 16673183171, - 16673314243, 16673445337, 16673576431, 16673707529, 16673838613, 16673969687, 16674100763, - 16674231883, 16674363001, 16674494093, 16674625189, 16674756271, 16674887353, 16675018453, - 16675149583, 16675280659, 16675411747, 16675542827, 16675673909, 16675805039, 16675936111, - 16676067253, 16676198333, 16676329493, 16676460589, 16676591717, 16676722801, 16676853877, - 16676984957, 16677116039, 16677247121, 16677378197, 16677509273, 16677640349, 16677771427, - 16677902503, 16678033577, 16678164707, 16678295797, 16678426871, 16678557947, 16678689029, - 16678820117, 16678951199, 16679082271, 16679213359, 16679344459, 16679475539, 16679606633, - 16679737709, 16679868811, 16679999899, 16680130979, 16680262069, 16680393157, 16680524243, - 16680655337, 16680786431, 16680917543, 16681048667, 16681179761, 16681310837, 16681441939, - 16681573019, 16681704103, 16681835179, 16681966271, 16682097353, 16682228447, 16682359559, - 16682490631, 16682621707, 16682752841, 16682883947, 16683015029, 16683146101, 16683277183, - 16683408319, 16683539429, 16683670547, 16683801623, 16683932701, 16684063783, 16684194869, - 16684325981, 16684457059, 16684588133, 16684719253, 16684850387, 16684981553, 16685112641, - 16685243723, 16685374813, 16685505887, 16685636977, 16685768053, 16685899129, 16686030239, - 16686161311, 16686292393, 16686423493, 16686554569, 16686685643, 16686816721, 16686947801, - 16687078873, 16687209989, 16687341089, 16687472189, 16687603307, 16687734379, 16687865459, - 16687996537, 16688127629, 16688258711, 16688389799, 16688520887, 16688651971, 16688783051, - 16688914129, 16689045259, 16689176341, 16689307471, 16689438553, 16689569641, 16689700801, - 16689831877, 16689962963, 16690094053, 16690225127, 16690356209, 16690487309, 16690618391, - 16690749499, 16690880587, 16691011663, 16691142799, 16691273899, 16691404997, 16691536097, - 16691667169, 16691798251, 16691929337, 16692060433, 16692191569, 16692322667, 16692453761, - 16692584833, 16692715927, 16692847007, 16692978091, 16693109171, 16693240261, 16693371347, - 16693502459, 16693633547, 16693764641, 16693895753, 16694026847, 16694157923, 16694288999, - 16694420089, 16694551169, 16694682241, 16694813347, 16694944439, 16695075599, 16695206681, - 16695337777, 16695468857, 16695599951, 16695731033, 16695862111, 16695993191, 16696124287, - 16696255369, 16696386461, 16696517533, 16696648607, 16696779683, 16696910773, 16697041847, - 16697172923, 16697304011, 16697435099, 16697566181, 16697697253, 16697828353, 16697959429, - 16698090517, 16698221621, 16698352721, 16698483833, 16698614927, 16698746017, 16698877123, - 16699008199, 16699139323, 16699270409, 16699401487, 16699532587, 16699663667, 16699794779, - 16699925881, 16700056963, 16700188061, 16700319161, 16700450269, 16700581349, 16700712437, - 16700843531, 16700974603, 16701105691, 16701236771, 16701367861, 16701498937, 16701630037, - 16701761137, 16701892217, 16702023307, 16702154387, 16702285459, 16702416539, 16702547627, - 16702678703, 16702809779, 16702940897, 16703071993, 16703203079, 16703334163, 16703465249, - 16703596333, 16703727413, 16703858527, 16703989639, 16704120767, 16704251843, 16704382927, - 16704514033, 16704645233, 16704776371, 16704907451, 16705038527, 16705169603, 16705300687, - 16705431773, 16705562851, 16705693993, 16705825067, 16705956161, 16706087249, 16706218357, - 16706349467, 16706480543, 16706611627, 16706742749, 16706873881, 16707004987, 16707136073, - 16707267149, 16707398287, 16707529409, 16707660509, 16707791623, 16707922717, 16708053793, - 16708184879, 16708315951, 16708447039, 16708578119, 16708709207, 16708840333, 16708971427, - 16709102503, 16709233579, 16709364673, 16709495773, 16709626853, 16709757931, 16709889011, - 16710020083, 16710151189, 16710282289, 16710413431, 16710544507, 16710675629, 16710806701, - 16710937777, 16711068851, 16711199933, 16711331027, 16711462099, 16711593191, 16711724269, - 16711855343, 16711986419, 16712117497, 16712248603, 16712379767, 16712510851, 16712641937, - 16712773009, 16712904083, 16713035179, 16713166271, 16713297443, 16713428531, 16713559633, - 16713690731, 16713821863, 16713952973, 16714084063, 16714215191, 16714346267, 16714477343, - 16714608431, 16714739543, 16714870643, 16715001731, 16715132821, 16715263907, 16715395033, - 16715526143, 16715657221, 16715788319, 16715919401, 16716050473, 16716181577, 16716312673, - 16716443767, 16716574841, 16716705919, 16716837019, 16716968101, 16717099199, 16717230281, - 16717361357, 16717492439, 16717623529, 16717754639, 16717885727, 16718016811, 16718147903, - 16718278979, 16718410063, 16718541143, 16718672221, 16718803303, 16718934413, 16719065507, - 16719196579, 16719327673, 16719458771, 16719589883, 16719720971, 16719852059, 16719983171, - 16720114267, 16720245389, 16720376461, 16720507553, 16720638637, 16720769711, 16720900799, - 16721031881, 16721162981, 16721294053, 16721425129, 16721556227, 16721687321, 16721818403, - 16721949487, 16722080567, 16722211651, 16722342743, 16722473849, 16722604967, 16722736039, - 16722867121, 16722998207, 16723129301, 16723260391, 16723391497, 16723522603, 16723653679, - 16723784767, 16723915841, 16724046991, 16724178109, 16724309191, 16724440297, 16724571421, - 16724702503, 16724833589, 16724964679, 16725095801, 16725226873, 16725357947, 16725489019, - 16725620111, 16725751201, 16725882289, 16726013399, 16726144471, 16726275551, 16726406623, - 16726537741, 16726668817, 16726799893, 16726930973, 16727062061, 16727193139, 16727324213, - 16727455313, 16727586397, 16727717509, 16727848633, 16727979707, 16728110779, 16728241867, - 16728372943, 16728504041, 16728635167, 16728766253, 16728897329, 16729028413, 16729159511, - 16729290607, 16729421699, 16729552771, 16729683847, 16729814929, 16729946003, 16730077079, - 16730208151, 16730339237, 16730470369, 16730601443, 16730732521, 16730863609, 16730994691, - 16731125771, 16731256849, 16731387929, 16731519001, 16731650101, 16731781177, 16731912257, - 16732043333, 16732174423, 16732305511, 16732436599, 16732567699, 16732698839, 16732829947, - 16732961023, 16733092097, 16733223187, 16733354273, 16733485397, 16733616481, 16733747573, - 16733878657, 16734009763, 16734140953, 16734272041, 16734403129, 16734534203, 16734665317, - 16734796409, 16734927509, 16735058581, 16735189663, 16735320787, 16735451917, 16735583009, - 16735714091, 16735845193, 16735976269, 16736107369, 16736238457, 16736369537, 16736500609, - 16736631683, 16736762759, 16736893837, 16737024917, 16737156001, 16737287081, 16737418177, - 16737549271, 16737680347, 16737811463, 16737942547, 16738073623, 16738204787, 16738335871, - 16738466977, 16738598069, 16738729151, 16738860239, 16738991369, 16739122457, 16739253563, - 16739384653, 16739515747, 16739646821, 16739777903, 16739908981, 16740040073, 16740171157, - 16740302239, 16740433319, 16740564397, 16740695519, 16740826631, 16740957719, 16741088797, - 16741219933, 16741351009, 16741482097, 16741613171, 16741744247, 16741875323, 16742006399, - 16742137487, 16742268563, 16742399671, 16742530759, 16742661857, 16742792971, 16742924047, - 16743055129, 16743186209, 16743317287, 16743448363, 16743579439, 16743710521, 16743841643, - 16743972727, 16744103807, 16744234883, 16744365959, 16744497031, 16744628149, 16744759243, - 16744890329, 16745021413, 16745152499, 16745283593, 16745414671, 16745545753, 16745676853, - 16745807963, 16745939057, 16746070129, 16746201217, 16746332299, 16746463379, 16746594451, - 16746725531, 16746856603, 16746987709, 16747118807, 16747249879, 16747381039, 16747512113, - 16747643249, 16747774331, 16747905409, 16748036509, 16748167589, 16748298667, 16748429773, - 16748560897, 16748691989, 16748823173, 16748954249, 16749085391, 16749216467, 16749347543, - 16749478619, 16749609691, 16749740767, 16749871867, 16750002943, 16750134047, 16750265149, - 16750396297, 16750527401, 16750658473, 16750789553, 16750920629, 16751051761, 16751182837, - 16751313947, 16751445041, 16751576141, 16751707213, 16751838307, 16751969387, 16752100483, - 16752231557, 16752362663, 16752493777, 16752624853, 16752755941, 16752887023, 16753018099, - 16753149173, 16753280261, 16753411333, 16753542419, 16753673509, 16753804597, 16753935683, - 16754066759, 16754197879, 16754328959, 16754460059, 16754591171, 16754722267, 16754853389, - 16754984471, 16755115547, 16755246679, 16755377773, 16755508859, 16755639937, 16755771041, - 16755902129, 16756033201, 16756164283, 16756295359, 16756426457, 16756557529, 16756688609, - 16756819711, 16756950787, 16757081867, 16757212957, 16757344033, 16757475107, 16757606207, - 16757737289, 16757868383, 16757999459, 16758130619, 16758261691, 16758392773, 16758523861, - 16758654943, 16758786047, 16758917141, 16759048223, 16759179299, 16759310389, 16759441469, - 16759572601, 16759703707, 16759834799, 16759965877, 16760096999, 16760228077, 16760359169, - 16760490259, 16760621333, 16760752469, 16760883583, 16761014657, 16761145759, 16761276869, - 16761407969, 16761539063, 16761670157, 16761801229, 16761932359, 16762063477, 16762194551, - 16762325639, 16762456747, 16762587827, 16762718933, 16762850021, 16762981117, 16763112221, - 16763243293, 16763374373, 16763505457, 16763636531, 16763767633, 16763898761, 16764029833, - 16764160913, 16764291997, 16764423079, 16764554167, 16764685241, 16764816323, 16764947399, - 16765078471, 16765209547, 16765340633, 16765471717, 16765602797, 16765733903, 16765865003, - 16765996109, 16766127181, 16766258261, 16766389361, 16766520481, 16766651567, 16766782691, - 16766913763, 16767044839, 16767175913, 16767306989, 16767438067, 16767569191, 16767700283, - 16767831383, 16767962467, 16768093547, 16768224653, 16768355753, 16768486859, 16768617959, - 16768749061, 16768880137, 16769011223, 16769142307, 16769273401, 16769404507, 16769535581, - 16769666657, 16769797853, 16769928947, 16770060019, 16770191099, 16770322171, 16770453281, - 16770584399, 16770715483, 16770846569, 16770977659, 16771108777, 16771239911, 16771371037, - 16771502129, 16771633211, 16771764283, 16771895359, 16772026493, 16772157581, 16772288657, - 16772419757, 16772550859, 16772681971, 16772813047, 16772944121, 16773075199, 16773206291, - 16773337367, 16773468443, 16773599519, 16773730591, 16773861691, 16773992777, 16774123879, - 16774254953, 16774386061, 16774517141, 16774648229, 16774779311, 16774910401, 16775041511, - 16775172587, 16775303659, 16775434751, 16775565853, 16775696929, 16775828029, 16775959129, - 16776090209, 16776221303, 16776352379, 16776483467, 16776614539, 16776745627, 16776876703, - 16777007803, 16777138877, 16777269959, 16777401041, 16777532113, 16777663211, 16777794287, - 16777925363, 16778056481, 16778187583, 16778318663, 16778449759, 16778580851, 16778711927, - 16778843009, 16778974097, 16779105197, 16779236293, 16779367369, 16779498479, 16779629557, - 16779760639, 16779891841, 16780022947, 16780154089, 16780285163, 16780416259, 16780547351, - 16780678433, 16780809553, 16780940629, 16781071717, 16781202793, 16781333867, 16781464939, - 16781596031, 16781727121, 16781858201, 16781989291, 16782120371, 16782251443, 16782382553, - 16782513689, 16782644773, 16782775871, 16782906947, 16783038037, 16783169111, 16783300241, - 16783431317, 16783562441, 16783693519, 16783824593, 16783955681, 16784086771, 16784217851, - 16784348939, 16784480021, 16784611111, 16784742241, 16784873317, 16785004393, 16785135481, - 16785266573, 16785397649, 16785528737, 16785659827, 16785790907, 16785922003, 16786053077, - 16786184227, 16786315303, 16786446389, 16786577477, 16786708573, 16786839659, 16786970747, - 16787101847, 16787232919, 16787364059, 16787495167, 16787626253, 16787757359, 16787888431, - 16788019511, 16788150611, 16788281707, 16788412799, 16788543899, 16788675047, 16788806137, - 16788937213, 16789068323, 16789199407, 16789330489, 16789461569, 16789592641, 16789723733, - 16789854821, 16789985939, 16790117021, 16790248129, 16790379233, 16790510327, 16790641423, - 16790772499, 16790903599, 16791034681, 16791165763, 16791296861, 16791427951, 16791559049, - 16791690121, 16791821231, 16791952337, 16792083431, 16792214507, 16792345579, 16792476653, - 16792607857, 16792738939, 16792870043, 16793001133, 16793132207, 16793263303, 16793394383, - 16793525461, 16793656541, 16793787613, 16793918747, 16794049837, 16794180911, 16794311987, - 16794443069, 16794574151, 16794705247, 16794836329, 16794967417, 16795098499, 16795229593, - 16795360697, 16795491793, 16795622891, 16795754011, 16795885091, 16796016191, 16796147321, - 16796278393, 16796409521, 16796540623, 16796671747, 16796802853, 16796933927, 16797065011, - 16797196093, 16797327167, 16797458239, 16797589339, 16797720421, 16797851501, 16797982601, - 16798113697, 16798244773, 16798375873, 16798506971, 16798638053, 16798769173, 16798900249, - 16799031331, 16799162407, 16799293481, 16799424559, 16799555639, 16799686781, 16799817901, - 16799948987, 16800080083, 16800211177, 16800342281, 16800473357, 16800604451, 16800735533, - 16800866611, 16800997687, 16801128769, 16801259843, 16801390919, 16801522009, 16801653131, - 16801784203, 16801915301, 16802046377, 16802177467, 16802308573, 16802439653, 16802570777, - 16802701873, 16802832953, 16802964041, 16803095129, 16803226211, 16803357371, 16803488447, - 16803619529, 16803750617, 16803881701, 16804012783, 16804143857, 16804274933, 16804406011, - 16804537093, 16804668173, 16804799267, 16804930343, 16805061503, 16805192623, 16805323729, - 16805454811, 16805585891, 16805716987, 16805848091, 16805979217, 16806110311, 16806241411, - 16806372503, 16806503611, 16806634693, 16806765779, 16806896857, 16807027943, 16807159037, - 16807290127, 16807421207, 16807552297, 16807683379, 16807814459, 16807945571, 16808076653, - 16808207803, 16808338901, 16808469983, 16808601071, 16808732159, 16808863277, 16808994353, - 16809125477, 16809256561, 16809387649, 16809518807, 16809649897, 16809780973, 16809912061, - 16810043183, 16810174261, 16810305341, 16810436437, 16810567517, 16810698617, 16810829689, - 16810960769, 16811091841, 16811222917, 16811354011, 16811485087, 16811616163, 16811747273, - 16811878351, 16812009443, 16812140539, 16812271631, 16812402703, 16812533779, 16812664853, - 16812795931, 16812927007, 16813058117, 16813189199, 16813320283, 16813451357, 16813582441, - 16813713517, 16813844669, 16813975741, 16814106817, 16814237893, 16814368999, 16814500111, - 16814631187, 16814762299, 16814893379, 16815024481, 16815155587, 16815286699, 16815417793, - 16815548881, 16815679961, 16815811043, 16815942149, 16816073231, 16816204303, 16816335379, - 16816466489, 16816597601, 16816728673, 16816859779, 16816990859, 16817121961, 16817253073, - 16817384159, 16817515237, 16817646317, 16817777393, 16817908469, 16818039541, 16818170639, - 16818301711, 16818432803, 16818563911, 16818695009, 16818826081, 16818957203, 16819088281, - 16819219367, 16819350439, 16819481513, 16819612633, 16819743719, 16819874867, 16820005963, - 16820137039, 16820268131, 16820399207, 16820530291, 16820661383, 16820792489, 16820923579, - 16821054661, 16821185747, 16821316849, 16821447947, 16821579029, 16821710111, 16821841193, - 16821972269, 16822103351, 16822234433, 16822365509, 16822496597, 16822627673, 16822758751, - 16822889833, 16823020931, 16823152051, 16823283133, 16823414221, 16823545301, 16823676383, - 16823807467, 16823938583, 16824069671, 16824200777, 16824331861, 16824462961, 16824594041, - 16824725117, 16824856189, 16824987281, 16825118353, 16825249447, 16825380547, 16825511621, - 16825642699, 16825773787, 16825904861, 16826035987, 16826167081, 16826298263, 16826429353, - 16826560477, 16826691599, 16826822687, 16826953763, 16827084863, 16827215971, 16827347051, - 16827478139, 16827609247, 16827740327, 16827871471, 16828002547, 16828133633, 16828264727, - 16828395803, 16828526959, 16828658053, 16828789139, 16828920223, 16829051311, 16829182399, - 16829313481, 16829444573, 16829575649, 16829706757, 16829837861, 16829968937, 16830100061, - 16830231151, 16830362249, 16830493321, 16830624443, 16830755519, 16830886627, 16831017701, - 16831148779, 16831279937, 16831411039, 16831542113, 16831673207, 16831804291, 16831935377, - 16832066453, 16832197537, 16832328613, 16832459783, 16832590861, 16832721943, 16832853017, - 16832984101, 16833115177, 16833246263, 16833377347, 16833508421, 16833639523, 16833770609, - 16833901681, 16834032769, 16834163851, 16834294927, 16834426003, 16834557119, 16834688203, - 16834819283, 16834950401, 16835081503, 16835212579, 16835343659, 16835474737, 16835605817, - 16835736893, 16835868013, 16835999093, 16836130169, 16836261259, 16836392333, 16836523423, - 16836654503, 16836785629, 16836916727, 16837047803, 16837178881, 16837309967, 16837441067, - 16837572139, 16837703269, 16837834441, 16837965517, 16838096621, 16838227723, 16838358821, - 16838489893, 16838620973, 16838752069, 16838883151, 16839014251, 16839145357, 16839276439, - 16839407513, 16839538591, 16839669697, 16839800771, 16839931883, 16840062989, 16840194071, - 16840325197, 16840456271, 16840587347, 16840718443, 16840849559, 16840980649, 16841111737, - 16841242829, 16841373911, 16841505013, 16841636087, 16841767183, 16841898257, 16842029329, - 16842160411, 16842291509, 16842422581, 16842553697, 16842684811, 16842815897, 16842946987, - 16843078073, 16843209157, 16843340231, 16843471313, 16843602401, 16843733477, 16843864561, - 16843995643, 16844126731, 16844257873, 16844388949, 16844520041, 16844651119, 16844782217, - 16844913307, 16845044383, 16845175469, 16845306547, 16845437621, 16845568699, 16845699797, - 16845830879, 16845962069, 16846093141, 16846224217, 16846355303, 16846486387, 16846617481, - 16846748557, 16846879649, 16847010749, 16847141849, 16847272931, 16847404003, 16847535079, - 16847666197, 16847797271, 16847928371, 16848059447, 16848190531, 16848321617, 16848452689, - 16848583781, 16848714863, 16848845969, 16848977069, 16849108147, 16849239227, 16849370371, - 16849501451, 16849632571, 16849763647, 16849894729, 16850025833, 16850156909, 16850288033, - 16850419129, 16850550221, 16850681317, 16850812399, 16850943481, 16851074557, 16851205633, - 16851336727, 16851467803, 16851598909, 16851729989, 16851861097, 16851992293, 16852123367, - 16852254439, 16852385531, 16852516607, 16852647701, 16852778773, 16852909889, 16853040989, - 16853172079, 16853303167, 16853434243, 16853565371, 16853696467, 16853827547, 16853958619, - 16854089711, 16854220843, 16854351919, 16854483047, 16854614129, 16854745231, 16854876343, - 16855007419, 16855138501, 16855269577, 16855400659, 16855531741, 16855662823, 16855793909, - 16855925003, 16856056097, 16856187203, 16856318279, 16856449471, 16856580563, 16856711653, - 16856842771, 16856973863, 16857105077, 16857236177, 16857367309, 16857498397, 16857629507, - 16857760603, 16857891697, 16858022773, 16858153861, 16858284941, 16858416019, 16858547093, - 16858678217, 16858809293, 16858940381, 16859071457, 16859202557, 16859333629, 16859464729, - 16859595811, 16859726903, 16859857981, 16859989073, 16860120149, 16860251227, 16860382303, - 16860513427, 16860644503, 16860775639, 16860906719, 16861037821, 16861168897, 16861299971, - 16861431071, 16861562143, 16861693217, 16861824299, 16861955389, 16862086477, 16862217557, - 16862348651, 16862479747, 16862610829, 16862741947, 16862873029, 16863004163, 16863135251, - 16863266351, 16863397459, 16863528541, 16863659641, 16863790717, 16863921791, 16864052873, - 16864183979, 16864315079, 16864446169, 16864577243, 16864708337, 16864839479, 16864970569, - 16865101661, 16865232773, 16865363849, 16865494937, 16865626061, 16865757133, 16865888227, - 16866019307, 16866150391, 16866281473, 16866412561, 16866543649, 16866674743, 16866805817, - 16866936917, 16867068047, 16867199123, 16867330223, 16867461323, 16867592407, 16867723559, - 16867854643, 16867985731, 16868116823, 16868247953, 16868379041, 16868510149, 16868641247, - 16868772331, 16868903407, 16869034571, 16869165661, 16869296771, 16869427847, 16869558973, - 16869690077, 16869821153, 16869952241, 16870083343, 16870214447, 16870345529, 16870476619, - 16870607711, 16870738883, 16870869971, 16871001079, 16871132171, 16871263261, 16871394341, - 16871525479, 16871656553, 16871787629, 16871918731, 16872049811, 16872180883, 16872311959, - 16872443039, 16872574139, 16872705229, 16872836327, 16872967451, 16873098527, 16873229707, - 16873360787, 16873491913, 16873622993, 16873754069, 16873885153, 16874016239, 16874147347, - 16874278439, 16874409511, 16874540621, 16874671703, 16874802781, 16874933857, 16875064933, - 16875196073, 16875327163, 16875458239, 16875589321, 16875720427, 16875851507, 16875982583, - 16876113659, 16876244731, 16876375811, 16876506893, 16876638001, 16876769101, 16876900181, - 16877031277, 16877162363, 16877293453, 16877424527, 16877555671, 16877686769, 16877817863, - 16877948939, 16878080017, 16878211123, 16878342233, 16878473317, 16878604397, 16878735487, - 16878866561, 16878997633, 16879128733, 16879259809, 16879390939, 16879522021, 16879653151, - 16879784267, 16879915361, 16880046451, 16880177597, 16880308699, 16880439893, 16880570977, - 16880702053, 16880833133, 16880964239, 16881095321, 16881226403, 16881357497, 16881488573, - 16881619663, 16881750751, 16881881839, 16882012913, 16882144079, 16882275161, 16882406267, - 16882537393, 16882668493, 16882799629, 16882930703, 16883061823, 16883192923, 16883324027, - 16883455129, 16883586221, 16883717293, 16883848369, 16883979451, 16884110563, 16884241639, - 16884372719, 16884503791, 16884634891, 16884765971, 16884897049, 16885028131, 16885159241, - 16885290319, 16885421393, 16885552469, 16885683547, 16885814623, 16885945723, 16886076811, - 16886207917, 16886338999, 16886470087, 16886601191, 16886732287, 16886863393, 16886994469, - 16887125579, 16887256709, 16887387799, 16887518881, 16887649957, 16887781049, 16887912121, - 16888043269, 16888174399, 16888305509, 16888436597, 16888567679, 16888698779, 16888829861, - 16888960937, 16889092009, 16889223083, 16889354177, 16889485273, 16889616349, 16889747437, - 16889878541, 16890009613, 16890140731, 16890271829, 16890402937, 16890534079, 16890665161, - 16890796277, 16890927349, 16891058453, 16891189529, 16891320613, 16891451699, 16891582831, - 16891713919, 16891844993, 16891976069, 16892107153, 16892238271, 16892369393, 16892500511, - 16892631583, 16892762659, 16892893783, 16893024913, 16893156011, 16893287093, 16893418183, - 16893549317, 16893680399, 16893811471, 16893942577, 16894073653, 16894204729, 16894335841, - 16894466917, 16894597999, 16894729109, 16894860233, 16894991329, 16895122417, 16895253527, - 16895384621, 16895515829, 16895646907, 16895777999, 16895909071, 16896040159, 16896171233, - 16896302347, 16896433507, 16896564623, 16896695791, 16896826871, 16896957947, 16897089109, - 16897220209, 16897351283, 16897482361, 16897613441, 16897744517, 16897875607, 16898006707, - 16898137801, 16898268917, 16898400073, 16898531147, 16898662219, 16898793313, 16898924431, - 16899055507, 16899186631, 16899317707, 16899448781, 16899579899, 16899711001, 16899842101, - 16899973183, 16900104269, 16900235351, 16900366423, 16900497499, 16900628579, 16900759663, - 16900890757, 16901021861, 16901152943, 16901284021, 16901415101, 16901546203, 16901677291, - 16901808383, 16901939473, 16902070583, 16902201671, 16902332743, 16902463847, 16902594941, - 16902726041, 16902857119, 16902988199, 16903119319, 16903250393, 16903381489, 16903512589, - 16903643681, 16903774777, 16903905881, 16904036969, 16904168087, 16904299193, 16904430289, - 16904561381, 16904692489, 16904823577, 16904954657, 16905085751, 16905216829, 16905347917, - 16905478999, 16905610081, 16905741163, 16905872251, 16906003343, 16906134491, 16906265591, - 16906396679, 16906527751, 16906658827, 16906789919, 16906921037, 16907052121, 16907183197, - 16907314321, 16907445409, 16907576509, 16907707591, 16907838737, 16907969863, 16908100939, - 16908232039, 16908363113, 16908494189, 16908625303, 16908756379, 16908887459, 16909018571, - 16909149643, 16909280743, 16909411877, 16909542953, 16909674077, 16909805177, 16909936259, - 16910067353, 16910198443, 16910329523, 16910460601, 16910591683, 16910722793, 16910853877, - 16910984953, 16911116029, 16911247159, 16911378233, 16911509311, 16911640393, 16911771511, - 16911902593, 16912033669, 16912164749, 16912295831, 16912426919, 16912558037, 16912689109, - 16912820231, 16912951337, 16913082409, 16913213483, 16913344621, 16913475701, 16913606777, - 16913737877, 16913868967, 16914000083, 16914131177, 16914262273, 16914393367, 16914524483, - 16914655577, 16914786673, 16914917791, 16915048873, 16915179947, 16915311059, 16915442177, - 16915573271, 16915704343, 16915835423, 16915966511, 16916097631, 16916228711, 16916359829, - 16916490901, 16916621999, 16916753083, 16916884163, 16917015257, 16917146381, 16917277483, - 16917408559, 16917539689, 16917670799, 16917801871, 16917932957, 16918064039, 16918195127, - 16918326241, 16918457327, 16918588403, 16918719479, 16918850581, 16918981663, 16919112787, - 16919243879, 16919374957, 16919506033, 16919637109, 16919768209, 16919899303, 16920030427, - 16920161509, 16920292589, 16920423671, 16920554789, 16920685861, 16920816937, 16920948013, - 16921079089, 16921210183, 16921341277, 16921472383, 16921603459, 16921734563, 16921865651, - 16921996723, 16922127799, 16922258897, 16922390027, 16922521237, 16922652323, 16922783407, - 16922914487, 16923045619, 16923176701, 16923307837, 16923438929, 16923570007, 16923701111, - 16923832183, 16923963283, 16924094377, 16924225469, 16924356551, 16924487677, 16924618757, - 16924749841, 16924880953, 16925012029, 16925143141, 16925274283, 16925405383, 16925536477, - 16925667553, 16925798627, 16925929717, 16926060799, 16926191903, 16926322981, 16926454067, - 16926585139, 16926716227, 16926847313, 16926978413, 16927109497, 16927240573, 16927371673, - 16927502747, 16927633823, 16927764913, 16927896019, 16928027093, 16928158223, 16928289299, - 16928420407, 16928551481, 16928682581, 16928813659, 16928944733, 16929075809, 16929206893, - 16929337969, 16929469049, 16929600139, 16929731213, 16929862297, 16929993383, 16930124459, - 16930255619, 16930386709, 16930517809, 16930648883, 16930779979, 16930911061, 16931042147, - 16931173219, 16931304311, 16931435419, 16931566543, 16931697649, 16931828747, 16931959831, - 16932090919, 16932222061, 16932353147, 16932484223, 16932615319, 16932746407, 16932877537, - 16933008623, 16933139737, 16933270819, 16933401913, 16933532989, 16933664107, 16933795187, - 16933926259, 16934057333, 16934188429, 16934319509, 16934450591, 16934581667, 16934712779, - 16934843873, 16934974967, 16935106043, 16935237127, 16935368221, 16935499309, 16935630391, - 16935761467, 16935892553, 16936023641, 16936154713, 16936285789, 16936416869, 16936547941, - 16936679017, 16936810109, 16936941191, 16937072263, 16937203351, 16937334443, 16937465549, - 16937596639, 16937727749, 16937858831, 16937989903, 16938121019, 16938252103, 16938383197, - 16938514279, 16938645397, 16938776473, 16938907571, 16939038647, 16939169719, 16939300853, - 16939431961, 16939563097, 16939694179, 16939825267, 16939956367, 16940087441, 16940218513, - 16940349607, 16940480699, 16940611771, 16940742853, 16940873941, 16941005021, 16941136133, - 16941267209, 16941398293, 16941529391, 16941660497, 16941791599, 16941922687, 16942053769, - 16942184851, 16942315969, 16942447043, 16942578139, 16942709221, 16942840297, 16942971379, - 16943102461, 16943233537, 16943364631, 16943495707, 16943626811, 16943757893, 16943889059, - 16944020147, 16944151219, 16944282307, 16944413419, 16944544499, 16944675593, 16944806701, - 16944937817, 16945068913, 16945199987, 16945331071, 16945462199, 16945593307, 16945724413, - 16945855513, 16945986611, 16946117707, 16946248783, 16946379893, 16946510983, 16946642059, - 16946773141, 16946904239, 16947035317, 16947166399, 16947297503, 16947428579, 16947559669, - 16947690763, 16947821897, 16947952969, 16948084061, 16948215133, 16948346221, 16948477313, - 16948608407, 16948739501, 16948870597, 16949001743, 16949132833, 16949263943, 16949395019, - 16949526103, 16949657189, 16949788321, 16949919397, 16950050477, 16950181553, 16950312629, - 16950443701, 16950574841, 16950705913, 16950837017, 16950968173, 16951099259, 16951230371, - 16951361447, 16951492553, 16951623643, 16951754749, 16951885831, 16952016911, 16952148007, - 16952279089, 16952410169, 16952541259, 16952672339, 16952803423, 16952934511, 16953065599, - 16953196691, 16953327779, 16953458869, 16953589943, 16953721067, 16953852151, 16953983239, - 16954114327, 16954245403, 16954376497, 16954507573, 16954638647, 16954769731, 16954900873, - 16955031997, 16955163119, 16955294203, 16955425309, 16955556389, 16955687509, 16955818589, - 16955949671, 16956080747, 16956211829, 16956342917, 16956473993, 16956605111, 16956736211, - 16956867283, 16956998369, 16957129463, 16957260601, 16957391729, 16957522801, 16957653887, - 16957784959, 16957916047, 16958047129, 16958178247, 16958309327, 16958440409, 16958571533, - 16958702609, 16958833739, 16958964853, 16959095927, 16959227011, 16959358099, 16959489191, - 16959620273, 16959751357, 16959882451, 16960013527, 16960144651, 16960275737, 16960406809, - 16960537907, 16960669001, 16960800079, 16960931159, 16961062241, 16961193329, 16961324437, - 16961455513, 16961586589, 16961717687, 16961848769, 16961979841, 16962110917, 16962241999, - 16962373117, 16962504191, 16962635281, 16962766397, 16962897473, 16963028549, 16963159621, - 16963290749, 16963421821, 16963552909, 16963684019, 16963815097, 16963946177, 16964077253, - 16964208343, 16964339437, 16964470519, 16964601593, 16964732669, 16964863889, 16964994973, - 16965126053, 16965257137, 16965388261, 16965519341, 16965650413, 16965781501, 16965912589, - 16966043671, 16966174747, 16966305871, 16966436999, 16966568083, 16966699181, 16966830271, - 16966961353, 16967092447, 16967223523, 16967354603, 16967485709, 16967616793, 16967747891, - 16967878979, 16968010057, 16968141191, 16968272267, 16968403339, 16968534439, 16968665537, - 16968796613, 16968927719, 16969058833, 16969189907, 16969320997, 16969452163, 16969583263, - 16969714337, 16969845413, 16969976489, 16970107603, 16970238709, 16970369789, 16970500867, - 16970631967, 16970763041, 16970894123, 16971025213, 16971156299, 16971287381, 16971418501, - 16971549587, 16971680659, 16971811783, 16971942881, 16972074001, 16972205083, 16972336177, - 16972467251, 16972598339, 16972729463, 16972860539, 16972991663, 16973122741, 16973253833, - 16973384929, 16973516003, 16973647081, 16973778179, 16973909263, 16974040351, 16974171433, - 16974302567, 16974433643, 16974564721, 16974695797, 16974826877, 16974958009, 16975089097, - 16975220191, 16975351271, 16975482347, 16975613471, 16975744547, 16975875649, 16976006737, - 16976137817, 16976268919, 16976400011, 16976531101, 16976662177, 16976793257, 16976924339, - 16977055483, 16977186559, 16977317639, 16977448751, 16977579847, 16977710921, 16977842017, - 16977973097, 16978104181, 16978235273, 16978366369, 16978497521, 16978628629, 16978759757, - 16978890829, 16979021921, 16979153033, 16979284171, 16979415251, 16979546323, 16979677409, - 16979808499, 16979939623, 16980070699, 16980201781, 16980332869, 16980463967, 16980595063, - 16980726163, 16980857237, 16980988333, 16981119433, 16981250537, 16981381609, 16981512683, - 16981643759, 16981774907, 16981905979, 16982037071, 16982168153, 16982299253, 16982430329, - 16982561413, 16982692513, 16982823601, 16982954693, 16983085781, 16983216863, 16983347971, - 16983479129, 16983610207, 16983741283, 16983872371, 16984003451, 16984134527, 16984265611, - 16984396691, 16984527809, 16984658927, 16984789999, 16984921073, 16985052169, 16985183261, - 16985314343, 16985445419, 16985576551, 16985707631, 16985838707, 16985969783, 16986100891, - 16986231991, 16986363067, 16986494149, 16986625231, 16986756343, 16986887417, 16987018501, - 16987149589, 16987280663, 16987411739, 16987542811, 16987673893, 16987804993, 16987936073, - 16988067167, 16988198261, 16988329357, 16988460431, 16988591507, 16988722631, 16988853769, - 16988984849, 16989115931, 16989247057, 16989378151, 16989509239, 16989640321, 16989771397, - 16989902477, 16990033573, 16990164733, 16990295809, 16990426891, 16990557977, 16990689059, - 16990820131, 16990951217, 16991082319, 16991213417, 16991344511, 16991475619, 16991606693, - 16991737781, 16991868869, 16991999963, 16992131047, 16992262129, 16992393211, 16992524287, - 16992655403, 16992786479, 16992917563, 16993048643, 16993179733, 16993310813, 16993441903, - 16993572979, 16993704059, 16993835141, 16993966217, 16994097319, 16994228393, 16994359483, - 16994490559, 16994621641, 16994752751, 16994883881, 16995014963, 16995146111, 16995277193, - 16995408289, 16995539369, 16995670477, 16995801617, 16995932689, 16996063793, 16996194869, - 16996325947, 16996457033, 16996588123, 16996719199, 16996850281, 16996981369, 16997112443, - 16997243521, 16997374613, 16997505761, 16997636849, 16997767967, 16997899057, 16998030169, - 16998161249, 16998292321, 16998423427, 16998554509, 16998685591, 16998816673, 16998947761, - 16999078843, 16999209971, 16999341061, 16999472137, 16999603249, 16999734343, 16999865417, - 16999996513, 17000127589, 17000258713, 17000389789, 17000520919, 17000652037, 17000783117, - 17000914193, 17001045331, 17001176407, 17001307493, 17001438577, 17001569653, 17001700739, - 17001831811, 17001962897, 17002093991, 17002225111, 17002356199, 17002487311, 17002618387, - 17002749473, 17002880549, 17003011639, 17003142733, 17003273827, 17003404909, 17003536003, - 17003667091, 17003798167, 17003929249, 17004060323, 17004191447, 17004322541, 17004453667, - 17004584743, 17004715883, 17004846959, 17004978071, 17005109153, 17005240289, 17005371373, - 17005502471, 17005633571, 17005764733, 17005895833, 17006026963, 17006158087, 17006289173, - 17006420257, 17006551333, 17006682463, 17006813557, 17006944637, 17007075737, 17007206819, - 17007337903, 17007468983, 17007600107, 17007731189, 17007862303, 17007993391, 17008124467, - 17008255543, 17008386631, 17008517711, 17008648819, 17008779899, 17008910983, 17009042069, - 17009173157, 17009304229, 17009435321, 17009566451, 17009697553, 17009828659, 17009959781, - 17010090857, 17010221971, 17010353047, 17010484123, 17010615221, 17010746317, 17010877417, - 17011008559, 17011139633, 17011270733, 17011401809, 17011532897, 17011663969, 17011795043, - 17011926131, 17012057287, 17012188447, 17012319521, 17012450593, 17012581669, 17012712757, - 17012843831, 17012974919, 17013106009, 17013237091, 17013368173, 17013499249, 17013630323, - 17013761417, 17013892501, 17014023577, 17014154687, 17014285789, 17014416863, 17014547941, - 17014679023, 17014810103, 17014941193, 17015072279, 17015203351, 17015334431, 17015465567, - 17015596649, 17015727763, 17015858843, 17015989919, 17016120991, 17016252079, 17016383171, - 17016514279, 17016645353, 17016776429, 17016907511, 17017038583, 17017169657, 17017300787, - 17017431859, 17017562941, 17017694017, 17017825117, 17017956209, 17018087293, 17018218381, - 17018349461, 17018480603, 17018611721, 17018742827, 17018873899, 17019004973, 17019136061, - 17019267179, 17019398311, 17019529391, 17019660481, 17019791573, 17019922721, 17020053811, - 17020184903, 17020315979, 17020447139, 17020578247, 17020709347, 17020840477, 17020971551, - 17021102629, 17021233711, 17021364803, 17021495893, 17021626981, 17021758067, 17021889163, - 17022020263, 17022151361, 17022282437, 17022413543, 17022544661, 17022675743, 17022806821, - 17022937901, 17023068989, 17023200067, 17023331173, 17023462271, 17023593373, 17023724489, - 17023855567, 17023986641, 17024117723, 17024248831, 17024379923, 17024510999, 17024642077, - 17024773159, 17024904271, 17025035351, 17025166423, 17025297551, 17025428627, 17025559711, - 17025690809, 17025821887, 17025952961, 17026084043, 17026215133, 17026346237, 17026477333, - 17026608409, 17026739519, 17026870643, 17027001721, 17027132797, 17027263901, 17027395013, - 17027526107, 17027657191, 17027788291, 17027919371, 17028050453, 17028181561, 17028312643, - 17028443741, 17028574853, 17028705929, 17028837017, 17028968093, 17029099169, 17029230241, - 17029361317, 17029492397, 17029623473, 17029754561, 17029885651, 17030016733, 17030147863, - 17030278939, 17030410027, 17030541113, 17030672189, 17030803267, 17030934341, 17031065413, - 17031196487, 17031327581, 17031458663, 17031589763, 17031720899, 17031851971, 17031983053, - 17032114157, 17032245271, 17032376419, 17032507559, 17032638631, 17032769731, 17032900813, - 17033031889, 17033162989, 17033294099, 17033425217, 17033556307, 17033687383, 17033818489, - 17033949571, 17034080711, 17034211801, 17034342881, 17034473971, 17034605053, 17034736133, - 17034867209, 17034998297, 17035129381, 17035260481, 17035391557, 17035522661, 17035653781, - 17035784863, 17035915943, 17036047019, 17036178097, 17036309179, 17036440271, 17036571347, - 17036702437, 17036833511, 17036964583, 17037095689, 17037226769, 17037357851, 17037488929, - 17037620011, 17037751091, 17037882163, 17038013257, 17038144337, 17038275421, 17038406543, - 17038537697, 17038668781, 17038799857, 17038930967, 17039062043, 17039193133, 17039324219, - 17039455331, 17039586407, 17039717501, 17039848577, 17039979659, 17040110741, 17040241871, - 17040372959, 17040504043, 17040635149, 17040766229, 17040897329, 17041028483, 17041159571, - 17041290689, 17041421767, 17041552867, 17041683947, 17041815031, 17041946111, 17042077201, - 17042208277, 17042339357, 17042470469, 17042601547, 17042732633, 17042863763, 17042994847, - 17043125929, 17043257029, 17043388139, 17043519221, 17043650293, 17043781373, 17043912463, - 17044043561, 17044174661, 17044305787, 17044436869, 17044567951, 17044699043, 17044830119, - 17044961239, 17045092343, 17045223421, 17045354527, 17045485607, 17045616701, 17045747779, - 17045878867, 17046009949, 17046141031, 17046272171, 17046403357, 17046534473, 17046665549, - 17046796639, 17046927713, 17047058827, 17047189903, 17047320977, 17047452073, 17047583159, - 17047714237, 17047845319, 17047976399, 17048107511, 17048238583, 17048369711, 17048500801, - 17048631881, 17048762959, 17048894221, 17049025303, 17049156461, 17049287557, 17049418651, - 17049549739, 17049680827, 17049811903, 17049942979, 17050074079, 17050205191, 17050336273, - 17050467403, 17050598489, 17050729583, 17050860667, 17050991747, 17051122853, 17051253949, - 17051385031, 17051516113, 17051647189, 17051778283, 17051909359, 17052040433, 17052171553, - 17052302633, 17052433777, 17052564883, 17052696013, 17052827087, 17052958183, 17053089257, - 17053220333, 17053351439, 17053482569, 17053613659, 17053744753, 17053875827, 17054006899, - 17054137999, 17054269093, 17054400169, 17054531243, 17054662319, 17054793401, 17054924483, - 17055055561, 17055186647, 17055317731, 17055448829, 17055579941, 17055711041, 17055842117, - 17055973189, 17056104293, 17056235369, 17056366447, 17056497539, 17056628621, 17056759693, - 17056890779, 17057021887, 17057152969, 17057284063, 17057415143, 17057546239, 17057677337, - 17057808419, 17057939527, 17058070639, 17058201733, 17058332807, 17058463883, 17058594997, - 17058726077, 17058857161, 17058988273, 17059119349, 17059250477, 17059381567, 17059512649, - 17059643767, 17059774847, 17059905959, 17060037061, 17060168137, 17060299213, 17060430347, - 17060561437, 17060692529, 17060823601, 17060954699, 17061085771, 17061216863, 17061347957, - 17061479033, 17061610121, 17061741199, 17061872281, 17062003379, 17062134451, 17062265527, - 17062396619, 17062527701, 17062658779, 17062789879, 17062920983, 17063052059, 17063183131, - 17063314241, 17063445323, 17063576407, 17063707481, 17063838557, 17063969647, 17064100751, - 17064231841, 17064362923, 17064494021, 17064625103, 17064756187, 17064887261, 17065018343, - 17065149419, 17065280501, 17065411607, 17065542679, 17065673809, 17065804897, 17065935973, - 17066067097, 17066198189, 17066329279, 17066460353, 17066591441, 17066722537, 17066853611, - 17066984689, 17067115787, 17067246877, 17067378049, 17067509143, 17067640259, 17067771359, - 17067902431, 17068033561, 17068164637, 17068295729, 17068426801, 17068557881, 17068688977, - 17068820051, 17068951129, 17069082221, 17069213299, 17069344379, 17069475469, 17069606579, - 17069737709, 17069868791, 17069999899, 17070131027, 17070262109, 17070393181, 17070524267, - 17070655363, 17070786437, 17070917531, 17071048609, 17071179689, 17071310783, 17071441867, - 17071572949, 17071704031, 17071835119, 17071966193, 17072097269, 17072228351, 17072359483, - 17072490581, 17072621669, 17072752747, 17072883823, 17073014899, 17073145987, 17073277069, - 17073408169, 17073539269, 17073670363, 17073801461, 17073932549, 17074063667, 17074194757, - 17074325843, 17074456937, 17074588087, 17074719163, 17074850249, 17074981331, 17075112403, - 17075243557, 17075374633, 17075505737, 17075636833, 17075767927, 17075899021, 17076030131, - 17076161233, 17076292333, 17076423421, 17076554527, 17076685667, 17076816749, 17076947857, - 17077078979, 17077210061, 17077341221, 17077472303, 17077603379, 17077734497, 17077865653, - 17077996757, 17078127863, 17078258957, 17078390051, 17078521123, 17078652197, 17078783273, - 17078914381, 17079045463, 17079176573, 17079307657, 17079438743, 17079569821, 17079700919, - 17079832037, 17079963119, 17080094249, 17080225343, 17080356427, 17080487509, 17080618637, - 17080749709, 17080880807, 17081011889, 17081142961, 17081274103, 17081405221, 17081536319, - 17081667403, 17081798477, 17081929549, 17082060629, 17082191717, 17082322793, 17082453877, - 17082584957, 17082716047, 17082847121, 17082978229, 17083109377, 17083240477, 17083371551, - 17083502659, 17083633733, 17083764811, 17083895897, 17084027003, 17084158079, 17084289181, - 17084420267, 17084551343, 17084682467, 17084813573, 17084944661, 17085075737, 17085206837, - 17085337933, 17085469007, 17085600107, 17085731183, 17085862259, 17085993347, 17086124479, - 17086255573, 17086386661, 17086517737, 17086648867, 17086779943, 17086911019, 17087042101, - 17087173177, 17087304259, 17087435347, 17087566423, 17087697541, 17087828621, 17087959703, - 17088090853, 17088221947, 17088353039, 17088484121, 17088615211, 17088746291, 17088877363, - 17089008451, 17089139533, 17089270609, 17089401731, 17089532809, 17089663897, 17089794977, - 17089926053, 17090057141, 17090188309, 17090319413, 17090450497, 17090581591, 17090712689, - 17090843827, 17090974907, 17091106001, 17091237089, 17091368171, 17091499289, 17091630383, - 17091761513, 17091892619, 17092023709, 17092154809, 17092285909, 17092417033, 17092548169, - 17092679249, 17092810393, 17092941527, 17093072611, 17093203697, 17093334799, 17093465941, - 17093597021, 17093728153, 17093859239, 17093990311, 17094121411, 17094252503, 17094383591, - 17094514669, 17094645791, 17094776947, 17094908099, 17095039201, 17095170331, 17095301413, - 17095432537, 17095563629, 17095694701, 17095825807, 17095956901, 17096087989, 17096219093, - 17096350189, 17096481317, 17096612399, 17096743471, 17096874569, 17097005671, 17097136783, - 17097267871, 17097398951, 17097530027, 17097661121, 17097792223, 17097923321, 17098054411, - 17098185491, 17098316579, 17098447657, 17098578737, 17098709809, 17098840883, 17098971991, - 17099103071, 17099234161, 17099365247, 17099496343, 17099627431, 17099758513, 17099889601, - 17100020683, 17100151771, 17100282917, 17100414007, 17100545087, 17100676163, 17100807239, - 17100938339, 17101069417, 17101200503, 17101331579, 17101462657, 17101593731, 17101724803, - 17101855889, 17101986971, 17102118049, 17102249137, 17102380259, 17102511337, 17102642419, - 17102773507, 17102904593, 17103035669, 17103166753, 17103297847, 17103428933, 17103560029, - 17103691103, 17103822181, 17103953261, 17104084339, 17104215437, 17104346513, 17104477589, - 17104608683, 17104739761, 17104870873, 17105001961, 17105133061, 17105264171, 17105395247, - 17105526323, 17105657419, 17105788507, 17105919581, 17106050657, 17106181753, 17106312893, - 17106443969, 17106575053, 17106706129, 17106837269, 17106968353, 17107099519, 17107230601, - 17107361701, 17107492811, 17107623901, 17107754987, 17107886069, 17108017153, 17108148227, - 17108279329, 17108410447, 17108541533, 17108672621, 17108803697, 17108934781, 17109065861, - 17109196957, 17109328073, 17109459149, 17109590227, 17109721303, 17109852401, 17109983533, - 17110114613, 17110245689, 17110376761, 17110507849, 17110638949, 17110770059, 17110901147, - 17111032231, 17111163313, 17111294399, 17111425493, 17111556571, 17111687657, 17111818751, - 17111949857, 17112080929, 17112212059, 17112343133, 17112474209, 17112605281, 17112736357, - 17112867467, 17112998543, 17113129619, 17113260721, 17113391837, 17113522913, 17113654021, - 17113785103, 17113916179, 17114047259, 17114178331, 17114309441, 17114440529, 17114571629, - 17114702701, 17114833777, 17114964859, 17115095951, 17115227027, 17115358121, 17115489203, - 17115620297, 17115751423, 17115882521, 17116013597, 17116144687, 17116275773, 17116406893, - 17116537993, 17116669081, 17116800187, 17116931281, 17117062363, 17117193437, 17117324509, - 17117455591, 17117586667, 17117717789, 17117848861, 17117979941, 17118111029, 17118242101, - 17118373187, 17118504259, 17118635341, 17118766481, 17118897583, 17119028737, 17119159829, - 17119290919, 17119421993, 17119553069, 17119684147, 17119815227, 17119946309, 17120077399, - 17120208481, 17120339603, 17120470681, 17120601761, 17120732869, 17120863987, 17120995061, - 17121126137, 17121257213, 17121388289, 17121519377, 17121650473, 17121781549, 17121912659, - 17122043747, 17122174837, 17122305911, 17122437001, 17122568081, 17122699157, 17122830271, - 17122961377, 17123092457, 17123223539, 17123354657, 17123485759, 17123616889, 17123747983, - 17123879083, 17124010157, 17124141271, 17124272377, 17124403477, 17124534569, 17124665651, - 17124796747, 17124927821, 17125058911, 17125189987, 17125321063, 17125452151, 17125583227, - 17125714321, 17125845403, 17125976507, 17126107597, 17126238709, 17126369807, 17126500883, - 17126631961, 17126763047, 17126894123, 17127025219, 17127156317, 17127287389, 17127418489, - 17127549629, 17127680741, 17127811817, 17127942941, 17128074013, 17128205123, 17128336219, - 17128467311, 17128598429, 17128729507, 17128860583, 17128991707, 17129122793, 17129253877, - 17129384999, 17129516071, 17129647189, 17129778313, 17129909411, 17130040489, 17130171581, - 17130302681, 17130433769, 17130564851, 17130695947, 17130827029, 17130958139, 17131089253, - 17131220329, 17131351427, 17131482581, 17131613659, 17131744739, 17131875811, 17132006923, - 17132137999, 17132269079, 17132400157, 17132531281, 17132662361, 17132793479, 17132924551, - 17133055633, 17133186731, 17133317867, 17133448939, 17133580073, 17133711197, 17133842291, - 17133973391, 17134104473, 17134235603, 17134366679, 17134497769, 17134628873, 17134759973, - 17134891057, 17135022137, 17135153219, 17135284321, 17135415481, 17135546557, 17135677631, - 17135808719, 17135939801, 17136070879, 17136201961, 17136333041, 17136464141, 17136595213, - 17136726293, 17136857377, 17136988471, 17137119563, 17137250651, 17137381733, 17137512839, - 17137643911, 17137774999, 17137906109, 17138037181, 17138168291, 17138299379, 17138430467, - 17138561563, 17138692651, 17138823739, 17138954813, 17139085937, 17139217021, 17139348101, - 17139479221, 17139610321, 17139741431, 17139872509, 17140003591, 17140134677, 17140265767, - 17140396879, 17140527973, 17140659047, 17140790167, 17140921247, 17141052323, 17141183401, - 17141314483, 17141445569, 17141576653, 17141707747, 17141838853, 17141969939, 17142101021, - 17142232109, 17142363223, 17142494311, 17142625387, 17142756467, 17142887539, 17143018621, - 17143149721, 17143280867, 17143411963, 17143543049, 17143674127, 17143805209, 17143936283, - 17144067383, 17144198521, 17144329597, 17144460677, 17144591773, 17144722849, 17144853997, - 17144985083, 17145116161, 17145247253, 17145378343, 17145509453, 17145640571, 17145771647, - 17145902723, 17146033799, 17146164881, 17146295983, 17146427057, 17146558129, 17146689223, - 17146820329, 17146951463, 17147082541, 17147213711, 17147344889, 17147475977, 17147607049, - 17147738123, 17147869199, 17148000271, 17148131347, 17148262441, 17148393523, 17148524641, - 17148655781, 17148786923, 17148918041, 17149049143, 17149180229, 17149311331, 17149442417, - 17149573501, 17149704599, 17149835683, 17149966781, 17150097863, 17150228941, 17150360027, - 17150491153, 17150622253, 17150753353, 17150884427, 17151015559, 17151146641, 17151277723, - 17151408823, 17151539929, 17151671027, 17151802139, 17151933259, 17152064339, 17152195457, - 17152326533, 17152457611, 17152588709, 17152719791, 17152850881, 17152982009, 17153113127, - 17153244233, 17153375311, 17153506411, 17153637499, 17153768591, 17153899667, 17154030743, - 17154161821, 17154292921, 17154424003, 17154555113, 17154686203, 17154817279, 17154948367, - 17155079441, 17155210517, 17155341589, 17155472669, 17155603741, 17155734823, 17155865897, - 17155996973, 17156128063, 17156259137, 17156390219, 17156521321, 17156652427, 17156783549, - 17156914657, 17157045749, 17157176837, 17157307943, 17157439037, 17157570119, 17157701191, - 17157832271, 17157963349, 17158094431, 17158225523, 17158356617, 17158487779, 17158618879, - 17158749973, 17158881049, 17159012149, 17159143229, 17159274311, 17159405383, 17159536463, - 17159667649, 17159798723, 17159929811, 17160060889, 17160191963, 17160323053, 17160454151, - 17160585227, 17160716327, 17160847399, 17160978493, 17161109573, 17161240721, 17161371833, - 17161502921, 17161634029, 17161765109, 17161896197, 17162027269, 17162158357, 17162289437, - 17162420519, 17162551613, 17162682709, 17162813813, 17162944907, 17163075989, 17163207077, - 17163338149, 17163469223, 17163600331, 17163731411, 17163862501, 17163993599, 17164124699, - 17164255789, 17164386937, 17164518047, 17164649119, 17164780207, 17164911299, 17165042381, - 17165173453, 17165304551, 17165435659, 17165566771, 17165697869, 17165828957, 17165960033, - 17166091157, 17166222251, 17166353333, 17166484411, 17166615491, 17166746567, 17166877691, - 17167008767, 17167139867, 17167270997, 17167402123, 17167533203, 17167664287, 17167795361, - 17167926439, 17168057521, 17168188601, 17168319677, 17168450779, 17168581873, 17168712959, - 17168844047, 17168975147, 17169106271, 17169237353, 17169368429, 17169499519, 17169630619, - 17169761723, 17169892853, 17170023961, 17170155061, 17170286137, 17170417213, 17170548289, - 17170679437, 17170810513, 17170941587, 17171072669, 17171203747, 17171334833, 17171465917, - 17171596993, 17171728069, 17171859149, 17171990237, 17172121327, 17172252413, 17172383489, - 17172514561, 17172645643, 17172776717, 17172907813, 17173038893, 17173169987, 17173301059, - 17173432163, 17173563259, 17173694333, 17173825421, 17173956517, 17174087597, 17174218681, - 17174349779, 17174480867, 17174611943, 17174743031, 17174874103, 17175005201, 17175136273, - 17175267353, 17175398473, 17175529577, 17175660743, 17175791821, 17175922903, 17176053997, - 17176185083, 17176316167, 17176447243, 17176578343, 17176709449, 17176840529, 17176971601, - 17177102693, 17177233783, 17177364857, 17177495953, 17177627053, 17177758133}; +/** + * @brief Modular multiplication: (n1 * n2) % m without overflow. + */ +constexpr std::uint64_t mod_mul(std::uint64_t n1, std::uint64_t n2, std::uint64_t m) +{ +#if defined(CUCO_HAS_INT128) + auto r = static_cast(n1) * n2; + return static_cast(r % m); +#else + // Fallback: Russian peasant multiplication in modular arithmetic. + std::uint64_t r = 0; + n1 %= m; + n2 %= m; + while (n2 > 0) { + if (n2 & 1) { r = (r >= m - n1) ? r - (m - n1) : r + n1; } + n1 = (n1 >= m - n1) ? n1 - (m - n1) : n1 + n1; + n2 >>= 1; + } + return r; +#endif +} + +/** + * @brief Modular exponentiation: (b ^ e) % m via binary exponentiation. + */ +constexpr std::uint64_t mod_pow(std::uint64_t b, std::uint64_t e, std::uint64_t m) +{ + std::uint64_t r = 1; + b %= m; + while (e > 0) { + if (e & 1) { r = mod_mul(r, b, m); } + b = mod_mul(b, b, m); + e >>= 1; + } + return r; +} + +/** + * @brief Single Miller-Rabin witness test. + * + * Given n - 1 == 2^s * d, checks whether a^d == 1 (mod n) or + * a^(2^r * d) == n - 1 (mod n) for some 0 <= r < s. + */ +constexpr bool miller_rabin_test(std::uint64_t n, std::uint64_t a, std::uint64_t d, std::uint32_t s) +{ + std::uint64_t x = mod_pow(a % n, d, n); + std::uint64_t const neg_one = n - 1; + if (x == 1 || x == neg_one) { return true; } + + for (std::uint32_t i = 1; i < s; ++i) { + x = mod_mul(x, x, n); + if (x == neg_one) { return true; } + } + return false; +} /** - * @brief Calculates the valid capacity based on `cg_size` , `vector_width` - * and the initial `capacity`. + * @brief Deterministic primality test for all uint64_t values. * - * @tparam cg_size Cooperative Group size - * @tparam vector_width Length of vector load - * @tparam uses_vector_load If vector load is used + * Uses trial division for small factors followed by Miller-Rabin with + * a fixed set of bases that make the test deterministic for all 64-bit + * integers. Bases from https://cp-algorithms.com/algebra/primality_tests.html + */ +constexpr bool is_prime(std::uint64_t n) +{ + if (n < 2) { return false; } + + // Trial division by small primes + for (std::uint64_t p : + {2ull, 3ull, 5ull, 7ull, 11ull, 13ull, 17ull, 19ull, 23ull, 29ull, 31ull, 37ull}) { + if (n % p == 0) { return n == p; } + } + + // Decompose n - 1 == 2^s * d + std::uint64_t d = n - 1; + std::uint32_t s = 0; + while ((d & 1) == 0) { + d >>= 1; + ++s; + } + + // Deterministic bases for all uint64_t values + for (std::uint64_t a : {2ull, 325ull, 9375ull, 28178ull, 450775ull, 9780504ull, 1795265022ull}) { + if (!miller_rabin_test(n, a, d, s)) { return false; } + } + + return true; +} + +/** + * @brief Returns the smallest prime >= n. * - * @param capacity The initially requested capacity - * @return A valid capacity no smaller than the requested `capacity` + * For n <= 2, returns 2. Otherwise searches odd numbers starting + * from n (or n+1 if n is even). */ -template -constexpr T get_valid_capacity(T capacity) noexcept +constexpr std::uint64_t next_prime(std::uint64_t n) { - auto const stride = [&]() { - if constexpr (uses_vector_load) { return cg_size * vector_width; } - if constexpr (not uses_vector_load) { return cg_size; } - }(); + if (n <= 2ull) { return 2ull; } + + n |= 1; // make odd + + while (!is_prime(n)) { + n += 2ull; + } - auto const c = int_div_ceil(capacity, stride); - auto const min_prime = std::lower_bound(primes.begin(), primes.end(), c); - return *min_prime * stride; + return n; } } // namespace detail diff --git a/include/cuco/detail/probing_scheme/probing_scheme_base.cuh b/include/cuco/detail/probing_scheme/probing_scheme_base.cuh index a3d7c148a..77bc2e8d3 100644 --- a/include/cuco/detail/probing_scheme/probing_scheme_base.cuh +++ b/include/cuco/detail/probing_scheme/probing_scheme_base.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/probing_scheme/probing_scheme_impl.inl b/include/cuco/detail/probing_scheme/probing_scheme_impl.inl index 8bed41778..5e24b83ef 100644 --- a/include/cuco/detail/probing_scheme/probing_scheme_impl.inl +++ b/include/cuco/detail/probing_scheme/probing_scheme_impl.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/roaring_bitmap/roaring_bitmap.inl b/include/cuco/detail/roaring_bitmap/roaring_bitmap.inl index ff8dc3d13..61326fdd3 100644 --- a/include/cuco/detail/roaring_bitmap/roaring_bitmap.inl +++ b/include/cuco/detail/roaring_bitmap/roaring_bitmap.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/roaring_bitmap/roaring_bitmap_impl.cuh b/include/cuco/detail/roaring_bitmap/roaring_bitmap_impl.cuh index 4012c118e..7128f5aac 100644 --- a/include/cuco/detail/roaring_bitmap/roaring_bitmap_impl.cuh +++ b/include/cuco/detail/roaring_bitmap/roaring_bitmap_impl.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -23,12 +12,12 @@ #include #include +#include #include #include #include #include #include -#include namespace cuco::experimental::detail { @@ -79,7 +68,7 @@ class roaring_bitmap_impl { { if (this->empty()) { cub::DeviceTransform::Transform( - thrust::constant_iterator(false), + cuda::constant_iterator(false), contained, cuda::std::distance(first, last), cuda::proclaim_return_type([] __device__(auto /* dummy */) { return false; }), @@ -327,7 +316,7 @@ class roaring_bitmap_impl { { if (this->empty()) { cub::DeviceTransform::Transform( - thrust::constant_iterator(false), + cuda::constant_iterator(false), contained, cuda::std::distance(first, last), cuda::proclaim_return_type([] __device__(auto /* dummy */) { return false; }), diff --git a/include/cuco/detail/roaring_bitmap/roaring_bitmap_ref.inl b/include/cuco/detail/roaring_bitmap/roaring_bitmap_ref.inl index 01738ac7f..15d71fd7d 100644 --- a/include/cuco/detail/roaring_bitmap/roaring_bitmap_ref.inl +++ b/include/cuco/detail/roaring_bitmap/roaring_bitmap_ref.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/roaring_bitmap/roaring_bitmap_storage.cuh b/include/cuco/detail/roaring_bitmap/roaring_bitmap_storage.cuh index 2972389d9..0d8e465a3 100644 --- a/include/cuco/detail/roaring_bitmap/roaring_bitmap_storage.cuh +++ b/include/cuco/detail/roaring_bitmap/roaring_bitmap_storage.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/roaring_bitmap/util.cuh b/include/cuco/detail/roaring_bitmap/util.cuh index 00f6cb78f..87841f664 100644 --- a/include/cuco/detail/roaring_bitmap/util.cuh +++ b/include/cuco/detail/roaring_bitmap/util.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/static_map/kernels.cuh b/include/cuco/detail/static_map/kernels.cuh index 43e043dd5..ca7d65e49 100644 --- a/include/cuco/detail/static_map/kernels.cuh +++ b/include/cuco/detail/static_map/kernels.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/static_map/static_map.inl b/include/cuco/detail/static_map/static_map.inl index 9b143d8bb..5c72b5fd2 100644 --- a/include/cuco/detail/static_map/static_map.inl +++ b/include/cuco/detail/static_map/static_map.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -54,8 +43,7 @@ constexpr static_map:: empty_value_sentinel() const noexcept { - return this->empty_value_sentinel_; + return impl_->empty_payload_sentinel(); } template #include #include +#include #include #include #include -#include #include @@ -49,8 +38,7 @@ constexpr static_multimap:: empty_value_sentinel() const noexcept { - return empty_value_sentinel_; + return impl_->empty_payload_sentinel(); } template diff --git a/include/cuco/detail/static_multiset/static_multiset_ref.inl b/include/cuco/detail/static_multiset/static_multiset_ref.inl index 4764bc229..c34644c61 100644 --- a/include/cuco/detail/static_multiset/static_multiset_ref.inl +++ b/include/cuco/detail/static_multiset/static_multiset_ref.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/static_set/static_set.inl b/include/cuco/detail/static_set/static_set.inl index f26d2e7ff..14fee730c 100644 --- a/include/cuco/detail/static_set/static_set.inl +++ b/include/cuco/detail/static_set/static_set.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/include/cuco/detail/static_set/static_set_ref.inl b/include/cuco/detail/static_set/static_set_ref.inl index bc34c40fc..62cf35f9e 100644 --- a/include/cuco/detail/static_set/static_set_ref.inl +++ b/include/cuco/detail/static_set/static_set_ref.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/storage/bucket_storage.inl b/include/cuco/detail/storage/bucket_storage.inl index 9cd91d95d..cfd549e2b 100644 --- a/include/cuco/detail/storage/bucket_storage.inl +++ b/include/cuco/detail/storage/bucket_storage.inl @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/storage/counter_storage.cuh b/include/cuco/detail/storage/counter_storage.cuh index d561781c3..6e0acfcba 100644 --- a/include/cuco/detail/storage/counter_storage.cuh +++ b/include/cuco/detail/storage/counter_storage.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/storage/functors.cuh b/include/cuco/detail/storage/functors.cuh index 7d4d8424d..6e5caa9bd 100644 --- a/include/cuco/detail/storage/functors.cuh +++ b/include/cuco/detail/storage/functors.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/storage/storage.cuh b/include/cuco/detail/storage/storage.cuh index d8ce25e75..6fd498c73 100644 --- a/include/cuco/detail/storage/storage.cuh +++ b/include/cuco/detail/storage/storage.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/storage/storage_base.cuh b/include/cuco/detail/storage/storage_base.cuh index 0f8e013f4..6d0912339 100644 --- a/include/cuco/detail/storage/storage_base.cuh +++ b/include/cuco/detail/storage/storage_base.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -39,7 +28,9 @@ struct custom_deleter { * @param allocator Allocator used for deallocating device storage * @param stream Stream to use for deallocation */ - explicit constexpr custom_deleter(SizeType size, Allocator& allocator, cuda::stream_ref stream) + explicit constexpr custom_deleter(SizeType size, + Allocator const& allocator, + cuda::stream_ref stream) : size_{size}, allocator_{allocator}, stream_{stream} { } @@ -52,7 +43,7 @@ struct custom_deleter { void operator()(pointer ptr) { allocator_.deallocate(ptr, size_, stream_); } SizeType size_; ///< Number of values to delete - Allocator& allocator_; ///< Allocator used deallocating values + Allocator allocator_; ///< Allocator used deallocating values cuda::stream_ref stream_; ///< Stream used for deallocation }; diff --git a/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.cuh b/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.cuh index 9fac68fab..c1a1450bd 100644 --- a/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.cuh +++ b/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.cuh @@ -1,18 +1,6 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights - * reserved. SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -193,13 +181,13 @@ class dynamic_bitset { */ // TODO: this is not a real ref type, to be changed struct storage_ref_type { - const word_type* words_ref_; ///< Words ref + word_type const* words_ref_; ///< Words ref - const rank_type* ranks_true_ref_; ///< Ranks ref for 1 bits - const size_type* selects_true_ref_; ///< Selects ref for 1 bits + rank_type const* ranks_true_ref_; ///< Ranks ref for 1 bits + size_type const* selects_true_ref_; ///< Selects ref for 1 bits - const rank_type* ranks_false_ref_; ///< Ranks ref for 0 bits - const size_type* selects_false_ref_; ///< Selects ref 0 bits + rank_type const* ranks_false_ref_; ///< Ranks ref for 0 bits + size_type const* selects_false_ref_; ///< Selects ref 0 bits }; /** @@ -280,7 +268,7 @@ class dynamic_bitset { */ template [[nodiscard]] __device__ constexpr size_type initial_rank_estimate( - size_type count, const SelectsRef& selects, const RanksRef& ranks) const noexcept; + size_type count, SelectsRef const& selects, RanksRef const& ranks) const noexcept; /** * @brief Subtract rank estimate from input count and return an increment to word_id diff --git a/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.inl b/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.inl index cf1381441..89c1cd7c2 100644 --- a/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.inl +++ b/include/cuco/detail/trie/dynamic_bitset/dynamic_bitset.inl @@ -1,18 +1,6 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights - * reserved. SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -21,9 +9,9 @@ #include #include +#include #include #include -#include namespace cuco { namespace experimental { @@ -227,10 +215,10 @@ constexpr void dynamic_bitset::build_ranks_and_selects( CUCO_CUDA_TRY(cub::DeviceSelect::Flagged(nullptr, temp_storage_bytes, - thrust::make_counting_iterator(0UL), + cuda::make_counting_iterator(0UL), select_markers_begin, select_begin, - thrust::make_discard_iterator(), + cuda::make_discard_iterator(), num_blocks, stream.get())); @@ -238,10 +226,10 @@ constexpr void dynamic_bitset::build_ranks_and_selects( CUCO_CUDA_TRY(cub::DeviceSelect::Flagged(thrust::raw_pointer_cast(d_temp_storage), temp_storage_bytes, - thrust::make_counting_iterator(0UL), + cuda::make_counting_iterator(0UL), select_markers_begin, select_begin, - thrust::make_discard_iterator(), + cuda::make_discard_iterator(), num_blocks, stream.get())); diff --git a/include/cuco/detail/trie/dynamic_bitset/kernels.cuh b/include/cuco/detail/trie/dynamic_bitset/kernels.cuh index a97de651f..3dbec7d0c 100644 --- a/include/cuco/detail/trie/dynamic_bitset/kernels.cuh +++ b/include/cuco/detail/trie/dynamic_bitset/kernels.cuh @@ -1,18 +1,6 @@ /* - * SPDX-FileCopyrightText: Copyright (c) 2023-2025 NVIDIA CORPORATION & AFFILIATES. All rights - * reserved. SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -159,7 +147,7 @@ CUCO_KERNEL void bit_counts_kernel(WordType const* words, * @param words_per_block Number of words in each block */ template -CUCO_KERNEL void encode_ranks_from_prefix_bit_counts(const SizeType* prefix_bit_counts, +CUCO_KERNEL void encode_ranks_from_prefix_bit_counts(SizeType const* prefix_bit_counts, rank* ranks, SizeType num_words, SizeType num_blocks, diff --git a/include/cuco/detail/utility/cuda.cuh b/include/cuco/detail/utility/cuda.cuh index bd2b59619..75cdea974 100644 --- a/include/cuco/detail/utility/cuda.cuh +++ b/include/cuco/detail/utility/cuda.cuh @@ -1,16 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utility/cuda.hpp b/include/cuco/detail/utility/cuda.hpp index ae2613f21..08e1eefc7 100644 --- a/include/cuco/detail/utility/cuda.hpp +++ b/include/cuco/detail/utility/cuda.hpp @@ -1,16 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utility/math.cuh b/include/cuco/detail/utility/math.cuh index c2715f6fa..091e51c48 100644 --- a/include/cuco/detail/utility/math.cuh +++ b/include/cuco/detail/utility/math.cuh @@ -1,16 +1,6 @@ /* - * Copyright (c) 2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utility/memcpy_async.hpp b/include/cuco/detail/utility/memcpy_async.hpp index 2f155f994..a9a654dc9 100644 --- a/include/cuco/detail/utility/memcpy_async.hpp +++ b/include/cuco/detail/utility/memcpy_async.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utility/strong_type.cuh b/include/cuco/detail/utility/strong_type.cuh index d08ddc91a..fcc29500c 100644 --- a/include/cuco/detail/utility/strong_type.cuh +++ b/include/cuco/detail/utility/strong_type.cuh @@ -1,16 +1,6 @@ /* - * Copyright (c) 2021-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utils.cuh b/include/cuco/detail/utils.cuh index d8afe8c13..d312fcf8c 100644 --- a/include/cuco/detail/utils.cuh +++ b/include/cuco/detail/utils.cuh @@ -1,16 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/detail/utils.hpp b/include/cuco/detail/utils.hpp index d0d777ed6..bd5af33b7 100644 --- a/include/cuco/detail/utils.hpp +++ b/include/cuco/detail/utils.hpp @@ -1,16 +1,6 @@ /* - * Copyright (c) 2021-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -24,13 +14,23 @@ namespace cuco { namespace detail { +template +inline constexpr bool has_random_access_iterator_concept = false; + +template +inline constexpr bool + has_random_access_iterator_concept> = + cuda::std::is_base_of_v; + template __host__ __device__ constexpr inline index_type distance(Iterator begin, Iterator end) { using category = typename cuda::std::iterator_traits::iterator_category; - static_assert(cuda::std::is_base_of_v, + static_assert(cuda::std::is_base_of_v || + has_random_access_iterator_concept, "Input iterator should be a random access iterator."); - // `int64_t` instead of arch-dependant `long int` return static_cast(cuda::std::distance(begin, end)); } @@ -48,7 +48,7 @@ __host__ __device__ constexpr inline index_type distance(Iterator begin, Iterato * element < value */ template -constexpr ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value) +constexpr ForwardIt lower_bound(ForwardIt first, ForwardIt last, T const& value) { using diff_type = typename std::iterator_traits::difference_type; diff --git a/include/cuco/dynamic_map.cuh b/include/cuco/dynamic_map.cuh index 5b7839cbd..91a117eba 100644 --- a/include/cuco/dynamic_map.cuh +++ b/include/cuco/dynamic_map.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/extent.cuh b/include/cuco/extent.cuh index 58d1a2a11..468fe8f6e 100644 --- a/include/cuco/extent.cuh +++ b/include/cuco/extent.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/hash_functions.cuh b/include/cuco/hash_functions.cuh index 52911d7a6..3874f9cfb 100644 --- a/include/cuco/hash_functions.cuh +++ b/include/cuco/hash_functions.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/hyperloglog.cuh b/include/cuco/hyperloglog.cuh index 581aa167f..ef12a3e41 100644 --- a/include/cuco/hyperloglog.cuh +++ b/include/cuco/hyperloglog.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -112,9 +101,9 @@ class hyperloglog { hyperloglog(hyperloglog&&) = default; ///< Move constructor /** - * @brief Copy-assignment operator. + * @brief Move-assignment operator. * - * @return Copy of `*this` + * @return Reference to `*this` */ hyperloglog& operator=(hyperloglog&&) = default; diff --git a/include/cuco/hyperloglog_ref.cuh b/include/cuco/hyperloglog_ref.cuh index d6e7475b8..cb4a354fc 100644 --- a/include/cuco/hyperloglog_ref.cuh +++ b/include/cuco/hyperloglog_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/operator.hpp b/include/cuco/operator.hpp index 90985b9fb..931ac6793 100644 --- a/include/cuco/operator.hpp +++ b/include/cuco/operator.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/pair.cuh b/include/cuco/pair.cuh index f5cbe080b..00c14fd5c 100644 --- a/include/cuco/pair.cuh +++ b/include/cuco/pair.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/probing_scheme.cuh b/include/cuco/probing_scheme.cuh index c809794dc..69d77d35b 100644 --- a/include/cuco/probing_scheme.cuh +++ b/include/cuco/probing_scheme.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/roaring_bitmap.cuh b/include/cuco/roaring_bitmap.cuh index bce16680e..d01b990f4 100644 --- a/include/cuco/roaring_bitmap.cuh +++ b/include/cuco/roaring_bitmap.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/roaring_bitmap_ref.cuh b/include/cuco/roaring_bitmap_ref.cuh index 10c18062e..baa756ef4 100644 --- a/include/cuco/roaring_bitmap_ref.cuh +++ b/include/cuco/roaring_bitmap_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/static_map.cuh b/include/cuco/static_map.cuh index b70fa593a..773a00fd3 100644 --- a/include/cuco/static_map.cuh +++ b/include/cuco/static_map.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -67,17 +56,19 @@ namespace cuco { * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes - * @throw If the size of the given payload type is larger than 8 bytes - * @throw If the size of the given slot type is larger than 16 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given payload type is unsupported (4 or 8 bytes, or 16 with sm_90+) + * @throw If the size of the given slot type is larger than `cuco::open_addressing_max_slot_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the given mapped type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` - * @tparam T Type of the mapped values + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam T Type of the mapped values. Requires size 4 or 8 bytes (or 16 with sm_90+) and + * `cuco::is_bitwise_comparable_v` * @tparam Extent Data structure size type * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality @@ -95,15 +86,6 @@ template >, class Storage = cuco::storage<1>> class static_map { - static_assert(sizeof(Key) <= 8, "Container does not support key types larger than 8 bytes."); - - static_assert(sizeof(T) <= 8, "Container does not support payload types larger than 8 bytes."); - - static_assert(cuco::is_bitwise_comparable_v, - "Mapped type must have unique object representations or have been explicitly " - "declared as safe for bitwise comparison via specialization of " - "cuco::is_bitwise_comparable_v."); - using impl_type = detail::open_addressing_impl, Extent, @@ -1244,8 +1226,7 @@ class static_map { void dispatch_insert_or_apply( InputIt first, InputIt last, InitType init, OpType op, RefType ref, cuda::stream_ref stream); - std::unique_ptr impl_; ///< Static map implementation - mapped_type empty_value_sentinel_; ///< Sentinel value that indicates an empty payload + std::unique_ptr impl_; ///< Static map implementation }; } // namespace cuco diff --git a/include/cuco/static_map_ref.cuh b/include/cuco/static_map_ref.cuh index 51c2769ca..15c7bf71c 100644 --- a/include/cuco/static_map_ref.cuh +++ b/include/cuco/static_map_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -34,22 +23,25 @@ namespace cuco { * * @note Concurrent modify and lookup will be supported if both kinds of operators are specified * during the ref construction. - * @note cuCollections data structures always place the slot keys on the left-hand - * side when invoking the key comparison predicate. + * @note cuCollections data structures always place the slot keys on the right-hand + * side when invoking the key comparison predicate, i.e., `pred(query_key, slot_key)`. + * Order-sensitive `KeyEqual` should be used with caution. * @note Ref types are trivially-copyable and are intended to be passed by value. * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes - * @throw If the size of the given payload type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given payload type is unsupported (4 or 8 bytes, or 16 with sm_90+) * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the given payload type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` returning true - * @tparam T Type used for mapped values. Requires `cuco::is_bitwise_comparable_v` returning true + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam T Type used for mapped values. Requires size 4 or 8 bytes (or 16 with sm_90+) and + * `cuco::is_bitwise_comparable_v` * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) @@ -74,14 +66,6 @@ class static_map_ref using impl_type = detail:: open_addressing_ref_impl; - static_assert(sizeof(T) == 4 or sizeof(T) == 8, - "sizeof(mapped_type) must be either 4 bytes or 8 bytes."); - - static_assert( - cuco::is_bitwise_comparable_v, - "Key type must have unique object representations or have been explicitly declared as safe for " - "bitwise comparison via specialization of cuco::is_bitwise_comparable_v."); - public: using key_type = Key; ///< Key type using mapped_type = T; ///< Mapped type diff --git a/include/cuco/static_multimap.cuh b/include/cuco/static_multimap.cuh index 449e6428a..08166b503 100644 --- a/include/cuco/static_multimap.cuh +++ b/include/cuco/static_multimap.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -51,7 +40,7 @@ namespace cuco { * * The singular device-side operations allow individual threads (or cooperative groups) to perform * independent modify or lookup operations from device code. These operations are accessed through - * non-owning, trivially copyable reference types (or "ref"). User can combine any arbitrary + * non-owning, trivially copyable reference types (or "ref"). Users can combine any arbitrary * operators (see options in `include/cuco/operator.hpp`) when creating the ref. Concurrent modify * and lookup will be supported if both kinds of operators are specified during the ref * construction. @@ -63,17 +52,19 @@ namespace cuco { * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes - * @throw If the size of the given payload type is larger than 8 bytes - * @throw If the size of the given slot type is larger than 16 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given payload type is unsupported (4 or 8 bytes, or 16 with sm_90+) + * @throw If the size of the given slot type is larger than `cuco::open_addressing_max_slot_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the given mapped type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` - * @tparam T Type of the mapped values + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam T Type of the mapped values. Requires size 4 or 8 bytes (or 16 with sm_90+) and + * `cuco::is_bitwise_comparable_v` * @tparam Extent Data structure size type * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality @@ -91,15 +82,6 @@ template >, class Storage = cuco::storage<2>> class static_multimap { - static_assert(sizeof(Key) <= 8, "Container does not support key types larger than 8 bytes."); - - static_assert(sizeof(T) <= 8, "Container does not support payload types larger than 8 bytes."); - - static_assert(cuco::is_bitwise_comparable_v, - "Mapped type must have unique object representations or have been explicitly " - "declared as safe for bitwise comparison via specialization of " - "cuco::is_bitwise_comparable_v."); - using impl_type = cuco::detail::open_addressing_impl, Extent, @@ -934,8 +916,7 @@ class static_multimap { [[nodiscard]] auto ref(Operators... ops) const noexcept; private: - std::unique_ptr impl_; ///< Static map implementation - mapped_type empty_value_sentinel_; ///< Sentinel value that indicates an empty payload + std::unique_ptr impl_; ///< Static map implementation }; } // namespace cuco diff --git a/include/cuco/static_multimap_ref.cuh b/include/cuco/static_multimap_ref.cuh index cbe27802f..f8e65ee3a 100644 --- a/include/cuco/static_multimap_ref.cuh +++ b/include/cuco/static_multimap_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -34,22 +23,25 @@ namespace cuco { * * @note Concurrent modify and lookup will be supported if both kinds of operators are specified * during the ref construction. - * @note cuCollections data structures always place the slot keys on the left-hand - * side when invoking the key comparison predicate. + * @note cuCollections data structures always place the slot keys on the right-hand + * side when invoking the key comparison predicate, i.e., `pred(query_key, slot_key)`. + * Order-sensitive `KeyEqual` should be used with caution. * @note Ref types are trivially-copyable and are intended to be passed by value. * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes - * @throw If the size of the given payload type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` + * @throw If the size of the given payload type is unsupported (4 or 8 bytes, or 16 with sm_90+) * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the given payload type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` returning true - * @tparam T Type used for mapped values. Requires `cuco::is_bitwise_comparable_v` returning true + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` + * @tparam T Type used for mapped values. Requires size 4 or 8 bytes (or 16 with sm_90+) and + * `cuco::is_bitwise_comparable_v` * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) @@ -74,11 +66,6 @@ class static_multimap_ref using impl_type = detail:: open_addressing_ref_impl; - static_assert( - cuco::is_bitwise_comparable_v, - "Key type must have unique object representations or have been explicitly declared as safe for " - "bitwise comparison via specialization of cuco::is_bitwise_comparable_v."); - public: using key_type = Key; ///< Key type using mapped_type = T; ///< Mapped type diff --git a/include/cuco/static_multiset.cuh b/include/cuco/static_multiset.cuh index e3d1e358d..77d3b16c9 100644 --- a/include/cuco/static_multiset.cuh +++ b/include/cuco/static_multiset.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -36,7 +25,7 @@ namespace cuco { /** - * @brief A GPU-accelerated, unordered, associative container of possibly non-unique objects + * @brief A GPU-accelerated, unordered, associative container of possibly non-unique keys * * The `static_multiset` supports two types of operations: * - Host-side "bulk" operations @@ -49,7 +38,7 @@ namespace cuco { * * The singular device-side operations allow individual threads (or cooperative groups) to perform * independent modify or lookup operations from device code. These operations are accessed through - * non-owning, trivially copyable reference types (or "ref"). User can combine any arbitrary + * non-owning, trivially copyable reference types (or "ref"). Users can combine any arbitrary * operators (see options in `include/cuco/operator.hpp`) when creating the ref. Concurrent modify * and lookup will be supported if both kinds of operators are specified during the ref * construction. @@ -61,12 +50,13 @@ namespace cuco { * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` * @tparam Extent Data structure size type * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality diff --git a/include/cuco/static_multiset_ref.cuh b/include/cuco/static_multiset_ref.cuh index e23024006..9becb5324 100644 --- a/include/cuco/static_multiset_ref.cuh +++ b/include/cuco/static_multiset_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -36,18 +25,20 @@ namespace cuco { * * @note Concurrent modify and lookup will be supported if both kinds of operators are specified * during the ref construction. - * @note cuCollections data structures always place the slot keys on the left-hand - * side when invoking the key comparison predicate. + * @note cuCollections data structures always place the slot keys on the right-hand + * side when invoking the key comparison predicate, i.e., `pred(query_key, slot_key)`. + * Order-sensitive `KeyEqual` should be used with caution. * @note Ref types are trivially-copyable and are intended to be passed by value. * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` returning true + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) diff --git a/include/cuco/static_set.cuh b/include/cuco/static_set.cuh index e5c1e4cea..a5f4145ea 100644 --- a/include/cuco/static_set.cuh +++ b/include/cuco/static_set.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -54,7 +43,7 @@ namespace cuco { * * The singular device-side operations allow individual threads (or cooperative groups) to perform * independent modify or lookup operations from device code. These operations are accessed through - * non-owning, trivially copyable reference types (or "ref"). User can combine any arbitrary + * non-owning, trivially copyable reference types (or "ref"). Users can combine any arbitrary * operators (see options in `include/cuco/operator.hpp`) when creating the ref. Concurrent modify * and lookup will be supported if both kinds of operators are specified during the ref * construction. @@ -66,12 +55,13 @@ namespace cuco { * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` * @tparam Extent Data structure size type * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality diff --git a/include/cuco/static_set_ref.cuh b/include/cuco/static_set_ref.cuh index 327c95d75..84d15163f 100644 --- a/include/cuco/static_set_ref.cuh +++ b/include/cuco/static_set_ref.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -36,18 +25,20 @@ namespace cuco { * * @note Concurrent modify and lookup will be supported if both kinds of operators are specified * during the ref construction. - * @note cuCollections data structures always place the slot keys on the left-hand - * side when invoking the key comparison predicate. + * @note cuCollections data structures always place the slot keys on the right-hand + * side when invoking the key comparison predicate, i.e., `pred(query_key, slot_key)`. + * Order-sensitive `KeyEqual` should be used with caution. * @note Ref types are trivially-copyable and are intended to be passed by value. * @note `ProbingScheme::cg_size` indicates how many threads are used to handle one independent * device operation. `cg_size == 1` uses the scalar (or non-CG) code paths. * - * @throw If the size of the given key type is larger than 8 bytes + * @throw If the size of the given key type is larger than `cuco::open_addressing_max_key_size` * @throw If the given key type doesn't have unique object representations, i.e., - * `cuco::bitwise_comparable_v == false` + * `cuco::is_bitwise_comparable_v == false` * @throw If the probing scheme type is not inherited from `cuco::detail::probing_scheme_base` * - * @tparam Key Type used for keys. Requires `cuco::is_bitwise_comparable_v` returning true + * @tparam Key Type used for keys. Requires `sizeof(Key) <= cuco::open_addressing_max_key_size` and + * `cuco::is_bitwise_comparable_v` * @tparam Scope The scope in which operations will be performed by individual threads. * @tparam KeyEqual Binary callable type used to compare two keys for equality * @tparam ProbingScheme Probing scheme (see `include/cuco/probing_scheme.cuh` for options) diff --git a/include/cuco/storage.cuh b/include/cuco/storage.cuh index 4995aaabb..abaecb5e5 100644 --- a/include/cuco/storage.cuh +++ b/include/cuco/storage.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/types.cuh b/include/cuco/types.cuh index 5225af56a..ca353c861 100644 --- a/include/cuco/types.cuh +++ b/include/cuco/types.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/utility/allocator.hpp b/include/cuco/utility/allocator.hpp index 63980cde3..af9d8d4b7 100644 --- a/include/cuco/utility/allocator.hpp +++ b/include/cuco/utility/allocator.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/utility/cuda_thread_scope.cuh b/include/cuco/utility/cuda_thread_scope.cuh index 906605a14..f18a60a47 100644 --- a/include/cuco/utility/cuda_thread_scope.cuh +++ b/include/cuco/utility/cuda_thread_scope.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/utility/error.hpp b/include/cuco/utility/error.hpp index eb6a5f2e3..3f6bfd505 100644 --- a/include/cuco/utility/error.hpp +++ b/include/cuco/utility/error.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -51,7 +40,7 @@ struct cuda_error : public std::runtime_error { * * @param message The error char array used to construct `cuda_error` */ - cuda_error(const char* message) : std::runtime_error(message) {} + cuda_error(char const* message) : std::runtime_error(message) {} /** * @brief Constructs a `cuda_error` object with the given `message` string. * diff --git a/include/cuco/utility/fast_int.cuh b/include/cuco/utility/fast_int.cuh index 2f5fdc6fe..ac0ffe389 100644 --- a/include/cuco/utility/fast_int.cuh +++ b/include/cuco/utility/fast_int.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/include/cuco/utility/key_generator.cuh b/include/cuco/utility/key_generator.cuh index e0cbfcbd4..86fba1a21 100644 --- a/include/cuco/utility/key_generator.cuh +++ b/include/cuco/utility/key_generator.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -20,6 +9,7 @@ #include #include +#include #include #include // TODO include instead once available #include @@ -28,8 +18,6 @@ #include #include #include -#include -#include #include #include #include @@ -291,14 +279,14 @@ class key_generator { size_t seed = this->rng_(); thrust::transform(exec_policy, - thrust::make_counting_iterator(0), - thrust::make_counting_iterator(num_keys), + cuda::make_counting_iterator(0), + cuda::make_counting_iterator(num_keys), out_begin, detail::generate_uniform_fn{num_keys, dist, seed}); } else if constexpr (std::is_same_v) { size_t num_keys = cuda::std::distance(out_begin, out_end); - thrust::counting_iterator seq(this->rng_()); + cuda::counting_iterator seq(this->rng_()); thrust::transform(exec_policy, seq, @@ -374,7 +362,7 @@ class key_generator { if (keep_prob < 1.0) { size_t const num_keys = cuda::std::distance(begin, end); - thrust::counting_iterator seeds(rng_()); + cuda::counting_iterator seeds(rng_()); thrust::transform_if(exec_policy, seeds, @@ -469,8 +457,8 @@ generate_random_byte_sequences(std::size_t n_sequences, // generate random lengths thrust::transform(exec_pol, - thrust::counting_iterator(0), - thrust::counting_iterator(lengths.size()), + cuda::counting_iterator(0), + cuda::counting_iterator(lengths.size()), lengths.begin(), cuda::proclaim_return_type( [min_sequence_length, max_sequence_length, seed] __device__(std::size_t idx) { @@ -508,8 +496,8 @@ generate_random_byte_sequences(std::size_t n_sequences, // fill the byte buffer with random data thrust::transform(exec_pol, - thrust::counting_iterator(0), - thrust::counting_iterator(bytes.size()), + cuda::counting_iterator(0), + cuda::counting_iterator(bytes.size()), bytes.begin(), cuda::proclaim_return_type([seed] __device__(std::size_t idx) { RNG rng; diff --git a/include/cuco/utility/reduction_functors.cuh b/include/cuco/utility/reduction_functors.cuh index eaf6b03a0..bdd851e05 100644 --- a/include/cuco/utility/reduction_functors.cuh +++ b/include/cuco/utility/reduction_functors.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once @@ -34,7 +23,7 @@ struct plus { * in the payload. */ template - __device__ void operator()(cuda::atomic_ref payload_ref, const T& val) + __device__ void operator()(cuda::atomic_ref payload_ref, T const& val) { payload_ref.fetch_add(val, cuda::memory_order_relaxed); } @@ -55,7 +44,7 @@ struct max { * in the payload. */ template - __device__ void operator()(cuda::atomic_ref payload_ref, const T& val) + __device__ void operator()(cuda::atomic_ref payload_ref, T const& val) { payload_ref.fetch_max(val, cuda::memory_order_relaxed); } @@ -76,7 +65,7 @@ struct min { * in the payload. */ template - __device__ void operator()(cuda::atomic_ref payload_ref, const T& val) + __device__ void operator()(cuda::atomic_ref payload_ref, T const& val) { payload_ref.fetch_min(val, cuda::memory_order_relaxed); } diff --git a/include/cuco/utility/traits.hpp b/include/cuco/utility/traits.hpp index abb1d4661..2a36e2a24 100644 --- a/include/cuco/utility/traits.hpp +++ b/include/cuco/utility/traits.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 205b0100b..ae98b1216 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,17 +1,8 @@ #============================================================================= -# Copyright (c) 2018-2026, NVIDIA CORPORATION. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# cmake-format: off +# SPDX-FileCopyrightText: Copyright (c) 2018-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 +# cmake-format: on #============================================================================= cmake_minimum_required(VERSION 3.23.1 FATAL_ERROR) @@ -50,6 +41,7 @@ endfunction(ConfigureTest) # - utility tests --------------------------------------------------------------------------------- ConfigureTest(UTILITY_TEST utility/extent_test.cu + utility/next_prime_test.cu utility/storage_test.cu utility/fast_int_test.cu utility/hash_test.cu @@ -153,9 +145,12 @@ ConfigureTest(HYPERLOGLOG_TEST # - bloom_filter ---------------------------------------------------------------------------------- ConfigureTest(BLOOM_FILTER_TEST bloom_filter/unique_sequence_test.cu - bloom_filter/arrow_policy_test.cu bloom_filter/variable_cg_test.cu - bloom_filter/merge_intersect_test.cu) + bloom_filter/merge_intersect_test.cu + bloom_filter/arrow_compat_test.cu + bloom_filter/bulk_ref_equivalence_test.cu + bloom_filter/layout_equivalence_test.cu + bloom_filter/persisting_l2_access_test.cu) ################################################################################################### # - roaring_bitmap --------------------------------------------------------------------------------- diff --git a/tests/bloom_filter/arrow_policy_test.cu b/tests/bloom_filter/arrow_compat_test.cu similarity index 77% rename from tests/bloom_filter/arrow_policy_test.cu rename to tests/bloom_filter/arrow_compat_test.cu index 1ca349162..e898c7b44 100644 --- a/tests/bloom_filter/arrow_policy_test.cu +++ b/tests/bloom_filter/arrow_compat_test.cu @@ -1,31 +1,26 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ +// Verifies that a `bloom_filter_policy` instantiation with Apache Arrow's Block-Split Bloom +// Filter parameters (256-bit blocks of 8 x uint32_t, 8 fingerprint bits per key, fully horizontal +// add, fully vertical contains) produces byte-identical bitsets to a precomputed Arrow reference. + #include #include +#include #include #include -#include #include -#include +#include #include +#include +#include namespace { @@ -73,11 +68,11 @@ thrust::device_vector get_arrow_filter_reference_bitset() }; if constexpr (std::is_same_v) { - return reference_bitsets[0]; // int32 + return reference_bitsets[0]; } else if constexpr (std::is_same_v) { - return reference_bitsets[1]; // int64 + return reference_bitsets[1]; } else if constexpr (std::is_same_v) { - return reference_bitsets[2]; // float + return reference_bitsets[2]; } else { throw std::invalid_argument("Reference bitsets available for int32, int64, float only.\n\n"); } @@ -93,11 +88,11 @@ std::pair get_arrow_filter_test_settings() }; if constexpr (std::is_same_v) { - return test_settings[0]; // int32 + return test_settings[0]; } else if constexpr (std::is_same_v) { - return test_settings[1]; // int64 + return test_settings[1]; } else if constexpr (std::is_same_v) { - return test_settings[2]; // float + return test_settings[2]; } else { throw std::invalid_argument("Test settings available for int32, int64, float only.\n\n"); } @@ -119,20 +114,14 @@ void test_filter_bitset(Filter& filter, size_t num_keys) using key_type = typename Filter::key_type; using word_type = typename Filter::word_type; - // Generate keys auto const h_keys = sequence_values(num_keys); thrust::device_vector d_keys(h_keys.begin(), h_keys.end()); - // Insert to the bloom filter filter.add(d_keys.begin(), d_keys.begin() + num_keys); - // Get reference words device_vector auto const reference_words = get_arrow_filter_reference_bitset(); + auto const num_words = filter.block_extent() * filter.words_per_block; - // Number of words in the filter - auto const num_words = filter.block_extent() * filter.words_per_block; - - // Get the bitset thrust::device_vector filter_words(filter.data(), filter.data() + num_words); REQUIRE(cuco::test::equal( @@ -144,17 +133,19 @@ void test_filter_bitset(Filter& filter, size_t num_keys) }))); } -TEMPLATE_TEST_CASE_SIG("bloom_filter arrow filter policy bitset validation", +TEMPLATE_TEST_CASE_SIG("bloom_filter arrow-compatible policy bitset validation", "", (class Key), (int32_t), (int64_t), (float)) { - // Get test settings auto const [sub_filters, num_keys] = get_arrow_filter_test_settings(); - using policy_type = cuco::arrow_filter_policy; + // Apache Arrow Block-Split Bloom Filter parameters: 256-bit blocks (8 x uint32_t), 8 fingerprint + // bits per key, fully horizontal add (Theta=8) and fully vertical contains (Phi=8). + using policy_type = + cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 1, 8>; cuco::bloom_filter, cuda::thread_scope_device, policy_type> filter{ sub_filters}; diff --git a/tests/bloom_filter/bulk_ref_equivalence_test.cu b/tests/bloom_filter/bulk_ref_equivalence_test.cu new file mode 100644 index 000000000..7329bc0b9 --- /dev/null +++ b/tests/bloom_filter/bulk_ref_equivalence_test.cu @@ -0,0 +1,245 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// Host-bulk vs device-ref equivalence. The host-bulk APIs route through `add_n` / +// `contains_n` in `kernels.cuh`; the device-ref APIs route through scalar / CG / CG-range +// methods on `bloom_filter_ref` directly. Both paths share `policy_.array_pattern(...)`, +// so given the same input keys both must produce byte-identical filter bitsets (add side) +// and byte-identical query results (contains side). Catches regressions like the +// `add_coop(group, first, idx, is_valid)` iterator-formation UB fix where one path +// silently diverged from the other. + +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include + +#include +#include + +namespace cg = cooperative_groups; + +using size_type = int32_t; + +template +__global__ void scalar_add_kernel(Ref ref, Key const* keys, size_type n) +{ + auto const i = static_cast(blockIdx.x) * blockDim.x + threadIdx.x; + if (i < n) { ref.add(keys[i]); } +} + +template +__global__ void cg_add_kernel(Ref ref, Key const* keys, size_type n) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + auto const idx = static_cast((blockIdx.x * blockDim.x + threadIdx.x) / CGSize); + if (idx < n) { ref.add(tile, keys[idx]); } +} + +template +__global__ void cg_range_add_kernel(Ref ref, Key const* first, Key const* last) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + ref.add(tile, first, last); +} + +template +__global__ void scalar_contains_kernel(Ref ref, Key const* keys, size_type n, bool* out) +{ + auto const i = static_cast(blockIdx.x) * blockDim.x + threadIdx.x; + if (i < n) { out[i] = ref.contains(keys[i]); } +} + +template +__global__ void cg_contains_kernel(Ref ref, Key const* keys, size_type n, bool* out) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + auto const idx = static_cast((blockIdx.x * blockDim.x + threadIdx.x) / CGSize); + if (idx < n) { + auto const found = ref.contains(tile, keys[idx]); + if (tile.thread_rank() == 0) { out[idx] = found; } + } +} + +template +__global__ void cg_range_contains_kernel(Ref ref, Key const* first, Key const* last, bool* out) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + ref.contains(tile, first, last, out); +} + +TEMPLATE_TEST_CASE_SIG( + "bloom_filter: host bulk add equals device ref add", + "", + ((class Key, class Policy), Key, Policy), + (int32_t, cuco::bloom_filter_policy), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 1, 1, 1, 1, 1, 1>), + (uint64_t, + cuco::bloom_filter_policy, uint32_t, 8, 12, 8, 1, 4, 2>), + (float, cuco::bloom_filter_policy, uint64_t, 4, 4, 2, 2, 1, 2>), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 2, 2, 1, 8>)) +{ + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, Policy>; + // Prime: forces a partial boundary tile (mix of valid + invalid lanes) on every + // CGSize > 1 path, exercising the cooperative is_valid mask logic. + constexpr size_type num_keys = 397; + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end()); + auto const keys_raw = thrust::raw_pointer_cast(keys.data()); + + SECTION("scalar ref.add") + { + auto filter_a = filter_type{1000}; + auto filter_b = filter_type{1000}; + + filter_a.add(keys.begin(), keys.end()); + + auto ref = filter_b.ref(); + constexpr int block_size = 128; + int const grid_size = (num_keys + block_size - 1) / block_size; + scalar_add_kernel<<>>(ref, keys_raw, num_keys); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + auto const total_words = + static_cast(filter_a.block_extent()) * filter_type::words_per_block; + REQUIRE(thrust::equal( + thrust::device, filter_a.data(), filter_a.data() + total_words, filter_b.data())); + } + + SECTION("CG ref.add(group, key)") + { + constexpr int CGSize = Policy::add_horizontal_layout; + auto filter_a = filter_type{1000}; + auto filter_b = filter_type{1000}; + + filter_a.add(keys.begin(), keys.end()); + + auto ref = filter_b.ref(); + constexpr int block_size = 128; + int const grid_size = (num_keys * CGSize + block_size - 1) / block_size; + cg_add_kernel<<>>(ref, keys_raw, num_keys); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + auto const total_words = + static_cast(filter_a.block_extent()) * filter_type::words_per_block; + REQUIRE(thrust::equal( + thrust::device, filter_a.data(), filter_a.data() + total_words, filter_b.data())); + } + + SECTION("CG ref.add(group, first, last)") + { + constexpr int CGSize = Policy::add_horizontal_layout; + auto filter_a = filter_type{1000}; + auto filter_b = filter_type{1000}; + + filter_a.add(keys.begin(), keys.end()); + + auto ref = filter_b.ref(); + // Single tile processes the entire range cooperatively. + cg_range_add_kernel<<<1, CGSize>>>(ref, keys_raw, keys_raw + num_keys); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + auto const total_words = + static_cast(filter_a.block_extent()) * filter_type::words_per_block; + REQUIRE(thrust::equal( + thrust::device, filter_a.data(), filter_a.data() + total_words, filter_b.data())); + } +} + +TEMPLATE_TEST_CASE_SIG( + "bloom_filter: host bulk contains equals device ref contains", + "", + ((class Key, class Policy), Key, Policy), + (int32_t, cuco::bloom_filter_policy), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 1, 1, 1, 1, 1, 1>), + (uint64_t, + cuco::bloom_filter_policy, uint32_t, 8, 12, 8, 1, 4, 2>), + (float, cuco::bloom_filter_policy, uint64_t, 4, 4, 2, 2, 1, 2>), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 2, 2, 1, 8>)) +{ + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, Policy>; + // Primes: force partial boundary tiles on both insert and probe ranges across every + // CGSize > 1 path. + constexpr size_type num_keys = 397; + constexpr size_type num_probe = 797; // mix of inserted (first ~half) and non-inserted (rest) + + auto filter = filter_type{1000}; + + thrust::device_vector insert_keys(num_keys); + thrust::sequence(thrust::device, insert_keys.begin(), insert_keys.end()); + filter.add(insert_keys.begin(), insert_keys.end()); + + thrust::device_vector probe_keys(num_probe); + thrust::sequence(thrust::device, probe_keys.begin(), probe_keys.end()); + auto const probe_raw = thrust::raw_pointer_cast(probe_keys.data()); + + thrust::device_vector bulk_result(num_probe); + filter.contains(probe_keys.begin(), probe_keys.end(), bulk_result.begin()); + + SECTION("scalar ref.contains") + { + thrust::device_vector ref_result(num_probe); + auto ref = filter.ref(); + constexpr int block_size = 128; + int const grid_size = (num_probe + block_size - 1) / block_size; + scalar_contains_kernel<<>>( + ref, probe_raw, num_probe, thrust::raw_pointer_cast(ref_result.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(cuco::test::equal( + bulk_result.begin(), bulk_result.end(), ref_result.begin(), cuda::std::equal_to{})); + } + + SECTION("CG ref.contains(group, key)") + { + constexpr int CGSize = Policy::contains_horizontal_layout; + thrust::device_vector ref_result(num_probe); + auto ref = filter.ref(); + constexpr int block_size = 128; + int const grid_size = (num_probe * CGSize + block_size - 1) / block_size; + cg_contains_kernel<<>>( + ref, probe_raw, num_probe, thrust::raw_pointer_cast(ref_result.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(cuco::test::equal( + bulk_result.begin(), bulk_result.end(), ref_result.begin(), cuda::std::equal_to{})); + } + + SECTION("device-range CG ref.contains(group, first, last, out)") + { + constexpr int CGSize = Policy::contains_horizontal_layout; + thrust::device_vector ref_result(num_probe); + auto ref = filter.ref(); + // Single tile processes the entire range cooperatively. + cg_range_contains_kernel<<<1, CGSize>>>( + ref, probe_raw, probe_raw + num_probe, thrust::raw_pointer_cast(ref_result.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(cuco::test::equal( + bulk_result.begin(), bulk_result.end(), ref_result.begin(), cuda::std::equal_to{})); + } +} diff --git a/tests/bloom_filter/layout_equivalence_test.cu b/tests/bloom_filter/layout_equivalence_test.cu new file mode 100644 index 000000000..ce1e91b53 --- /dev/null +++ b/tests/bloom_filter/layout_equivalence_test.cu @@ -0,0 +1,205 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// Byte-equal bitsets across (AddH, AddV) layout permutations, identical contains results +// across (ContainsH, ContainsV) layout permutations, equivalence between dynamic vs static +// `cuco::extent`, and invariance under the ConditionalAdd / EarlyExitContains policy knobs +// (both are optimizations that must not change results) -- all for fixed +// (Hash, Word, WordsPerBlock, PatternBits, keys). + +#include + +#include +#include + +#include +#include +#include +#include + +#include +#include + +#include +#include + +TEMPLATE_TEST_CASE_SIG( + "bloom_filter: bitset is invariant under (AddH, AddV) layout permutations", + "", + ((class AltPolicy), AltPolicy), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 1, 8, 1, 8>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 2, 4, 1, 8>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 4, 2, 1, 8>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 2, 2, 1, 8>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 4, 1, 1, 8>)) +{ + using Key = int32_t; + using default_policy = cuco::bloom_filter_policy; + using filter_default_t = + cuco::bloom_filter, cuda::thread_scope_device, default_policy>; + using filter_alt_t = + cuco::bloom_filter, cuda::thread_scope_device, AltPolicy>; + + constexpr int32_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + + auto filter_default = filter_default_t{num_blocks}; + auto filter_alt = filter_alt_t{num_blocks}; + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end()); + + filter_default.add(keys.begin(), keys.end()); + filter_alt.add(keys.begin(), keys.end()); + + auto const total_words = + static_cast(filter_default.block_extent()) * filter_default_t::words_per_block; + REQUIRE(thrust::equal( + thrust::device, filter_default.data(), filter_default.data() + total_words, filter_alt.data())); +} + +TEMPLATE_TEST_CASE_SIG( + "bloom_filter: contains results are invariant under (ContainsH, ContainsV) permutations", + "", + ((class AltPolicy), AltPolicy), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 8, 1>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 2, 4>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 4, 2>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 2, 2>), + (cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 1, 4>)) +{ + using Key = int32_t; + using default_policy = cuco::bloom_filter_policy; + using filter_default_t = + cuco::bloom_filter, cuda::thread_scope_device, default_policy>; + using filter_alt_t = + cuco::bloom_filter, cuda::thread_scope_device, AltPolicy>; + + constexpr int32_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + constexpr int32_t num_probe = 800; // mix of inserted and disjoint + + auto filter_default = filter_default_t{num_blocks}; + auto filter_alt = filter_alt_t{num_blocks}; + + thrust::device_vector insert_keys(num_keys); + thrust::sequence(thrust::device, insert_keys.begin(), insert_keys.end()); + filter_default.add(insert_keys.begin(), insert_keys.end()); + filter_alt.add(insert_keys.begin(), insert_keys.end()); + + thrust::device_vector probe_keys(num_probe); + thrust::sequence(thrust::device, probe_keys.begin(), probe_keys.end()); + + thrust::device_vector result_default(num_probe); + thrust::device_vector result_alt(num_probe); + filter_default.contains(probe_keys.begin(), probe_keys.end(), result_default.begin()); + filter_alt.contains(probe_keys.begin(), probe_keys.end(), result_alt.begin()); + + REQUIRE(thrust::equal( + thrust::device, result_default.begin(), result_default.end(), result_alt.begin())); +} + +TEST_CASE("bloom_filter: bitset is invariant under dynamic vs static cuco::extent", "") +{ + using Key = int32_t; + using Policy = cuco::bloom_filter_policy; + constexpr std::size_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + + using dynamic_extent_t = cuco::extent; + using static_extent_t = cuco::extent; + using filter_dynamic_t = + cuco::bloom_filter; + using filter_static_t = + cuco::bloom_filter; + + auto filter_dynamic = filter_dynamic_t{num_blocks}; + auto filter_static = filter_static_t{static_extent_t{}}; + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end()); + + filter_dynamic.add(keys.begin(), keys.end()); + filter_static.add(keys.begin(), keys.end()); + + auto const total_words = num_blocks * filter_dynamic_t::words_per_block; + REQUIRE(thrust::equal(thrust::device, + filter_dynamic.data(), + filter_dynamic.data() + total_words, + filter_static.data())); +} + +TEST_CASE("bloom_filter: bitset is invariant under ConditionalAdd", "") +{ + using Key = int32_t; + // Same layout, ConditionalAdd off vs on. The read-before-atomic skip must yield the same bits. + using filter_off_t = cuco::bloom_filter, + cuda::thread_scope_device, + cuco::bloom_filter_policy>; + using filter_on_t = cuco::bloom_filter< + Key, + cuco::extent, + cuda::thread_scope_device, + cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 1, 8, true>>; + + constexpr int32_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + + auto filter_off = filter_off_t{num_blocks}; + auto filter_on = filter_on_t{num_blocks}; + + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end()); + + // Add twice so the second pass hits already-set words, exercising the ConditionalAdd skip. + filter_off.add(keys.begin(), keys.end()); + filter_off.add(keys.begin(), keys.end()); + filter_on.add(keys.begin(), keys.end()); + filter_on.add(keys.begin(), keys.end()); + + auto const total_words = + static_cast(filter_off.block_extent()) * filter_off_t::words_per_block; + REQUIRE(thrust::equal( + thrust::device, filter_off.data(), filter_off.data() + total_words, filter_on.data())); +} + +TEST_CASE("bloom_filter: contains results are invariant under EarlyExitContains", "") +{ + using Key = int32_t; + // ContainsHorizontalLayout > 1 so the compare_patterns early-exit branch is actually used. + using filter_off_t = cuco::bloom_filter< + Key, + cuco::extent, + cuda::thread_scope_device, + cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 8, 1>>; + using filter_on_t = cuco::bloom_filter< + Key, + cuco::extent, + cuda::thread_scope_device, + cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 8, 1, false, true>>; + + constexpr int32_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + constexpr int32_t num_probe = 800; // mix of inserted and disjoint, so misses fire the early exit + + auto filter_off = filter_off_t{num_blocks}; + auto filter_on = filter_on_t{num_blocks}; + + thrust::device_vector insert_keys(num_keys); + thrust::sequence(thrust::device, insert_keys.begin(), insert_keys.end()); + filter_off.add(insert_keys.begin(), insert_keys.end()); + filter_on.add(insert_keys.begin(), insert_keys.end()); + + thrust::device_vector probe_keys(num_probe); + thrust::sequence(thrust::device, probe_keys.begin(), probe_keys.end()); + + thrust::device_vector result_off(num_probe); + thrust::device_vector result_on(num_probe); + filter_off.contains(probe_keys.begin(), probe_keys.end(), result_off.begin()); + filter_on.contains(probe_keys.begin(), probe_keys.end(), result_on.begin()); + + REQUIRE(thrust::equal(thrust::device, result_off.begin(), result_off.end(), result_on.begin())); +} diff --git a/tests/bloom_filter/merge_intersect_test.cu b/tests/bloom_filter/merge_intersect_test.cu index cc5d48c74..371241abb 100644 --- a/tests/bloom_filter/merge_intersect_test.cu +++ b/tests/bloom_filter/merge_intersect_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -20,8 +9,8 @@ #include #include +#include #include -#include #include #include @@ -42,29 +31,30 @@ void test_merge_intersect(Filter& filter_a, size_type num_keys = capacity; size_type half_keys = capacity / 2; - // Set A: [0, capacity) - auto keys_a_begin = thrust::counting_iterator{static_cast(0)}; + auto to_key = cuda::proclaim_return_type([] __device__(size_type i) { return Key(i); }); + + auto keys_a_begin = cuda::make_transform_iterator(cuda::counting_iterator{0}, to_key); auto keys_a_end = keys_a_begin + num_keys; - // Set B: [capacity/2, capacity + capacity/2) (50% overlap with A) - auto keys_b_begin = thrust::counting_iterator{static_cast(half_keys)}; - auto keys_b_end = keys_b_begin + num_keys; + auto keys_b_begin = + cuda::make_transform_iterator(cuda::counting_iterator{half_keys}, to_key); + auto keys_b_end = keys_b_begin + num_keys; - // Intersection: [capacity/2, capacity) - auto keys_intersection_begin = thrust::counting_iterator{static_cast(half_keys)}; - auto keys_intersection_end = keys_intersection_begin + half_keys; + auto keys_intersection_begin = + cuda::make_transform_iterator(cuda::counting_iterator{half_keys}, to_key); + auto keys_intersection_end = keys_intersection_begin + half_keys; - // Union: [0, capacity + capacity/2) - auto keys_union_begin = thrust::counting_iterator{static_cast(0)}; - auto keys_union_end = keys_union_begin + num_keys + half_keys; + auto keys_union_begin = + cuda::make_transform_iterator(cuda::counting_iterator{0}, to_key); + auto keys_union_end = keys_union_begin + num_keys + half_keys; - // Unique A: [0, capacity/2) - auto keys_unique_a_begin = thrust::counting_iterator{static_cast(0)}; - auto keys_unique_a_end = keys_unique_a_begin + half_keys; + auto keys_unique_a_begin = + cuda::make_transform_iterator(cuda::counting_iterator{0}, to_key); + auto keys_unique_a_end = keys_unique_a_begin + half_keys; - // Unique B: [capacity, capacity + capacity/2) - auto keys_unique_b_begin = thrust::counting_iterator{static_cast(num_keys)}; - auto keys_unique_b_end = keys_unique_b_begin + half_keys; + auto keys_unique_b_begin = + cuda::make_transform_iterator(cuda::counting_iterator{num_keys}, to_key); + auto keys_unique_b_end = keys_unique_b_begin + half_keys; // Helper to fill filters auto refill_filters = [&]() { @@ -161,42 +151,17 @@ TEMPLATE_TEST_CASE_SIG( "bloom_filter merge and intersect tests", "", ((class Key, class Policy), Key, Policy), - (int32_t, cuco::default_filter_policy, uint32_t, 1>), - (int32_t, cuco::default_filter_policy, uint32_t, 8>), - (int64_t, cuco::default_filter_policy, uint64_t, 1>), - (int64_t, cuco::default_filter_policy, uint64_t, 8>)) + (int32_t, cuco::bloom_filter_policy), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 1, 1, 1, 1, 1, 1>), + (int64_t, + cuco::bloom_filter_policy, uint64_t, 1, 1, 1, 1, 1, 1>), + (int64_t, cuco::bloom_filter_policy, uint64_t, 8, 8>)) { using filter_type = cuco::bloom_filter, cuda::thread_scope_device, Policy>; constexpr size_type capacity{1000}; - uint32_t pattern_bits = Policy::words_per_block + GENERATE(0, 1); - - // some parameter combinations might be invalid so we skip them - try { - [[maybe_unused]] auto policy = Policy{pattern_bits}; - } catch (std::exception const& e) { - SKIP(e.what()); - } - - auto filter_a = filter_type{capacity, {}, {pattern_bits}}; - auto filter_b = filter_type{capacity, {}, {pattern_bits}}; - auto filter_c = filter_type{static_cast(capacity) * 2, {}, {pattern_bits}}; - - test_merge_intersect(filter_a, filter_b, filter_c, capacity); -} - -TEMPLATE_TEST_CASE_SIG("bloom_filter merge and intersect arrow tests", - "", - ((class Key, class Policy), Key, Policy), - (int32_t, cuco::arrow_filter_policy), - (int64_t, cuco::arrow_filter_policy), - (float, cuco::arrow_filter_policy)) -{ - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, Policy>; - constexpr size_type capacity{1000}; // Must match capacity used in helper logic - auto filter_a = filter_type{capacity}; auto filter_b = filter_type{capacity}; auto filter_c = filter_type{static_cast(capacity) * 2}; diff --git a/tests/bloom_filter/persisting_l2_access_test.cu b/tests/bloom_filter/persisting_l2_access_test.cu new file mode 100644 index 000000000..326621afc --- /dev/null +++ b/tests/bloom_filter/persisting_l2_access_test.cu @@ -0,0 +1,153 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +// `PersistingL2Access` is a code-generation hint for global-memory filter words. It must preserve +// observable Bloom-filter results, and it must be safe to use with a `bloom_filter_ref` backed by +// shared memory where L2 access properties are intentionally ignored. + +#include + +#include +#include + +#include +#include +#include +#include + +#include + +#include + +#include +#include + +namespace cg = cooperative_groups; + +namespace { + +using key_type = int32_t; + +using shared_ref_type = cuco::bloom_filter_ref, + cuda::thread_scope_block, + cuco::bloom_filter_policy, + uint32_t, + 8, + 8, + 8, + 1, + 1, + 8, + false, + false, + true>>; + +__global__ void shared_memory_persisting_l2_smoke_kernel(int* results) +{ + __shared__ typename shared_ref_type::filter_block_type storage[1]; + + auto block = cg::this_thread_block(); + shared_ref_type filter{storage, cuco::extent{1}, {}, {}}; + + filter.clear(block); + block.sync(); + + if (threadIdx.x == 0) { + filter.add(42); + filter.add(1337); + } + block.sync(); + + if (threadIdx.x == 0) { + results[0] = filter.contains(42) ? 1 : 0; + results[1] = filter.contains(1337) ? 1 : 0; + } +} + +} // namespace + +TEST_CASE("bloom_filter: PersistingL2Access preserves global-memory results", "") +{ + using normal_filter_type = cuco::bloom_filter, + cuda::thread_scope_device, + cuco::bloom_filter_policy>; + using persisting_l2_filter_type = + cuco::bloom_filter, + cuda::thread_scope_device, + cuco::bloom_filter_policy, + uint32_t, + 8, + 8, + 8, + 1, + 1, + 8, + false, + false, + true>>; + + STATIC_REQUIRE_FALSE(cuco::bloom_filter_policy::persisting_l2_access); + STATIC_REQUIRE_FALSE((cuco::bloom_filter_policy::persisting_l2_access)); + STATIC_REQUIRE((cuco::bloom_filter_policy, + uint32_t, + 8, + 8, + 8, + 1, + 1, + 8, + false, + false, + true>::persisting_l2_access)); + + constexpr int32_t num_blocks = 1'000; + constexpr int32_t num_keys = 400; + constexpr int32_t num_probe = 800; + + auto normal_filter = normal_filter_type{num_blocks}; + auto persisting_l2_filter = persisting_l2_filter_type{num_blocks}; + + thrust::device_vector insert_keys(num_keys); + thrust::sequence(thrust::device, insert_keys.begin(), insert_keys.end()); + + normal_filter.add(insert_keys.begin(), insert_keys.end()); + persisting_l2_filter.add(insert_keys.begin(), insert_keys.end()); + + auto const total_words = + static_cast(normal_filter.block_extent()) * normal_filter_type::words_per_block; + REQUIRE(thrust::equal(thrust::device, + normal_filter.data(), + normal_filter.data() + total_words, + persisting_l2_filter.data())); + + thrust::device_vector probe_keys(num_probe); + thrust::sequence(thrust::device, probe_keys.begin(), probe_keys.end()); + + thrust::device_vector normal_results(num_probe); + thrust::device_vector persisting_l2_results(num_probe); + normal_filter.contains(probe_keys.begin(), probe_keys.end(), normal_results.begin()); + persisting_l2_filter.contains( + probe_keys.begin(), probe_keys.end(), persisting_l2_results.begin()); + + REQUIRE(thrust::equal( + thrust::device, normal_results.begin(), normal_results.end(), persisting_l2_results.begin())); +} + +TEST_CASE("bloom_filter: PersistingL2Access is safe for shared-memory refs", "") +{ + thrust::device_vector results(2, 0); + + shared_memory_persisting_l2_smoke_kernel<<<1, 32>>>(thrust::raw_pointer_cast(results.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(static_cast(results[0]) == 1); + REQUIRE(static_cast(results[1]) == 1); +} diff --git a/tests/bloom_filter/unique_sequence_test.cu b/tests/bloom_filter/unique_sequence_test.cu index 0e5314898..31c1cb051 100644 --- a/tests/bloom_filter/unique_sequence_test.cu +++ b/tests/bloom_filter/unique_sequence_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,9 +8,9 @@ #include #include +#include #include #include -#include #include #include @@ -67,16 +56,16 @@ void test_unique_sequence(Filter& filter, size_type num_keys) SECTION("All conditionally inserted keys should be contained") { - filter.add_if(keys.begin(), keys.end(), thrust::counting_iterator(0), is_even); + filter.add_if(keys.begin(), keys.end(), cuda::counting_iterator(0), is_even); filter.contains_if(keys.begin(), keys.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), is_even, contained.begin()); REQUIRE(cuco::test::equal( contained.begin(), contained.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto const& idx_contained, auto const& idx) { return ((idx % 2) == 0) == idx_contained; }))); @@ -86,38 +75,17 @@ void test_unique_sequence(Filter& filter, size_type num_keys) } TEMPLATE_TEST_CASE_SIG( - "bloom_filter default policy tests", + "bloom_filter policy tests", "", ((class Key, class Policy), Key, Policy), - (int32_t, cuco::default_filter_policy, uint32_t, 1>), - (int32_t, cuco::default_filter_policy, uint32_t, 8>), - (int32_t, cuco::default_filter_policy, uint64_t, 1>), - (int32_t, cuco::default_filter_policy, uint64_t, 8>)) -{ - using filter_type = - cuco::bloom_filter, cuda::thread_scope_device, Policy>; - constexpr size_type num_keys{400}; - - uint32_t pattern_bits = Policy::words_per_block + GENERATE(0, 1, 2, 3, 4); - - // some parameter combinations might be invalid so we skip them - try { - [[maybe_unused]] auto policy = Policy{pattern_bits}; - } catch (std::exception const& e) { - SKIP(e.what()); - } - - auto filter = filter_type{1000, {}, {pattern_bits}}; - - test_unique_sequence(filter, num_keys); -} - -TEMPLATE_TEST_CASE_SIG("bloom_filter arrow policy tests", - "", - ((class Key, class Policy), Key, Policy), - (int32_t, cuco::arrow_filter_policy), - (uint64_t, cuco::arrow_filter_policy), - (float, cuco::arrow_filter_policy)) + (int32_t, cuco::bloom_filter_policy), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 1, 1, 1, 1, 1, 1>), + (uint64_t, + cuco::bloom_filter_policy, uint32_t, 8, 12, 8, 1, 4, 2>), + (float, cuco::bloom_filter_policy, uint64_t, 4, 4, 2, 2, 1, 2>), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 2, 2, 1, 8>)) { using filter_type = cuco::bloom_filter, cuda::thread_scope_device, Policy>; diff --git a/tests/bloom_filter/variable_cg_test.cu b/tests/bloom_filter/variable_cg_test.cu index 6a9997692..12a5dc27e 100644 --- a/tests/bloom_filter/variable_cg_test.cu +++ b/tests/bloom_filter/variable_cg_test.cu @@ -1,114 +1,181 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ +// Exercises `cuco::bloom_filter_ref` device-side APIs (`ref.add(key)`, `ref.contains(key)`, +// `ref.contains(group, key)`) directly from custom kernels, varying the cooperative group size. +// The bulk host-side APIs route through the warp-cooperative kernel which already had correct +// CG-reduction semantics; the scalar and CG ref methods are separate code paths that need their +// own coverage. + #include #include -#include +#include #include #include -#include -#include -#include #include +#include + #include -#include #include -#include using size_type = int32_t; -template -void test_variable_cg_size(Filter& filter, size_type num_keys) +namespace cg = cooperative_groups; + +template +__global__ void scalar_add_kernel(Ref ref, Key const* keys, size_type n) { - constexpr int32_t block_size = 128; - constexpr int32_t grid_size = 128; + auto const i = static_cast(blockIdx.x) * blockDim.x + threadIdx.x; + if (i < n) { ref.add(keys[i]); } +} - using Key = typename Filter::key_type; +template +__global__ void scalar_contains_kernel(Ref ref, Key const* keys, size_type n, bool* out) +{ + auto const i = static_cast(blockIdx.x) * blockDim.x + threadIdx.x; + if (i < n) { out[i] = ref.contains(keys[i]); } +} - auto ref = filter.ref(); +template +__global__ void cg_contains_consistency_kernel(Ref ref, + Key const* keys, + size_type n, + int* mismatches) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + auto const idx = static_cast((blockIdx.x * blockDim.x + threadIdx.x) / CGSize); + if (idx >= n) { return; } + bool const got = ref.contains(tile, keys[idx]); + bool const all_agree = tile.all(got); + bool const any_agree = tile.any(got); + if (tile.thread_rank() == 0 && all_agree != any_agree) { atomicAdd(mismatches, 1); } +} + +template +__global__ void cooperative_clear_kernel(Ref ref) +{ + auto const block = cg::this_thread_block(); + auto const tile = cg::tiled_partition(block); + ref.clear(tile); +} + +TEMPLATE_TEST_CASE_SIG( + "bloom_filter device ref scalar add and contains", + "", + ((class Key, class Policy), Key, Policy), + (int32_t, cuco::bloom_filter_policy), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 1, 1, 1, 1, 1, 1>), + (int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 4, 2, 4, 2>)) +{ + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, Policy>; + constexpr size_type num_keys{400}; + + auto filter = filter_type{1000}; - // Generate keys thrust::device_vector keys(num_keys); thrust::sequence(thrust::device, keys.begin(), keys.end()); - thrust::device_vector contained(num_keys, false); - auto const always_true = thrust::constant_iterator{true}; - - SECTION("Check if fallback kernels work for varying combinations of CG sizes.") - { - cuco::detail::bloom_filter_ns::add_if_n - <<>>(keys.begin(), num_keys, always_true, cuda::std::identity{}, ref); - cuco::detail::bloom_filter_ns::contains_if_n - <<>>( - keys.begin(), num_keys, always_true, cuda::std::identity{}, contained.begin(), ref); - REQUIRE(cuco::test::all_of(contained.begin(), contained.end(), cuda::std::identity{})); - } - - filter.clear(); - thrust::fill(contained.begin(), contained.end(), false); // reset output vector - - SECTION("Check if adaptive add kernel works with fallback contains kernel.") - { - cuco::detail::bloom_filter_ns::add - <<>>(keys.begin(), num_keys, ref); - cuco::detail::bloom_filter_ns::contains_if_n - <<>>( - keys.begin(), num_keys, always_true, cuda::std::identity{}, contained.begin(), ref); - REQUIRE(cuco::test::all_of(contained.begin(), contained.end(), cuda::std::identity{})); - } - - // TODO adaptive vs. adaptive and fallback add vs. adaptive contains (requires #673) + auto ref = filter.ref(); + + constexpr int block_size = 128; + int const grid_size = (num_keys + block_size - 1) / block_size; + + scalar_add_kernel<<>>( + ref, thrust::raw_pointer_cast(keys.data()), num_keys); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + scalar_contains_kernel<<>>(ref, + thrust::raw_pointer_cast(keys.data()), + num_keys, + thrust::raw_pointer_cast(contained.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(cuco::test::all_of(contained.begin(), contained.end(), cuda::std::identity{})); } TEMPLATE_TEST_CASE_SIG( - "bloom_filter variable CG size tests", + "bloom_filter device ref CG contains is reduced across the group", "", - ((int32_t AddCGSize, int32_t ContainsCGSize, class Key, class Policy), - AddCGSize, - ContainsCGSize, - Key, - Policy), - (1, 4, int32_t, cuco::default_filter_policy, uint32_t, 1>), - (1, 4, int32_t, cuco::default_filter_policy, uint32_t, 8>), - (1, 4, int32_t, cuco::default_filter_policy, uint64_t, 1>), - (1, 4, int32_t, cuco::default_filter_policy, uint64_t, 8>), - (4, 1, int32_t, cuco::default_filter_policy, uint32_t, 1>), - (4, 1, int32_t, cuco::default_filter_policy, uint32_t, 8>), - (4, 1, int32_t, cuco::default_filter_policy, uint64_t, 1>), - (4, 1, int32_t, cuco::default_filter_policy, uint64_t, 8>)) + ((int32_t CGSize, class Key, class Policy), CGSize, Key, Policy), + (4, + int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 4, 2, 4, 2>), + (8, + int32_t, + cuco::bloom_filter_policy, uint32_t, 8, 8, 8, 1, 8, 1>)) +{ + using filter_type = + cuco::bloom_filter, cuda::thread_scope_device, Policy>; + // Small filter + many probes drive non-inserted keys into the partial-match regime where + // different lanes in the tile see different per-slice match results. Without a group reduction + // in `ref.contains(group, key)`, each lane returns its slice's partial result and the tile + // disagrees on the answer. + constexpr size_type num_inserted{200}; + constexpr size_type num_probed{2000}; + constexpr size_type num_blocks{16}; + + auto filter = filter_type{num_blocks}; + auto ref = filter.ref(); + + thrust::device_vector insert_keys(num_inserted); + thrust::sequence(thrust::device, insert_keys.begin(), insert_keys.end()); + filter.add(insert_keys.begin(), insert_keys.end()); + + thrust::device_vector probe_keys(num_probed); + thrust::sequence(thrust::device, probe_keys.begin(), probe_keys.end()); + + thrust::device_vector mismatches(1, 0); + + constexpr int block_size = 128; + int const grid_size = (num_probed * CGSize + block_size - 1) / block_size; + + cg_contains_consistency_kernel + <<>>(ref, + thrust::raw_pointer_cast(probe_keys.data()), + num_probed, + thrust::raw_pointer_cast(mismatches.data())); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); + + REQUIRE(static_cast(mismatches[0]) == 0); +} + +TEMPLATE_TEST_CASE_SIG("bloom_filter device ref cooperative clear", + "", + ((int32_t CGSize, class Key, class Policy), CGSize, Key, Policy), + (1, int32_t, cuco::bloom_filter_policy), + (4, int32_t, cuco::bloom_filter_policy), + (8, int32_t, cuco::bloom_filter_policy), + (32, int32_t, cuco::bloom_filter_policy)) { using filter_type = cuco::bloom_filter, cuda::thread_scope_device, Policy>; constexpr size_type num_keys{400}; - uint32_t pattern_bits = Policy::words_per_block + GENERATE(0, 1, 2, 3, 4); + auto filter = filter_type{1000}; - // some parameter combinations might be invalid so we skip them - try { - [[maybe_unused]] auto policy = Policy{pattern_bits}; - } catch (std::exception const& e) { - SKIP(e.what()); - } + thrust::device_vector keys(num_keys); + thrust::sequence(thrust::device, keys.begin(), keys.end()); + filter.add(keys.begin(), keys.end()); + + thrust::device_vector contained(num_keys, false); + filter.contains(keys.begin(), keys.end(), contained.begin()); + REQUIRE(cuco::test::all_of(contained.begin(), contained.end(), cuda::std::identity{})); - auto filter = filter_type{1000, {}, {pattern_bits}}; + // Device cooperative clear via a single tile that iterates over all filter words. + cooperative_clear_kernel<<<1, CGSize>>>(filter.ref()); + CUCO_CUDA_TRY(cudaDeviceSynchronize()); - test_variable_cg_size(filter, num_keys); + filter.contains(keys.begin(), keys.end(), contained.begin()); + REQUIRE(cuco::test::none_of(contained.begin(), contained.end(), cuda::std::identity{})); } diff --git a/tests/dynamic_bitset/find_next_test.cu b/tests/dynamic_bitset/find_next_test.cu index 3dca7ac4c..c4c1cd407 100644 --- a/tests/dynamic_bitset/find_next_test.cu +++ b/tests/dynamic_bitset/find_next_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/dynamic_bitset/get_test.cu b/tests/dynamic_bitset/get_test.cu index 1fd65c424..7e3b0e957 100644 --- a/tests/dynamic_bitset/get_test.cu +++ b/tests/dynamic_bitset/get_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/dynamic_bitset/rank_test.cu b/tests/dynamic_bitset/rank_test.cu index a853fa91f..25f7e4f01 100644 --- a/tests/dynamic_bitset/rank_test.cu +++ b/tests/dynamic_bitset/rank_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/dynamic_bitset/select_test.cu b/tests/dynamic_bitset/select_test.cu index 926cf441c..70f3e27d4 100644 --- a/tests/dynamic_bitset/select_test.cu +++ b/tests/dynamic_bitset/select_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/dynamic_bitset/size_test.cu b/tests/dynamic_bitset/size_test.cu index 6585b8f6f..388bf0943 100644 --- a/tests/dynamic_bitset/size_test.cu +++ b/tests/dynamic_bitset/size_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/dynamic_map/erase_test.cu b/tests/dynamic_map/erase_test.cu index 1ffc9673c..03f549545 100644 --- a/tests/dynamic_map/erase_test.cu +++ b/tests/dynamic_map/erase_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,12 +8,11 @@ #include #include +#include #include #include #include #include -#include -#include #include #include @@ -52,8 +40,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map erase tests", thrust::sequence(thrust::device, d_keys.begin(), d_keys.end(), 1); thrust::sequence(thrust::device, d_values.begin(), d_values.end(), 1); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; @@ -102,8 +90,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map erase tests", thrust::sequence(thrust::device, d_keys.begin(), d_keys.end(), 1); thrust::sequence(thrust::device, d_values.begin(), d_values.end(), 1); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; diff --git a/tests/dynamic_map/find_test.cu b/tests/dynamic_map/find_test.cu index ebd88a029..4f8c0bcec 100644 --- a/tests/dynamic_map/find_test.cu +++ b/tests/dynamic_map/find_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,13 +8,11 @@ #include #include +#include #include #include #include #include -#include -#include -#include #include #include @@ -54,8 +41,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map find tests", thrust::sequence(thrust::device, d_keys.begin(), d_keys.end(), 1); thrust::sequence(thrust::device, d_values.begin(), d_values.end(), 1); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; @@ -85,7 +72,7 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map find tests", auto empty_zip = thrust::make_zip_iterator( cuda::std::tuple{d_nonexistent_values.begin(), - thrust::constant_iterator{cuco::empty_value{-1}.value}}); + cuda::constant_iterator{cuco::empty_value{-1}.value}}); REQUIRE(cuco::test::all_of(empty_zip, empty_zip + 100, zip_equal)); thrust::device_vector d_mixed_keys(200); @@ -105,7 +92,7 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map find tests", auto second_half_empty_zip = thrust::make_zip_iterator( cuda::std::tuple{d_mixed_values.begin() + 100, - thrust::constant_iterator{cuco::empty_value{-1}.value}}); + cuda::constant_iterator{cuco::empty_value{-1}.value}}); REQUIRE(cuco::test::all_of(second_half_empty_zip, second_half_empty_zip + 100, zip_equal)); } @@ -118,8 +105,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map find tests", thrust::sequence(thrust::device, d_keys.begin(), d_keys.end(), 1); thrust::sequence(thrust::device, d_values.begin(), d_values.end(), 1); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; @@ -143,9 +130,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map find tests", map.find(d_keys.begin(), d_keys.end(), d_found_values.begin()); - auto first_half_empty_zip = thrust::make_zip_iterator( - cuda::std::tuple{d_found_values.begin(), - thrust::constant_iterator{cuco::empty_value{-1}.value}}); + auto first_half_empty_zip = thrust::make_zip_iterator(cuda::std::tuple{ + d_found_values.begin(), cuda::constant_iterator{cuco::empty_value{-1}.value}}); REQUIRE( cuco::test::all_of(first_half_empty_zip, first_half_empty_zip + num_keys / 2, zip_equal)); diff --git a/tests/dynamic_map/multiplicity_test.cu b/tests/dynamic_map/multiplicity_test.cu index 5fc7eddb7..7db5ae943 100644 --- a/tests/dynamic_map/multiplicity_test.cu +++ b/tests/dynamic_map/multiplicity_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,11 +8,10 @@ #include #include +#include #include #include #include -#include -#include #include #include @@ -47,15 +35,15 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", // Create pairs for first submap (keys 0 to num_keys-1) auto pairs_begin = - thrust::make_transform_iterator(thrust::make_counting_iterator(0), - cuda::proclaim_return_type>( - [] __device__(auto i) { return cuco::pair(i, i); })); + cuda::make_transform_iterator(cuda::make_counting_iterator(0), + cuda::proclaim_return_type>( + [] __device__(auto i) { return cuco::pair(i, i); })); // Create pairs for second submap (keys num_keys to 2*num_keys-1) auto pairs_begin_2 = - thrust::make_transform_iterator(thrust::make_counting_iterator(num_keys), - cuda::proclaim_return_type>( - [] __device__(auto i) { return cuco::pair(i, i); })); + cuda::make_transform_iterator(cuda::make_counting_iterator(num_keys), + cuda::proclaim_return_type>( + [] __device__(auto i) { return cuco::pair(i, i); })); thrust::device_vector d_keys(num_keys); thrust::device_vector d_results(num_keys); @@ -78,8 +66,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", // Try to insert duplicates with DIFFERENT values - should still not insert and preserve // originals - auto duplicate_pairs_diff_values = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto duplicate_pairs_diff_values = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i + 999); })); map.insert(duplicate_pairs_diff_values, duplicate_pairs_diff_values + num_keys); @@ -87,10 +75,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", // Verify original values are preserved (not overwritten by duplicate insert attempts) map.find(d_keys.begin(), d_keys.end(), d_results.begin()); - REQUIRE(cuco::test::equal(d_results.begin(), - d_results.end(), - thrust::counting_iterator(0), - cuda::std::equal_to{})); + REQUIRE(cuco::test::equal( + d_results.begin(), d_results.end(), cuda::counting_iterator(0), cuda::std::equal_to{})); } SECTION("contains finds keys in any submap") @@ -129,10 +115,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", // Find keys from FIRST submap - should return correct values map.find(d_keys.begin(), d_keys.end(), d_results.begin()); - REQUIRE(cuco::test::equal(d_results.begin(), - d_results.end(), - thrust::counting_iterator(0), - cuda::std::equal_to{})); + REQUIRE(cuco::test::equal( + d_results.begin(), d_results.end(), cuda::counting_iterator(0), cuda::std::equal_to{})); // Find keys from SECOND submap - should return correct values thrust::device_vector d_keys_2(num_keys); @@ -140,7 +124,7 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", map.find(d_keys_2.begin(), d_keys_2.end(), d_results.begin()); REQUIRE(cuco::test::equal(d_results.begin(), d_results.end(), - thrust::counting_iterator(num_keys), + cuda::counting_iterator(num_keys), cuda::std::equal_to{})); // Non-existent keys should return empty_value_sentinel (-1) @@ -210,8 +194,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", REQUIRE(map.size() == 2 * num_keys); // Create pairs with same keys as first submap but different values (value = key + 100) - auto updated_pairs = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto updated_pairs = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i + 100); })); @@ -223,7 +207,7 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", map.find(d_keys.begin(), d_keys.end(), d_results.begin()); REQUIRE(cuco::test::equal(d_results.begin(), d_results.end(), - thrust::counting_iterator(100), // Values should now be key + 100 + cuda::counting_iterator(100), // Values should now be key + 100 cuda::std::equal_to{})); // Verify second submap values are unchanged @@ -232,14 +216,14 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", map.find(d_keys_2.begin(), d_keys_2.end(), d_results.begin()); REQUIRE(cuco::test::equal(d_results.begin(), d_results.end(), - thrust::counting_iterator(num_keys), + cuda::counting_iterator(num_keys), cuda::std::equal_to{})); // Test INSERT behavior: insert_or_assign with completely NEW keys should increase size - auto new_pairs = thrust::make_transform_iterator( - thrust::make_counting_iterator(2 * num_keys), - cuda::proclaim_return_type>( - [] __device__(auto i) { return cuco::pair(i, i); })); + auto new_pairs = + cuda::make_transform_iterator(cuda::make_counting_iterator(2 * num_keys), + cuda::proclaim_return_type>( + [] __device__(auto i) { return cuco::pair(i, i); })); map.insert_or_assign(new_pairs, new_pairs + num_keys); REQUIRE(map.size() == 3 * num_keys); // Size should increase by num_keys @@ -249,14 +233,14 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", map.find(d_keys_new.begin(), d_keys_new.end(), d_results.begin()); REQUIRE(cuco::test::equal(d_results.begin(), d_results.end(), - thrust::counting_iterator(2 * num_keys), + cuda::counting_iterator(2 * num_keys), cuda::std::equal_to{})); // Test MIXED behavior: some keys exist (update), some don't (insert) // Use keys from 0 to num_keys/2 (exist in first submap) and // keys from 3*num_keys to 3*num_keys + num_keys/2 (don't exist) - auto mixed_pairs = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto mixed_pairs = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>([] __device__(auto i) { Key key = (i < num_keys / 2) ? Key(i) : Key(3 * num_keys + i - num_keys / 2); return cuco::pair(key, T(i + 500)); @@ -300,7 +284,7 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: cross-submap duplicate handling", // Values should match keys (since we inserted key=value pairs) REQUIRE(cuco::test::equal(d_retrieved_values.begin(), d_retrieved_values.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::std::equal_to{})); } } diff --git a/tests/dynamic_map/retrieve_all_test.cu b/tests/dynamic_map/retrieve_all_test.cu index 35f057e4b..231482f35 100644 --- a/tests/dynamic_map/retrieve_all_test.cu +++ b/tests/dynamic_map/retrieve_all_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,11 +8,10 @@ #include #include +#include #include #include #include -#include -#include #include #include @@ -51,8 +39,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map retrieve_all tests", thrust::sequence(d_keys.begin(), d_keys.end(), 0); thrust::sequence(d_values.begin(), d_values.end(), 0); - auto pairs = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto pairs = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; @@ -85,8 +73,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map retrieve_all tests", thrust::sequence(d_keys.begin(), d_keys.end(), 0); thrust::sequence(d_values.begin(), d_values.end(), 0); - auto pairs = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto pairs = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type>( [keys = d_keys.begin(), values = d_values.begin()] __device__(auto i) { return cuco::pair{keys[i], values[i]}; diff --git a/tests/dynamic_map/unique_sequence_test.cu b/tests/dynamic_map/unique_sequence_test.cu index 13cf08d0b..6c278368e 100644 --- a/tests/dynamic_map/unique_sequence_test.cu +++ b/tests/dynamic_map/unique_sequence_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,11 +8,10 @@ #include #include +#include #include #include #include -#include -#include #include #include @@ -47,9 +35,9 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: unique sequence", thrust::sequence(thrust::device, d_values.begin(), d_values.end()); auto pairs_begin = - thrust::make_transform_iterator(thrust::make_counting_iterator(0), - cuda::proclaim_return_type>( - [] __device__(auto i) { return cuco::pair(i, i); })); + cuda::make_transform_iterator(cuda::make_counting_iterator(0), + cuda::proclaim_return_type>( + [] __device__(auto i) { return cuco::pair(i, i); })); thrust::device_vector d_results(num_keys); thrust::device_vector d_contained(num_keys); @@ -103,8 +91,8 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: unique sequence", REQUIRE(map.size() == num_keys); // Create pairs with same keys but different values (value = key + 1) - auto updated_pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto updated_pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i + 1); })); @@ -116,14 +104,14 @@ TEMPLATE_TEST_CASE_SIG("dynamic_map: unique sequence", map.find(d_keys.begin(), d_keys.end(), d_results.begin()); REQUIRE(cuco::test::equal(d_results.begin(), d_results.end(), - thrust::counting_iterator(1), // Values should now be key + 1 + cuda::counting_iterator(1), // Values should now be key + 1 cuda::std::equal_to{})); // Insert new keys with insert_or_assign (keys from num_keys to 2*num_keys) - auto new_pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(num_keys), - cuda::proclaim_return_type>( - [] __device__(auto i) { return cuco::pair(i, i); })); + auto new_pairs_begin = + cuda::make_transform_iterator(cuda::make_counting_iterator(num_keys), + cuda::proclaim_return_type>( + [] __device__(auto i) { return cuco::pair(i, i); })); map.insert_or_assign(new_pairs_begin, new_pairs_begin + num_keys); REQUIRE(map.size() == 2 * num_keys); diff --git a/tests/hyperloglog/add_if_test.cu b/tests/hyperloglog/add_if_test.cu index d80b5f884..477d3861e 100644 --- a/tests/hyperloglog/add_if_test.cu +++ b/tests/hyperloglog/add_if_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/hyperloglog/device_ref_test.cu b/tests/hyperloglog/device_ref_test.cu index edf3921e7..2aebfe1e6 100644 --- a/tests/hyperloglog/device_ref_test.cu +++ b/tests/hyperloglog/device_ref_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/hyperloglog/spark_parity_test.cu b/tests/hyperloglog/spark_parity_test.cu index 1f9a0d386..8a01d1e43 100644 --- a/tests/hyperloglog/spark_parity_test.cu +++ b/tests/hyperloglog/spark_parity_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -20,10 +9,8 @@ #include #include +#include #include -#include -#include -#include #include #include @@ -76,10 +63,10 @@ TEST_CASE("hyperloglog: Spark parity: deterministic cardinality estimation", "") REQUIRE(estimator_type::sketch_bytes(sd) == estimator_type::sketch_bytes(sb)); auto items_begin = - thrust::make_transform_iterator(thrust::make_counting_iterator(0), - cuda::proclaim_return_type([repeats] __device__(auto i) { - return static_cast(i / repeats); - })); + cuda::make_transform_iterator(cuda::make_counting_iterator(0), + cuda::proclaim_return_type([repeats] __device__(auto i) { + return static_cast(i / repeats); + })); estimator_type estimator{sd}; @@ -142,7 +129,7 @@ TEST_CASE("hyperloglog: Spark parity: merging HLL instances", "") auto num_items = 1000000; auto standard_deviation = cuco::standard_deviation(0.05); - auto items_begin = thrust::make_counting_iterator(0); + auto items_begin = cuda::make_counting_iterator(0); // count lower half of input estimator_type lower{standard_deviation}; @@ -155,7 +142,7 @@ TEST_CASE("hyperloglog: Spark parity: merging HLL instances", "") // merge upper into lower so lower has seen the entire input lower.merge(upper); - auto reversed_items_begin = thrust::make_transform_iterator( + auto reversed_items_begin = cuda::make_transform_iterator( items_begin, cuda::proclaim_return_type([num_items] __device__(auto i) { return static_cast(num_items - i); })); diff --git a/tests/hyperloglog/type_deduction_test.cu b/tests/hyperloglog/type_deduction_test.cu index 409ed02b5..a21ecdaef 100644 --- a/tests/hyperloglog/type_deduction_test.cu +++ b/tests/hyperloglog/type_deduction_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -20,8 +9,7 @@ #include #include -#include -#include +#include #include @@ -32,8 +20,8 @@ TEST_CASE("hyperloglog: type deduction bug with hash functions returning referen auto constexpr sketch_size_kb = 1; auto constexpr num_items = 1000; - auto first = thrust::make_transform_iterator(thrust::counting_iterator(0), - cuco::xxhash_64{}); + auto first = cuda::make_transform_iterator(cuda::counting_iterator(0), + cuco::xxhash_64{}); auto last = first + num_items; cuco::hyperloglog estimator{ diff --git a/tests/hyperloglog/unique_sequence_test.cu b/tests/hyperloglog/unique_sequence_test.cu index c9f2bbaa4..0ae9b0dd9 100644 --- a/tests/hyperloglog/unique_sequence_test.cu +++ b/tests/hyperloglog/unique_sequence_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/roaring_bitmap/contains_test.cu b/tests/roaring_bitmap/contains_test.cu index 4558cd7a1..642a1da2c 100644 --- a/tests/roaring_bitmap/contains_test.cu +++ b/tests/roaring_bitmap/contains_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2025 NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/static_map/capacity_test.cu b/tests/static_map/capacity_test.cu index 22a4fad1f..fcfb8eb4f 100644 --- a/tests/static_map/capacity_test.cu +++ b/tests/static_map/capacity_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/static_map/contains_test.cu b/tests/static_map/contains_test.cu index abe2f5619..1af2394c8 100644 --- a/tests/static_map/contains_test.cu +++ b/tests/static_map/contains_test.cu @@ -1,30 +1,19 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include -#include -#include #include #include @@ -38,9 +27,9 @@ void test_unique_sequence(Map& map, size_type num_keys) using Key = typename Map::key_type; using Value = typename Map::mapped_type; - auto keys_begin = thrust::counting_iterator{0}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto keys_begin = cuda::counting_iterator{0}; + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); thrust::device_vector d_contained(num_keys); @@ -63,7 +52,7 @@ void test_unique_sequence(Map& map, size_type num_keys) SECTION("All conditionally inserted keys should be contained") { auto const inserted = map.insert_if( - pairs_begin, pairs_begin + num_keys, thrust::counting_iterator(0), is_even); + pairs_begin, pairs_begin + num_keys, cuda::counting_iterator(0), is_even); REQUIRE(inserted == num_keys / 2); REQUIRE(map.size() == num_keys / 2); @@ -71,7 +60,7 @@ void test_unique_sequence(Map& map, size_type num_keys) REQUIRE(cuco::test::equal( d_contained.begin(), d_contained.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto const& idx_contained, auto const& idx) { return ((idx % 2) == 0) == idx_contained; }))); @@ -91,11 +80,11 @@ void test_unique_sequence(Map& map, size_type num_keys) { map.contains_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator(0), + cuda::counting_iterator(0), is_even, d_contained.begin()); auto gold_iter = - thrust::make_transform_iterator(thrust::counting_iterator(0), is_even); + cuda::make_transform_iterator(cuda::counting_iterator(0), is_even); auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_contained.begin(), gold_iter}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -111,7 +100,7 @@ void test_unique_sequence(Map& map, size_type num_keys) thrust::sort(thrust::device, d_values.begin(), values_end); REQUIRE(cuco::test::equal(d_values.begin(), values_end, - thrust::make_counting_iterator(0), + cuda::make_counting_iterator(0), cuda::std::equal_to{})); } } @@ -131,7 +120,14 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{400}; diff --git a/tests/static_map/duplicate_keys_test.cu b/tests/static_map/duplicate_keys_test.cu index 34e7b618a..8e02b61ae 100644 --- a/tests/static_map/duplicate_keys_test.cu +++ b/tests/static_map/duplicate_keys_test.cu @@ -1,29 +1,17 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include -#include #include #include @@ -54,7 +42,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{500'000}; @@ -79,8 +74,8 @@ TEMPLATE_TEST_CASE_SIG( thrust::sequence(thrust::device, d_keys.begin(), d_keys.end()); thrust::sequence(thrust::device, d_values.begin(), d_values.end()); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i / 2, i / 2); })); @@ -112,7 +107,7 @@ TEMPLATE_TEST_CASE_SIG( thrust::sort(thrust::device, unique_keys.begin(), unique_keys.end()); REQUIRE(cuco::test::equal(unique_keys.begin(), unique_keys.end(), - thrust::make_counting_iterator(0), + cuda::make_counting_iterator(0), cuda::std::equal_to{})); } diff --git a/tests/static_map/erase_test.cu b/tests/static_map/erase_test.cu index 1299b4815..0e06d6d90 100644 --- a/tests/static_map/erase_test.cu +++ b/tests/static_map/erase_test.cu @@ -1,27 +1,16 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include -#include -#include #include @@ -35,9 +24,9 @@ void test_erase(Map& map, size_type num_keys) thrust::device_vector d_keys_exist(num_keys); - auto keys_begin = thrust::counting_iterator(1); + auto keys_begin = cuda::counting_iterator(1); - auto pairs_begin = thrust::make_transform_iterator( + auto pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(key_type const& x) { return cuco::pair(x, static_cast(x)); @@ -102,7 +91,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{1'000'000}; diff --git a/tests/static_map/find_test.cu b/tests/static_map/find_test.cu index 382578351..2195f0d4c 100644 --- a/tests/static_map/find_test.cu +++ b/tests/static_map/find_test.cu @@ -1,31 +1,20 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include #include -#include -#include #include #include @@ -49,9 +38,9 @@ void test_unique_sequence(Map& map, size_type num_keys) using Key = typename Map::key_type; using Value = typename Map::mapped_type; - auto keys_begin = thrust::counting_iterator{0}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto keys_begin = cuda::counting_iterator{0}; + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); @@ -65,8 +54,8 @@ void test_unique_sequence(Map& map, size_type num_keys) SECTION("Non-inserted keys have no matches") { map.find(keys_begin, keys_begin + num_keys, d_results.begin()); - auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - d_results.begin(), thrust::constant_iterator{map.empty_key_sentinel()}}); + auto zip = thrust::make_zip_iterator( + cuda::std::tuple{d_results.begin(), cuda::constant_iterator{map.empty_key_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -87,7 +76,7 @@ void test_unique_sequence(Map& map, size_type num_keys) keys_begin, keys_begin + num_keys, always_false{}, map.hash_function(), d_results.begin()); CUCO_CUDA_TRY(cudaDeviceSynchronize()); auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - d_results.begin(), thrust::constant_iterator{map.empty_value_sentinel()}}); + d_results.begin(), cuda::constant_iterator{map.empty_value_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -100,14 +89,14 @@ void test_unique_sequence(Map& map, size_type num_keys) map.find_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator{0}, + cuda::counting_iterator{0}, is_even, d_results.begin()); REQUIRE(cuco::test::equal( d_results.begin(), d_results.end(), - thrust::make_transform_iterator(thrust::counting_iterator{0}, gold_fn), + cuda::make_transform_iterator(cuda::counting_iterator{0}, gold_fn), cuda::proclaim_return_type( [] __device__(auto const& found, auto const& gold) { return found == gold; }))); } @@ -116,7 +105,7 @@ void test_unique_sequence(Map& map, size_type num_keys) { map.find_if_async(keys_begin, keys_begin + num_keys, - thrust::counting_iterator{0}, + cuda::counting_iterator{0}, is_even, always_false{}, map.hash_function(), @@ -124,7 +113,7 @@ void test_unique_sequence(Map& map, size_type num_keys) CUCO_CUDA_TRY(cudaDeviceSynchronize()); auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - d_results.begin(), thrust::constant_iterator{map.empty_value_sentinel()}}); + d_results.begin(), cuda::constant_iterator{map.empty_value_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -138,6 +127,11 @@ TEMPLATE_TEST_CASE_SIG( Value, Probe, CGSize), + (int8_t, int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, int8_t, cuco::test::probe_sequence::double_hashing, 2), + (int8_t, int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, int16_t, cuco::test::probe_sequence::double_hashing, 2), (int32_t, int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, int32_t, cuco::test::probe_sequence::double_hashing, 2), @@ -146,6 +140,11 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), (int64_t, int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, int64_t, cuco::test::probe_sequence::double_hashing, 2), + (int8_t, int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int8_t, int16_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), @@ -153,9 +152,16 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr size_type num_keys{301}; + constexpr size_type num_keys = (sizeof(Key) == 1) ? 100 : 301; // XXX: testing static extent is intended, DO NOT CHANGE using extent_type = cuco::extent; @@ -173,17 +179,19 @@ TEMPLATE_TEST_CASE_SIG( } }(); - auto map = cuco::static_map, - probe, - cuco::cuda_allocator, - cuco::storage<2>>{ - extent_type{}, cuco::empty_key{SENTINEL}, cuco::empty_value{SENTINEL}}; - - REQUIRE(map.capacity() == gold_capacity); + auto map = + cuco::static_map, + probe, + cuco::cuda_allocator, + cuco::storage<2>>{extent_type{}, + cuco::empty_key{static_cast(SENTINEL)}, + cuco::empty_value{static_cast(SENTINEL)}}; + + if constexpr (sizeof(Key) > 1) { REQUIRE(map.capacity() == gold_capacity); } test_unique_sequence(map, num_keys); } diff --git a/tests/static_map/for_each_test.cu b/tests/static_map/for_each_test.cu index 70124327a..5641d9b0b 100644 --- a/tests/static_map/for_each_test.cu +++ b/tests/static_map/for_each_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include @@ -37,8 +26,8 @@ void test_for_each(Map& map, size_type num_keys) REQUIRE(num_keys % 2 == 0); // Insert pairs - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>([] __device__(auto i) { // use payload as 1 for even keys and 2 for odd keys return cuco::pair{i, i % 2 + 1}; @@ -67,8 +56,8 @@ void test_for_each(Map& map, size_type num_keys) counter_storage.reset(stream); map.for_each( - thrust::counting_iterator(0), - thrust::counting_iterator(2 * num_keys), // test for false-positives + cuda::counting_iterator(0), + cuda::counting_iterator(2 * num_keys), // test for false-positives [counter = counter_storage.data()] __device__(auto const slot) { auto const& [key, value] = slot; if (((key % 2 == 0)) and (value == 1)) { counter->fetch_add(1, cuda::memory_order_relaxed); } @@ -100,7 +89,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{100}; using probe = std::conditional_t< diff --git a/tests/static_map/hash_test.cu b/tests/static_map/hash_test.cu index 8e427049c..07c430e7d 100644 --- a/tests/static_map/hash_test.cu +++ b/tests/static_map/hash_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include @@ -45,9 +34,9 @@ void test_hash_function() cuco::storage<2>>{ num_keys, cuco::empty_key{-1}, cuco::empty_value{-1}}; - auto keys_begin = thrust::counting_iterator(1); + auto keys_begin = cuda::counting_iterator(1); - auto pairs_begin = thrust::make_transform_iterator( + auto pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair(i, i); })); @@ -63,7 +52,16 @@ void test_hash_function() REQUIRE(cuco::test::all_of(d_keys_exist.begin(), d_keys_exist.end(), cuda::std::identity{})); } -TEMPLATE_TEST_CASE_SIG("static_map hash tests", "", ((typename Key)), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_map hash tests", + "", + ((typename Key)), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { test_hash_function>(); test_hash_function>(); diff --git a/tests/static_map/heterogeneous_lookup_test.cu b/tests/static_map/heterogeneous_lookup_test.cu index 80f9715d6..0e47c4b2d 100644 --- a/tests/static_map/heterogeneous_lookup_test.cu +++ b/tests/static_map/heterogeneous_lookup_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include #include @@ -89,6 +78,10 @@ TEMPLATE_TEST_CASE_SIG("static_map heterogeneous lookup tests", (int64_t, 1), (int64_t, 2), #endif +#if defined(CUCO_HAS_128BIT_ATOMICS) + (__int128_t, 1), + (__int128_t, 2), +#endif (int32_t, 1), (int32_t, 2)) @@ -112,12 +105,12 @@ TEMPLATE_TEST_CASE_SIG("static_map heterogeneous lookup tests", custom_key_equal{}, probe}; - auto insert_pairs = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto insert_pairs = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i); })); - auto probe_keys = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto probe_keys = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return ProbeKey{i}; })); SECTION("All inserted keys-value pairs should be contained") diff --git a/tests/static_map/insert_and_find_test.cu b/tests/static_map/insert_and_find_test.cu index 6b8463b9e..0b5e87cf8 100644 --- a/tests/static_map/insert_and_find_test.cu +++ b/tests/static_map/insert_and_find_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2022, Jonas Hahnfeld, CERN. - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022, Jonas Hahnfeld, CERN. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include @@ -52,7 +41,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { #if !defined(CUCO_HAS_INDEPENDENT_THREADS) if constexpr (cuco::detail::is_packable>()) @@ -75,8 +71,8 @@ TEMPLATE_TEST_CASE_SIG( cuco::storage<2>>{ num_keys, cuco::empty_key{-1}, cuco::empty_value{-1}}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, 1}; })); diff --git a/tests/static_map/insert_or_apply_test.cu b/tests/static_map/insert_or_apply_test.cu index da087a100..4503efed9 100644 --- a/tests/static_map/insert_or_apply_test.cu +++ b/tests/static_map/insert_or_apply_test.cu @@ -1,30 +1,18 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include #include +#include #include #include -#include -#include -#include #include #include @@ -42,8 +30,8 @@ void test_insert_or_apply(Map& map, size_type num_keys, size_type num_unique_key using Value = typename Map::mapped_type; // Insert pairs - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>([num_unique_keys] __device__(auto i) { return cuco::pair{i % num_unique_keys, 1}; })); @@ -63,7 +51,7 @@ void test_insert_or_apply(Map& map, size_type num_keys, size_type num_unique_key REQUIRE(cuco::test::equal(d_values.begin(), d_values.end(), - thrust::make_constant_iterator(num_keys / num_unique_keys), + cuda::make_constant_iterator(num_keys / num_unique_keys), cuda::std::equal_to{})); } @@ -106,8 +94,8 @@ void test_insert_or_apply_shmem(Map& map, size_type num_keys, size_type num_uniq typename shared_map_ref_type::storage_ref_type>(extent_type{}); // Insert pairs - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>([num_unique_keys] __device__(auto i) { return cuco::pair{i % num_unique_keys, 1}; })); @@ -134,7 +122,7 @@ void test_insert_or_apply_shmem(Map& map, size_type num_keys, size_type num_uniq REQUIRE(cuco::test::equal(d_values.begin(), d_values.end(), - thrust::make_constant_iterator(num_keys / num_unique_keys), + cuda::make_constant_iterator(num_keys / num_unique_keys), cuda::std::equal_to{})); } @@ -162,7 +150,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{10'000}; constexpr size_type num_unique_keys{100}; @@ -203,8 +198,16 @@ TEMPLATE_TEST_CASE_SIG( } } -TEMPLATE_TEST_CASE_SIG( - "static_map insert_or_apply all unique keys tests", "", ((typename Key)), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_map insert_or_apply all unique keys tests", + "", + ((typename Key)), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { using Value = Key; diff --git a/tests/static_map/insert_or_assign_test.cu b/tests/static_map/insert_or_assign_test.cu index 3b73fa7ad..cfde5d373 100644 --- a/tests/static_map/insert_or_assign_test.cu +++ b/tests/static_map/insert_or_assign_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include #include #include @@ -37,8 +26,8 @@ void test_insert_or_assign(Map& map, size_type num_keys) using Value = typename Map::mapped_type; // Insert pairs - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); @@ -46,8 +35,8 @@ void test_insert_or_assign(Map& map, size_type num_keys) REQUIRE(initial_size == num_keys); // all keys should be inserted // Query pairs have the same keys but different payloads - auto query_pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto query_pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i * 2); })); @@ -58,11 +47,11 @@ void test_insert_or_assign(Map& map, size_type num_keys) REQUIRE(updated_size == initial_size); thrust::device_vector d_keys(num_keys); - thrust::device_vector d_values(num_keys); + thrust::device_vector d_values(num_keys); map.retrieve_all(d_keys.begin(), d_values.begin()); - auto gold_values_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto gold_values_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return i * 2; })); thrust::sort(thrust::device, d_values.begin(), d_values.end()); @@ -93,7 +82,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{400}; diff --git a/tests/static_map/key_sentinel_test.cu b/tests/static_map/key_sentinel_test.cu index 3f502b6bd..d714c4197 100644 --- a/tests/static_map/key_sentinel_test.cu +++ b/tests/static_map/key_sentinel_test.cu @@ -1,27 +1,16 @@ /* - * Copyright (c) 2020-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include -#include -#include #include @@ -33,7 +22,16 @@ struct custom_equals { __device__ bool operator()(T lhs, T rhs) const { return A[lhs] == A[rhs]; } }; -TEMPLATE_TEST_CASE_SIG("static_map key sentinel tests", "", ((typename T), T), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_map key sentinel tests", + "", + ((typename T), T), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { using Key = T; using Value = T; @@ -54,8 +52,8 @@ TEMPLATE_TEST_CASE_SIG("static_map key sentinel tests", "", ((typename T), T), ( } CUCO_CUDA_TRY(cudaMemcpyToSymbol(A, h_A, SIZE * sizeof(int))); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i); })); diff --git a/tests/static_map/rehash_test.cu b/tests/static_map/rehash_test.cu index 62e3355e5..bba35a9b6 100644 --- a/tests/static_map/rehash_test.cu +++ b/tests/static_map/rehash_test.cu @@ -1,24 +1,12 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include #include -#include -#include +#include #include @@ -35,9 +23,9 @@ TEST_CASE("static_map rehash test", "") cuco::empty_value{-1}, cuco::erased_key{-2}}; - auto keys_begin = thrust::counting_iterator(1); + auto keys_begin = cuda::counting_iterator(1); - auto pairs_begin = thrust::make_transform_iterator( + auto pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(key_type const& x) { return cuco::pair(x, static_cast(x)); diff --git a/tests/static_map/retrieve_if_test.cu b/tests/static_map/retrieve_if_test.cu index f593dff44..3b282f6e3 100644 --- a/tests/static_map/retrieve_if_test.cu +++ b/tests/static_map/retrieve_if_test.cu @@ -1,24 +1,15 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include @@ -109,7 +100,12 @@ TEMPLATE_TEST_CASE_SIG("static_map retrieve_if", "", ((typename Key, typename T), Key, T), (int32_t, int32_t), - (int64_t, int64_t)) + (int64_t, int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t) +#endif +) { constexpr size_type num_keys{400}; @@ -118,9 +114,9 @@ TEMPLATE_TEST_CASE_SIG("static_map retrieve_if", container_type container{num_keys * 2, cuco::empty_key{-1}, cuco::empty_value{-1}}; - auto keys_begin = thrust::counting_iterator(1); - auto vals_begin = thrust::counting_iterator(1); - auto pairs_begin = thrust::make_zip_iterator(thrust::make_tuple(keys_begin, vals_begin)); + auto keys_begin = cuda::counting_iterator(1); + auto vals_begin = cuda::counting_iterator(1); + auto pairs_begin = thrust::make_zip_iterator(cuda::std::tuple{keys_begin, vals_begin}); container.insert(pairs_begin, pairs_begin + num_keys); diff --git a/tests/static_map/retrieve_test.cu b/tests/static_map/retrieve_test.cu index bdabfd411..148385674 100644 --- a/tests/static_map/retrieve_test.cu +++ b/tests/static_map/retrieve_test.cu @@ -1,32 +1,20 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include #include -#include -#include -#include #include #include @@ -41,9 +29,9 @@ void test_unique_sequence(Map& map, size_type num_keys) using Key = typename Map::key_type; using Value = typename Map::mapped_type; - auto keys_begin = thrust::counting_iterator{0}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto keys_begin = cuda::counting_iterator{0}; + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); @@ -57,8 +45,8 @@ void test_unique_sequence(Map& map, size_type num_keys) REQUIRE(count == 0); - auto const [_, output_end] = map.retrieve( - keys_begin, keys_begin + num_keys, thrust::discard_iterator{}, d_results.begin()); + auto const [_, output_end] = + map.retrieve(keys_begin, keys_begin + num_keys, cuda::discard_iterator{}, d_results.begin()); auto const size = std::distance(d_results.begin(), output_end); REQUIRE(size == 0); @@ -74,7 +62,7 @@ void test_unique_sequence(Map& map, size_type num_keys) REQUIRE(count == num_keys); auto [_, output_end] = - map.retrieve(keys_begin, keys_begin + num_keys, thrust::discard_iterator{}, output_begin); + map.retrieve(keys_begin, keys_begin + num_keys, cuda::discard_iterator{}, output_begin); auto const size = cuda::std::distance(output_begin, output_end); REQUIRE(size == num_keys); @@ -84,7 +72,7 @@ void test_unique_sequence(Map& map, size_type num_keys) thrust::device, d_results.begin(), d_results.end(), - [] __device__(const cuco::pair& lhs, const cuco::pair& rhs) { + [] __device__(cuco::pair const& lhs, cuco::pair const& rhs) { return lhs.first < rhs.first; }); @@ -121,7 +109,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{1'000}; diff --git a/tests/static_map/shared_memory_test.cu b/tests/static_map/shared_memory_test.cu index 1ef6d05b9..28da53012 100644 --- a/tests/static_map/shared_memory_test.cu +++ b/tests/static_map/shared_memory_test.cu @@ -1,24 +1,15 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include @@ -38,8 +29,8 @@ __global__ void shared_memory_test_kernel(Ref* maps, bool* const keys_and_values_correct) { // Each block processes one map - const size_t map_id = blockIdx.x; - const size_t offset = map_id * number_of_elements; + size_t const map_id = blockIdx.x; + size_t const offset = map_id * number_of_elements; __shared__ typename Ref::value_type sm_buffer[ValidSize]; @@ -71,7 +62,12 @@ TEMPLATE_TEST_CASE_SIG("static_map shared memory tests", (int32_t, int32_t), (int32_t, int64_t), (int64_t, int32_t), - (int64_t, int64_t)) + (int64_t, int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t) +#endif +) { constexpr std::size_t number_of_maps = 1000; constexpr std::size_t elements_in_map = 500; @@ -108,15 +104,15 @@ TEMPLATE_TEST_CASE_SIG("static_map shared memory tests", SECTION("Keys are all found after insertion.") { - auto pairs_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto pairs_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type>( [d_keys = d_keys.data(), d_values = d_values.data()] __device__(int idx) { return cuco::pair(d_keys[idx], d_values[idx]); })); std::vector h_refs; for (std::size_t map_id = 0; map_id < number_of_maps; ++map_id) { - const std::size_t offset = map_id * elements_in_map; + std::size_t const offset = map_id * elements_in_map; map_type* map = maps[map_id].get(); map->insert(pairs_begin + offset, pairs_begin + offset + elements_in_map); diff --git a/tests/static_map/stream_test.cu b/tests/static_map/stream_test.cu index fc85ca27f..3863be313 100644 --- a/tests/static_map/stream_test.cu +++ b/tests/static_map/stream_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2021-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include #include #include @@ -35,7 +24,12 @@ TEMPLATE_TEST_CASE_SIG("static_map: unique sequence of keys on given stream", (int32_t, int32_t), (int32_t, int64_t), (int64_t, int32_t), - (int64_t, int64_t)) + (int64_t, int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t) +#endif +) { cudaStream_t stream; CUCO_CUDA_TRY(cudaStreamCreate(&stream)); @@ -58,8 +52,8 @@ TEMPLATE_TEST_CASE_SIG("static_map: unique sequence of keys on given stream", thrust::sequence(thrust::device, d_keys.begin(), d_keys.end()); thrust::sequence(thrust::device, d_values.begin(), d_values.end()); - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i); })); diff --git a/tests/static_multimap/count_test.cu b/tests/static_multimap/count_test.cu index 3a0a2dfa7..4d2c0ff04 100644 --- a/tests/static_multimap/count_test.cu +++ b/tests/static_multimap/count_test.cu @@ -1,24 +1,15 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include @@ -37,7 +28,7 @@ void test_multiplicity_count(Map& map, size_type num_keys) using Key = typename Map::key_type; using Value = typename Map::mapped_type; - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; SECTION("Count of empty map should be zero.") { @@ -47,8 +38,8 @@ void test_multiplicity_count(Map& map, size_type num_keys) SECTION("Count of n unique keys should be n.") { - auto const pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto const pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); map.insert(pairs_begin, pairs_begin + num_keys); @@ -59,8 +50,8 @@ void test_multiplicity_count(Map& map, size_type num_keys) SECTION("Count of n unique keys should be n x multiplicity.") { - auto const pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto const pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i / multiplicity, i}; })); map.insert(pairs_begin, pairs_begin + num_keys * multiplicity); @@ -81,7 +72,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{1'000}; diff --git a/tests/static_multimap/find_test.cu b/tests/static_multimap/find_test.cu index 68e477409..eadfdeb60 100644 --- a/tests/static_multimap/find_test.cu +++ b/tests/static_multimap/find_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include #include @@ -41,7 +30,7 @@ void test_multimap_find(Map& map, size_type num_keys) auto zip_equal = cuda::proclaim_return_type( [] __device__(auto val) { return cuda::std::get<0>(val) == cuda::std::get<1>(val); }); - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; SECTION("Non-inserted keys have no matches") { @@ -49,13 +38,13 @@ void test_multimap_find(Map& map, size_type num_keys) map.find(keys_begin, keys_begin + num_keys, found_vals.begin()); auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - found_vals.begin(), thrust::constant_iterator{map.empty_value_sentinel()}}); + found_vals.begin(), cuda::constant_iterator{map.empty_value_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } - auto const pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto const pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i * 2}; })); @@ -67,8 +56,8 @@ void test_multimap_find(Map& map, size_type num_keys) map.find(keys_begin, keys_begin + num_keys, found_vals.begin()); - auto const gold_vals_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto const gold_vals_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return Value{i * 2}; })); auto zip = thrust::make_zip_iterator(cuda::std::tuple{found_vals.begin(), gold_vals_begin}); @@ -86,14 +75,14 @@ void test_multimap_find(Map& map, size_type num_keys) map.find_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator{0}, + cuda::counting_iterator{0}, is_even, found_results.begin()); REQUIRE(cuco::test::equal( found_results.begin(), found_results.end(), - thrust::make_transform_iterator(thrust::counting_iterator{0}, gold_fn), + cuda::make_transform_iterator(cuda::counting_iterator{0}, gold_fn), cuda::proclaim_return_type( [] __device__(auto const& found, auto const& gold) { return found == gold; }))); } @@ -110,7 +99,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{1'000}; diff --git a/tests/static_multimap/for_each_test.cu b/tests/static_multimap/for_each_test.cu index fc511ee58..25b7c8051 100644 --- a/tests/static_multimap/for_each_test.cu +++ b/tests/static_multimap/for_each_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include #include #include -#include -#include +#include #include #include @@ -110,7 +99,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_t num_unique_keys{400}; constexpr size_t key_multiplicity{5}; @@ -128,12 +125,12 @@ TEMPLATE_TEST_CASE_SIG( {}, cuco::storage<2>{}}; - auto unique_keys_begin = thrust::counting_iterator(0); + auto unique_keys_begin = cuda::counting_iterator(0); auto gen_duplicate_keys = cuda::proclaim_return_type( [] __device__(auto const& k) { return static_cast(k % num_unique_keys); }); - auto keys_begin = thrust::make_transform_iterator(unique_keys_begin, gen_duplicate_keys); + auto keys_begin = cuda::make_transform_iterator(unique_keys_begin, gen_duplicate_keys); - auto const pairs_begin = thrust::make_transform_iterator( + auto const pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair{i, i}; })); diff --git a/tests/static_multimap/heterogeneous_lookup_test.cu b/tests/static_multimap/heterogeneous_lookup_test.cu index 07cd65e27..238f4b1b4 100644 --- a/tests/static_multimap/heterogeneous_lookup_test.cu +++ b/tests/static_multimap/heterogeneous_lookup_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include @@ -19,10 +8,9 @@ #include #include +#include #include #include -#include -#include #include #include @@ -79,6 +67,9 @@ struct custom_key_equal { } }; +// TODO: extend with __int128_t once the multimap can handle slots larger than +// 32 bytes (key_pair<__int128_t> is 32 bytes, so pair, V> +// exceeds the current slot-size budget). TEMPLATE_TEST_CASE( "static_multimap heterogeneous lookup tests", "", @@ -105,12 +96,12 @@ TEMPLATE_TEST_CASE( cuco::empty_key{sentinel_key}, cuco::empty_value{sentinel_value}}; - auto insert_pairs = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto insert_pairs = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair(i, i); })); - auto probe_keys = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto probe_keys = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return ProbeKey(i); })); SECTION("All inserted keys-value pairs should be contained") diff --git a/tests/static_multimap/insert_contains_test.cu b/tests/static_multimap/insert_contains_test.cu index 834795a0a..8b12461f9 100644 --- a/tests/static_multimap/insert_contains_test.cu +++ b/tests/static_multimap/insert_contains_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2024-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include #include @@ -33,9 +22,9 @@ void test_insert(Map& map, std::size_t num_keys) using Key = typename Map::key_type; using Value = typename Map::mapped_type; - auto const keys_begin = thrust::counting_iterator{0}; - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto const keys_begin = cuda::counting_iterator{0}; + auto pairs_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type>( [] __device__(auto i) { return cuco::pair{i, i}; })); thrust::device_vector d_contained(num_keys); @@ -63,11 +52,11 @@ void test_insert(Map& map, std::size_t num_keys) map.contains_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator(0), + cuda::counting_iterator(0), is_even, d_contained.begin()); auto gold_iter = - thrust::make_transform_iterator(thrust::counting_iterator(0), is_even); + cuda::make_transform_iterator(cuda::counting_iterator(0), is_even); auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_contained.begin(), gold_iter}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -96,7 +85,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr std::size_t num_keys{4'000}; diff --git a/tests/static_multimap/insert_if_test.cu b/tests/static_multimap/insert_if_test.cu index a5cc07e62..a652909e1 100644 --- a/tests/static_multimap/insert_if_test.cu +++ b/tests/static_multimap/insert_if_test.cu @@ -1,27 +1,17 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include #include -#include #include #include @@ -35,11 +25,11 @@ void test_insert_if(Map& map, std::size_t size) // 50% insertion auto const pred = [] __device__(Key k) { return k % 2 == 0; }; - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; SECTION("Count of n / 2 insertions should be n / 2.") { - auto const pairs_begin = thrust::make_transform_iterator( + auto const pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair{i, i}; })); @@ -53,7 +43,7 @@ void test_insert_if(Map& map, std::size_t size) SECTION("Inserting the same element n / 2 times should return n / 2.") { - auto const pairs_begin = thrust::constant_iterator>{{1, 1}}; + auto const pairs_begin = cuda::constant_iterator>{{1, 1}}; auto const num = map.insert_if(pairs_begin, pairs_begin + size, keys_begin, pred); REQUIRE(num * 2 == size); @@ -86,7 +76,14 @@ TEMPLATE_TEST_CASE_SIG( (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 1), (int64_t, int32_t, cuco::test::probe_sequence::linear_probing, 2), - (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, int64_t, cuco::test::probe_sequence::double_hashing, 1), + (int32_t, __int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr std::size_t num_keys{1'000}; diff --git a/tests/static_multimap/multiplicity_test.cu b/tests/static_multimap/multiplicity_test.cu index fa63a4beb..fc2bca12b 100644 --- a/tests/static_multimap/multiplicity_test.cu +++ b/tests/static_multimap/multiplicity_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2021-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include #include #include -#include -#include #include #include @@ -36,9 +25,9 @@ void test_multiplicity_two(Map& map, std::size_t num_items) auto const num_keys = num_items / 2; - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; // multiplicity = 2 - auto const pairs_begin = thrust::make_transform_iterator( + auto const pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair{i / 2, i}; })); @@ -56,7 +45,7 @@ void test_multiplicity_two(Map& map, std::size_t num_items) REQUIRE(num == num_items); auto [_, output_end] = - map.retrieve(keys_begin, keys_begin + num_keys, thrust::discard_iterator{}, output_begin); + map.retrieve(keys_begin, keys_begin + num_keys, cuda::discard_iterator{}, output_begin); std::size_t const size = cuda::std::distance(output_begin, output_end); REQUIRE(size == num_items); @@ -66,7 +55,7 @@ void test_multiplicity_two(Map& map, std::size_t num_items) thrust::device, d_results.begin(), d_results.end(), - [] __device__(const cuco::pair& lhs, const cuco::pair& rhs) { + [] __device__(cuco::pair const& lhs, cuco::pair const& rhs) { if (lhs.first != rhs.first) { return lhs.first < rhs.first; } return lhs.second < rhs.second; }); @@ -92,7 +81,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 8), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 8)) + (int64_t, cuco::test::probe_sequence::linear_probing, 8) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 8), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 8) +#endif +) { constexpr std::size_t num_items{400}; diff --git a/tests/static_multimap/retrieve_if_test.cu b/tests/static_multimap/retrieve_if_test.cu index 44770395f..1438ef42b 100644 --- a/tests/static_multimap/retrieve_if_test.cu +++ b/tests/static_multimap/retrieve_if_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include #include @@ -111,7 +100,12 @@ TEMPLATE_TEST_CASE_SIG("static_multimap retrieve_if", "", ((typename Key, typename Value), Key, Value), (int32_t, int32_t), - (int64_t, int64_t)) + (int64_t, int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, __int128_t) +#endif +) { constexpr size_type num_keys{400}; @@ -119,12 +113,12 @@ TEMPLATE_TEST_CASE_SIG("static_multimap retrieve_if", container_type container{num_keys * 2, cuco::empty_key{-1}, cuco::empty_value{-1}}; - auto keys_begin = thrust::counting_iterator(1); - auto keys_end = keys_begin + num_keys; - auto pairs_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(1), - cuda::proclaim_return_type>( - [] __device__(Key i) { return cuco::pair{i, i}; })); + auto keys_begin = cuda::counting_iterator(1); + auto keys_end = keys_begin + num_keys; + auto pairs_begin = + cuda::make_transform_iterator(cuda::make_counting_iterator(1), + cuda::proclaim_return_type>( + [] __device__(Key i) { return cuco::pair{i, i}; })); container.insert(pairs_begin, pairs_begin + num_keys); diff --git a/tests/static_multimap/retrieve_test.cu b/tests/static_multimap/retrieve_test.cu index 23418f015..cb6a1c085 100644 --- a/tests/static_multimap/retrieve_test.cu +++ b/tests/static_multimap/retrieve_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2025-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include #include #include -#include -#include #include #include @@ -44,9 +33,9 @@ void test_retrieve(Map& map, std::size_t num_items) auto const num_gold = num_items / 2; - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; // multiplicity = 2 - auto const pairs_begin = thrust::make_transform_iterator( + auto const pairs_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair{i / 2, i / 2}; })); @@ -68,7 +57,7 @@ void test_retrieve(Map& map, std::size_t num_items) keys_begin + num_items, custom_key_eq{}, map.hash_function(), - thrust::discard_iterator{}, + cuda::discard_iterator{}, output_begin); std::size_t const size = cuda::std::distance(output_begin, output_end); @@ -79,12 +68,12 @@ void test_retrieve(Map& map, std::size_t num_items) thrust::device, d_results.begin(), d_results.end(), - [] __device__(const cuco::pair& lhs, const cuco::pair& rhs) { + [] __device__(cuco::pair const& lhs, cuco::pair const& rhs) { if (lhs.first != rhs.first) { return lhs.first < rhs.first; } return lhs.second < rhs.second; }); - auto const gold_begin = thrust::make_transform_iterator( + auto const gold_begin = cuda::make_transform_iterator( keys_begin, cuda::proclaim_return_type>([] __device__(auto i) { return cuco::pair{(i / 2) * 2, (i / 2) * 2}; })); @@ -109,7 +98,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 4), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 4)) + (int64_t, cuco::test::probe_sequence::linear_probing, 4) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 4), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 4) +#endif +) { constexpr std::size_t num_items{1'000}; diff --git a/tests/static_multiset/contains_test.cu b/tests/static_multiset/contains_test.cu index 28bd8b843..eb4d6b5f2 100644 --- a/tests/static_multiset/contains_test.cu +++ b/tests/static_multiset/contains_test.cu @@ -1,29 +1,18 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include #include #include #include @@ -67,11 +56,11 @@ void test_unique_sequence(Set& set, size_type num_keys) { set.contains_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator(0), + cuda::counting_iterator(0), is_even, d_contained.begin()); auto gold_iter = - thrust::make_transform_iterator(thrust::counting_iterator(0), is_even); + cuda::make_transform_iterator(cuda::counting_iterator(0), is_even); auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_contained.begin(), gold_iter}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -88,7 +77,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{400}; diff --git a/tests/static_multiset/count_test.cu b/tests/static_multiset/count_test.cu index 72f60b8b6..e9e4e664d 100644 --- a/tests/static_multiset/count_test.cu +++ b/tests/static_multiset/count_test.cu @@ -1,27 +1,16 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include -#include -#include #include @@ -32,8 +21,8 @@ void test_unique_sequence(Set& set, size_type num_keys) { using Key = typename Set::key_type; - auto keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i}; })); SECTION("Count of empty set should be zero.") @@ -51,8 +40,8 @@ void test_unique_sequence(Set& set, size_type num_keys) } auto constexpr multiplicity = 3; - auto query_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto query_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i / multiplicity}; })); SECTION("Count of 3n unique keys should be 3n.") @@ -70,8 +59,8 @@ void test_count_each(Set& set, size_type num_keys) thrust::device_vector d_counts(num_keys); auto const counts_begin = d_counts.begin(); - auto keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i}; })); set.clear(); @@ -101,12 +90,12 @@ void test_count_each(Set& set, size_type num_keys) set.clear(); auto constexpr multiplicity = 3; - auto duplicate_keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto duplicate_keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i / multiplicity}; })); set.insert(duplicate_keys_begin, duplicate_keys_begin + num_keys); - auto const query_begin = thrust::counting_iterator{0}; + auto const query_begin = cuda::counting_iterator{0}; auto const query_size = num_keys / multiplicity; SECTION("Count_each with duplicates should return correct counts.") { @@ -128,8 +117,8 @@ void test_count_each_outer(Set& set, size_type num_keys) thrust::device_vector d_counts(num_keys); auto const counts_begin = d_counts.begin(); - auto keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i}; })); set.clear(); @@ -159,13 +148,13 @@ void test_count_each_outer(Set& set, size_type num_keys) set.clear(); auto constexpr multiplicity = 3; - auto duplicate_keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, + auto duplicate_keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { return Key{i / multiplicity}; })); set.insert(duplicate_keys_begin, duplicate_keys_begin + num_keys); auto const query_size = num_keys / multiplicity; - auto const query_begin = thrust::counting_iterator{0}; + auto const query_begin = cuda::counting_iterator{0}; SECTION("Count_each_outer with duplicates should return correct counts.") { @@ -190,7 +179,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{666}; diff --git a/tests/static_multiset/custom_count_test.cu b/tests/static_multiset/custom_count_test.cu index f5ade5eeb..6449f7022 100644 --- a/tests/static_multiset/custom_count_test.cu +++ b/tests/static_multiset/custom_count_test.cu @@ -1,24 +1,15 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include @@ -69,8 +60,8 @@ void test_custom_count(Set& set, size_type num_keys) } }(); - auto query_begin = thrust::make_transform_iterator( - thrust::make_counting_iterator(0), + auto query_begin = cuda::make_transform_iterator( + cuda::make_counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return static_cast(i * XXX); })); SECTION("Count of empty set should be zero.") @@ -85,7 +76,7 @@ void test_custom_count(Set& set, size_type num_keys) REQUIRE(count == num_keys); } - auto const iter = thrust::counting_iterator{0}; + auto const iter = cuda::counting_iterator{0}; set.insert(iter, iter + num_keys); SECTION("Count of n unique keys should be n.") @@ -101,7 +92,7 @@ void test_custom_count(Set& set, size_type num_keys) } set.clear(); // reset the set - auto const constants = thrust::constant_iterator{1}; + auto const constants = cuda::constant_iterator{1}; set.insert(constants, constants + num_keys); // inser the same value `num_keys` times SECTION("Count of a key whose multiplicity equals n should be n.") @@ -128,7 +119,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{555}; diff --git a/tests/static_multiset/find_test.cu b/tests/static_multiset/find_test.cu index e0c8e6825..ae8a78645 100644 --- a/tests/static_multiset/find_test.cu +++ b/tests/static_multiset/find_test.cu @@ -1,28 +1,18 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include #include #include @@ -37,7 +27,7 @@ void test_unique_sequence(Set& set, size_type num_keys) { using Key = typename Set::key_type; - auto keys_begin = thrust::counting_iterator{0}; + auto keys_begin = cuda::counting_iterator{0}; thrust::device_vector d_contained(num_keys); auto zip_equal = cuda::proclaim_return_type( @@ -48,8 +38,8 @@ void test_unique_sequence(Set& set, size_type num_keys) thrust::device_vector d_results(num_keys); set.find(keys_begin, keys_begin + num_keys, d_results.begin()); - auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - d_results.begin(), thrust::constant_iterator{set.empty_key_sentinel()}}); + auto zip = thrust::make_zip_iterator( + cuda::std::tuple{d_results.begin(), cuda::constant_iterator{set.empty_key_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -76,14 +66,14 @@ void test_unique_sequence(Set& set, size_type num_keys) set.find_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator{0}, + cuda::counting_iterator{0}, is_even, found_results.begin()); REQUIRE(cuco::test::equal( found_results.begin(), found_results.end(), - thrust::make_transform_iterator(thrust::counting_iterator{0}, gold_fn), + cuda::make_transform_iterator(cuda::counting_iterator{0}, gold_fn), cuda::proclaim_return_type( [] __device__(auto const& found, auto const& gold) { return found == gold; }))); } @@ -100,7 +90,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{1'000}; diff --git a/tests/static_multiset/for_each_test.cu b/tests/static_multiset/for_each_test.cu index 6d663f439..f9de22947 100644 --- a/tests/static_multiset/for_each_test.cu +++ b/tests/static_multiset/for_each_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include #include #include -#include -#include +#include #include #include @@ -103,7 +92,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_t num_unique_keys{400}; constexpr size_t key_multiplicity{5}; @@ -116,10 +113,10 @@ TEMPLATE_TEST_CASE_SIG( auto set = cuco::static_multiset{num_keys, cuco::empty_key{-1}, {}, probe{}, {}, cuco::storage<2>{}}; - auto unique_keys_begin = thrust::counting_iterator(0); + auto unique_keys_begin = cuda::counting_iterator(0); auto gen_duplicate_keys = cuda::proclaim_return_type( [] __device__(auto const& k) { return static_cast(k % num_unique_keys); }); - auto keys_begin = thrust::make_transform_iterator(unique_keys_begin, gen_duplicate_keys); + auto keys_begin = cuda::make_transform_iterator(unique_keys_begin, gen_duplicate_keys); set.insert(keys_begin, keys_begin + num_keys); diff --git a/tests/static_multiset/insert_test.cu b/tests/static_multiset/insert_test.cu index c0d21848f..19908c326 100644 --- a/tests/static_multiset/insert_test.cu +++ b/tests/static_multiset/insert_test.cu @@ -1,27 +1,16 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include -#include -#include #include #include @@ -37,7 +26,7 @@ void test_insert(Set& set) SECTION("Inserting 300 unique keys should get 300 entries in the multiset") { - auto const keys = thrust::counting_iterator{0}; + auto const keys = cuda::counting_iterator{0}; set.insert(keys, keys + num); auto const num_insertions = set.size(); @@ -46,7 +35,7 @@ void test_insert(Set& set) SECTION("Inserting one key for 300 times should get 300 entries in the multiset") { - auto const keys = thrust::constant_iterator{0}; + auto const keys = cuda::constant_iterator{0}; set.insert(keys, keys + num); auto const num_insertions = set.size(); @@ -58,7 +47,7 @@ void test_insert(Set& set) SECTION("Inserting all even values between [0, 300) should get 150 entries in the multiset") { - auto const keys = thrust::counting_iterator{0}; + auto const keys = cuda::counting_iterator{0}; set.insert_if(keys, keys + num, keys, is_even); auto const num_insertions = set.size(); @@ -67,8 +56,8 @@ void test_insert(Set& set) SECTION("Conditionally inserting one key for 150 times should get 150 entries in the multiset") { - auto const keys = thrust::constant_iterator{0}; - set.insert_if(keys, keys + num, thrust::counting_iterator{0}, is_even); + auto const keys = cuda::constant_iterator{0}; + set.insert_if(keys, keys + num, cuda::counting_iterator{0}, is_even); auto const num_insertions = set.size(); REQUIRE(num_insertions == num / 2); @@ -86,7 +75,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{400}; @@ -97,7 +94,7 @@ TEMPLATE_TEST_CASE_SIG( constexpr size_type gold_capacity = [&]() { if constexpr (cuco::is_double_hashing::value) { return (CGSize == 1) ? 422 // 211 x 1 x 2 - : 412; // 103 x 2 x 2 + : 404; // 101 x 2 x 2 } else { return 400; } diff --git a/tests/static_multiset/large_input_test.cu b/tests/static_multiset/large_input_test.cu index 4cc6c19b4..0933b7012 100644 --- a/tests/static_multiset/large_input_test.cu +++ b/tests/static_multiset/large_input_test.cu @@ -1,27 +1,16 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include -#include -#include #include #include @@ -34,7 +23,7 @@ void test_unique_sequence(Set& set, typename Set::value_type* res_begin, std::si { using Key = typename Set::key_type; - auto const keys_begin = thrust::counting_iterator(0); + auto const keys_begin = cuda::counting_iterator(0); auto const keys_end = keys_begin + num_keys; set.insert(keys_begin, keys_end); @@ -43,7 +32,7 @@ void test_unique_sequence(Set& set, typename Set::value_type* res_begin, std::si SECTION("All inserted keys can be retrieved.") { auto const [_, res_end] = - set.retrieve(keys_begin, keys_end, thrust::make_discard_iterator(), res_begin); + set.retrieve(keys_begin, keys_end, cuda::make_discard_iterator(), res_begin); REQUIRE(static_cast(std::distance(res_begin, res_end)) == num_keys); thrust::sort(thrust::device, res_begin, res_end); @@ -57,9 +46,17 @@ TEMPLATE_TEST_CASE_SIG( "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), (int64_t, cuco::test::probe_sequence::double_hashing, 1), - (int64_t, cuco::test::probe_sequence::double_hashing, 2)) + (int64_t, cuco::test::probe_sequence::double_hashing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2) +#endif +) { - constexpr std::size_t num_keys{1'200'000'000}; + // Reduce the key count for 16-byte keys to stay within GPU memory. + // 1.2B * 8B * 2 (capacity) = 19.2GB; 300M * 16B * 2 = 9.6GB. + constexpr std::size_t num_keys = (sizeof(Key) >= 16) ? 300'000'000 : 1'200'000'000; using extent_type = cuco::extent; using probe = cuco::double_hashing>; diff --git a/tests/static_multiset/load_factor_test.cu b/tests/static_multiset/load_factor_test.cu index 4bfbe8a14..d0eb88eea 100644 --- a/tests/static_multiset/load_factor_test.cu +++ b/tests/static_multiset/load_factor_test.cu @@ -1,21 +1,11 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include @@ -33,7 +23,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr size_type num_keys{10}; diff --git a/tests/static_multiset/retrieve_if_test.cu b/tests/static_multiset/retrieve_if_test.cu index 68286a52d..71e28d5ff 100644 --- a/tests/static_multiset/retrieve_if_test.cu +++ b/tests/static_multiset/retrieve_if_test.cu @@ -1,24 +1,15 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include @@ -105,8 +96,16 @@ __global__ void test_retrieve_if_all_true_kernel( *atomic_counter); } -TEMPLATE_TEST_CASE_SIG( - "static_multiset retrieve_if", "", ((typename Key), Key), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_multiset retrieve_if", + "", + ((typename Key), Key), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { constexpr size_type num_keys{400}; @@ -114,7 +113,7 @@ TEMPLATE_TEST_CASE_SIG( container_type container{num_keys * 2, cuco::empty_key{-1}}; - auto keys_begin = thrust::counting_iterator(1); + auto keys_begin = cuda::counting_iterator(1); auto keys_end = keys_begin + num_keys; container.insert(keys_begin, keys_end); diff --git a/tests/static_multiset/retrieve_test.cu b/tests/static_multiset/retrieve_test.cu index deda194c4..9581fb0dc 100644 --- a/tests/static_multiset/retrieve_test.cu +++ b/tests/static_multiset/retrieve_test.cu @@ -1,30 +1,18 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include -#include #include #include @@ -47,8 +35,8 @@ void test_multiplicity(Container& container, std::size_t num_keys, std::size_t m thrust::device_vector probed_keys(num_actual_keys); thrust::device_vector matched_keys(num_actual_keys); - auto const keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto const keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([multiplicity] __device__(auto const& i) { return static_cast(i / multiplicity); })); @@ -77,7 +65,7 @@ void test_outer(Container& container, std::size_t num_keys) container.clear(); - auto const keys_begin = thrust::counting_iterator{0}; + auto const keys_begin = cuda::counting_iterator{0}; auto const query_size = num_keys * 2ull; thrust::device_vector probed_keys(num_keys * 2ull); @@ -142,7 +130,15 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { constexpr std::size_t num_keys{400}; constexpr double desired_load_factor = 0.5; diff --git a/tests/static_multiset/stream_test.cu b/tests/static_multiset/stream_test.cu index fe9db3f7b..e26ecf642 100644 --- a/tests/static_multiset/stream_test.cu +++ b/tests/static_multiset/stream_test.cu @@ -1,29 +1,19 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include -#include #include #include @@ -33,7 +23,12 @@ TEMPLATE_TEST_CASE_SIG("static_multiset: operations on different stream than con "", ((typename Key), Key), (int32_t), - (int64_t)) + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { cudaStream_t constructor_stream; cudaStream_t operation_stream; @@ -92,8 +87,7 @@ TEMPLATE_TEST_CASE_SIG("static_multiset: operations on different stream than con thrust::device_vector d_results(num_keys); multiset.find(d_keys.begin(), d_keys.end(), d_results.begin(), operation_stream); - auto zip = - thrust::make_zip_iterator(cuda::std::make_tuple(d_results.begin(), d_keys.begin())); + auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_results.begin(), d_keys.begin()}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, cuda::proclaim_return_type([] __device__(auto const& p) { diff --git a/tests/static_set/atomic_storage_test.cu b/tests/static_set/atomic_storage_test.cu index f67f6e494..e61b66f6a 100644 --- a/tests/static_set/atomic_storage_test.cu +++ b/tests/static_set/atomic_storage_test.cu @@ -1,25 +1,13 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include #include -#include -#include #include @@ -66,7 +54,8 @@ TEST_CASE("atomic_storage_test", "") {}, cuco::storage<1>{}}; - auto keys_begin = thrust::make_transform_iterator(thrust::counting_iterator{0}, build_fn{}); + auto keys_begin = cuda::make_transform_iterator(cuda::counting_iterator{0}, + cuda::proclaim_return_type(build_fn{})); set.insert_async(keys_begin, keys_begin + num_keys); auto const count = set.size(); diff --git a/tests/static_set/capacity_test.cu b/tests/static_set/capacity_test.cu index 09a224f4a..4a34b4628 100644 --- a/tests/static_set/capacity_test.cu +++ b/tests/static_set/capacity_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/static_set/for_each_test.cu b/tests/static_set/for_each_test.cu index 4262c445d..3fe2639aa 100644 --- a/tests/static_set/for_each_test.cu +++ b/tests/static_set/for_each_test.cu @@ -1,35 +1,26 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include +#include + using size_type = std::size_t; template -void test_for_each(Set& set, size_type num_keys) +void test_for_each(Set& set, size_type num_keys, size_type expected_evens, size_type expected_odds) { using Key = typename Set::key_type; @@ -38,9 +29,9 @@ void test_for_each(Set& set, size_type num_keys) cuda::stream_ref stream{cudaStream_t{nullptr}}; // Insert keys - auto keys_begin = thrust::make_transform_iterator( - thrust::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { - // generates a sequence of 1, 2, 1, 2, ... + auto keys_begin = cuda::make_transform_iterator( + cuda::counting_iterator{0}, cuda::proclaim_return_type([] __device__(auto i) { + // generates a sequence of 0, 1, 2, ... return static_cast(i); })); set.insert(keys_begin, keys_begin + num_keys, stream); @@ -56,25 +47,33 @@ void test_for_each(Set& set, size_type num_keys) if (slot % 2 == 0) { counter->fetch_add(slot, cuda::memory_order_relaxed); } }, stream); - REQUIRE(counter_storage.load_to_host(stream) == 249'500); + REQUIRE(counter_storage.load_to_host(stream) == expected_evens); counter_storage.reset(stream); // count the sum of all odd keys set.for_each( - thrust::counting_iterator(0), - thrust::counting_iterator(2 * num_keys), // test for false-positives + cuda::counting_iterator(0), + cuda::counting_iterator(2 * num_keys), // test for false-positives [counter = counter_storage.data()] __device__(auto const slot) { if (!(slot % 2 == 0)) { counter->fetch_add(slot, cuda::memory_order_relaxed); } }, stream); - REQUIRE(counter_storage.load_to_host(stream) == 250'000); + REQUIRE(counter_storage.load_to_host(stream) == expected_odds); } TEMPLATE_TEST_CASE_SIG( "static_set for_each tests", "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), + (int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, cuco::test::probe_sequence::double_hashing, 2), + (int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, cuco::test::probe_sequence::double_hashing, 1), @@ -82,9 +81,24 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr size_type num_keys{1'000}; + // Limit key count for small types: leave room for the -1 sentinel. + // Expected sums are pre-computed per type class: + // int16_t (num_keys=100): sum of evens 0..98 = 2450, sum of odds 1..99 = 2500 + // int16_t+ (num_keys=1000): sum of evens 0..998 = 249'500, sum of odds 1..999 = 250'000 + constexpr size_type num_keys = (sizeof(Key) == 1) ? 100 : 1'000; + constexpr size_type expected_evens = (sizeof(Key) == 1) ? 2'450 : 249'500; + constexpr size_type expected_odds = (sizeof(Key) == 1) ? 2'500 : 250'000; + using probe = std::conditional_t< Probe == cuco::test::probe_sequence::linear_probing, cuco::linear_probing>, @@ -98,6 +112,6 @@ TEMPLATE_TEST_CASE_SIG( cuco::cuda_allocator, cuco::storage<2>>; - auto set = set_t{num_keys, cuco::empty_key{-1}}; - test_for_each(set, num_keys); + auto set = set_t{num_keys, cuco::empty_key{static_cast(-1)}}; + test_for_each(set, num_keys, expected_evens, expected_odds); } diff --git a/tests/static_set/heterogeneous_lookup_test.cu b/tests/static_set/heterogeneous_lookup_test.cu index e691a2110..8ab5e1e72 100644 --- a/tests/static_set/heterogeneous_lookup_test.cu +++ b/tests/static_set/heterogeneous_lookup_test.cu @@ -1,28 +1,17 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include -#include -#include #include #include @@ -85,7 +74,13 @@ TEMPLATE_TEST_CASE_SIG("static_set heterogeneous lookup tests", "", ((typename T, int CGSize), T, CGSize), (int32_t, 1), - (int32_t, 2)) + (int32_t, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, 1), + (__int128_t, 2) +#endif +) { using Key = T; using InsertKey = key_pair; @@ -101,11 +96,11 @@ TEMPLATE_TEST_CASE_SIG("static_set heterogeneous lookup tests", auto my_set = cuco::static_set{capacity, cuco::empty_key{sentinel_key}, custom_key_equal{}, probe}; - auto insert_keys = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto insert_keys = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return InsertKey(i); })); - auto probe_keys = thrust::make_transform_iterator( - thrust::counting_iterator(0), + auto probe_keys = cuda::make_transform_iterator( + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto i) { return ProbeKey(i); })); SECTION("All inserted keys should be contained") diff --git a/tests/static_set/insert_and_find_test.cu b/tests/static_set/insert_and_find_test.cu index 914e99621..e03d58650 100644 --- a/tests/static_set/insert_and_find_test.cu +++ b/tests/static_set/insert_and_find_test.cu @@ -1,37 +1,29 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include -#include #include +#include + template void test_insert_and_find(Set& set, std::size_t num_keys) { using Key = typename Set::key_type; static auto constexpr cg_size = Set::cg_size; - auto const keys_begin = thrust::counting_iterator(0); - auto const keys_end = thrust::counting_iterator(num_keys); + auto const keys_begin = cuda::counting_iterator(0); + auto const keys_end = cuda::counting_iterator(num_keys); thrust::device_vector iters1(num_keys); thrust::device_vector iters2(num_keys); @@ -55,6 +47,13 @@ TEMPLATE_TEST_CASE_SIG( "static_set Insert and find", "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), + (int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, cuco::test::probe_sequence::double_hashing, 1), @@ -62,16 +61,25 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr std::size_t num_keys{400}; + // Limit key count for small types: leave room for the -1 sentinel + constexpr std::size_t num_keys = (sizeof(Key) == 1) ? 100 : 400; using probe = std::conditional_t>, cuco::double_hashing>>; - auto set = - cuco::static_set{num_keys, cuco::empty_key{-1}, {}, probe{}, {}, cuco::storage<2>{}}; + auto set = cuco::static_set{ + num_keys, cuco::empty_key{static_cast(-1)}, {}, probe{}, {}, cuco::storage<2>{}}; test_insert_and_find(set, num_keys); } diff --git a/tests/static_set/large_input_test.cu b/tests/static_set/large_input_test.cu index f0fafa995..ebedfc3ea 100644 --- a/tests/static_set/large_input_test.cu +++ b/tests/static_set/large_input_test.cu @@ -1,27 +1,17 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include #include -#include #include #include #include @@ -33,8 +23,8 @@ void test_unique_sequence(Set& set, bool* res_begin, std::size_t num_keys) { using Key = typename Set::key_type; - auto const keys_begin = thrust::counting_iterator(0); - auto const keys_end = thrust::counting_iterator(num_keys); + auto const keys_begin = cuda::counting_iterator(0); + auto const keys_end = cuda::counting_iterator(num_keys); SECTION("Non-inserted keys should not be contained.") { @@ -64,7 +54,7 @@ void test_unique_sequence(Set& set, bool* res_begin, std::size_t num_keys) REQUIRE(cuco::test::equal(output_keys.begin(), output_keys.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::std::equal_to{})); } } @@ -74,9 +64,17 @@ TEMPLATE_TEST_CASE_SIG( "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), (int64_t, cuco::test::probe_sequence::double_hashing, 1), - (int64_t, cuco::test::probe_sequence::double_hashing, 2)) + (int64_t, cuco::test::probe_sequence::double_hashing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2) +#endif +) { - constexpr std::size_t num_keys{1'200'000'000}; + // Reduce the key count for 16-byte keys to stay within GPU memory. + // 1.2B * 8B * 2 (capacity) = 19.2GB; 300M * 16B * 2 = 9.6GB. + constexpr std::size_t num_keys = (sizeof(Key) >= 16) ? 300'000'000 : 1'200'000'000; using extent_type = cuco::extent; using probe = cuco::double_hashing>; diff --git a/tests/static_set/rehash_test.cu b/tests/static_set/rehash_test.cu index e2078d183..20084d854 100644 --- a/tests/static_set/rehash_test.cu +++ b/tests/static_set/rehash_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/static_set/retrieve_all_test.cu b/tests/static_set/retrieve_all_test.cu index 9deb02984..c1a4bf279 100644 --- a/tests/static_set/retrieve_all_test.cu +++ b/tests/static_set/retrieve_all_test.cu @@ -1,31 +1,23 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include -#include #include #include #include +#include + template void test_unique_sequence(Set& set, std::size_t num_keys) { @@ -52,7 +44,7 @@ void test_unique_sequence(Set& set, std::size_t num_keys) auto d_res_end = set.retrieve_all(d_res.begin()); thrust::sort(d_res.begin(), d_res_end); REQUIRE(cuco::test::equal( - d_res.begin(), d_res_end, thrust::counting_iterator(0), cuda::std::equal_to{})); + d_res.begin(), d_res_end, cuda::counting_iterator(0), cuda::std::equal_to{})); } } @@ -60,6 +52,13 @@ TEMPLATE_TEST_CASE_SIG( "static_set::retrieve_all tests", "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), + (int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, cuco::test::probe_sequence::double_hashing, 1), @@ -67,9 +66,18 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr std::size_t num_keys{400}; + // Limit key count for small types: leave room for the -1 sentinel + constexpr std::size_t num_keys = (sizeof(Key) == 1) ? 100 : 400; constexpr double desired_load_factor = 1.; using probe = std::conditional_t::value) { - return (CGSize == 1) ? 409 // 409 x 1 x 2 - : 422; // 211 x 2 x 2 + if constexpr (num_keys == 100) { + return (CGSize == 1) ? 101 // 101 x 1 x 1 + : 106; // 53 x 2 x 1 + } else { + return (CGSize == 1) ? 401 // 401 x 1 x 1 + : 422; // 211 x 2 x 1 + } } else { - return 400; + return num_keys; } }(); - auto set = cuco::static_set{num_keys, desired_load_factor, cuco::empty_key{-1}, {}, probe{}}; + auto set = cuco::static_set{ + num_keys, desired_load_factor, cuco::empty_key{static_cast(-1)}, {}, probe{}}; REQUIRE(set.capacity() == gold_capacity); diff --git a/tests/static_set/retrieve_if_test.cu b/tests/static_set/retrieve_if_test.cu index 2ee582545..98592f736 100644 --- a/tests/static_set/retrieve_if_test.cu +++ b/tests/static_set/retrieve_if_test.cu @@ -1,30 +1,23 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include +#include + using size_type = std::size_t; template @@ -105,15 +98,27 @@ __global__ void test_retrieve_if_all_true_kernel( *atomic_counter); } -TEMPLATE_TEST_CASE_SIG("static_set retrieve_if", "", ((typename Key), Key), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_set retrieve_if", + "", + ((typename Key), Key), + (int8_t), + (int16_t), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { - constexpr size_type num_keys{400}; + // Limit key count for small types: keys start at 1, sentinel is -1 + constexpr size_type num_keys = (sizeof(Key) == 1) ? 100 : 400; using container_type = cuco::static_set; - container_type container{num_keys * 2, cuco::empty_key{-1}}; + container_type container{num_keys * 2, cuco::empty_key{static_cast(-1)}}; - auto keys_begin = thrust::counting_iterator(1); + auto keys_begin = cuda::counting_iterator(1); auto keys_end = keys_begin + num_keys; container.insert(keys_begin, keys_end); diff --git a/tests/static_set/retrieve_test.cu b/tests/static_set/retrieve_test.cu index fd3f81b04..12c9d3e9c 100644 --- a/tests/static_set/retrieve_test.cu +++ b/tests/static_set/retrieve_test.cu @@ -1,33 +1,24 @@ /* - * Copyright (c) 2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include +#include #include #include -#include -#include #include #include #include #include +#include + static constexpr int key_sentinel = -1; template @@ -38,7 +29,7 @@ void test_unique_sequence(Set& set, std::size_t num_keys) thrust::device_vector keys(num_keys); thrust::device_vector matched_keys(num_keys); - auto iter = thrust::counting_iterator{0}; + auto iter = cuda::counting_iterator{0}; SECTION("Non-inserted keys should not be contained.") { @@ -63,10 +54,10 @@ void test_unique_sequence(Set& set, std::size_t num_keys) thrust::sort(keys.begin(), probe_end); thrust::sort(matched_keys.begin(), matched_end); REQUIRE(cuco::test::equal( - keys.begin(), keys.end(), thrust::counting_iterator(0), cuda::std::equal_to{})); + keys.begin(), keys.end(), cuda::counting_iterator(0), cuda::std::equal_to{})); REQUIRE(cuco::test::equal(matched_keys.begin(), matched_keys.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::std::equal_to{})); } } @@ -75,6 +66,13 @@ TEMPLATE_TEST_CASE_SIG( "static_set retrieve tests", "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), + (int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, cuco::test::probe_sequence::double_hashing, 1), @@ -82,17 +80,29 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr std::size_t num_keys{400}; + // Limit key count for small types: leave room for the -1 sentinel + constexpr std::size_t num_keys = (sizeof(Key) == 1) ? 100 : 400; constexpr double desired_load_factor = 1.; using probe = std::conditional_t>, cuco::double_hashing>>; - auto set = cuco::static_set{ - num_keys, desired_load_factor, cuco::empty_key{key_sentinel}, {}, probe{}}; + auto set = cuco::static_set{num_keys, + desired_load_factor, + cuco::empty_key{static_cast(key_sentinel)}, + {}, + probe{}}; test_unique_sequence(set, num_keys); } diff --git a/tests/static_set/shared_memory_test.cu b/tests/static_set/shared_memory_test.cu index 374271e9a..3e8066e8e 100644 --- a/tests/static_set/shared_memory_test.cu +++ b/tests/static_set/shared_memory_test.cu @@ -1,21 +1,11 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include @@ -27,6 +17,7 @@ #include +#include #include template @@ -37,8 +28,8 @@ __global__ void shared_memory_test_kernel(Ref* sets, bool* const keys_correct) { // Each block processes one set - const size_t set_id = blockIdx.x; - const size_t offset = set_id * number_of_elements; + size_t const set_id = blockIdx.x; + size_t const offset = set_id * number_of_elements; __shared__ typename Ref::value_type sm_buffer[ValidSize]; @@ -46,6 +37,8 @@ __global__ void shared_memory_test_kernel(Ref* sets, auto insert_ref = sets[set_id].make_copy(g, sm_buffer, cuco::thread_scope_block); auto find_ref = insert_ref.rebind_operators(cuco::op::find); + g.sync(); + for (int i = g.thread_rank(); i < number_of_elements; i += g.size()) { auto found_it = find_ref.find(insterted_keys[offset + i]); @@ -63,11 +56,25 @@ __global__ void shared_memory_test_kernel(Ref* sets, } } -TEMPLATE_TEST_CASE_SIG( - "static_set shared memory tests", "", ((typename Key), Key), (int32_t), (int64_t)) +TEMPLATE_TEST_CASE_SIG("static_set shared memory tests", + "", + ((typename Key), Key), + (int8_t), + (int16_t), + (int32_t), + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { - constexpr std::size_t number_of_sets = 1000; - constexpr std::size_t elements_in_set = 500; + // For int8_t: sentinel = -1, so usable key range is -128...127 (excluding -1). + // For int16_t: sentinel = -1, so usable key range is -32768..32767 (excluding -1). + // thrust::sequence over number_of_sets*elements_in_set keys must not wrap. + // Use smaller set count and element count for smaller types. + constexpr std::size_t number_of_sets = (sizeof(Key) <= 2) ? (sizeof(Key) == 1 ? 2 : 100) : 1000; + constexpr std::size_t elements_in_set = (sizeof(Key) <= 2) ? (sizeof(Key) == 1 ? 100 : 600) : 500; constexpr std::size_t set_capacity = 2 * elements_in_set; using extent_type = cuco::extent; @@ -87,7 +94,8 @@ TEMPLATE_TEST_CASE_SIG( // operator yet std::vector> sets; for (std::size_t set_id = 0; set_id < number_of_sets; ++set_id) { - sets.push_back(std::make_unique(extent_type{}, cuco::empty_key{-1})); + sets.push_back( + std::make_unique(extent_type{}, cuco::empty_key{static_cast(-1)})); } thrust::device_vector d_keys_exist(number_of_sets * elements_in_set); @@ -99,7 +107,7 @@ TEMPLATE_TEST_CASE_SIG( { std::vector h_refs; for (std::size_t set_id = 0; set_id < number_of_sets; ++set_id) { - const std::size_t offset = set_id * elements_in_set; + std::size_t const offset = set_id * elements_in_set; set_type* set = sets[set_id].get(); set->insert(d_keys.begin() + offset, d_keys.begin() + offset + elements_in_set); diff --git a/tests/static_set/size_test.cu b/tests/static_set/size_test.cu index 1b087a566..f4701041d 100644 --- a/tests/static_set/size_test.cu +++ b/tests/static_set/size_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/static_set/stream_test.cu b/tests/static_set/stream_test.cu index 142ebb075..c79d3ea41 100644 --- a/tests/static_set/stream_test.cu +++ b/tests/static_set/stream_test.cu @@ -1,39 +1,38 @@ /* - * Copyright (c) 2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include #include -#include #include #include #include +#include + TEMPLATE_TEST_CASE_SIG("static_set: operations on different stream than constructor", "", ((typename Key), Key), + (int8_t), + (int16_t), (int32_t), - (int64_t)) + (int64_t) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t) +#endif +) { cudaStream_t constructor_stream; cudaStream_t operation_stream; @@ -41,14 +40,17 @@ TEMPLATE_TEST_CASE_SIG("static_set: operations on different stream than construc CUCO_CUDA_TRY(cudaStreamCreate(&operation_stream)); { // Scope ensures set is destroyed before streams - constexpr std::size_t num_keys{500'000}; - auto set = cuco::static_set{num_keys * 2, - cuco::empty_key{-1}, - {}, + // Scale num_keys to fit in the key type's value range (sentinel = -1). + constexpr std::size_t num_keys = (sizeof(Key) == 1) ? 100 + : (sizeof(Key) == 2) ? 1'000 + : 500'000; + auto set = cuco::static_set{num_keys * 2, + cuco::empty_key{static_cast(-1)}, + {}, cuco::linear_probing<1, cuco::default_hash_function>{}, - {}, - {}, - {}, + {}, + {}, + {}, constructor_stream}; thrust::device_vector d_keys(num_keys); @@ -72,8 +74,7 @@ TEMPLATE_TEST_CASE_SIG("static_set: operations on different stream than construc thrust::device_vector d_results(num_keys); set.find(d_keys.begin(), d_keys.end(), d_results.begin(), operation_stream); - auto zip = - thrust::make_zip_iterator(cuda::std::make_tuple(d_results.begin(), d_keys.begin())); + auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_results.begin(), d_keys.begin()}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, cuda::proclaim_return_type([] __device__(auto const& p) { diff --git a/tests/static_set/unique_sequence_test.cu b/tests/static_set/unique_sequence_test.cu index 0c5ef433f..c6ab2b0c3 100644 --- a/tests/static_set/unique_sequence_test.cu +++ b/tests/static_set/unique_sequence_test.cu @@ -1,34 +1,25 @@ /* - * Copyright (c) 2022-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include +#include #include #include +#include #include #include #include -#include -#include #include #include #include +#include + using size_type = int32_t; int32_t constexpr SENTINEL = -1; @@ -38,7 +29,7 @@ void test_unique_sequence(Set& set, size_type num_keys) { using Key = typename Set::key_type; - auto keys_begin = thrust::counting_iterator{0}; + auto keys_begin = cuda::counting_iterator{0}; thrust::device_vector d_contained(num_keys); auto zip_equal = cuda::proclaim_return_type( @@ -59,8 +50,8 @@ void test_unique_sequence(Set& set, size_type num_keys) thrust::device_vector d_results(num_keys); set.find(keys_begin, keys_begin + num_keys, d_results.begin()); - auto zip = thrust::make_zip_iterator(cuda::std::tuple{ - d_results.begin(), thrust::constant_iterator{set.empty_key_sentinel()}}); + auto zip = thrust::make_zip_iterator( + cuda::std::tuple{d_results.begin(), cuda::constant_iterator{set.empty_key_sentinel()}}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -68,7 +59,7 @@ void test_unique_sequence(Set& set, size_type num_keys) SECTION("All conditionally inserted keys should be contained") { auto const inserted = set.insert_if( - keys_begin, keys_begin + num_keys, thrust::counting_iterator(0), is_even); + keys_begin, keys_begin + num_keys, cuda::counting_iterator(0), is_even); REQUIRE(inserted == num_keys / 2); REQUIRE(set.size() == num_keys / 2); @@ -76,7 +67,7 @@ void test_unique_sequence(Set& set, size_type num_keys) REQUIRE(cuco::test::equal( d_contained.begin(), d_contained.end(), - thrust::counting_iterator(0), + cuda::counting_iterator(0), cuda::proclaim_return_type([] __device__(auto const& idx_contained, auto const& idx) { return ((idx % 2) == 0) == idx_contained; }))); @@ -97,11 +88,11 @@ void test_unique_sequence(Set& set, size_type num_keys) { set.contains_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator(0), + cuda::counting_iterator(0), is_even, d_contained.begin()); auto gold_iter = - thrust::make_transform_iterator(thrust::counting_iterator(0), is_even); + cuda::make_transform_iterator(cuda::counting_iterator(0), is_even); auto zip = thrust::make_zip_iterator(cuda::std::tuple{d_contained.begin(), gold_iter}); REQUIRE(cuco::test::all_of(zip, zip + num_keys, zip_equal)); } @@ -124,14 +115,14 @@ void test_unique_sequence(Set& set, size_type num_keys) set.find_if(keys_begin, keys_begin + num_keys, - thrust::counting_iterator{0}, + cuda::counting_iterator{0}, is_even, found_results.begin()); REQUIRE(cuco::test::equal( found_results.begin(), found_results.end(), - thrust::make_transform_iterator(thrust::counting_iterator{0}, gold_fn), + cuda::make_transform_iterator(cuda::counting_iterator{0}, gold_fn), cuda::proclaim_return_type( [] __device__(auto const& found, auto const& gold) { return found == gold; }))); } @@ -141,6 +132,13 @@ TEMPLATE_TEST_CASE_SIG( "static_set unique sequence tests", "", ((typename Key, cuco::test::probe_sequence Probe, int CGSize), Key, Probe, CGSize), + (int8_t, cuco::test::probe_sequence::double_hashing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 1), + (int8_t, cuco::test::probe_sequence::linear_probing, 2), + (int16_t, cuco::test::probe_sequence::double_hashing, 1), + (int16_t, cuco::test::probe_sequence::double_hashing, 2), + (int16_t, cuco::test::probe_sequence::linear_probing, 1), + (int16_t, cuco::test::probe_sequence::linear_probing, 2), (int32_t, cuco::test::probe_sequence::double_hashing, 1), (int32_t, cuco::test::probe_sequence::double_hashing, 2), (int64_t, cuco::test::probe_sequence::double_hashing, 1), @@ -148,24 +146,42 @@ TEMPLATE_TEST_CASE_SIG( (int32_t, cuco::test::probe_sequence::linear_probing, 1), (int32_t, cuco::test::probe_sequence::linear_probing, 2), (int64_t, cuco::test::probe_sequence::linear_probing, 1), - (int64_t, cuco::test::probe_sequence::linear_probing, 2)) + (int64_t, cuco::test::probe_sequence::linear_probing, 2) +#if defined(CUCO_HAS_128BIT_ATOMICS) + , + (__int128_t, cuco::test::probe_sequence::double_hashing, 1), + (__int128_t, cuco::test::probe_sequence::double_hashing, 2), + (__int128_t, cuco::test::probe_sequence::linear_probing, 1), + (__int128_t, cuco::test::probe_sequence::linear_probing, 2) +#endif +) { - constexpr size_type num_keys{400}; + // Limit key count for small types: leave room for the -1 sentinel + constexpr size_type num_keys = (sizeof(Key) == 1) ? 100 : 400; using probe = std::conditional_t>, cuco::double_hashing>>; constexpr size_type gold_capacity = [&]() { if constexpr (cuco::is_double_hashing::value) { - return (CGSize == 1) ? 422 // 211 x 1 x 2 - : 412; // 103 x 2 x 2 + if constexpr (num_keys == 100) { + return (CGSize == 1) ? 106 // 53 x 1 x 2 + : 106; + } else { + return (CGSize == 1) ? 422 // 211 x 1 x 2 + : 404; // 101 x 2 x 2 + } } else { - return 400; + return num_keys; } }(); - auto set = - cuco::static_set{num_keys, cuco::empty_key{SENTINEL}, {}, probe{}, {}, cuco::storage<2>{}}; + auto set = cuco::static_set{num_keys, + cuco::empty_key{static_cast(SENTINEL)}, + {}, + probe{}, + {}, + cuco::storage<2>{}}; REQUIRE(set.capacity() == gold_capacity); diff --git a/tests/test_utils.cuh b/tests/test_utils.cuh index ba871482e..55d79438a 100644 --- a/tests/test_utils.cuh +++ b/tests/test_utils.cuh @@ -1,17 +1,6 @@ /* - * Copyright (c) 2021-2024, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2021-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/tests/test_utils.hpp b/tests/test_utils.hpp index 2c77eda36..14d463f97 100644 --- a/tests/test_utils.hpp +++ b/tests/test_utils.hpp @@ -1,17 +1,6 @@ /* - * Copyright (c) 2020-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2020-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #pragma once diff --git a/tests/utility/extent_test.cu b/tests/utility/extent_test.cu index a54d6ac26..af7cba71d 100644 --- a/tests/utility/extent_test.cu +++ b/tests/utility/extent_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/utility/fast_int_test.cu b/tests/utility/fast_int_test.cu index 8511fe9db..d15fd9791 100644 --- a/tests/utility/fast_int_test.cu +++ b/tests/utility/fast_int_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/utility/hash_test.cu b/tests/utility/hash_test.cu index 00edaa5e6..a86a4b64a 100644 --- a/tests/utility/hash_test.cu +++ b/tests/utility/hash_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2023-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/utility/next_prime_test.cu b/tests/utility/next_prime_test.cu new file mode 100644 index 000000000..c5fb8cd6c --- /dev/null +++ b/tests/utility/next_prime_test.cu @@ -0,0 +1,99 @@ +/* + * SPDX-FileCopyrightText: Copyright (c) 2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 + */ + +#include + +#include + +#include + +TEST_CASE("detail::is_prime", "") +{ + using cuco::detail::is_prime; + + SECTION("Values below 2 are not prime") + { + STATIC_REQUIRE(not is_prime(0)); + STATIC_REQUIRE(not is_prime(1)); + } + + SECTION("Small primes and composites") + { + STATIC_REQUIRE(is_prime(2)); + STATIC_REQUIRE(is_prime(3)); + STATIC_REQUIRE(not is_prime(4)); + STATIC_REQUIRE(is_prime(5)); + STATIC_REQUIRE(not is_prime(9)); + STATIC_REQUIRE(is_prime(11)); + STATIC_REQUIRE(is_prime(97)); + STATIC_REQUIRE(not is_prime(100)); + } + + SECTION("Carmichael numbers are correctly rejected") + { + // Strong pseudoprime candidates that fool weak primality tests + REQUIRE(not is_prime(561)); // 3 * 11 * 17 + REQUIRE(not is_prime(1105)); // 5 * 13 * 17 + REQUIRE(not is_prime(1729)); // 7 * 13 * 19 + REQUIRE(not is_prime(2465)); // 5 * 17 * 29 + REQUIRE(not is_prime(41041)); // 7 * 11 * 13 * 41 + REQUIRE(not is_prime(825265)); // 5 * 7 * 17 * 19 * 73 + } + + SECTION("Large primes") + { + // Mersenne prime 2^31 - 1 + REQUIRE(is_prime(2147483647ull)); + // Near uint32 max + REQUIRE(is_prime(4294967291ull)); + // Large 64-bit prime + REQUIRE(is_prime(18446744073709551557ull)); + // Adjacent composite + REQUIRE(not is_prime(18446744073709551556ull)); + } +} + +TEST_CASE("detail::next_prime", "") +{ + using cuco::detail::next_prime; + + SECTION("Values at or below 2 map to 2") + { + STATIC_REQUIRE(next_prime(0) == 2ull); + STATIC_REQUIRE(next_prime(1) == 2ull); + STATIC_REQUIRE(next_prime(2) == 2ull); + } + + SECTION("Already-prime inputs are returned unchanged") + { + STATIC_REQUIRE(next_prime(3) == 3ull); + STATIC_REQUIRE(next_prime(13) == 13ull); + STATIC_REQUIRE(next_prime(101) == 101ull); + } + + SECTION("Composite inputs advance to the next prime") + { + STATIC_REQUIRE(next_prime(4) == 5ull); + STATIC_REQUIRE(next_prime(14) == 17ull); + STATIC_REQUIRE(next_prime(100) == 101ull); + STATIC_REQUIRE(next_prime(155) == 157ull); // used by extent_test + } + + SECTION("Large composite inputs") + { + REQUIRE(next_prime(1ull << 20) == 1048583ull); + REQUIRE(next_prime(1ull << 32) == 4294967311ull); + } + + SECTION("Result is always >= input and prime") + { + using cuco::detail::is_prime; + for (std::uint64_t n : {0ull, 1ull, 42ull, 1000ull, 999983ull, 1ull << 40}) { + auto const p = next_prime(n); + REQUIRE(p >= n); + REQUIRE(is_prime(p)); + } + } +} diff --git a/tests/utility/probing_scheme_test.cu b/tests/utility/probing_scheme_test.cu index 39048946b..d87d652da 100644 --- a/tests/utility/probing_scheme_test.cu +++ b/tests/utility/probing_scheme_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2024-2025, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include diff --git a/tests/utility/storage_test.cu b/tests/utility/storage_test.cu index cddfe9ba3..8025f4b6f 100644 --- a/tests/utility/storage_test.cu +++ b/tests/utility/storage_test.cu @@ -1,17 +1,6 @@ /* - * Copyright (c) 2022-2026, NVIDIA CORPORATION. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved. + * SPDX-License-Identifier: Apache-2.0 */ #include