├── .circleci └── config.yml ├── .devcontainer └── devcontainer.json ├── LICENSE ├── README.md ├── data ├── huge.csv ├── large.csv ├── small.csv ├── very_large.csv └── very_small.csv ├── knapsack.py ├── requirements.txt └── tests ├── __init__.py └── test_knapsack.py /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | 3 | orbs: 4 | dwave: dwave/orb-examples@2 5 | 6 | workflows: 7 | version: 2.1 8 | tests: 9 | jobs: 10 | - dwave/test-linux 11 | - dwave/test-osx 12 | - dwave/test-win 13 | 14 | weekly: 15 | triggers: 16 | - schedule: 17 | cron: "0 4 * * 3" 18 | filters: 19 | branches: 20 | only: 21 | - master 22 | - main 23 | jobs: 24 | - dwave/test-linux 25 | - dwave/test-osx 26 | - dwave/test-win 27 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | // For format details, see https://aka.ms/devcontainer.json. For config options, see the 2 | // README at: https://github.com/devcontainers/templates/tree/main/src/debian 3 | { 4 | "name": "Ocean Development Environment", 5 | 6 | // python 3.11 on debian, with latest Ocean and optional packages 7 | // source repo: https://github.com/dwavesystems/ocean-dev-docker 8 | "image": "docker.io/dwavesys/ocean-dev:latest", 9 | 10 | // install repo requirements on create and content update 11 | "updateContentCommand": "pip install -r requirements.txt", 12 | 13 | // forward/expose container services (relevant only when run locally) 14 | "forwardPorts": [ 15 | // dwave-inspector web app 16 | 18000, 18001, 18002, 18003, 18004, 17 | // OAuth connect redirect URIs 18 | 36000, 36001, 36002, 36003, 36004 19 | ], 20 | 21 | "portsAttributes": { 22 | "18000-18004": { 23 | "label": "D-Wave Problem Inspector", 24 | "requireLocalPort": true 25 | }, 26 | "36000-36004": { 27 | "label": "OAuth 2.0 authorization code redirect URI", 28 | "requireLocalPort": true 29 | } 30 | }, 31 | 32 | // Configure tool-specific properties. 33 | "customizations": { 34 | // Configure properties specific to VS Code. 35 | "vscode": { 36 | // Set *default* container specific settings.json values on container create. 37 | "settings": { 38 | "workbench": { 39 | "editorAssociations": { 40 | "*.md": "vscode.markdown.preview.editor" 41 | }, 42 | "startupEditor": "readme" 43 | } 44 | }, 45 | "extensions": [ 46 | "ms-python.python", 47 | "ms-toolsai.jupyter" 48 | ] 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Open in GitHub Codespaces]( 2 | https://img.shields.io/badge/Open%20in%20GitHub%20Codespaces-333?logo=github)]( 3 | https://codespaces.new/dwave-examples/knapsack?quickstart=1) 4 | [![Linux/Mac/Windows build status]( 5 | https://circleci.com/gh/dwave-examples/knapsack.svg?style=shield)]( 6 | https://circleci.com/gh/dwave-examples/knapsack) 7 | 8 | # Knapsack 9 | 10 | The [knapsack problem](https://en.wikipedia.org/wiki/Knapsack_problem) is a 11 | well-known optimization problem. It is encountered, for example, in packing 12 | shipping containers. A shipping container has a weight capacity which it can hold. 13 | Given a collection of items to be shipped, where each item has a value and a 14 | weight, the problem is to select the optimal items to pack in the shipping 15 | container. This optimization problem can be defined as an objective with a constraint: 16 | 17 | * **Objective:** Maximize freight value (sum of values of the selected items). 18 | * **Constraint:** Total freight weight (sum of weights of the selected items) must 19 | be less than or equal to the container's capacity. 20 | 21 | This example solves such a knapsack problem by reformulating it as 22 | a constrained quadratic model (CQM) and submitting it to a Leap hybrid CQM solver. 23 | 24 | ## Usage 25 | 26 | To run the default demo, enter the command: 27 | 28 | ```bash 29 | python knapsack.py 30 | ``` 31 | 32 | To view available options, enter the command: 33 | 34 | ```bash 35 | python knapsack.py --help 36 | ``` 37 | 38 | Command-line arguments let you select one of several data sets (under the `/data` 39 | folder) and set the freight capacity. The data files are formulated as rows of 40 | items, each defined as a pair of weight and value. 41 | 42 | ## Code Overview 43 | 44 | The code in `knapsack.py` includes three main functions: 45 | 46 | * `build_knapsack_cqm()` creates a CQM by setting an objective and constraint as 47 | follows: 48 | 49 | - Objective: Binary variables are created for each item, and assigned a linear 50 | bias equal to the negative value of the item's value. To minimize this objective, 51 | by selecting an optimal set of items, is equivalent to maximizing the total 52 | value of the freight. Solutions set a value of 1 to selected items and 0 to 53 | unselected items. 54 | - Constraint: A quadratic model with the previously created binary variables, 55 | where the linear biases are set equal to the weight of each item, is created 56 | with the requirement that the total weight must not exceed the container's 57 | capacity. 58 | * `parse_inputs()` is a utility function that reads data from the example files. 59 | * `parse_solution()` parses and displays the results returned from the solver. 60 | 61 | ## License 62 | 63 | Released under the Apache License 2.0. See [LICENSE](LICENSE) file. 64 | -------------------------------------------------------------------------------- /data/huge.csv: -------------------------------------------------------------------------------- 1 | 5724,516 2 | 7713,8110 3 | 2976,4970 4 | 7900,2905 5 | 611,5051 6 | 5121,6505 7 | 6846,3593 8 | 3964,5594 9 | 623,7073 10 | 8840,7688 11 | 9079,4536 12 | 3162,6258 13 | 742,492 14 | 207,7591 15 | 3999,8775 16 | 9940,1968 17 | 136,663 18 | 8797,9197 19 | 8796,4401 20 | 7221,1714 21 | 9544,6145 22 | 8355,9430 23 | 5168,9982 24 | 3610,6496 25 | 4901,4191 26 | 2354,4657 27 | 2084,6172 28 | 6552,5085 29 | 7421,8495 30 | 8610,1558 31 | 2396,873 32 | 3394,9382 33 | 9815,6780 34 | 4085,7643 35 | 339,7844 36 | 7962,9925 37 | 1429,1338 38 | 6707,9192 39 | 8368,1978 40 | 9788,2230 41 | 4966,8325 42 | 2240,3339 43 | 8498,9435 44 | 3955,5091 45 | 1520,3387 46 | 7750,8520 47 | 8922,4116 48 | 7252,4994 49 | 4480,240 50 | 1423,9093 51 | 8455,4648 52 | 4596,2106 53 | 9024,6322 54 | 9473,5152 55 | 7827,8872 56 | 6529,2083 57 | 8457,6243 58 | 8953,3014 59 | 4583,6655 60 | 9447,7875 61 | 6962,5054 62 | 2698,5716 63 | 7285,2374 64 | 7278,779 65 | 6739,8633 66 | 2693,7220 67 | 5562,4 68 | 6349,2629 69 | 7556,6201 70 | 2844,2646 71 | 6834,4819 72 | 8545,9624 73 | 939,3628 74 | 1460,9836 75 | 258,7911 76 | 6984,2102 77 | 8624,6999 78 | 5197,7952 79 | 5801,9424 80 | 2388,9806 81 | 4490,7324 82 | 4963,359 83 | 1299,9712 84 | 1839,2995 85 | 7196,3508 86 | 4711,7451 87 | 4010,6251 88 | 6452,4124 89 | 4183,2137 90 | 2182,8957 91 | 931,9092 92 | 3641,1905 93 | 6815,4156 94 | 7480,8995 95 | 2870,2776 96 | 9646,3642 97 | 295,7903 98 | 6926,4714 99 | 9364,795 100 | 5052,1288 101 | 8313,9701 102 | 2091,6617 103 | 8527,1634 104 | 3965,3467 105 | 475,3989 106 | 4367,5792 107 | 7028,6494 108 | 9617,9666 109 | 6533,24 110 | 4943,8148 111 | 3878,2424 112 | 8566,867 113 | 8037,9113 114 | 7901,1145 115 | 6142,3979 116 | 4184,5873 117 | 3749,4548 118 | 4148,2356 119 | 685,859 120 | 7949,8011 121 | 5055,4325 122 | 1798,6647 123 | 205,8736 124 | 8766,4540 125 | 1920,4363 126 | 9221,2863 127 | 7701,3651 128 | 9923,8932 129 | 970,4030 130 | 3459,1723 131 | 1375,7218 132 | 2385,2919 133 | 527,1851 134 | 9671,9302 135 | 1428,8517 136 | 7210,2405 137 | 6778,3999 138 | 7606,5875 139 | 6670,1882 140 | 415,7741 141 | 3102,535 142 | 7620,7509 143 | 1684,7973 144 | 1784,8891 145 | 1457,4472 146 | 7497,7336 147 | 1023,2478 148 | 1333,8387 149 | 3968,1521 150 | 3470,6323 151 | 5148,5458 152 | 5099,4935 153 | 2054,84 154 | 1028,8090 155 | 2953,6670 156 | 9929,211 157 | 2606,5366 158 | 7489,7 159 | 513,1050 160 | 6107,109 161 | 4648,1384 162 | 9314,4905 163 | 8336,7267 164 | 3439,5997 165 | 1938,6948 166 | 6262,1816 167 | 3336,1060 168 | 1831,1532 169 | 1312,6370 170 | 8407,3961 171 | 3364,2475 172 | 2492,4005 173 | 5411,3048 174 | 2860,7056 175 | 1485,9217 176 | 9914,6951 177 | 1818,7482 178 | 4680,2445 179 | 2456,2549 180 | 9569,1196 181 | 561,3722 182 | 7881,1000 183 | 3121,7538 184 | 7914,8127 185 | 6136,8221 186 | 531,5563 187 | 4130,8162 188 | 5357,6984 189 | 7048,3753 190 | 1264,8199 191 | 7768,3910 192 | 1848,2291 193 | 1330,8212 194 | 9527,8658 195 | 950,8329 196 | 6225,7200 197 | 3287,769 198 | 5524,5626 199 | 7836,883 200 | 7019,3529 201 | 7987,1290 202 | 819,7113 203 | 8543,5227 204 | 918,5527 205 | 406,3913 206 | 8858,7511 207 | 2119,397 208 | 6443,9108 209 | 5252,5023 210 | 567,5076 211 | 9467,2858 212 | 3556,3248 213 | 4805,1191 214 | 5218,3980 215 | 3052,3203 216 | 7709,3177 217 | 4629,9881 218 | 1706,7940 219 | 7752,9794 220 | 227,5738 221 | 5021,4418 222 | 953,9971 223 | 6441,6460 224 | 569,1388 225 | 5550,7691 226 | 90,4131 227 | 5727,4895 228 | 3629,2079 229 | 1332,8298 230 | 8811,2168 231 | 8283,3967 232 | 3782,965 233 | 3345,6422 234 | 153,8994 235 | 1757,5891 236 | 9391,2479 237 | 4319,9300 238 | 1022,6164 239 | 1171,6778 240 | 245,5096 241 | 8735,2946 242 | 357,5605 243 | 3596,7876 244 | 6383,8227 245 | 6928,6455 246 | 7040,9443 247 | 4164,4831 248 | 14,1708 249 | 2053,2359 250 | 1596,9229 251 | 8236,7891 252 | 909,9190 253 | 4601,7627 254 | 705,7878 255 | 7380,3704 256 | 2525,6787 257 | 961,7608 258 | 6972,5232 259 | 9743,6909 260 | 3841,7394 261 | 8489,667 262 | 8300,6079 263 | 7092,1641 264 | 8773,3208 265 | 8024,197 266 | 9337,9792 267 | 8980,5729 268 | 6647,4934 269 | 4547,1612 270 | 6545,2977 271 | 1255,2945 272 | 8032,1479 273 | 9101,1410 274 | 1095,2151 275 | 3329,1765 276 | 2921,3202 277 | 3381,9622 278 | 5407,4938 279 | 1145,7263 280 | 8816,8141 281 | 710,5108 282 | 6036,2777 283 | 958,8342 284 | 2595,1264 285 | 4889,8103 286 | 8223,9552 287 | 5078,2715 288 | 6985,33 289 | 925,4591 290 | 9217,4254 291 | 2774,1502 292 | 1408,7405 293 | 5109,3413 294 | 3177,8401 295 | 4433,4287 296 | 3650,8337 297 | 4700,2686 298 | 3953,9293 299 | 3283,8266 300 | 2484,558 301 | 2476,3335 302 | 6377,5916 303 | 3254,9989 304 | 554,4015 305 | 1785,2673 306 | 4955,3844 307 | 7916,5635 308 | 1660,1847 309 | 1661,6431 310 | 7117,4516 311 | 5743,306 312 | 5558,2794 313 | 4371,6012 314 | 4707,8503 315 | 9716,4192 316 | 9592,6651 317 | 4976,1592 318 | 106,9771 319 | 2812,7268 320 | 4981,786 321 | 2544,8338 322 | 769,2967 323 | 4091,703 324 | 5157,2037 325 | 3737,3333 326 | 2001,200 327 | 2249,8452 328 | 557,5264 329 | 4996,3162 330 | 7120,6471 331 | 3577,8921 332 | 565,5183 333 | 9296,4016 334 | 9339,4758 335 | 8977,4020 336 | 1347,2035 337 | 8954,3032 338 | 3646,6661 339 | 8208,3621 340 | 5402,7346 341 | 1179,5034 342 | 1036,818 343 | 2994,6367 344 | 3360,2448 345 | 8400,1533 346 | 9415,749 347 | 853,4141 348 | 8501,7370 349 | 6702,8779 350 | 3042,5821 351 | 334,4845 352 | 5321,2525 353 | 4911,3546 354 | 5846,6774 355 | 1823,6415 356 | 9613,4007 357 | 8184,9913 358 | 868,8118 359 | 3358,7984 360 | 5291,876 361 | 3901,3038 362 | 9382,3137 363 | 7438,446 364 | 532,4341 365 | 2490,9608 366 | 9295,9173 367 | 7602,5297 368 | 9783,8992 369 | 6390,4795 370 | 511,594 371 | 2289,536 372 | 5134,3889 373 | 676,7187 374 | 93,8781 375 | 4841,7828 376 | 2077,1764 377 | 8852,8435 378 | 6768,4909 379 | 8473,3128 380 | 6506,8678 381 | 7876,9399 382 | 4909,4601 383 | 1892,6248 384 | 6856,6669 385 | 3346,7961 386 | 7485,1343 387 | 4191,5265 388 | 8301,6179 389 | 5237,1892 390 | 9460,560 391 | 6223,4558 392 | 9861,8109 393 | 2035,1486 394 | 7566,1540 395 | 4392,9083 396 | 883,2770 397 | 4247,3140 398 | 9383,101 399 | 7185,2171 400 | 9413,3113 401 | 6516,9367 402 | 4863,8076 403 | 5038,5862 404 | 9832,8749 405 | 516,9769 406 | 7355,6577 407 | 575,6900 408 | 7208,494 409 | 6023,1089 410 | 2416,5186 411 | 4523,9398 412 | 6635,8742 413 | 4109,9061 414 | 1760,7429 415 | 4081,4272 416 | 5349,8667 417 | 1673,6085 418 | 4177,415 419 | 4634,4646 420 | 1580,5045 421 | 4334,7305 422 | 3306,9952 423 | 855,2769 424 | 5064,3829 425 | 8332,9344 426 | 3017,8856 427 | 3860,9249 428 | 1079,3350 429 | 2868,2051 430 | 6108,4960 431 | 9478,1862 432 | 2602,7576 433 | 1134,2139 434 | 1886,6040 435 | 4128,327 436 | 4009,4836 437 | 3635,9669 438 | 1215,2456 439 | 4132,4808 440 | 1629,2838 441 | 4667,9239 442 | 8079,7207 443 | 147,6208 444 | 6561,8320 445 | 9920,518 446 | 1495,2955 447 | 7696,40 448 | 7458,6623 449 | 7433,9602 450 | 5278,1620 451 | 8834,6622 452 | 8084,4184 453 | 3127,3664 454 | 5487,6764 455 | 1542,6512 456 | 3917,618 457 | 1641,153 458 | 6810,3343 459 | 6229,5973 460 | 9941,5757 461 | 3225,4259 462 | 3933,9929 463 | 8956,7682 464 | 251,3117 465 | 8227,4638 466 | 2401,5677 467 | 4067,9319 468 | 1881,7574 469 | 3010,5024 470 | 9898,1353 471 | 2234,1459 472 | 167,7139 473 | 5090,89 474 | 8955,3383 475 | 6807,8051 476 | 3642,3837 477 | 5101,6921 478 | 4959,3873 479 | 3170,704 480 | 1949,7809 481 | 1993,6502 482 | 5642,3504 483 | 7672,2624 484 | 9868,1618 485 | 1854,2431 486 | 520,1611 487 | 5598,6705 488 | 5825,9799 489 | 1657,2632 490 | 9785,5278 491 | 8320,5065 492 | 2486,5202 493 | 1374,2412 494 | 4323,4595 495 | 6606,2827 496 | 9559,8519 497 | 3422,3365 498 | 8439,1661 499 | 1381,961 500 | 2455,4573 501 | 5964,2756 502 | 2653,6877 503 | 3884,9474 504 | 278,7617 505 | 5576,6330 506 | 1700,5284 507 | 5092,2976 508 | 7649,738 509 | 77,8939 510 | 2152,6480 511 | 7686,5372 512 | 4738,488 513 | 2495,6719 514 | 4351,4948 515 | 8899,9962 516 | 1575,5737 517 | 7478,1903 518 | 4649,4933 519 | 4061,5949 520 | 4536,8159 521 | 7557,5522 522 | 9729,6798 523 | 7571,7661 524 | 7470,6580 525 | 8988,6550 526 | 4478,6196 527 | 9386,2127 528 | 4589,8733 529 | 6027,6016 530 | 7035,3405 531 | 8886,6341 532 | 571,4205 533 | 4985,8193 534 | 252,5495 535 | 6611,4247 536 | 3944,6384 537 | 2801,8136 538 | 5158,4335 539 | 3244,1035 540 | 6765,9118 541 | 740,4838 542 | 9537,8 543 | 873,933 544 | 649,4778 545 | 7387,3882 546 | 3659,6183 547 | 6160,744 548 | 2766,627 549 | 303,9627 550 | 112,7907 551 | 2412,9161 552 | 356,9396 553 | 5238,5310 554 | 4759,5163 555 | 335,5238 556 | 9620,374 557 | 5240,8940 558 | 9635,3645 559 | 737,645 560 | 2882,8615 561 | 5779,7256 562 | 4019,943 563 | 4895,1298 564 | 1934,7180 565 | 3290,5620 566 | 9740,9601 567 | 3564,6497 568 | 4042,7561 569 | 5546,2760 570 | 6336,9541 571 | 2317,3287 572 | 3415,8311 573 | 5495,1259 574 | 8324,5469 575 | 1918,9053 576 | 4573,1699 577 | 4772,1205 578 | 9699,1489 579 | 1704,9441 580 | 639,2147 581 | 2886,9754 582 | 7017,6966 583 | 2904,4497 584 | 315,8998 585 | 2441,4992 586 | 8682,9768 587 | 3160,8419 588 | 5787,8263 589 | 2196,4033 590 | 8051,2684 591 | 727,3148 592 | 3220,194 593 | 3497,2630 594 | 8446,2172 595 | 5242,9788 596 | 9795,7278 597 | 3237,995 598 | 8377,2584 599 | 8934,4313 600 | 4345,4225 601 | 2164,7242 602 | 2425,9615 603 | 6009,1797 604 | 9906,1702 605 | 5165,2691 606 | 815,1467 607 | 3428,466 608 | 4170,1604 609 | 3996,3235 610 | 4100,8454 611 | 1127,807 612 | 622,2659 613 | 2724,6743 614 | 9951,9755 615 | 5708,147 616 | 4260,5337 617 | 2216,1096 618 | 8241,1092 619 | 1909,1073 620 | 5345,6954 621 | 3023,3272 622 | 7371,7938 623 | 5788,2101 624 | 3147,8686 625 | 7810,6151 626 | 7745,3410 627 | 4871,3677 628 | 7630,198 629 | 133,2953 630 | 9312,8620 631 | 7772,1779 632 | 4176,6252 633 | 3083,2164 634 | 7733,9265 635 | 3158,3342 636 | 6177,8938 637 | 7442,7923 638 | 8207,9098 639 | 1882,8731 640 | 2302,4025 641 | 5186,5154 642 | 6463,523 643 | 5881,2642 644 | 4307,5052 645 | 2942,9703 646 | 1900,3824 647 | 5030,1799 648 | 2834,1370 649 | 8495,6148 650 | 7584,8209 651 | 8424,8016 652 | 9043,1224 653 | 7798,9331 654 | 8991,2104 655 | 7641,3477 656 | 3678,9927 657 | 7844,8764 658 | 1433,5955 659 | 4587,5367 660 | 556,7041 661 | 763,8062 662 | 1091,5235 663 | 2503,6931 664 | 3227,8098 665 | 1438,4979 666 | 4612,2033 667 | 5753,467 668 | 680,1304 669 | 1500,4600 670 | 3993,1187 671 | 7841,2807 672 | 7802,8617 673 | 5987,7812 674 | 8945,5251 675 | 9038,1228 676 | 2184,7228 677 | 2376,7365 678 | 6591,8560 679 | 7123,8531 680 | 1753,4297 681 | 6208,628 682 | 3560,5323 683 | 7559,4564 684 | 3033,5361 685 | 9301,7144 686 | 8555,4429 687 | 47,9705 688 | 6755,3107 689 | 2587,4957 690 | 9306,9710 691 | 8827,4059 692 | 584,7389 693 | 6283,5425 694 | 3223,8133 695 | 4957,3709 696 | 5265,7517 697 | 2523,6216 698 | 7865,595 699 | 3016,383 700 | 4429,8052 701 | 8893,3512 702 | 5282,7958 703 | 8159,9014 704 | 3018,4588 705 | 9762,9306 706 | 5097,2263 707 | 473,218 708 | 4293,4521 709 | 5968,8261 710 | 6098,5936 711 | 6022,6424 712 | 3333,5097 713 | 5513,9665 714 | 4354,6540 715 | 6096,7986 716 | 438,9064 717 | 9463,8814 718 | 741,9433 719 | 5605,2484 720 | 5919,6491 721 | 5206,5208 722 | 8594,4175 723 | 7226,7091 724 | 6904,4998 725 | 2778,6473 726 | 1055,3417 727 | 6367,1270 728 | 5156,7197 729 | 2692,4544 730 | 9709,9317 731 | 6997,7286 732 | 2319,3675 733 | 1432,1011 734 | 6363,7491 735 | 1499,7670 736 | 2329,7654 737 | 2268,6081 738 | 231,128 739 | 5117,8773 740 | 5745,4344 741 | 60,6102 742 | 1449,3404 743 | 161,1274 744 | 6640,7799 745 | 8397,8063 746 | 9423,8099 747 | 7657,484 748 | 1380,1379 749 | 3159,4177 750 | 4492,3781 751 | 175,6182 752 | 7181,6343 753 | 744,4381 754 | 564,2740 755 | 8510,5211 756 | 528,7935 757 | 7698,2108 758 | 2818,9643 759 | 8635,6990 760 | 8372,5611 761 | 217,7227 762 | 9332,4312 763 | 8878,6420 764 | 3039,6767 765 | 6249,9690 766 | 5602,8851 767 | 7314,7819 768 | 9393,2528 769 | 9268,6147 770 | 1503,9003 771 | 2393,2432 772 | 3355,9332 773 | 1741,4315 774 | 1585,9581 775 | 4016,908 776 | 7242,864 777 | 5042,7556 778 | 9405,1586 779 | 2983,8543 780 | 4062,3733 781 | 7613,7366 782 | 6787,9133 783 | 2848,3133 784 | 734,5574 785 | 1601,7252 786 | 1250,1141 787 | 5523,6046 788 | 7531,4140 789 | 5912,991 790 | 1448,7697 791 | 9949,253 792 | 9737,752 793 | 3305,2279 794 | 1582,6746 795 | 7046,4546 796 | 6503,356 797 | 6874,5394 798 | 8815,5426 799 | 3214,1747 800 | 8620,6594 801 | 5012,9500 802 | 1769,4333 803 | 5089,8124 804 | 5847,2204 805 | 5312,6066 806 | 8873,5007 807 | 7036,6627 808 | 5497,957 809 | 4241,4362 810 | 2986,635 811 | 5008,117 812 | 2277,5291 813 | 5490,6075 814 | 1681,7162 815 | 2866,793 816 | 2206,4897 817 | 3825,8690 818 | 2568,3825 819 | 7905,8971 820 | 8657,9813 821 | 3722,7824 822 | 7044,6076 823 | 7422,8611 824 | 5303,6896 825 | 404,7934 826 | 1342,6293 827 | 2829,3052 828 | 7520,4180 829 | 6511,978 830 | 4617,5849 831 | 1992,6234 832 | 6933,6104 833 | 7762,6000 834 | 4462,3103 835 | 3821,3036 836 | 2977,1791 837 | 8494,1648 838 | 5499,9366 839 | 5933,9282 840 | 8262,2680 841 | 2429,4972 842 | 7716,9029 843 | 8987,131 844 | 4122,7507 845 | 2952,2242 846 | 380,5690 847 | 3179,9209 848 | 6005,3381 849 | 8284,5207 850 | 2351,4842 851 | 5959,5249 852 | 2940,4058 853 | 6241,7663 854 | 1356,203 855 | 7331,2468 856 | 9242,1841 857 | 9354,1208 858 | 9456,9008 859 | 8765,4085 860 | 2323,4171 861 | 592,6717 862 | 2446,9554 863 | 7537,3277 864 | 5059,1775 865 | 6860,5503 866 | 3781,1843 867 | 1153,533 868 | 776,4773 869 | 3015,9637 870 | 8216,5848 871 | 7882,1607 872 | 8761,8144 873 | 2403,8229 874 | 2727,5719 875 | 2974,7765 876 | 267,8465 877 | 9152,8064 878 | 5120,6597 879 | 9632,2376 880 | 2540,2292 881 | 805,8231 882 | 3411,9195 883 | 8579,8470 884 | 7293,5835 885 | 9065,555 886 | 2360,8165 887 | 9658,6175 888 | 7932,9613 889 | 1386,8888 890 | 7717,8668 891 | 5443,9488 892 | 5236,5116 893 | 4228,6335 894 | 8416,296 895 | 6868,8201 896 | 725,7057 897 | 9049,9104 898 | 3559,924 899 | 1465,9696 900 | 6596,6025 901 | 7561,5591 902 | 8958,8712 903 | 8644,5858 904 | 4821,8904 905 | 6230,6537 906 | 9409,5895 907 | 8127,5640 908 | 4768,1896 909 | 7299,5586 910 | 1606,6755 911 | 1411,1428 912 | 4207,9875 913 | 5507,2024 914 | 803,298 915 | 6321,4373 916 | 5649,2014 917 | 4048,7245 918 | 5509,1505 919 | 8447,342 920 | 1117,7101 921 | 8299,1589 922 | 239,483 923 | 9986,2076 924 | 2982,5253 925 | 116,4554 926 | 4271,3397 927 | 1946,522 928 | 7924,392 929 | 42,5033 930 | 2427,5165 931 | 7254,4464 932 | 3769,3957 933 | 482,6910 934 | 1693,7106 935 | 6556,1275 936 | 17,2868 937 | 8921,2246 938 | 7682,7045 939 | 729,6280 940 | 1559,1559 941 | 5095,6053 942 | 4867,7081 943 | 8345,2900 944 | 7850,349 945 | 629,4765 946 | 1150,41 947 | 8064,456 948 | 7090,6321 949 | 3758,4011 950 | 2961,8003 951 | 2438,892 952 | 2932,5990 953 | 1020,1418 954 | 8166,9253 955 | 5343,5533 956 | 1859,2672 957 | 3904,5520 958 | 4202,2273 959 | 3407,266 960 | 8928,3421 961 | 5316,2415 962 | 3449,9516 963 | 9317,1165 964 | 2913,3929 965 | 5684,6822 966 | 7263,7624 967 | 6344,9810 968 | 2655,9188 969 | 7136,897 970 | 3778,1289 971 | 7791,5557 972 | 6273,9292 973 | 1388,8907 974 | 9575,8885 975 | 8697,7593 976 | 4382,2473 977 | 8018,2828 978 | 6631,9726 979 | 2411,9793 980 | 5113,4763 981 | 6870,719 982 | 5744,9717 983 | 6900,3173 984 | 8925,388 985 | 1493,6666 986 | 4848,276 987 | 1688,7084 988 | 1638,2552 989 | 5145,8049 990 | 376,8922 991 | 2244,6519 992 | 1248,677 993 | 5284,2924 994 | 9998,1997 995 | 8106,4606 996 | 884,8087 997 | 7525,5471 998 | 4481,1645 999 | 7608,3711 1000 | 6146,9658 1001 | 8386,5772 1002 | 8846,6419 1003 | 6444,8457 1004 | 8146,879 1005 | 5259,2058 1006 | 9787,1483 1007 | 8749,9921 1008 | 2877,5375 1009 | 4622,7639 1010 | 3602,9621 1011 | 9329,5984 1012 | 3149,1480 1013 | 1196,4581 1014 | 4675,1509 1015 | 3679,6841 1016 | 123,7321 1017 | 2023,8563 1018 | 2954,6118 1019 | 4833,8860 1020 | 7679,3114 1021 | 6470,8318 1022 | 8714,708 1023 | 9589,9296 1024 | 8949,2878 1025 | 7085,8194 1026 | 2149,9277 1027 | 4448,3950 1028 | 5899,781 1029 | 9689,9517 1030 | 148,1701 1031 | 8171,3930 1032 | 3168,8267 1033 | 3835,6024 1034 | 8224,9035 1035 | 2296,7442 1036 | 3534,5466 1037 | 3597,5099 1038 | 976,7633 1039 | 8409,7098 1040 | 3520,9165 1041 | 3719,6937 1042 | 9921,6026 1043 | 5459,5166 1044 | 1037,2515 1045 | 5733,7931 1046 | 4811,606 1047 | 5253,671 1048 | 8917,4847 1049 | 9887,4775 1050 | 9855,7968 1051 | 3563,6418 1052 | 6536,4080 1053 | 1216,3331 1054 | 4797,6060 1055 | 2634,7390 1056 | 7959,3700 1057 | 4961,7985 1058 | 6103,9791 1059 | 2669,1482 1060 | 545,9761 1061 | 4709,8657 1062 | 9786,3626 1063 | 6827,9037 1064 | 9474,7997 1065 | 9005,838 1066 | 5228,4042 1067 | 9978,187 1068 | 6299,5654 1069 | 6145,6115 1070 | 9779,7116 1071 | 9950,6163 1072 | 1845,1755 1073 | 4473,4193 1074 | 9196,5494 1075 | 9959,5168 1076 | 66,2636 1077 | 6232,6189 1078 | 9333,3723 1079 | 3194,625 1080 | 3542,3000 1081 | 2963,9539 1082 | 9501,4228 1083 | 6542,7058 1084 | 8197,7480 1085 | 484,8976 1086 | 4590,2851 1087 | 5187,4611 1088 | 3047,6562 1089 | 5654,3369 1090 | 4898,7047 1091 | 6592,5275 1092 | 5590,2064 1093 | 3649,8361 1094 | 9719,7651 1095 | 8438,205 1096 | 1933,7236 1097 | 283,3955 1098 | 4103,4825 1099 | 8989,8920 1100 | 172,6421 1101 | 2712,880 1102 | 8195,9510 1103 | 6157,4811 1104 | 6260,2974 1105 | 601,6509 1106 | 7833,6522 1107 | 9434,5932 1108 | 7621,4047 1109 | 6991,6065 1110 | 6197,2696 1111 | 6599,8684 1112 | 4094,7428 1113 | 3178,8453 1114 | 2907,8865 1115 | 8248,5981 1116 | 6743,1899 1117 | 2740,1007 1118 | 8499,7438 1119 | 3112,1461 1120 | 8242,2191 1121 | 6697,834 1122 | 2635,4226 1123 | 1293,2165 1124 | 7842,2391 1125 | 4443,7062 1126 | 1130,7609 1127 | 4488,174 1128 | 8330,1466 1129 | 7890,5610 1130 | 9457,369 1131 | 7382,633 1132 | 3048,8483 1133 | 6841,4823 1134 | 4537,8591 1135 | 1622,3890 1136 | 596,3900 1137 | 5015,2910 1138 | 5999,7530 1139 | 5167,425 1140 | 3971,8260 1141 | 3733,847 1142 | 7816,53 1143 | 4880,3796 1144 | 3937,4509 1145 | 4838,2845 1146 | 7151,7373 1147 | 1497,2644 1148 | 2377,8880 1149 | 4950,6021 1150 | 3155,3031 1151 | 2850,530 1152 | 9355,8663 1153 | 7681,8979 1154 | 7609,3896 1155 | 1707,1132 1156 | 3528,8576 1157 | 3837,7732 1158 | 7632,6372 1159 | 3284,8561 1160 | 1953,2138 1161 | 6357,3744 1162 | 8193,9278 1163 | 1989,9834 1164 | 2880,5119 1165 | 2344,8654 1166 | 1545,5396 1167 | 5442,9809 1168 | 5658,2160 1169 | 648,8934 1170 | 7207,7551 1171 | 2424,8537 1172 | 8777,9830 1173 | 8172,1287 1174 | 9748,4889 1175 | 9103,7963 1176 | 1078,2489 1177 | 3657,6204 1178 | 4845,9166 1179 | 8164,4940 1180 | 6579,3346 1181 | 8274,1002 1182 | 678,8656 1183 | 6568,7669 1184 | 6708,1881 1185 | 4993,8672 1186 | 2217,5975 1187 | 9984,1210 1188 | 1701,7159 1189 | 6896,7295 1190 | 7481,7820 1191 | 83,6487 1192 | 7163,4166 1193 | 2631,6735 1194 | 8040,1581 1195 | 8461,6150 1196 | 6620,7921 1197 | 3152,8269 1198 | 3507,5883 1199 | 4425,2434 1200 | 2599,5328 1201 | 9227,9112 1202 | 2748,2979 1203 | 1101,2710 1204 | 9877,9185 1205 | 1359,1770 1206 | 3195,8510 1207 | 5247,3588 1208 | 7228,1776 1209 | 1516,7072 1210 | 8304,5773 1211 | 6187,432 1212 | 4788,8494 1213 | 8969,2971 1214 | 9325,9494 1215 | 4705,7344 1216 | 3956,8061 1217 | 1966,2483 1218 | 1983,3702 1219 | 293,2685 1220 | 8764,5104 1221 | 3091,1690 1222 | 6061,938 1223 | 6275,2655 1224 | 1401,4445 1225 | 6580,1964 1226 | 2356,6757 1227 | 1574,9607 1228 | 3000,9961 1229 | 1158,9426 1230 | 1085,6092 1231 | 8122,8226 1232 | 5399,150 1233 | 3011,2306 1234 | 8041,3734 1235 | 9250,3104 1236 | 3402,7563 1237 | 41,3562 1238 | 626,2427 1239 | 2678,3063 1240 | 872,2175 1241 | 4280,4067 1242 | 7710,5977 1243 | 3275,1436 1244 | 5880,2607 1245 | 6769,1805 1246 | 6496,2730 1247 | 7179,1174 1248 | 9124,3055 1249 | 4658,9339 1250 | 9471,6225 1251 | 1044,6849 1252 | 9982,9492 1253 | 7567,2018 1254 | 1034,9175 1255 | 1648,9259 1256 | 2161,1102 1257 | 9852,7496 1258 | 6450,9401 1259 | 553,727 1260 | 5130,3 1261 | 6426,2650 1262 | 1594,8803 1263 | 6785,6963 1264 | 8836,3576 1265 | 594,8756 1266 | 3923,7068 1267 | 6362,1622 1268 | 4210,3415 1269 | 6493,404 1270 | 2180,4479 1271 | 1758,9700 1272 | 3180,2182 1273 | 7994,6284 1274 | 1762,7626 1275 | 9856,6703 1276 | 6153,7949 1277 | 6700,8955 1278 | 103,7449 1279 | 4454,4944 1280 | 1410,7797 1281 | 2878,2914 1282 | 7855,8442 1283 | 9662,6657 1284 | 5973,9750 1285 | 843,1985 1286 | 5496,1566 1287 | 5378,7512 1288 | 502,2970 1289 | 7126,2538 1290 | 8983,6004 1291 | 7310,6160 1292 | 8059,3118 1293 | 4270,8578 1294 | 4816,2187 1295 | 2624,5406 1296 | 9523,6802 1297 | 5464,5271 1298 | 1111,2885 1299 | 327,5807 1300 | 5875,8523 1301 | 5392,9420 1302 | 798,3545 1303 | 8428,5535 1304 | 8318,15 1305 | 5773,721 1306 | 3613,7191 1307 | 3255,219 1308 | 4518,7852 1309 | 5461,9091 1310 | 6131,4078 1311 | 8612,5902 1312 | 4942,5509 1313 | 6530,2983 1314 | 4328,898 1315 | 4313,5577 1316 | 5232,6854 1317 | 6586,1167 1318 | 7783,8632 1319 | 9378,6161 1320 | 2187,1621 1321 | 1774,8757 1322 | 3862,5398 1323 | 3665,9377 1324 | 2415,5267 1325 | 2328,7572 1326 | 2785,9244 1327 | 1996,7944 1328 | 8841,1503 1329 | 4222,9966 1330 | 5416,3533 1331 | 3005,2052 1332 | 1026,565 1333 | 2322,1883 1334 | 5725,6339 1335 | 469,3229 1336 | 4203,8315 1337 | 2276,9021 1338 | 8509,7993 1339 | 1358,942 1340 | 5583,7439 1341 | 3424,1484 1342 | 5118,732 1343 | 2836,603 1344 | 7619,3170 1345 | 5853,9297 1346 | 362,2455 1347 | 5952,8377 1348 | 9895,4921 1349 | 8089,5221 1350 | 3154,496 1351 | 1208,5135 1352 | 9402,9103 1353 | 5830,7311 1354 | 8113,7193 1355 | 4324,8603 1356 | 9147,798 1357 | 8860,9214 1358 | 5452,1340 1359 | 3405,6624 1360 | 630,7006 1361 | 8205,6149 1362 | 262,2975 1363 | 8417,9478 1364 | 8151,4227 1365 | 8496,7303 1366 | 16,9174 1367 | 155,3857 1368 | 6056,9783 1369 | 5131,8333 1370 | 7530,4945 1371 | 6434,9646 1372 | 1355,9595 1373 | 5932,154 1374 | 3806,4052 1375 | 5709,9257 1376 | 1161,4154 1377 | 3574,9015 1378 | 9751,804 1379 | 9237,7586 1380 | 8855,8944 1381 | 1637,7948 1382 | 2432,6018 1383 | 9615,7638 1384 | 2590,4366 1385 | 5126,5209 1386 | 9017,4556 1387 | 3941,3797 1388 | 2130,5480 1389 | 7079,7362 1390 | 4865,5789 1391 | 1665,9593 1392 | 4767,3578 1393 | 174,2238 1394 | 3623,3450 1395 | 718,2132 1396 | 3780,1186 1397 | 3233,7757 1398 | 4915,7701 1399 | 847,8837 1400 | 1534,1944 1401 | 9020,421 1402 | 8903,1984 1403 | 8561,9633 1404 | 89,9964 1405 | 6994,8849 1406 | 5879,4300 1407 | 4331,5107 1408 | 9167,9917 1409 | 9781,509 1410 | 5739,9116 1411 | 8592,430 1412 | 9491,3951 1413 | 4108,2114 1414 | 1331,1127 1415 | 4233,7646 1416 | 3263,3197 1417 | 3464,2779 1418 | 57,9372 1419 | 6740,6752 1420 | 7795,817 1421 | 1994,4120 1422 | 9134,7520 1423 | 766,3361 1424 | 7290,3360 1425 | 1389,4533 1426 | 2803,3678 1427 | 1305,780 1428 | 5635,2862 1429 | 3537,1740 1430 | 869,1271 1431 | 5917,550 1432 | 9063,5770 1433 | 7101,672 1434 | 9115,1916 1435 | 1604,4416 1436 | 8608,2039 1437 | 9900,3916 1438 | 2709,3005 1439 | 9007,1413 1440 | 5573,9781 1441 | 9262,9451 1442 | 5916,7536 1443 | 5441,6054 1444 | 858,8866 1445 | 7689,6858 1446 | 9430,1844 1447 | 2352,376 1448 | 7223,6884 1449 | 2863,2009 1450 | 3896,2506 1451 | 9873,5549 1452 | 1265,8180 1453 | 4851,6800 1454 | 1919,9870 1455 | 9686,3997 1456 | 3945,7977 1457 | 7247,7668 1458 | 9697,9995 1459 | 4115,3199 1460 | 4110,1584 1461 | 4756,8624 1462 | 4426,2312 1463 | 8298,8890 1464 | 9214,2934 1465 | 4987,5363 1466 | 7823,8586 1467 | 2214,5195 1468 | 4226,4173 1469 | 7378,9506 1470 | 6209,6158 1471 | 7099,9352 1472 | 3899,1126 1473 | 7392,4608 1474 | 3892,366 1475 | 8302,7702 1476 | 4424,2649 1477 | 6999,7119 1478 | 5388,557 1479 | 210,3579 1480 | 3658,3087 1481 | 9085,8444 1482 | 5936,5918 1483 | 7427,4440 1484 | 9263,1334 1485 | 4032,1006 1486 | 8251,4132 1487 | 4812,8182 1488 | 8603,3567 1489 | 2199,4439 1490 | 9623,5855 1491 | 6069,7383 1492 | 2336,295 1493 | 1371,8524 1494 | 4854,1457 1495 | 7415,8825 1496 | 3994,2287 1497 | 3745,5236 1498 | 9182,1935 1499 | 9424,256 1500 | 1791,1986 1501 | 2421,4396 1502 | 4565,8080 1503 | 8913,6155 1504 | 9093,907 1505 | 3958,7214 1506 | 9171,2815 1507 | 8466,2936 1508 | 9240,4490 1509 | 4724,7307 1510 | 9285,1469 1511 | 2941,3327 1512 | 2628,4882 1513 | 3451,8479 1514 | 5844,637 1515 | 7014,7015 1516 | 8627,1245 1517 | 8469,6681 1518 | 6662,4283 1519 | 2282,9785 1520 | 9805,9466 1521 | 6915,8614 1522 | 3199,8035 1523 | 9335,521 1524 | 4740,3154 1525 | 5535,315 1526 | 8996,7174 1527 | 2174,3719 1528 | 3785,9376 1529 | 9946,1672 1530 | 2452,4782 1531 | 1049,6489 1532 | 1382,1336 1533 | 173,5514 1534 | 9828,7925 1535 | 3840,7545 1536 | 5741,2361 1537 | 3687,5384 1538 | 8344,4553 1539 | 6872,3803 1540 | 2747,3985 1541 | 4606,6693 1542 | 8382,2904 1543 | 2666,5498 1544 | 3704,5028 1545 | 9862,442 1546 | 4399,7291 1547 | 5485,1738 1548 | 7805,7753 1549 | 4079,8980 1550 | 6642,5266 1551 | 5609,2318 1552 | 6948,4989 1553 | 6572,380 1554 | 4069,6282 1555 | 8478,1005 1556 | 3859,39 1557 | 3803,8157 1558 | 3762,7105 1559 | 3951,4063 1560 | 5323,5401 1561 | 7138,292 1562 | 3436,4833 1563 | 4513,3809 1564 | 2637,2169 1565 | 3366,3532 1566 | 5927,8048 1567 | 8725,1362 1568 | 2627,6758 1569 | 9469,3590 1570 | 5341,5562 1571 | 6971,2335 1572 | 7419,2660 1573 | 5138,5837 1574 | 6060,7453 1575 | 5768,8398 1576 | 2172,6020 1577 | 1172,7908 1578 | 5617,5964 1579 | 9269,6571 1580 | 4121,3181 1581 | 5011,9455 1582 | 209,7190 1583 | 9201,1873 1584 | 3377,161 1585 | 3304,999 1586 | 2363,3814 1587 | 5348,2516 1588 | 1674,3513 1589 | 9015,7698 1590 | 3395,6904 1591 | 8176,3870 1592 | 515,1665 1593 | 1877,8649 1594 | 8215,1543 1595 | 3729,4353 1596 | 9138,3764 1597 | 3099,6451 1598 | 3701,9876 1599 | 8703,2729 1600 | 6663,8437 1601 | 9098,7486 1602 | 7158,4658 1603 | 6510,396 1604 | 2155,7917 1605 | 4463,4771 1606 | 129,7415 1607 | 5072,2317 1608 | 8744,385 1609 | 5660,9945 1610 | 1519,2737 1611 | 6808,4103 1612 | 5831,8356 1613 | 4369,9706 1614 | 4214,1097 1615 | 3034,6677 1616 | 7165,2834 1617 | 6547,8648 1618 | 3732,8065 1619 | 8472,5445 1620 | 8292,7012 1621 | 6374,3234 1622 | 9565,4347 1623 | 9111,709 1624 | 3620,5645 1625 | 9448,5270 1626 | 1907,538 1627 | 2558,3855 1628 | 3584,1683 1629 | 7919,6983 1630 | 2930,236 1631 | 757,8168 1632 | 5584,9673 1633 | 6130,2190 1634 | 2459,4093 1635 | 9157,6050 1636 | 4325,6642 1637 | 4520,5110 1638 | 5859,8448 1639 | 1339,8506 1640 | 375,9177 1641 | 3939,4599 1642 | 282,2930 1643 | 1733,6856 1644 | 2137,7474 1645 | 4866,7287 1646 | 9257,297 1647 | 1632,1084 1648 | 1234,6563 1649 | 2016,3164 1650 | 1107,9256 1651 | 8938,826 1652 | 1426,378 1653 | 6969,6348 1654 | 3108,1269 1655 | 3703,1640 1656 | 3175,7571 1657 | 1100,9408 1658 | 1436,9878 1659 | 5397,7601 1660 | 3647,4794 1661 | 8092,3550 1662 | 1402,4683 1663 | 2256,4726 1664 | 2010,1120 1665 | 7838,3806 1666 | 3429,1517 1667 | 3128,9571 1668 | 8148,3863 1669 | 8870,3167 1670 | 5317,2113 1671 | 358,8968 1672 | 1987,5836 1673 | 6914,4950 1674 | 105,5483 1675 | 1552,4959 1676 | 7108,3650 1677 | 2176,1720 1678 | 6863,5341 1679 | 2869,5285 1680 | 5974,289 1681 | 8585,7225 1682 | 1521,9076 1683 | 9519,4923 1684 | 9231,9186 1685 | 1421,2628 1686 | 6202,5893 1687 | 1610,2647 1688 | 4360,9970 1689 | 3539,14 1690 | 9833,5306 1691 | 6424,8077 1692 | 7042,4065 1693 | 2630,9057 1694 | 9304,5878 1695 | 8099,1693 1696 | 7261,4234 1697 | 7634,5393 1698 | 5482,8545 1699 | 5210,8804 1700 | 3819,766 1701 | 7508,534 1702 | 1106,8981 1703 | 9183,9316 1704 | 2281,6332 1705 | 7646,3810 1706 | 781,3992 1707 | 6492,5382 1708 | 2956,2167 1709 | 5592,1500 1710 | 1256,7970 1711 | 4283,1268 1712 | 7560,5769 1713 | 2373,5151 1714 | 6593,3147 1715 | 4722,699 1716 | 5463,8655 1717 | 906,8243 1718 | 1694,692 1719 | 6128,3071 1720 | 9055,7649 1721 | 228,1236 1722 | 1257,6231 1723 | 3460,458 1724 | 5886,4216 1725 | 7797,3011 1726 | 6004,3402 1727 | 3533,7244 1728 | 7922,508 1729 | 9585,1583 1730 | 3599,8195 1731 | 5267,9831 1732 | 4742,6350 1733 | 8427,8471 1734 | 4611,3231 1735 | 3174,6507 1736 | 1291,7202 1737 | 8565,4174 1738 | 2858,5971 1739 | 3441,8640 1740 | 9297,8006 1741 | 1802,4370 1742 | 102,2049 1743 | 1943,8189 1744 | 8356,6029 1745 | 891,5055 1746 | 5281,3024 1747 | 5532,9821 1748 | 7284,856 1749 | 2384,7710 1750 | 5344,3119 1751 | 326,4891 1752 | 9066,9059 1753 | 1063,5460 1754 | 6200,7395 1755 | 8946,9820 1756 | 9470,23 1757 | 9249,9933 1758 | 1958,6435 1759 | 9175,9237 1760 | 8629,3376 1761 | 6710,1801 1762 | 5914,4321 1763 | 4836,1802 1764 | 5350,3892 1765 | 110,8652 1766 | 5368,7758 1767 | 4499,7102 1768 | 9031,1717 1769 | 7893,7048 1770 | 1956,9910 1771 | 3410,4846 1772 | 2556,788 1773 | 4749,2444 1774 | 3145,7326 1775 | 5646,7219 1776 | 381,1557 1777 | 6062,87 1778 | 4263,9236 1779 | 4051,8780 1780 | 7167,7470 1781 | 4938,1932 1782 | 3530,9886 1783 | 149,5602 1784 | 6464,3805 1785 | 3412,5958 1786 | 1391,1971 1787 | 4687,8104 1788 | 9200,5008 1789 | 7513,11 1790 | 2690,8772 1791 | 26,6295 1792 | 3718,1943 1793 | 7069,8273 1794 | 4245,8572 1795 | 4802,884 1796 | 957,4280 1797 | 6780,6369 1798 | 942,3325 1799 | 1951,3839 1800 | 7400,2330 1801 | 7766,7212 1802 | 4423,7427 1803 | 8468,885 1804 | 5510,9864 1805 | 6258,3887 1806 | 4199,8988 1807 | 5872,7361 1808 | 6543,2362 1809 | 7787,3330 1810 | 117,3883 1811 | 2555,9566 1812 | 3723,1568 1813 | 6788,4829 1814 | 574,8687 1815 | 4411,4565 1816 | 4483,6267 1817 | 1439,2654 1818 | 237,3585 1819 | 5896,5428 1820 | 2797,9832 1821 | 5940,6618 1822 | 4522,3614 1823 | 2362,896 1824 | 3266,6475 1825 | 1084,3195 1826 | 9778,1237 1827 | 6783,5160 1828 | 7199,4054 1829 | 4113,7783 1830 | 3197,2329 1831 | 4847,6229 1832 | 2923,8713 1833 | 4574,4625 1834 | 4719,9066 1835 | 4860,3374 1836 | 9755,5114 1837 | 4118,401 1838 | 6168,7260 1839 | 612,8526 1840 | 6420,7025 1841 | 8912,4983 1842 | 6961,4942 1843 | 4655,7523 1844 | 768,4524 1845 | 831,4867 1846 | 1922,2537 1847 | 7447,2043 1848 | 5675,2498 1849 | 9598,4736 1850 | 1236,2826 1851 | 4594,8225 1852 | 3976,9094 1853 | 2266,5484 1854 | 398,3487 1855 | 7052,1136 1856 | 5519,9071 1857 | 1856,7183 1858 | 3808,1232 1859 | 448,4607 1860 | 3462,6122 1861 | 7734,5167 1862 | 3582,2966 1863 | 6448,8461 1864 | 9274,4592 1865 | 9864,6038 1866 | 7529,6545 1867 | 5521,2162 1868 | 7309,7011 1869 | 3479,1 1870 | 696,66 1871 | 2208,3064 1872 | 6422,2474 1873 | 5398,3905 1874 | 8013,2886 1875 | 9566,8893 1876 | 1190,479 1877 | 8795,8902 1878 | 1714,8810 1879 | 9487,789 1880 | 8699,5726 1881 | 1685,2133 1882 | 2609,9198 1883 | 5676,6041 1884 | 6212,5631 1885 | 2026,1658 1886 | 6298,5046 1887 | 6680,3112 1888 | 576,8265 1889 | 9604,9505 1890 | 3983,5511 1891 | 5587,9609 1892 | 9754,7425 1893 | 4063,9858 1894 | 1491,5996 1895 | 5010,6425 1896 | 4840,2764 1897 | 6861,4767 1898 | 7623,6380 1899 | 8582,7340 1900 | 3720,475 1901 | 5814,3983 1902 | 444,2583 1903 | 5695,4086 1904 | 6652,6725 1905 | 863,6851 1906 | 526,9445 1907 | 4825,6377 1908 | 9871,9465 1909 | 3724,1736 1910 | 8042,3943 1911 | 759,1293 1912 | 7934,9007 1913 | 7774,7314 1914 | 4789,5444 1915 | 3502,5507 1916 | 8512,8125 1917 | 9640,8492 1918 | 5581,4975 1919 | 7095,8538 1920 | 8023,1958 1921 | 3037,3482 1922 | 9025,3547 1923 | 1569,5516 1924 | 4434,5414 1925 | 9395,201 1926 | 6776,2197 1927 | 4837,785 1928 | 9438,3286 1929 | 3777,6997 1930 | 8286,1922 1931 | 6551,3443 1932 | 3173,5182 1933 | 6001,3371 1934 | 275,5420 1935 | 8046,6810 1936 | 9692,2430 1937 | 4822,9179 1938 | 1647,9218 1939 | 3864,9067 1940 | 7973,1538 1941 | 1035,1838 1942 | 3043,4837 1943 | 3,3817 1944 | 6838,4597 1945 | 5047,9176 1946 | 5525,112 1947 | 9450,7683 1948 | 3548,4277 1949 | 6218,3172 1950 | 5403,9866 1951 | 1480,5783 1952 | 3068,6741 1953 | 966,2856 1954 | 2938,1677 1955 | 3481,1940 1956 | 9441,1222 1957 | 6205,7918 1958 | 7418,8056 1959 | 6967,6852 1960 | 9072,5642 1961 | 4043,6408 1962 | 7569,8211 1963 | 3844,2423 1964 | 8664,9687 1965 | 5087,3454 1966 | 8661,325 1967 | 7030,1394 1968 | 4288,644 1969 | 1652,1651 1970 | 6963,1425 1971 | 4107,3427 1972 | 8716,5510 1973 | 1906,9227 1974 | 9904,7050 1975 | 8201,5395 1976 | 7799,3228 1977 | 7979,1090 1978 | 2811,954 1979 | 7635,2603 1980 | 2883,1511 1981 | 6549,1078 1982 | 1698,2239 1983 | 4674,9031 1984 | 7970,5301 1985 | 9552,7769 1986 | 5361,3846 1987 | 833,3554 1988 | 6369,527 1989 | 3143,953 1990 | 5298,642 1991 | 7948,7164 1992 | 2085,6138 1993 | 3384,3669 1994 | 301,7013 1995 | 8853,9201 1996 | 2280,9784 1997 | 7540,7885 1998 | 9276,6358 1999 | 8209,1760 2000 | 1138,5985 2001 | 8361,1161 2002 | 1668,6314 2003 | 1059,843 2004 | 2207,7975 2005 | 3289,42 2006 | 197,1772 2007 | 1422,8122 2008 | 126,1966 2009 | 6186,1919 2010 | 4086,7290 2011 | 132,8629 2012 | 9148,1070 2013 | 2257,9905 2014 | 1194,8074 2015 | 292,4723 2016 | 7642,5408 2017 | 7835,7501 2018 | 4607,3025 2019 | 9334,3077 2020 | 2662,9419 2021 | 987,1308 2022 | 8867,6088 2023 | 5147,8055 2024 | 1369,5939 2025 | 3757,4056 2026 | 6234,9941 2027 | 809,3808 2028 | 5536,8010 2029 | 6198,1732 2030 | 8799,7518 2031 | 7051,5651 2032 | 7074,169 2033 | 8656,8887 2034 | 6974,2002 2035 | 8553,1363 2036 | 6756,2477 2037 | 9213,9550 2038 | 5456,7108 2039 | 6632,3395 2040 | 4921,3328 2041 | 7845,8977 2042 | 5224,2526 2043 | 163,8347 2044 | 9356,7621 2045 | 3229,963 2046 | 329,8213 2047 | 4521,2510 2048 | 7209,7179 2049 | 5034,4187 2050 | 7599,7573 2051 | 6053,7122 2052 | 1141,2226 2053 | 9303,7166 2054 | 4347,9406 2055 | 5755,8954 2056 | 4627,4355 2057 | 2926,9767 2058 | 1911,1769 2059 | 621,8027 2060 | 944,6641 2061 | 7105,1956 2062 | 223,6959 2063 | 1071,6262 2064 | 3857,7677 2065 | 4632,480 2066 | 1644,9442 2067 | 481,2411 2068 | 4902,673 2069 | 9092,7076 2070 | 6724,611 2071 | 5793,1846 2072 | 4527,7178 2073 | 3707,9368 2074 | 9035,9737 2075 | 6333,1014 2076 | 6626,6011 2077 | 6384,7679 2078 | 3004,7020 2079 | 3711,1359 2080 | 6425,2865 2081 | 2110,5976 2082 | 6064,6779 2083 | 7659,1930 2084 | 8272,1117 2085 | 3265,9013 2086 | 9178,7104 2087 | 4025,4368 2088 | 7541,9983 2089 | 5352,4731 2090 | 7162,7240 2091 | 1350,8787 2092 | 3977,156 2093 | 5926,918 2094 | 8809,7490 2095 | 1794,3706 2096 | 2404,2726 2097 | 5048,5170 2098 | 9997,554 2099 | 49,8089 2100 | 7402,3120 2101 | 9813,61 2102 | 7401,4210 2103 | 4330,9704 2104 | 9080,7990 2105 | 4568,1664 2106 | 2177,2463 2107 | 7930,6376 2108 | 6091,2265 2109 | 1902,9685 2110 | 4566,9025 2111 | 7012,1416 2112 | 443,9537 2113 | 1099,3073 2114 | 9216,6346 2115 | 5820,5871 2116 | 2828,3771 2117 | 3125,1400 2118 | 6763,2993 2119 | 3089,3409 2120 | 7684,1470 2121 | 430,9204 2122 | 875,5711 2123 | 2166,3557 2124 | 2804,6953 2125 | 4570,5351 2126 | 256,5292 2127 | 8165,5877 2128 | 7898,3044 2129 | 4215,7648 2130 | 7434,7479 2131 | 7416,5196 2132 | 3060,5694 2133 | 8747,1200 2134 | 4190,3050 2135 | 8077,9416 2136 | 6102,7393 2137 | 7206,4920 2138 | 1065,8876 2139 | 9129,3823 2140 | 6259,1954 2141 | 4846,4258 2142 | 5996,6923 2143 | 340,5653 2144 | 7173,4857 2145 | 5667,7189 2146 | 1143,3184 2147 | 2934,1080 2148 | 4815,782 2149 | 8288,414 2150 | 8007,4560 2151 | 4507,1572 2152 | 9358,7526 2153 | 9725,5906 2154 | 9669,1721 2155 | 1309,4322 2156 | 8458,3968 2157 | 6414,136 2158 | 6029,4681 2159 | 4732,3583 2160 | 1112,7372 2161 | 4359,6144 2162 | 1210,1325 2163 | 3081,8963 2164 | 7146,4511 2165 | 4366,5272 2166 | 8984,8926 2167 | 4281,1065 2168 | 2668,3633 2169 | 1102,5331 2170 | 6699,2765 2171 | 3331,4971 2172 | 3938,5360 2173 | 2651,2407 2174 | 9971,3002 2175 | 3526,6466 2176 | 6206,5149 2177 | 8503,6013 2178 | 8069,4817 2179 | 3834,2213 2180 | 1223,2056 2181 | 713,3561 2182 | 9899,7285 2183 | 8268,5748 2184 | 2160,7823 2185 | 2518,4105 2186 | 777,9930 2187 | 7246,4200 2188 | 3426,8152 2189 | 5307,3828 2190 | 323,7747 2191 | 5729,6068 2192 | 5075,8316 2193 | 7443,7301 2194 | 2856,8879 2195 | 2566,9330 2196 | 9493,2570 2197 | 842,6483 2198 | 7032,7292 2199 | 137,5609 2200 | 8365,7647 2201 | 5857,4446 2202 | 2728,8397 2203 | 4859,6301 2204 | 5918,405 2205 | 4402,9134 2206 | 9194,469 2207 | 1461,5786 2208 | 5657,5421 2209 | 8518,8975 2210 | 3989,2059 2211 | 4714,2492 2212 | 5037,5616 2213 | 3638,8651 2214 | 9026,6034 2215 | 1029,7283 2216 | 5991,7355 2217 | 518,756 2218 | 1459,1917 2219 | 6220,7000 2220 | 7999,8175 2221 | 6388,1575 2222 | 2605,3502 2223 | 4842,4707 2224 | 9287,8455 2225 | 5891,1151 2226 | 5076,6737 2227 | 7141,5 2228 | 6667,8811 2229 | 2741,1059 2230 | 9062,6795 2231 | 8937,8254 2232 | 2247,2289 2233 | 3887,946 2234 | 5166,588 2235 | 1227,729 2236 | 7862,5751 2237 | 8389,321 2238 | 2458,6044 2239 | 1609,457 2240 | 5472,8761 2241 | 711,695 2242 | 6429,6430 2243 | 2773,7980 2244 | 5833,7001 2245 | 2516,8369 2246 | 6112,6184 2247 | 9089,7221 2248 | 5756,2693 2249 | 6211,5419 2250 | 6512,4077 2251 | 4512,9684 2252 | 7956,7767 2253 | 109,2280 2254 | 5389,360 2255 | 5856,8843 2256 | 7460,8760 2257 | 6166,7549 2258 | 5653,7614 2259 | 8225,9481 2260 | 78,2586 2261 | 3116,5131 2262 | 1473,185 2263 | 1486,2360 2264 | 7148,5256 2265 | 6379,776 2266 | 4449,9048 2267 | 2791,9871 2268 | 5905,8570 2269 | 4762,6296 2270 | 1942,9802 2271 | 2071,3153 2272 | 3748,2702 2273 | 7313,7271 2274 | 2153,3268 2275 | 7830,2519 2276 | 4701,6998 2277 | 9228,472 2278 | 164,8685 2279 | 2315,8487 2280 | 470,9950 2281 | 9797,8140 2282 | 1346,4876 2283 | 8132,9895 2284 | 1844,7964 2285 | 7638,4791 2286 | 1378,622 2287 | 5508,6574 2288 | 1366,7040 2289 | 6952,2034 2290 | 2144,784 2291 | 7016,1082 2292 | 5176,1458 2293 | 2048,4816 2294 | 8584,9485 2295 | 6400,970 2296 | 1801,899 2297 | 6792,3151 2298 | 5326,6513 2299 | 294,6601 2300 | 7875,9074 2301 | 9766,3420 2302 | 1998,2333 2303 | 9153,6395 2304 | 9095,5894 2305 | 9362,8540 2306 | 8068,6237 2307 | 3057,8374 2308 | 4155,6340 2309 | 6797,9670 2310 | 8269,4700 2311 | 1789,3607 2312 | 7339,339 2313 | 8896,8750 2314 | 9548,8463 2315 | 9013,6952 2316 | 2025,6337 2317 | 5437,2284 2318 | 3986,6766 2319 | 2097,4379 2320 | 3006,2124 2321 | 2061,6712 2322 | 9088,5890 2323 | 9897,9386 2324 | 4205,9456 2325 | 8008,6197 2326 | 5904,5261 2327 | 9311,3471 2328 | 7822,5467 2329 | 7500,1630 2330 | 8343,8721 2331 | 2768,4589 2332 | 4638,3262 2333 | 9952,6002 2334 | 7764,7615 2335 | 1974,2096 2336 | 7010,7231 2337 | 6673,9574 2338 | 5359,2123 2339 | 9343,2690 2340 | 2126,711 2341 | 5123,8801 2342 | 3183,4476 2343 | 6850,9572 2344 | 1218,2184 2345 | 9507,5069 2346 | 1812,9226 2347 | 4956,8525 2348 | 4986,1342 2349 | 5785,5333 2350 | 8378,62 2351 | 7213,2887 2352 | 2586,5901 2353 | 118,3536 2354 | 5132,437 2355 | 604,2577 2356 | 6907,7203 2357 | 8390,2176 2358 | 7393,5736 2359 | 9499,5800 2360 | 3531,4760 2361 | 8483,8961 2362 | 3566,3811 2363 | 6622,8666 2364 | 9775,3812 2365 | 9989,7671 2366 | 7104,7987 2367 | 9744,8472 2368 | 6090,310 2369 | 2431,4537 2370 | 5355,893 2371 | 8244,3977 2372 | 3273,6876 2373 | 2682,7945 2374 | 3914,9523 2375 | 8865,1099 2376 | 5468,9648 2377 | 4922,7915 2378 | 2391,8185 2379 | 3966,7036 2380 | 6284,8821 2381 | 7943,5098 2382 | 7256,9354 2383 | 6843,6793 2384 | 4391,6116 2385 | 1541,4404 2386 | 4843,1301 2387 | 8874,8874 2388 | 73,9153 2389 | 9146,4687 2390 | 2122,6927 2391 | 4479,270 2392 | 3552,1603 2393 | 4916,9521 2394 | 439,3970 2395 | 6233,5860 2396 | 1752,7398 2397 | 6795,4749 2398 | 782,8220 2399 | 9975,8102 2400 | 3036,489 2401 | 5954,28 2402 | 3446,3282 2403 | 2945,2991 2404 | 5159,1266 2405 | 5636,7896 2406 | 9977,7822 2407 | 346,2350 2408 | 5944,3524 2409 | 3633,7198 2410 | 2133,8206 2411 | 2714,3485 2412 | 9105,1685 2413 | 1082,4978 2414 | 7927,5756 2415 | 5436,8844 2416 | 2162,1609 2417 | 4151,570 2418 | 7854,9777 2419 | 5966,4070 2420 | 3200,5263 2421 | 9875,5802 2422 | 6138,3294 2423 | 5665,5280 2424 | 1954,1614 2425 | 8226,6463 2426 | 4826,7318 2427 | 3671,2143 2428 | 8188,1619 2429 | 5764,6776 2430 | 7350,4320 2431 | 6601,3866 2432 | 1719,8404 2433 | 6421,152 2434 | 5752,6673 2435 | 8720,6790 2436 | 9370,2080 2437 | 6754,7014 2438 | 2970,5334 2439 | 5923,4529 2440 | 2395,1585 2441 | 7269,6218 2442 | 6692,1628 2443 | 3565,335 2444 | 8091,2937 2445 | 1119,7410 2446 | 7871,10000 2447 | 7775,4904 2448 | 7751,2304 2449 | 618,6009 2450 | 6000,8024 2451 | 7861,1088 2452 | 7730,5173 2453 | 3161,8026 2454 | 2608,5951 2455 | 2248,5723 2456 | 6675,6120 2457 | 9100,1950 2458 | 5715,1374 2459 | 1803,7567 2460 | 955,5674 2461 | 2448,8574 2462 | 4385,5410 2463 | 8707,3390 2464 | 9248,4430 2465 | 9128,2490 2466 | 4052,1570 2467 | 7161,2521 2468 | 9057,2850 2469 | 8790,4807 2470 | 96,2501 2471 | 3850,413 2472 | 3910,9583 2473 | 529,6961 2474 | 7509,4018 2475 | 1183,1722 2476 | 6158,4229 2477 | 8310,6388 2478 | 4451,9853 2479 | 8366,5048 2480 | 6483,3862 2481 | 5001,305 2482 | 1200,1705 2483 | 811,3385 2484 | 3205,9838 2485 | 2567,6832 2486 | 4342,4636 2487 | 7053,7296 2488 | 5430,5682 2489 | 1478,1490 2490 | 9522,4359 2491 | 1653,7299 2492 | 8048,8156 2493 | 5570,2727 2494 | 4401,5493 2495 | 714,2717 2496 | 9582,3257 2497 | 4775,9651 2498 | 1213,7506 2499 | 9202,3922 2500 | 5629,5172 2501 | 134,8423 2502 | 4665,5896 2503 | 4256,4004 2504 | 8335,3278 2505 | 4919,470 2506 | 3080,4781 2507 | 4080,1223 2508 | 7233,5775 2509 | 2717,7792 2510 | 9236,5676 2511 | 4041,403 2512 | 6767,4555 2513 | 1509,6444 2514 | 1923,849 2515 | 2394,705 2516 | 1383,6700 2517 | 7124,9727 2518 | 2211,7920 2519 | 7129,8903 2520 | 6006,2084 2521 | 4552,2615 2522 | 9922,8739 2523 | 8767,8068 2524 | 3373,1567 2525 | 1967,4434 2526 | 9004,6796 2527 | 6794,3466 2528 | 8909,7930 2529 | 4277,2818 2530 | 8833,8746 2531 | 5469,8636 2532 | 2633,7926 2533 | 1165,7004 2534 | 6494,8616 2535 | 9814,7077 2536 | 9618,7411 2537 | 8613,8336 2538 | 4489,4913 2539 | 6030,4183 2540 | 1734,6828 2541 | 3049,9594 2542 | 1451,8571 2543 | 8741,7546 2544 | 911,5852 2545 | 6412,6609 2546 | 9853,7270 2547 | 2123,6536 2548 | 8183,8704 2549 | 3664,9301 2550 | 4631,6124 2551 | 2511,6405 2552 | 6368,572 2553 | 3700,9363 2554 | 5483,1810 2555 | 9190,9668 2556 | 4200,4856 2557 | 1484,3923 2558 | 9540,2211 2559 | 1705,4138 2560 | 6278,967 2561 | 6878,7124 2562 | 9144,8060 2563 | 5798,4129 2564 | 1154,3096 2565 | 7947,4642 2566 | 507,1822 2567 | 3902,9636 2568 | 4945,7843 2569 | 5175,1689 2570 | 300,563 2571 | 4175,9953 2572 | 6305,2294 2573 | 7839,7458 2574 | 4082,263 2575 | 9245,548 2576 | 7271,3716 2577 | 6088,6105 2578 | 3957,9 2579 | 9701,7933 2580 | 5633,1423 2581 | 8999,1807 2582 | 4553,7432 2583 | 2303,3521 2584 | 6956,308 2585 | 4023,2648 2586 | 6588,1745 2587 | 1131,5187 2588 | 8290,3500 2589 | 8263,5884 2590 | 5363,6271 2591 | 9241,344 2592 | 2019,3523 2593 | 2560,2466 2594 | 4530,4830 2595 | 9593,232 2596 | 1931,1168 2597 | 4356,4195 2598 | 2106,7043 2599 | 386,5418 2600 | 4693,696 2601 | 6891,7827 2602 | 6453,3223 2603 | 6038,302 2604 | 2965,7932 2605 | 3987,1037 2606 | 7615,9128 2607 | 3492,3540 2608 | 4925,165 2609 | 671,2582 2610 | 6293,9935 2611 | 6052,9629 2612 | 5837,4501 2613 | 3166,2055 2614 | 4844,7155 2615 | 8157,1012 2616 | 4881,5399 2617 | 4983,8645 2618 | 749,9890 2619 | 4105,9101 2620 | 5313,9729 2621 | 4597,9338 2622 | 8462,6709 2623 | 8396,8239 2624 | 9211,7785 2625 | 4796,1100 2626 | 1662,3581 2627 | 467,4041 2628 | 3376,299 2629 | 1947,8323 2630 | 4745,7976 2631 | 432,4651 2632 | 1997,5039 2633 | 8362,1008 2634 | 396,1697 2635 | 2304,6914 2636 | 1325,1818 2637 | 5624,1408 2638 | 8528,912 2639 | 3934,4863 2640 | 8850,774 2641 | 4905,8727 2642 | 882,6006 2643 | 5740,1756 2644 | 291,9543 2645 | 6877,3018 2646 | 4578,8456 2647 | 5882,5315 2648 | 7397,1528 2649 | 5897,3334 2650 | 6213,7737 2651 | 9763,2465 2652 | 3889,3022 2653 | 7304,5578 2654 | 8748,2245 2655 | 1030,8929 2656 | 4415,9142 2657 | 5723,6640 2658 | 4244,615 2659 | 6020,6722 2660 | 6476,8695 2661 | 8586,760 2662 | 3063,7328 2663 | 8003,3425 2664 | 9780,8222 2665 | 8029,4652 2666 | 4962,3735 2667 | 4248,6090 2668 | 4131,1391 2669 | 3684,381 2670 | 5476,3227 2671 | 7450,6543 2672 | 6728,8082 2673 | 1416,5979 2674 | 7219,2762 2675 | 7611,952 2676 | 4525,7642 2677 | 5067,9973 2678 | 2307,7205 2679 | 7050,6565 2680 | 8474,3332 2681 | 7894,9314 2682 | 975,6080 2683 | 2359,8894 2684 | 6923,8917 2685 | 1476,1427 2686 | 1728,5185 2687 | 8342,4567 2688 | 452,9206 2689 | 2422,8293 2690 | 4249,7870 2691 | 8814,4090 2692 | 8558,5162 2693 | 5699,6993 2694 | 7665,8796 2695 | 456,4491 2696 | 7790,5385 2697 | 4776,3030 2698 | 5028,5623 2699 | 8218,6525 2700 | 8160,3552 2701 | 7244,2913 2702 | 2674,7232 2703 | 5116,5504 2704 | 8672,7941 2705 | 8267,9656 2706 | 2569,4508 2707 | 4047,1530 2708 | 322,8547 2709 | 4932,2618 2710 | 7049,6180 2711 | 6851,5828 2712 | 336,495 2713 | 3950,9765 2714 | 6037,1030 2715 | 6126,5691 2716 | 587,6583 2717 | 4771,8096 2718 | 463,3111 2719 | 1064,5273 2720 | 3735,4997 2721 | 7656,7495 2722 | 1081,8113 2723 | 8086,5036 2724 | 715,7836 2725 | 8992,9180 2726 | 2559,6818 2727 | 8152,4500 2728 | 5477,612 2729 | 2772,213 2730 | 6034,7802 2731 | 8882,8698 2732 | 9509,4074 2733 | 2020,6281 2734 | 1917,8257 2735 | 4682,4579 2736 | 1985,6784 2737 | 5566,455 2738 | 8450,8507 2739 | 5135,2763 2740 | 6521,5112 2741 | 8531,1477 2742 | 2892,7351 2743 | 797,6393 2744 | 9036,5198 2745 | 6084,8441 2746 | 4917,950 2747 | 8449,3284 2748 | 1233,9012 2749 | 1506,419 2750 | 9363,3102 2751 | 9205,833 2752 | 7941,8813 2753 | 8617,1501 2754 | 462,2681 2755 | 7329,9268 2756 | 299,1727 2757 | 6179,1752 2758 | 7856,5740 2759 | 4698,182 2760 | 4422,7763 2761 | 2131,6723 2762 | 8823,556 2763 | 4305,4186 2764 | 2614,3602 2765 | 3024,4928 2766 | 7523,3752 2767 | 9885,4118 2768 | 2109,2757 2769 | 8260,2122 2770 | 9034,8809 2771 | 8391,3953 2772 | 7533,1995 2773 | 4609,8747 2774 | 8115,5141 2775 | 6075,2831 2776 | 2840,9719 2777 | 1203,7093 2778 | 9836,7505 2779 | 4317,701 2780 | 951,1173 2781 | 5686,1704 2782 | 6261,5960 2783 | 4090,1071 2784 | 6651,6606 2785 | 4787,3324 2786 | 146,3971 2787 | 3855,629 2788 | 5586,3475 2789 | 3661,2572 2790 | 6849,3587 2791 | 4892,127 2792 | 1724,1904 2793 | 4008,3211 2794 | 6169,7846 2795 | 4588,9951 2796 | 6661,9480 2797 | 3494,8112 2798 | 7653,8307 2799 | 2999,429 2800 | 8128,7597 2801 | 8049,2111 2802 | 5423,9200 2803 | 6115,4616 2804 | 8535,9733 2805 | 2146,9308 2806 | 9954,5805 2807 | 3334,9518 2808 | 1963,3090 2809 | 6359,4873 2810 | 1334,9711 2811 | 8261,370 2812 | 1162,2772 2813 | 1077,481 2814 | 1353,6736 2815 | 946,3407 2816 | 5137,2157 2817 | 4799,979 2818 | 3191,9170 2819 | 6028,195 2820 | 7593,6305 2821 | 2325,6506 2822 | 1003,1140 2823 | 4893,8941 2824 | 4470,6211 2825 | 8422,2189 2826 | 2498,3522 2827 | 3579,6169 2828 | 8317,7982 2829 | 8674,7475 2830 | 9136,7357 2831 | 202,7696 2832 | 2969,7500 2833 | 1699,3991 2834 | 7721,6342 2835 | 3212,7540 2836 | 2548,4659 2837 | 330,3204 2838 | 6621,9096 2839 | 6614,9394 2840 | 7300,1768 2841 | 8564,3506 2842 | 7187,4663 2843 | 4386,6690 2844 | 8231,1420 2845 | 5614,4769 2846 | 6686,861 2847 | 7383,7331 2848 | 5615,6686 2849 | 1073,8250 2850 | 232,2262 2851 | 3209,6688 2852 | 2044,7269 2853 | 1247,4793 2854 | 4891,9050 2855 | 5304,3652 2856 | 6031,8385 2857 | 5737,449 2858 | 3773,668 2859 | 1579,3438 2860 | 5672,324 2861 | 4333,9697 2862 | 8688,7650 2863 | 6824,3359 2864 | 8370,5011 2865 | 4145,3353 2866 | 4967,1551 2867 | 3457,5268 2868 | 4637,3804 2869 | 8347,1142 2870 | 3461,3624 2871 | 4982,2653 2872 | 5244,4634 2873 | 3789,585 2874 | 3817,4503 2875 | 7972,8358 2876 | 324,9440 2877 | 9399,5544 2878 | 3269,6765 2879 | 4751,6788 2880 | 3363,4640 2881 | 822,286 2882 | 8136,1860 2883 | 1212,6889 2884 | 1455,4102 2885 | 7201,2188 2886 | 166,3171 2887 | 3868,862 2888 | 2220,4281 2889 | 2862,891 2890 | 3002,5018 2891 | 5732,4559 2892 | 3130,6007 2893 | 33,6232 2894 | 1841,2695 2895 | 9127,1667 2896 | 3668,6288 2897 | 1940,7156 2898 | 3730,5597 2899 | 5707,8969 2900 | 4615,2 2901 | 8832,9561 2902 | 220,3233 2903 | 2671,1980 2904 | 2374,4245 2905 | 5555,4813 2906 | 3998,4436 2907 | 6078,9695 2908 | 4703,5240 2909 | 5245,6359 2910 | 7266,8682 2911 | 4679,9591 2912 | 4297,2046 2913 | 7803,1910 2914 | 1527,1579 2915 | 4040,5903 2916 | 1547,9084 2917 | 1068,9454 2918 | 971,6073 2919 | 7954,6379 2920 | 7112,4426 2921 | 7369,528 2922 | 9321,5879 2923 | 9039,6098 2924 | 5678,394 2925 | 4217,3742 2926 | 7096,960 2927 | 4642,9852 2928 | 9076,4826 2929 | 8963,4257 2930 | 3359,2610 2931 | 6339,4477 2932 | 3013,8341 2933 | 7468,6111 2934 | 4496,1364 2935 | 8547,2131 2936 | 7406,424 2937 | 5539,6957 2938 | 7587,903 2939 | 3615,2178 2940 | 7404,4629 2941 | 4699,4716 2942 | 8425,8923 2943 | 2420,8295 2944 | 1973,9046 2945 | 7412,9790 2946 | 2261,7422 2947 | 9880,4925 2948 | 690,9634 2949 | 3843,2960 2950 | 2750,8612 2951 | 1324,7981 2952 | 675,6178 2953 | 5396,9099 2954 | 4739,2003 2955 | 761,8179 2956 | 9714,5201 2957 | 7006,8023 2958 | 4353,6754 2959 | 5370,6715 2960 | 7133,8886 2961 | 8546,1976 2962 | 5618,8300 2963 | 5855,1076 2964 | 8126,3446 2965 | 5928,4061 2966 | 3136,7776 2967 | 2355,7557 2968 | 2903,4098 2969 | 7039,6326 2970 | 6227,7578 2971 | 8371,3673 2972 | 597,1494 2973 | 2876,6036 2974 | 7259,7544 2975 | 1048,1390 2976 | 7082,8422 2977 | 702,2830 2978 | 8927,7170 2979 | 1628,6976 2980 | 9580,2929 2981 | 6802,4679 2982 | 8717,7513 2983 | 5810,1671 2984 | 9889,4796 2985 | 5289,4295 2986 | 7296,7257 2987 | 4375,9070 2988 | 6654,7508 2989 | 8633,5650 2990 | 2735,7489 2991 | 2434,6390 2992 | 8486,6131 2993 | 6937,3935 2994 | 6193,5106 2995 | 1000,2540 2996 | 3506,6667 2997 | 2574,8709 2998 | 3797,2029 2999 | 4318,3100 3000 | 8463,3122 3001 | 5310,3714 3002 | 6718,9776 3003 | 1691,2183 3004 | 6566,5994 3005 | 4869,67 3006 | 9739,7740 3007 | 8895,2602 3008 | 2154,4261 3009 | 2539,5140 3010 | 8349,9060 3011 | 9809,3966 3012 | 683,2568 3013 | 5800,2590 3014 | 837,3429 3015 | 4420,4717 3016 | 4246,4405 3017 | 6840,3290 3018 | 6811,5739 3019 | 3207,420 3020 | 314,7262 3021 | 5651,7265 3022 | 1717,5314 3023 | 7936,5032 3024 | 1019,5838 3025 | 2254,5340 3026 | 2463,4695 3027 | 1070,4095 3028 | 2202,5643 3029 | 4152,2264 3030 | 8710,9448 3031 | 1816,8402 3032 | 4969,4850 3033 | 2158,2580 3034 | 5420,8198 3035 | 7325,6919 3036 | 9159,8569 3037 | 874,3247 3038 | 1302,5156 3039 | 8784,3242 3040 | 7479,1054 3041 | 2898,6200 3042 | 8491,7629 3043 | 7592,1742 3044 | 5381,1357 3045 | 3249,3106 3046 | 1751,3915 3047 | 3414,3726 3048 | 8074,1375 3049 | 4644,9504 3050 | 250,3899 3051 | 4216,8594 3052 | 8028,7022 3053 | 3008,3219 3054 | 7013,8476 3055 | 1067,939 3056 | 1654,4027 3057 | 3327,3209 3058 | 9515,2255 3059 | 1271,9519 3060 | 2795,6269 3061 | 3693,4987 3062 | 764,9486 3063 | 8276,9736 3064 | 2457,3053 3065 | 1777,9654 3066 | 937,2038 3067 | 3846,7065 3068 | 977,9385 3069 | 7140,468 3070 | 1118,9620 3071 | 5601,9520 3072 | 7711,6860 3073 | 7188,1737 3074 | 9935,1075 3075 | 1814,1346 3076 | 2715,5508 3077 | 4940,4672 3078 | 9876,7779 3079 | 9373,1670 3080 | 8185,6250 3081 | 9113,8123 3082 | 5435,364 3083 | 2598,1499 3084 | 2601,1004 3085 | 5425,3525 3086 | 6282,7503 3087 | 5619,159 3088 | 8926,9662 3089 | 7370,2855 3090 | 8303,576 3091 | 9600,8990 3092 | 1944,8335 3093 | 902,1344 3094 | 934,2395 3095 | 6711,3928 3096 | 1387,8224 3097 | 2215,9250 3098 | 4308,1615 3099 | 2746,9132 3100 | 8611,9415 3101 | 3784,4513 3102 | 5520,2387 3103 | 8662,9273 3104 | 5766,6501 3105 | 1237,2149 3106 | 9870,2738 3107 | 2905,1647 3108 | 6239,5644 3109 | 572,7616 3110 | 5982,3648 3111 | 6695,347 3112 | 1180,648 3113 | 4618,9449 3114 | 8398,1794 3115 | 8418,4014 3116 | 9594,4884 3117 | 7011,6058 3118 | 2255,4678 3119 | 1298,7641 3120 | 4095,225 3121 | 7015,819 3122 | 8072,3528 3123 | 1592,9196 3124 | 8694,902 3125 | 7767,7715 3126 | 2946,7564 3127 | 4138,9461 3128 | 706,2447 3129 | 771,3644 3130 | 5643,4912 3131 | 8307,8919 3132 | 7459,6679 3133 | 5749,8943 3134 | 4818,4729 3135 | 2309,4323 3136 | 5731,1399 3137 | 3135,9428 3138 | 818,3698 3139 | 8482,3496 3140 | 6508,5870 3141 | 5664,4286 3142 | 7241,6650 3143 | 3962,3608 3144 | 2912,4764 3145 | 788,6027 3146 | 4571,1179 3147 | 8549,6292 3148 | 965,1130 3149 | 8030,2719 3150 | 3717,4549 3151 | 4390,3494 3152 | 8646,7024 3153 | 5421,9896 3154 | 5045,2371 3155 | 1321,1819 3156 | 8410,1982 3157 | 693,4351 3158 | 9798,3699 3159 | 9955,3775 3160 | 2722,1464 3161 | 5239,4329 3162 | 9108,6940 3163 | 7264,9255 3164 | 401,35 3165 | 9712,7272 3166 | 5663,4880 3167 | 3991,6812 3168 | 5376,4189 3169 | 7812,984 3170 | 7231,7582 3171 | 635,3163 3172 | 6905,6089 3173 | 480,6 3174 | 1221,598 3175 | 6207,3574 3176 | 7218,2699 3177 | 6151,3206 3178 | 7379,96 3179 | 1634,497 3180 | 5024,3362 3181 | 7070,9713 3182 | 6624,9891 3183 | 2235,6988 3184 | 2028,7443 3185 | 1357,2839 3186 | 2998,9867 3187 | 4801,7729 3188 | 5060,8399 3189 | 7666,1372 3190 | 4999,3779 3191 | 4431,513 3192 | 5693,6404 3193 | 7182,2090 3194 | 5325,8340 3195 | 5454,1020 3196 | 2743,1125 3197 | 7409,427 3198 | 6871,7484 3199 | 1863,8126 3200 | 1440,5252 3201 | 2002,6559 3202 | 4694,7247 3203 | 1204,931 3204 | 7555,4066 3205 | 7857,9981 3206 | 6634,4584 3207 | 9681,7348 3208 | 6653,561 3209 | 2105,5448 3210 | 353,7678 3211 | 9750,8597 3212 | 4516,7815 3213 | 2314,1377 3214 | 5687,8607 3215 | 8924,7502 3216 | 895,6687 3217 | 2143,6309 3218 | 321,2766 3219 | 2776,7637 3220 | 7793,7789 3221 | 7286,7735 3222 | 3417,6935 3223 | 4988,4551 3224 | 3812,4332 3225 | 5607,3152 3226 | 8414,8546 3227 | 8454,6230 3228 | 5162,8033 3229 | 8768,6439 3230 | 3925,5411 3231 | 8964,3355 3232 | 4221,5696 3233 | 3105,3640 3234 | 2775,5287 3235 | 3890,5074 3236 | 7234,923 3237 | 9603,8965 3238 | 8655,9087 3239 | 7636,7129 3240 | 80,6260 3241 | 3632,6514 3242 | 5269,3049 3243 | 8729,151 3244 | 8843,8375 3245 | 5225,7814 3246 | 4289,8737 3247 | 9931,2742 3248 | 4012,6555 3249 | 2188,5239 3250 | 9444,2951 3251 | 7796,3758 3252 | 2667,1072 3253 | 263,7972 3254 | 5969,9313 3255 | 7423,4495 3256 | 8373,9436 3257 | 4381,2225 3258 | 4316,8328 3259 | 921,3491 3260 | 6162,5794 3261 | 9404,8604 3262 | 3663,5663 3263 | 6277,8677 3264 | 8073,1424 3265 | 1829,8637 3266 | 7426,982 3267 | 9468,621 3268 | 399,4699 3269 | 6215,8146 3270 | 9964,3964 3271 | 1008,2860 3272 | 7366,329 3273 | 3640,2562 3274 | 3851,9052 3275 | 9792,2440 3276 | 792,4480 3277 | 832,4489 3278 | 1795,9663 3279 | 3031,9143 3280 | 7817,2119 3281 | 854,1156 3282 | 2050,9804 3283 | 9810,7117 3284 | 4532,1074 3285 | 7024,3400 3286 | 6715,5022 3287 | 9273,969 3288 | 3210,8499 3289 | 8230,3392 3290 | 4754,5129 3291 | 7453,2984 3292 | 3832,1901 3293 | 3830,4354 3294 | 876,9718 3295 | 4441,6903 3296 | 1443,418 3297 | 9010,206 3298 | 1206,3799 3299 | 1876,3589 3300 | 7235,4352 3301 | 6939,6801 3302 | 1663,8245 3303 | 1885,3442 3304 | 4405,4485 3305 | 6887,8305 3306 | 270,680 3307 | 1948,268 3308 | 7396,1894 3309 | 7248,3460 3310 | 9047,7965 3311 | 4119,5746 3312 | 9934,9235 3313 | 8824,2507 3314 | 6045,8797 3315 | 6092,4128 3316 | 5424,7713 3317 | 4991,4176 3318 | 6729,5660 3319 | 6818,9936 3320 | 9917,8978 3321 | 1546,3613 3322 | 1362,8137 3323 | 39,1562 3324 | 143,4740 3325 | 6190,9885 3326 | 4730,8283 3327 | 2222,3213 3328 | 7742,9115 3329 | 9166,4374 3330 | 2504,8028 3331 | 3654,4461 3332 | 3176,8151 3333 | 4666,9341 3334 | 3645,5175 3335 | 9742,7676 3336 | 603,2784 3337 | 5594,658 3338 | 3367,6063 3339 | -------------------------------------------------------------------------------- /data/large.csv: -------------------------------------------------------------------------------- 1 | 77,95 2 | 44,70 3 | 15,85 4 | 67,31 5 | 75,100 6 | 91,1 7 | 2,7 8 | 46,53 9 | 16,35 10 | 68,11 11 | 35,64 12 | 53,26 13 | 84,4 14 | 85,34 15 | 100,36 16 | 43,22 17 | 30,27 18 | 24,66 19 | 17,61 20 | 54,40 21 | 10,12 22 | 4,21 23 | 32,72 24 | 66,83 25 | 49,24 26 | 60,84 27 | 74,67 28 | 57,56 29 | 45,37 30 | 18,15 31 | 62,52 32 | 79,74 33 | 55,43 34 | 11,18 35 | 86,71 36 | 64,28 37 | 78,20 38 | 37,99 39 | 81,46 40 | 22,32 41 | 19,54 42 | 26,78 43 | 38,62 44 | 52,76 45 | 72,63 46 | 20,90 47 | 23,17 48 | 47,86 49 | 59,68 50 | 82,82 51 | 27,92 52 | 28,55 53 | 25,38 54 | 29,75 55 | 96,19 56 | 83,14 57 | 31,60 58 | 13,87 59 | 51,94 60 | 40,49 61 | 58,33 62 | 70,29 63 | 92,10 64 | 88,23 65 | 8,73 66 | 1,41 67 | 71,13 68 | 36,44 69 | -------------------------------------------------------------------------------- /data/small.csv: -------------------------------------------------------------------------------- 1 | 35,12 2 | 85,27 3 | 30,11 4 | 50,17 5 | 70,20 6 | 80,10 7 | 55,15 8 | -------------------------------------------------------------------------------- /data/very_large.csv: -------------------------------------------------------------------------------- 1 | 560,676 2 | 952,161 3 | 697,605 4 | 128,893 5 | 822,426 6 | 527,53 7 | 584,974 8 | 903,413 9 | 773,834 10 | 802,250 11 | 672,341 12 | 354,195 13 | 707,212 14 | 698,483 15 | 885,673 16 | 816,157 17 | 681,152 18 | 429,19 19 | 738,771 20 | 676,661 21 | 549,814 22 | 507,297 23 | 220,923 24 | 729,376 25 | 753,777 26 | 166,192 27 | 450,754 28 | 957,898 29 | 579,811 30 | 382,692 31 | 180,774 32 | 182,922 33 | 855,766 34 | 508,2 35 | 732,751 36 | 979,41 37 | 190,928 38 | 171,442 39 | 215,432 40 | 914,840 41 | 665,872 42 | 259,81 43 | 418,830 44 | 39,371 45 | 136,647 46 | 721,470 47 | 488,677 48 | 869,987 49 | 985,614 50 | 585,478 51 | 350,186 52 | 749,884 53 | 994,626 54 | 943,634 55 | 6,747 56 | 787,918 57 | 525,495 58 | 626,977 59 | 618,481 60 | 178,688 61 | 538,633 62 | 410,782 63 | 369,646 64 | 892,94 65 | 401,889 66 | 553,368 67 | 44,544 68 | 451,979 69 | 370,30 70 | 842,951 71 | 137,153 72 | 611,494 73 | 443,303 74 | 967,167 75 | 814,555 76 | 670,474 77 | 571,875 78 | 652,31 79 | 46,162 80 | 100,736 81 | 736,76 82 | 712,635 83 | 253,204 84 | 874,662 85 | 175,288 86 | 644,386 87 | 239,75 88 | 875,755 89 | 473,287 90 | 11,74 91 | 649,78 92 | 566,929 93 | 601,984 94 | 866,735 95 | 588,63 96 | 582,855 97 | 782,816 98 | 562,28 99 | 453,936 100 | 580,738 101 | 129,298 102 | 4,68 103 | 496,588 104 | 283,542 105 | 494,115 106 | 161,277 107 | 829,887 108 | 990,712 109 | 390,403 110 | 659,911 111 | 50,220 112 | 752,785 113 | 882,701 114 | 794,526 115 | 910,357 116 | 901,349 117 | 573,372 118 | 223,265 119 | 409,378 120 | 291,577 121 | 254,697 122 | 699,625 123 | 667,418 124 | 930,154 125 | 846,353 126 | 939,720 127 | 887,304 128 | 191,913 129 | 642,80 130 | 920,67 131 | 230,351 132 | 657,556 133 | 238,233 134 | 927,819 135 | 149,36 136 | 650,550 137 | 444,958 138 | 523,281 139 | 247,355 140 | 973,334 141 | 234,133 142 | 340,391 143 | 164,572 144 | 221,837 145 | 655,42 146 | 406,775 147 | 743,172 148 | 554,290 149 | 810,946 150 | 469,381 151 | 878,436 152 | 516,948 153 | 609,729 154 | 462,881 155 | 793,449 156 | 210,469 157 | 154,509 158 | 970,180 159 | 530,575 160 | 925,72 161 | 849,790 162 | 337,438 163 | 661,982 164 | 460,674 165 | 834,813 166 | 897,741 167 | 69,97 168 | 93,776 169 | 83,757 170 | 286,586 171 | 899,319 172 | 13,226 173 | 648,848 174 | 589,786 175 | 640,104 176 | 888,693 177 | 298,772 178 | 417,767 179 | 41,306 180 | 718,313 181 | 607,129 182 | 141,731 183 | 322,128 184 | 727,485 185 | 798,824 186 | 789,856 187 | 679,453 188 | 610,994 189 | 32,602 190 | 512,883 191 | 422,231 192 | 146,617 193 | 214,342 194 | 219,930 195 | 412,593 196 | 204,924 197 | 762,909 198 | 331,26 199 | 269,659 200 | 843,717 201 | 815,266 202 | 465,546 203 | 271,178 204 | 850,805 205 | 222,691 206 | 81,695 207 | 411,234 208 | 118,584 209 | 45,497 210 | 95,486 211 | 313,339 212 | 325,795 213 | 349,905 214 | 809,45 215 | 641,96 216 | 74,742 217 | 206,696 218 | 111,10 219 | 76,95 220 | 532,324 221 | 315,487 222 | 143,321 223 | 232,444 224 | 963,906 225 | 257,416 226 | 426,953 227 | 300,746 228 | 812,762 229 | 709,215 230 | 954,489 231 | 500,73 232 | 231,135 233 | 457,864 234 | 404,571 235 | 675,247 236 | 662,622 237 | 719,861 238 | 627,843 239 | 757,455 240 | 940,387 241 | 934,174 242 | 60,467 243 | 97,961 244 | 913,232 245 | 720,670 246 | 367,900 247 | 105,446 248 | 685,999 249 | 545,737 250 | 82,829 251 | 629,545 252 | 495,40 253 | 252,275 254 | 165,475 255 | 724,547 256 | 537,611 257 | 456,110 258 | 510,838 259 | 692,169 260 | 933,191 261 | 139,587 262 | 288,580 263 | 356,15 264 | 622,171 265 | 3,414 266 | 587,973 267 | 14,198 268 | 775,109 269 | 559,429 270 | 696,420 271 | 438,299 272 | 483,310 273 | 929,439 274 | 278,305 275 | 760,261 276 | 364,724 277 | 402,433 278 | 912,537 279 | 78,160 280 | 739,629 281 | 932,642 282 | 40,476 283 | 135,21 284 | 79,636 285 | 790,113 286 | 301,143 287 | 392,338 288 | 593,373 289 | 380,574 290 | 542,13 291 | 863,986 292 | 907,728 293 | 830,111 294 | 243,705 295 | 285,434 296 | 938,569 297 | 509,18 298 | 183,240 299 | 399,71 300 | 445,801 301 | 28,954 302 | 703,422 303 | 177,140 304 | 475,899 305 | 268,92 306 | 969,749 307 | 395,289 308 | 144,136 309 | 398,354 310 | 646,20 311 | 436,968 312 | 638,865 313 | 339,998 314 | 900,983 315 | 541,471 316 | 188,792 317 | 181,897 318 | 993,941 319 | 187,787 320 | 716,709 321 | 872,579 322 | 258,643 323 | 797,807 324 | 209,145 325 | 343,800 326 | 960,549 327 | 33,70 328 | 693,896 329 | 777,209 330 | 299,448 331 | 467,682 332 | 980,5 333 | 513,802 334 | 88,641 335 | 224,867 336 | 936,142 337 | 212,919 338 | 558,809 339 | 645,657 340 | 195,640 341 | 577,684 342 | 817,616 343 | 23,847 344 | 341,669 345 | 671,560 346 | 414,521 347 | 702,631 348 | 893,14 349 | 458,84 350 | 705,25 351 | 663,3 352 | 449,651 353 | 503,947 354 | 750,243 355 | 393,744 356 | 25,870 357 | 660,293 358 | 378,734 359 | 107,718 360 | 43,698 361 | 363,257 362 | 379,981 363 | 148,783 364 | 534,82 365 | 80,457 366 | 91,121 367 | 937,708 368 | 228,166 369 | 207,595 370 | 155,463 371 | 30,114 372 | 173,740 373 | 277,283 374 | 236,768 375 | 211,6 376 | 845,581 377 | 138,131 378 | 731,159 379 | 818,401 380 | 346,389 381 | 786,702 382 | 741,302 383 | 490,876 384 | 904,443 385 | 499,430 386 | 421,540 387 | 287,970 388 | 432,230 389 | 303,34 390 | 168,208 391 | 879,576 392 | 170,184 393 | 827,352 394 | 130,524 395 | 643,527 396 | 942,727 397 | 977,271 398 | 680,812 399 | 246,273 400 | 319,496 401 | 647,106 402 | 318,365 403 | 746,654 404 | 276,99 405 | 881,328 406 | 768,259 407 | 163,650 408 | 751,394 409 | 859,637 410 | 857,175 411 | 776,211 412 | 18,43 413 | 653,238 414 | 949,454 415 | 748,462 416 | 486,269 417 | 439,990 418 | 365,308 419 | 941,398 420 | 740,147 421 | 944,758 422 | 167,894 423 | 58,664 424 | 321,667 425 | 446,885 426 | 368,32 427 | 800,715 428 | 594,719 429 | 440,828 430 | 634,459 431 | 965,272 432 | 766,671 433 | 386,130 434 | 778,721 435 | 327,704 436 | 302,995 437 | 515,750 438 | 733,966 439 | 125,168 440 | 330,551 441 | 876,732 442 | 592,952 443 | 22,972 444 | 501,146 445 | 539,236 446 | 463,610 447 | 307,803 448 | 241,769 449 | 160,912 450 | 70,781 451 | 608,681 452 | 383,507 453 | 52,358 454 | 115,8 455 | 669,258 456 | 255,493 457 | 197,29 458 | 427,274 459 | 931,388 460 | 389,409 461 | 121,976 462 | 104,778 463 | 169,988 464 | 975,859 465 | 570,383 466 | 282,150 467 | 651,620 468 | 66,858 469 | 35,810 470 | 424,842 471 | 565,557 472 | 31,597 473 | 754,645 474 | 448,760 475 | 824,390 476 | 526,525 477 | 90,522 478 | 916,4 479 | 333,203 480 | 568,516 481 | 172,44 482 | 34,992 483 | 982,570 484 | 96,52 485 | 726,880 486 | 200,101 487 | 605,535 488 | 294,854 489 | 992,267 490 | 533,425 491 | 836,517 492 | 49,179 493 | 151,739 494 | 902,927 495 | 99,942 496 | 159,683 497 | 482,158 498 | 966,361 499 | 64,934 500 | 728,137 501 | 576,601 502 | 308,385 503 | 921,804 504 | 871,222 505 | 835,615 506 | 126,512 507 | 723,687 508 | 983,347 509 | 338,406 510 | 807,405 511 | 459,666 512 | 132,534 513 | 226,189 514 | 742,904 515 | 290,963 516 | 474,91 517 | 968,227 518 | 806,466 519 | 620,57 520 | 769,249 521 | 67,933 522 | 396,895 523 | 919,612 524 | 518,268 525 | 520,908 526 | 575,649 527 | 36,237 528 | 242,679 529 | 359,473 530 | 405,969 531 | 891,613 532 | 995,307 533 | 47,784 534 | 978,452 535 | 348,263 536 | 403,964 537 | 958,56 538 | 758,359 539 | 24,366 540 | 270,564 541 | 947,400 542 | 890,780 543 | 722,22 544 | 880,88 545 | 12,468 546 | 237,460 547 | 326,292 548 | 664,206 549 | 304,397 550 | 791,980 551 | 261,311 552 | 971,225 553 | 108,756 554 | 686,511 555 | 847,395 556 | 216,456 557 | 251,16 558 | 192,796 559 | 357,50 560 | 336,975 561 | 37,591 562 | 316,888 563 | 274,103 564 | 21,362 565 | 150,124 566 | 547,504 567 | 431,589 568 | 555,890 569 | 883,559 570 | 779,748 571 | 844,246 572 | 540,799 573 | 229,857 574 | 764,256 575 | 853,199 576 | 280,337 577 | 945,85 578 | 208,886 579 | 687,331 580 | 345,844 581 | 820,763 582 | 614,382 583 | 735,791 584 | 205,244 585 | 416,869 586 | 225,663 587 | 569,270 588 | 713,447 589 | 524,423 590 | 425,435 591 | 906,77 592 | 877,62 593 | 240,561 594 | 674,765 595 | 5,733 596 | 103,221 597 | 873,58 598 | 466,505 599 | 10,873 600 | 563,823 601 | 819,685 602 | 811,202 603 | 826,500 604 | 366,332 605 | 9,410 606 | 915,187 607 | 329,710 608 | 267,939 609 | 617,703 610 | 256,69 611 | 468,122 612 | 213,323 613 | 106,852 614 | 477,451 615 | 394,127 616 | 602,985 617 | 745,543 618 | 433,531 619 | 950,260 620 | 59,320 621 | 597,624 622 | 116,573 623 | 185,156 624 | 63,563 625 | 922,528 626 | 484,346 627 | 677,393 628 | 546,822 629 | 360,978 630 | 505,568 631 | 454,815 632 | 867,945 633 | 328,93 634 | 556,123 635 | 767,235 636 | 511,644 637 | 771,599 638 | 991,606 639 | 179,523 640 | 61,743 641 | 376,835 642 | 481,565 643 | 796,937 644 | 461,820 645 | 759,242 646 | 870,567 647 | 905,860 648 | 162,773 649 | 305,866 650 | 133,64 651 | 62,280 652 | 147,959 653 | 598,578 654 | -------------------------------------------------------------------------------- /data/very_small.csv: -------------------------------------------------------------------------------- 1 | 10,5 2 | 1,7 -------------------------------------------------------------------------------- /knapsack.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 D-Wave Systems Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | import os 15 | import itertools 16 | import click 17 | import pandas as pd 18 | from dwave.system import LeapHybridCQMSampler 19 | from dimod import ConstrainedQuadraticModel, BinaryQuadraticModel, QuadraticModel 20 | 21 | def parse_inputs(data_file, capacity): 22 | """Parse user input and files for data to build CQM. 23 | 24 | Args: 25 | data_file (csv file): 26 | File of items (weight & cost) slated to ship. 27 | capacity (int): 28 | Max weight the shipping container can accept. 29 | 30 | Returns: 31 | Costs, weights, and capacity. 32 | """ 33 | df = pd.read_csv(data_file, names=['cost', 'weight']) 34 | 35 | if not capacity: 36 | capacity = int(0.8 * sum(df['weight'])) 37 | print("\nSetting weight capacity to 80% of total: {}".format(str(capacity))) 38 | 39 | return df['cost'], df['weight'], capacity 40 | 41 | def build_knapsack_cqm(costs, weights, max_weight): 42 | """Construct a CQM for the knapsack problem. 43 | 44 | Args: 45 | costs (array-like): 46 | Array of costs for the items. 47 | weights (array-like): 48 | Array of weights for the items. 49 | max_weight (int): 50 | Maximum allowable weight for the knapsack. 51 | 52 | Returns: 53 | Constrained quadratic model instance that represents the knapsack problem. 54 | """ 55 | num_items = len(costs) 56 | print("\nBuilding a CQM for {} items.".format(str(num_items))) 57 | 58 | cqm = ConstrainedQuadraticModel() 59 | obj = BinaryQuadraticModel(vartype='BINARY') 60 | constraint = QuadraticModel() 61 | 62 | for i in range(num_items): 63 | # Objective is to maximize the total costs 64 | obj.add_variable(i) 65 | obj.set_linear(i, -costs[i]) 66 | # Constraint is to keep the sum of items' weights under or equal capacity 67 | constraint.add_variable('BINARY', i) 68 | constraint.set_linear(i, weights[i]) 69 | 70 | cqm.set_objective(obj) 71 | cqm.add_constraint(constraint, sense="<=", rhs=max_weight, label='capacity') 72 | 73 | return cqm 74 | 75 | def parse_solution(sampleset, costs, weights): 76 | """Translate the best sample returned from solver to shipped items. 77 | 78 | Args: 79 | 80 | sampleset (dimod.Sampleset): 81 | Samples returned from the solver. 82 | costs (array-like): 83 | Array of costs for the items. 84 | weights (array-like): 85 | Array of weights for the items. 86 | """ 87 | feasible_sampleset = sampleset.filter(lambda row: row.is_feasible) 88 | 89 | if not len(feasible_sampleset): 90 | raise ValueError("No feasible solution found") 91 | 92 | best = feasible_sampleset.first 93 | 94 | selected_item_indices = [key for key, val in best.sample.items() if val==1.0] 95 | selected_weights = list(weights.loc[selected_item_indices]) 96 | selected_costs = list(costs.loc[selected_item_indices]) 97 | 98 | print("\nFound best solution at energy {}".format(best.energy)) 99 | print("\nSelected item numbers (0-indexed):", selected_item_indices) 100 | print("\nSelected item weights: {}, total = {}".format(selected_weights, sum(selected_weights))) 101 | print("\nSelected item costs: {}, total = {}".format(selected_costs, sum(selected_costs))) 102 | 103 | def datafile_help(max_files=5): 104 | """Provide content of input file names and total weights for click()'s --help.""" 105 | 106 | try: 107 | data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data") 108 | datafiles = os.listdir(data_dir) 109 | # "\b" enables newlines in click() help text 110 | help = """ 111 | \b 112 | Name of data file (under the 'data/' folder) to run on. 113 | One of: 114 | File Name \t Total weight 115 | """ 116 | for file in datafiles[:max_files]: 117 | _, weights, _ = parse_inputs(os.path.join(data_dir, file), 1234) 118 | help += "{:<20} {:<10} \n".format(str(file), str(sum(weights))) 119 | help += "\nDefault is to run on data/large.csv." 120 | except: 121 | help = """ 122 | \b 123 | Name of data file (under the 'data/' folder) to run on. 124 | Default is to run on data/large.csv. 125 | """ 126 | 127 | return help 128 | 129 | filename_help = datafile_help() # Format the help string for the --filename argument 130 | 131 | @click.command() 132 | @click.option('--filename', type=click.File(), default='data/large.csv', 133 | help=filename_help) 134 | @click.option('--capacity', default=None, 135 | help="Maximum weight for the container. By default sets to 80% of the total.") 136 | def main(filename, capacity): 137 | """Solve a knapsack problem using a CQM solver.""" 138 | 139 | sampler = LeapHybridCQMSampler() 140 | 141 | costs, weights, capacity = parse_inputs(filename, capacity) 142 | 143 | cqm = build_knapsack_cqm(costs, weights, capacity) 144 | 145 | print("Submitting CQM to solver {}.".format(sampler.solver.name)) 146 | sampleset = sampler.sample_cqm(cqm, label='Example - Knapsack') 147 | 148 | parse_solution(sampleset, costs, weights) 149 | 150 | if __name__ == '__main__': 151 | main() 152 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | dwave-ocean-sdk>=4.1 2 | pandas 3 | click 4 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dwave-examples/knapsack/d0fef826d62f0c1b1c45fafd5ba898683877c74c/tests/__init__.py -------------------------------------------------------------------------------- /tests/test_knapsack.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 D-Wave Systems Inc. 2 | # 3 | # Licensed under the Apache License, Version 2.0 (the "License"); 4 | # you may not use this file except in compliance with the License. 5 | # You may obtain a copy of the License at 6 | # 7 | # http://www.apache.org/licenses/LICENSE-2.0 8 | # 9 | # Unless required by applicable law or agreed to in writing, software 10 | # distributed under the License is distributed on an "AS IS" BASIS, 11 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 | # See the License for the specific language governing permissions and 13 | # limitations under the License. 14 | import os 15 | import sys 16 | import unittest 17 | import subprocess 18 | from io import StringIO 19 | from contextlib import redirect_stdout 20 | import numpy as np 21 | from dimod import SampleSet, append_data_vectors 22 | from knapsack import build_knapsack_cqm, parse_inputs, parse_solution 23 | 24 | root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 25 | 26 | def redirect_output(sampleset, costs, weights): 27 | with redirect_stdout(StringIO()) as f: 28 | parse_solution(sampleset, costs, weights) 29 | return f.getvalue() 30 | 31 | class TestBuildCQM(unittest.TestCase): 32 | """Verify correct construction of CQM for very_small.csv data with weight 10.""" 33 | def test_build_cqm1(self): 34 | cqm = build_knapsack_cqm([10, 1], [5, 7], 10) 35 | self.assertEqual(cqm.objective.linear, {0: -10.0, 1: -1.0}) 36 | self.assertEqual(cqm.constraints["capacity"].lhs.linear, {0: 5.0, 1: 7.0}) 37 | self.assertEqual(cqm.constraints["capacity"].rhs, 10) 38 | 39 | class TestParsing(unittest.TestCase): 40 | """Verify input and output handling.""" 41 | def test_parse_input1(self): 42 | file1 = os.path.join(root_dir, "data", "small.csv") 43 | costs, weights, capacity = parse_inputs(file1, 10) 44 | 45 | self.assertEqual(capacity, 10) 46 | self.assertEqual(sum(costs), 405) 47 | self.assertEqual(sum(weights), 112) 48 | 49 | def test_parse_ouput1(self): 50 | file1 = os.path.join(root_dir, "data", "small.csv") 51 | costs, weights, capacity = parse_inputs(file1, 10) 52 | samples = np.asarray([[1., 0., 1., 0., 0., 1., 0.], [0., 0., 0., 0., 0., 1., 0.], 53 | [0., 1., 0., 0., 0., 1., 0.], [0., 0., 1., 0., 0., 1., 0.]]) 54 | sampleset = SampleSet.from_samples(samples, 'BINARY', [-10, -11, -8, -9]) 55 | sampleset_infeasible = append_data_vectors(sampleset, is_feasible=[False]*4) 56 | 57 | # Verify error for infeasible constraint input 58 | with self.assertRaises(ValueError): 59 | s = redirect_output(sampleset_infeasible, costs, weights) 60 | 61 | sampleset_feasible = append_data_vectors(sampleset, 62 | is_feasible=[False, True, False, True]) 63 | s = redirect_output(sampleset_feasible, costs, weights) 64 | self.assertIn('Found best solution at energy -11', s) 65 | self.assertIn('Selected item numbers (0-indexed): [5]', s) 66 | self.assertIn('Selected item weights: [10]', s) 67 | self.assertIn('Selected item costs: [80]', s) 68 | 69 | class TestIntegration(unittest.TestCase): 70 | @unittest.skipIf(os.getenv('SKIP_INT_TESTS'), "Skipping integration test.") 71 | def test_integration(self): 72 | """Test integration of demo script.""" 73 | 74 | project_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 75 | demo_file = os.path.join(project_dir, 'knapsack.py') 76 | 77 | output = subprocess.check_output([sys.executable, demo_file]) 78 | output = output.decode('utf-8') # Bytes to str 79 | output = output.lower() 80 | 81 | self.assertIn('building a cqm', output) 82 | self.assertIn('submitting cqm to solver', output) 83 | self.assertIn('found best solution', output) 84 | self.assertIn('selected item numbers', output) 85 | self.assertIn('selected item weights', output) 86 | self.assertIn('selected item costs', output) 87 | self.assertNotIn('traceback', output) 88 | --------------------------------------------------------------------------------