diff --git a/tests/Lattice_test.py b/tests/Lattice_test.py new file mode 100644 index 00000000..2bef7746 --- /dev/null +++ b/tests/Lattice_test.py @@ -0,0 +1,320 @@ +"""Tests for the rank-1 lattice quasi-Monte Carlo sampler. + +Lattice points plugged into ``MonteCarlo`` via the ``rng`` slot must (a) integrate +smooth functions accurately, (b) beat plain pseudo-random Monte Carlo at the same +sample count, and (c) reproduce bit-for-bit for a fixed seed -- the same three +properties covered for ``Sobol`` in ``test_sobol.py``, reused here almost verbatim. + +Unlike ``Sobol``, ``Lattice`` only supports the torch backend (it has no +``backend`` constructor argument and works with torch tensors directly), so all +coverage below runs on torch only; there is no per-backend loop. + +The remaining tests target properties that are specific to the rank-1 lattice +construction and have no Sobol equivalent: the closed-form point formula, the +one-shot random shift (drawn once and reused for the sampler's lifetime), and +input validation on N and dim. +""" + +import numpy as np +import pytest +import torch + +from torchquad.integration.monte_carlo import MonteCarlo +from torchquad.integration.qmc import Lattice, load_lattice_vector +from torchquad.utils.set_up_backend import set_up_backend +from helper_functions import setup_test_for_backend + +# Same smooth, non-separable-into-a-polynomial integrand as the Sobol tests: +# prod_i cos(pi/2 * x_i) over [0, 1]^dim integrates to (2/pi)^dim. QMC should +# shine here. +_DIM = 3 +_N = 2**13 # 8192 points: a power of 2, inside the [1024, 1048576] range Lattice requires +_DOMAIN = [[0.0, 1.0]] * _DIM +_EXPECTED = (2.0 / np.pi) ** _DIM + + +def _to_float(result): + """Convert a scalar backend tensor (possibly on GPU) to a Python float.""" + if hasattr(result, "cpu"): + result = result.cpu() + return float(np.asarray(result)) + + +def _integrand(x): + from autoray import numpy as anp + + return anp.prod(anp.cos(x * (np.pi / 2.0)), axis=1) + + +# --------------------------------------------------------------------------- +# Tests reused from the Sobol suite: accuracy, beating plain MC, determinism, +# and gradient flow. The backend loop collapses to "torch" only. +# --------------------------------------------------------------------------- + + +def _lattice_accuracy_test(backend, dtype_name=None): + """Lattice MC must integrate a smooth function close to the analytic value.""" + mc = MonteCarlo() + result = _to_float( + mc.integrate( + _integrand, + dim=_DIM, + N=_N, + integration_domain=_DOMAIN, + rng=Lattice(seed=0), + ) + ) + assert abs(result - _EXPECTED) < 1e-3, ( + f"Lattice result {result} too far from analytic {_EXPECTED}" + ) + + +def _lattice_beats_mc_test(backend, dtype_name=None): + """At equal N, Lattice must be more accurate than pseudo-random Monte Carlo. + + Both use a fixed seed, so this comparison is deterministic (no flakiness), and + the QMC error is orders of magnitude smaller for a smooth integrand. + """ + mc = MonteCarlo() + lattice_error = abs( + _to_float( + mc.integrate( + _integrand, + dim=_DIM, + N=_N, + integration_domain=_DOMAIN, + rng=Lattice(seed=0), + ) + ) + - _EXPECTED + ) + mc_error = abs( + _to_float(mc.integrate(_integrand, dim=_DIM, N=_N, integration_domain=_DOMAIN, seed=0)) + - _EXPECTED + ) + assert lattice_error < mc_error, ( + f"Lattice error {lattice_error} not below Monte Carlo error {mc_error}" + ) + + +def _lattice_determinism_test(backend, dtype_name=None): + """A fixed seed must reproduce the same result bit-for-bit, across fresh + ``Lattice`` instances (the shift is drawn once per instance, from ``seed``).""" + mc = MonteCarlo() + + def run(): + return _to_float( + mc.integrate( + _integrand, + dim=_DIM, + N=_N, + integration_domain=_DOMAIN, + rng=Lattice(seed=42), + ) + ) + + assert run() == run(), "Lattice integration is not reproducible for a fixed seed" + + +test_lattice_accuracy_torch = setup_test_for_backend(_lattice_accuracy_test, "torch", "float64") +test_lattice_beats_mc_torch = setup_test_for_backend(_lattice_beats_mc_test, "torch", "float64") +test_lattice_determinism_torch = setup_test_for_backend( + _lattice_determinism_test, "torch", "float64" +) + + +def test_lattice_preserves_gradient(): + """Lattice points are constants, so autodiff through the integral must survive.""" + set_up_backend("torch", "float64") + parameter = torch.tensor(2.0, dtype=torch.float64, requires_grad=True) + + # integral over [0, 1] of parameter * x is parameter / 2, so d/dparameter = 1/2. + def parametric(x): + return parameter * x[:, 0] + + mc = MonteCarlo() + result = mc.integrate( + parametric, + dim=1, + N=_N, + integration_domain=[[0.0, 1.0]], + rng=Lattice(seed=0), + ) + result.backward() + assert abs(_to_float(parameter.grad) - 0.5) < 1e-3, ( + "Gradient did not flow through the Lattice-sampled Monte Carlo integral" + ) + + +# --------------------------------------------------------------------------- +# Lattice-specific tests: the closed-form construction, the one-shot shift, +# and input validation on N and dim. None of these have a Sobol equivalent. +# --------------------------------------------------------------------------- + + +def test_lattice_matches_closed_form_without_shift(): + """Unshifted points must equal frac(i * z / N) exactly, for the actual + generating vector on disk. This pins down the construction itself, + independently of the downstream integration-accuracy tests above. + """ + set_up_backend("torch", "float64") + dim = 4 + n = 1024 # smallest supported N, keeps the manual computation cheap + + z = load_lattice_vector(d=dim).astype(np.int64) + i = np.arange(n, dtype=np.int64) + expected = ((i[:, None] * z[None, :]) % n) / n + + points = Lattice(shift=False).uniform([n, dim], torch.float64).cpu().numpy() + + np.testing.assert_allclose( + points, + expected, + atol=1e-12, + err_msg="Unshifted Lattice points do not match the closed-form frac(i*z/N) formula", + ) + + +def test_lattice_same_seed_reproduces_shift_across_calls(): + """The shift is redrawn on every call to ``uniform``, not cached -- but with + a fixed seed, each redraw must reproduce the same values, so successive + calls on the same instance return identical points.""" + set_up_backend("torch", "float64") + lattice = Lattice(seed=0, shift=True) + + first = lattice.uniform([1024, 2], torch.float64).clone() + second = lattice.uniform([1024, 2], torch.float64) + + assert torch.equal(first, second), ( + "Calling uniform() twice with the same seed must return identical points, " + "since the seeded shift draw is reproducible" + ) + + +def test_lattice_unseeded_shift_differs_across_calls(): + """Without a seed, each call to ``uniform`` draws its own independent + shift, so successive calls on the same instance must return different + points.""" + set_up_backend("torch", "float64") + lattice = Lattice(shift=True) # no seed + + first = lattice.uniform([1024, 2], torch.float64).clone() + second = lattice.uniform([1024, 2], torch.float64) + + assert not torch.equal(first, second), ( + "Calling uniform() twice without a seed should not return identical " + "points, since each call draws its own independent shift" + ) + + +def test_lattice_shift_changes_points(): + """With shift=True, the returned points must differ from the unshifted + lattice -- otherwise the shift would be silently having no effect.""" + set_up_backend("torch", "float64") + n, dim = 1024, 3 + + unshifted = Lattice(shift=False).uniform([n, dim], torch.float64) + shifted = Lattice(seed=0, shift=True).uniform([n, dim], torch.float64) + + assert not torch.equal(unshifted, shifted), ( + "Shifted points must not be identical to the unshifted lattice" + ) + + +def test_lattice_different_seeds_give_different_shifts(): + """Two instances with different seeds must (almost surely) produce different + point sets, since each draws its own independent random shift.""" + set_up_backend("torch", "float64") + n, dim = 1024, 3 + + points_a = Lattice(seed=1, shift=True).uniform([n, dim], torch.float64) + points_b = Lattice(seed=2, shift=True).uniform([n, dim], torch.float64) + + assert not torch.equal(points_a, points_b), ( + "Different seeds should not produce the same shifted lattice" + ) + + +def test_lattice_seed_ignored_when_shift_false(): + """When shift=False, the seed argument must have no effect: unshifted + lattice points depend only on N and dim, never on the seed.""" + set_up_backend("torch", "float64") + n, dim = 1024, 3 + + points_a = Lattice(seed=1, shift=False).uniform([n, dim], torch.float64) + points_b = Lattice(seed=99, shift=False).uniform([n, dim], torch.float64) + + assert torch.equal(points_a, points_b), "Unshifted lattice points must not depend on the seed" + + +def test_lattice_points_lie_in_unit_cube(): + """Every coordinate must lie in [0, 1), both with and without a shift.""" + set_up_backend("torch", "float64") + n, dim = 2048, 5 + + for shift in (False, True): + points = Lattice(seed=0, shift=shift).uniform([n, dim], torch.float64) + assert torch.all(points >= 0) and torch.all(points < 1), ( + f"Lattice points (shift={shift}) fall outside [0, 1)" + ) + + +def test_lattice_accepts_whole_number_as_float(): + """A whole number given as a float (e.g. 1024.0) must be accepted: only + non-integral values are invalid, not the float type itself.""" + set_up_backend("torch", "float64") + Lattice(shift=False).uniform([1024.0, 2.0], torch.float64) # must not raise + + +def test_lattice_warns_on_non_power_of_two_point_count(): + """The simple lattice construction requires N to be a power of 2; a + non-power-of-two N (but still in [1024, 1048576]) must work but emit a + UserWarning rather than fail outright.""" + set_up_backend("torch", "float64") + with pytest.warns(UserWarning, match="power of 2"): + Lattice(shift=False).uniform([1030, 2], torch.float64) + + +@pytest.mark.parametrize("bad_n", [1023, 1048577, 500, 2_000_000]) +def test_lattice_rejects_out_of_range_point_counts(bad_n): + """N below 1024 or above 1048576 must raise, near the boundary or far + outside it.""" + with pytest.raises(ValueError): + Lattice().uniform([bad_n, 2], torch.float64) + + +@pytest.mark.parametrize("bad_dim", [0, -1, 9126, 20000]) +def test_lattice_rejects_out_of_range_dimensions(bad_dim): + """dim below 1 or above 9125 must raise, near the boundary or far outside + it.""" + with pytest.raises(ValueError): + Lattice().uniform([1024, bad_dim], torch.float64) + + +def test_lattice_rejects_non_whole_number_of_points(): + """A fractional N (e.g. 1024.5) is not a valid point count.""" + with pytest.raises(ValueError): + Lattice().uniform([1024.5, 2], torch.float64) + + +def test_lattice_rejects_bool_as_size_component(): + """bool is a subtype of int in Python; it must still be rejected as a size + component rather than silently treated as 0 or 1.""" + with pytest.raises(TypeError): + Lattice().uniform([True, 2], torch.float64) + + +if __name__ == "__main__": + for _test in (_lattice_accuracy_test, _lattice_beats_mc_test, _lattice_determinism_test): + _test("torch") + test_lattice_preserves_gradient() + test_lattice_matches_closed_form_without_shift() + test_lattice_same_seed_reproduces_shift_across_calls() + test_lattice_unseeded_shift_differs_across_calls() + test_lattice_shift_changes_points() + test_lattice_different_seeds_give_different_shifts() + test_lattice_seed_ignored_when_shift_false() + test_lattice_points_lie_in_unit_cube() + test_lattice_accepts_whole_number_as_float() + test_lattice_warns_on_non_power_of_two_point_count() + print("All Lattice tests passed!") diff --git a/torchquad/__init__.py b/torchquad/__init__.py index 39c76ebb..fbe05fdd 100644 --- a/torchquad/__init__.py +++ b/torchquad/__init__.py @@ -28,6 +28,7 @@ from .integration.rng import RNG from .integration.qmc import Sobol +from .integration.qmc import Lattice from .utils.set_log_level import set_log_level @@ -57,6 +58,7 @@ "Gaussian", "RNG", "Sobol", + "Lattice", "enable_cuda", "set_precision", "set_log_level", diff --git a/torchquad/integration/lattice-33002-1024-1048576.9125 b/torchquad/integration/lattice-33002-1024-1048576.9125 new file mode 100644 index 00000000..c71e2b5b --- /dev/null +++ b/torchquad/integration/lattice-33002-1024-1048576.9125 @@ -0,0 +1,9125 @@ + 1 1 + 2 182667 + 3 213731 + 4 255351 + 5 96013 + 6 116671 + 7 479315 + 8 424089 + 9 271103 + 10 464421 + 11 124483 + 12 230887 + 13 392877 + 14 162965 + 15 109125 + 16 168491 + 17 216103 + 18 5613 + 19 207895 + 20 506745 + 21 189519 + 22 114879 + 23 133967 + 24 374257 + 25 254597 + 26 502087 + 27 298245 + 28 191333 + 29 242099 + 30 285991 + 31 397887 + 32 507051 + 33 511437 + 34 129779 + 35 406987 + 36 345291 + 37 225123 + 38 511175 + 39 432153 + 40 306191 + 41 116577 + 42 809 + 43 370175 + 44 402615 + 45 485791 + 46 201053 + 47 366959 + 48 54087 + 49 395609 + 50 211615 + 51 68543 + 52 443345 + 53 327293 + 54 290819 + 55 278623 + 56 362043 + 57 236117 + 58 11091 + 59 216837 + 60 31545 + 61 325799 + 62 503877 + 63 410523 + 64 88371 + 65 240077 + 66 423807 + 67 479855 + 68 330835 + 69 134517 + 70 329989 + 71 473381 + 72 59205 + 73 337775 + 74 355995 + 75 372243 + 76 279827 + 77 367217 + 78 277741 + 79 267077 + 80 417971 + 81 152599 + 82 184949 + 83 511773 + 84 397077 + 85 520041 + 86 98063 + 87 52983 + 88 91233 + 89 363069 + 90 23829 + 91 424377 + 92 225285 + 93 171171 + 94 496765 + 95 352791 + 96 223231 + 97 253273 + 98 296195 + 99 273379 + 100 407265 + 101 305849 + 102 215121 + 103 489851 + 104 245893 + 105 397947 + 106 174723 + 107 329797 + 108 213325 + 109 357759 + 110 346031 + 111 131433 + 112 110731 + 113 487615 + 114 371877 + 115 330799 + 116 124595 + 117 48775 + 118 273275 + 119 405083 + 120 436731 + 121 465257 + 122 158265 + 123 82033 + 124 67805 + 125 203565 + 126 190785 + 127 351165 + 128 19555 + 129 210139 + 130 236211 + 131 197333 + 132 217457 + 133 437623 + 134 304987 + 135 461169 + 136 470529 + 137 457011 + 138 91823 + 139 40575 + 140 513857 + 141 238575 + 142 149779 + 143 163017 + 144 355521 + 145 438395 + 146 429151 + 147 510607 + 148 252661 + 149 255753 + 150 219989 + 151 146583 + 152 138783 + 153 262887 + 154 22765 + 155 313675 + 156 329005 + 157 198699 + 158 239305 + 159 416211 + 160 305549 + 161 185961 + 162 343313 + 163 485961 + 164 333207 + 165 400975 + 166 334381 + 167 317357 + 168 270221 + 169 175403 + 170 179303 + 171 341251 + 172 11983 + 173 497027 + 174 145741 + 175 431637 + 176 27489 + 177 460319 + 178 288665 + 179 178737 + 180 120329 + 181 99851 + 182 97789 + 183 446355 + 184 398323 + 185 320921 + 186 399735 + 187 301009 + 188 58221 + 189 20499 + 190 496019 + 191 201021 + 192 18141 + 193 401811 + 194 7615 + 195 13797 + 196 56685 + 197 35433 + 198 143763 + 199 221013 + 200 111635 + 201 398843 + 202 450531 + 203 503423 + 204 37261 + 205 130555 + 206 159743 + 207 114359 + 208 283841 + 209 168217 + 210 148271 + 211 69501 + 212 450607 + 213 283473 + 214 13641 + 215 443385 + 216 338995 + 217 8113 + 218 30043 + 219 442875 + 220 502897 + 221 336337 + 222 110527 + 223 514381 + 224 200349 + 225 27787 + 226 38955 + 227 214547 + 228 231515 + 229 315083 + 230 458703 + 231 136455 + 232 23359 + 233 247081 + 234 448209 + 235 421023 + 236 417125 + 237 314287 + 238 335073 + 239 315409 + 240 131405 + 241 495049 + 242 459151 + 243 444599 + 244 458887 + 245 36639 + 246 512851 + 247 431191 + 248 257755 + 249 336191 + 250 80771 + 251 209571 + 252 201763 + 253 476611 + 254 66875 + 255 216789 + 256 426571 + 257 477141 + 258 57497 + 259 346643 + 260 312477 + 261 195855 + 262 283913 + 263 134259 + 264 78007 + 265 206851 + 266 367259 + 267 297197 + 268 90095 + 269 58027 + 270 222687 + 271 186773 + 272 376291 + 273 266565 + 274 363313 + 275 98609 + 276 5093 + 277 46873 + 278 456783 + 279 466755 + 280 490973 + 281 141089 + 282 63909 + 283 470491 + 284 143957 + 285 522397 + 286 185037 + 287 338677 + 288 119827 + 289 200753 + 290 221811 + 291 286559 + 292 19683 + 293 27881 + 294 220993 + 295 110561 + 296 446047 + 297 44727 + 298 380733 + 299 246933 + 300 320283 + 301 259667 + 302 313171 + 303 307877 + 304 498659 + 305 369629 + 306 382795 + 307 233291 + 308 503271 + 309 236669 + 310 451281 + 311 517257 + 312 180291 + 313 186613 + 314 331481 + 315 487085 + 316 427909 + 317 70661 + 318 661 + 319 239429 + 320 410193 + 321 522557 + 322 21083 + 323 455269 + 324 4565 + 325 481763 + 326 323253 + 327 365757 + 328 158517 + 329 193295 + 330 469623 + 331 242289 + 332 442553 + 333 488709 + 334 420303 + 335 151555 + 336 339289 + 337 37947 + 338 66323 + 339 499459 + 340 87281 + 341 126697 + 342 508883 + 343 241119 + 344 301537 + 345 39779 + 346 164315 + 347 242521 + 348 309569 + 349 92317 + 350 16541 + 351 169075 + 352 405649 + 353 68865 + 354 133371 + 355 472995 + 356 161715 + 357 408445 + 358 431781 + 359 347007 + 360 16627 + 361 43341 + 362 293235 + 363 328005 + 364 391913 + 365 402789 + 366 157951 + 367 374641 + 368 116455 + 369 479091 + 370 434001 + 371 434035 + 372 79739 + 373 142549 + 374 237507 + 375 210925 + 376 162389 + 377 228837 + 378 247477 + 379 315617 + 380 346365 + 381 47207 + 382 167439 + 383 396005 + 384 374115 + 385 286879 + 386 385 + 387 221261 + 388 157281 + 389 307311 + 390 469771 + 391 13813 + 392 307393 + 393 261209 + 394 397203 + 395 314125 + 396 373317 + 397 230179 + 398 253641 + 399 229057 + 400 451969 + 401 386679 + 402 90819 + 403 444013 + 404 269043 + 405 475501 + 406 132587 + 407 287719 + 408 89359 + 409 217833 + 410 304275 + 411 408981 + 412 277515 + 413 465275 + 414 122287 + 415 420485 + 416 204893 + 417 485847 + 418 335899 + 419 197479 + 420 131951 + 421 489045 + 422 116391 + 423 182133 + 424 132935 + 425 260647 + 426 470223 + 427 24317 + 428 370505 + 429 300645 + 430 221855 + 431 95761 + 432 228733 + 433 287833 + 434 389923 + 435 313019 + 436 295237 + 437 381513 + 438 196435 + 439 15297 + 440 294871 + 441 267369 + 442 117033 + 443 110951 + 444 402061 + 445 322613 + 446 508607 + 447 310683 + 448 245311 + 449 212345 + 450 213887 + 451 242907 + 452 189185 + 453 52609 + 454 63933 + 455 214337 + 456 322033 + 457 267229 + 458 421453 + 459 6973 + 460 84411 + 461 504749 + 462 445067 + 463 183923 + 464 459639 + 465 199471 + 466 460365 + 467 140433 + 468 355647 + 469 299899 + 470 487325 + 471 362609 + 472 105365 + 473 459579 + 474 481643 + 475 147665 + 476 306379 + 477 368397 + 478 34909 + 479 469315 + 480 104801 + 481 410927 + 482 175983 + 483 434559 + 484 254987 + 485 411307 + 486 426343 + 487 462991 + 488 174309 + 489 200421 + 490 225891 + 491 218575 + 492 52419 + 493 382181 + 494 302103 + 495 242249 + 496 468593 + 497 459953 + 498 15831 + 499 74367 + 500 203123 + 501 352331 + 502 2005 + 503 190473 + 504 245795 + 505 298933 + 506 27529 + 507 132969 + 508 133047 + 509 375829 + 510 333711 + 511 14119 + 512 145605 + 513 121537 + 514 64059 + 515 403317 + 516 452145 + 517 93347 + 518 417051 + 519 438969 + 520 314237 + 521 33733 + 522 514883 + 523 132369 + 524 305087 + 525 50959 + 526 6337 + 527 451059 + 528 44985 + 529 142405 + 530 47877 + 531 223185 + 532 431527 + 533 416269 + 534 177905 + 535 104629 + 536 121643 + 537 111869 + 538 180353 + 539 284651 + 540 79301 + 541 60863 + 542 91103 + 543 260269 + 544 230541 + 545 374483 + 546 412137 + 547 455965 + 548 249339 + 549 97557 + 550 140627 + 551 135139 + 552 173453 + 553 123149 + 554 141603 + 555 192959 + 556 370693 + 557 18775 + 558 291473 + 559 385945 + 560 275749 + 561 496805 + 562 8101 + 563 79711 + 564 311263 + 565 426829 + 566 157149 + 567 37451 + 568 143299 + 569 186791 + 570 209431 + 571 524243 + 572 74461 + 573 55645 + 574 135181 + 575 315485 + 576 502423 + 577 474101 + 578 237307 + 579 310243 + 580 350465 + 581 10019 + 582 504175 + 583 337413 + 584 113193 + 585 363299 + 586 295729 + 587 310337 + 588 166319 + 589 432275 + 590 166973 + 591 339435 + 592 12247 + 593 447019 + 594 380275 + 595 194937 + 596 128651 + 597 143805 + 598 178135 + 599 327333 + 600 226949 + 601 504321 + 602 364595 + 603 78335 + 604 479411 + 605 229765 + 606 159241 + 607 204819 + 608 349963 + 609 198305 + 610 410643 + 611 73239 + 612 13693 + 613 422801 + 614 388511 + 615 191007 + 616 346475 + 617 435997 + 618 70713 + 619 356555 + 620 432927 + 621 64895 + 622 247217 + 623 450335 + 624 101675 + 625 45787 + 626 386437 + 627 514125 + 628 110117 + 629 272779 + 630 448801 + 631 235571 + 632 29195 + 633 20745 + 634 186335 + 635 36895 + 636 122491 + 637 394385 + 638 410515 + 639 38815 + 640 188947 + 641 284779 + 642 268037 + 643 336379 + 644 334445 + 645 345131 + 646 387203 + 647 103939 + 648 356691 + 649 412439 + 650 197791 + 651 214179 + 652 330283 + 653 13415 + 654 399359 + 655 350885 + 656 188877 + 657 99061 + 658 488839 + 659 239833 + 660 114249 + 661 123727 + 662 481273 + 663 328851 + 664 289745 + 665 380837 + 666 2529 + 667 188891 + 668 62413 + 669 403801 + 670 9985 + 671 310643 + 672 496949 + 673 36107 + 674 284497 + 675 164259 + 676 491755 + 677 281677 + 678 449805 + 679 482373 + 680 300299 + 681 416795 + 682 379247 + 683 215901 + 684 424107 + 685 63211 + 686 180719 + 687 259389 + 688 155667 + 689 298797 + 690 33981 + 691 183927 + 692 241719 + 693 319255 + 694 194057 + 695 65251 + 696 293893 + 697 487781 + 698 104299 + 699 62957 + 700 192351 + 701 249741 + 702 231127 + 703 291341 + 704 374771 + 705 198513 + 706 152229 + 707 493687 + 708 247777 + 709 133951 + 710 483219 + 711 131327 + 712 442749 + 713 365247 + 714 26349 + 715 364135 + 716 53985 + 717 271773 + 718 272979 + 719 401987 + 720 323297 + 721 322967 + 722 178989 + 723 372741 + 724 355981 + 725 489943 + 726 359819 + 727 323785 + 728 315067 + 729 340603 + 730 293149 + 731 144065 + 732 179791 + 733 353571 + 734 359391 + 735 263865 + 736 237627 + 737 391821 + 738 128613 + 739 22741 + 740 202125 + 741 496305 + 742 347621 + 743 280839 + 744 453131 + 745 125859 + 746 335319 + 747 328921 + 748 261875 + 749 475275 + 750 42949 + 751 83187 + 752 277481 + 753 513825 + 754 177693 + 755 217725 + 756 131305 + 757 7415 + 758 416971 + 759 165421 + 760 472571 + 761 391313 + 762 506561 + 763 135019 + 764 190013 + 765 70753 + 766 366987 + 767 523515 + 768 62497 + 769 20667 + 770 515797 + 771 185765 + 772 276083 + 773 225101 + 774 354605 + 775 299467 + 776 475077 + 777 251119 + 778 309515 + 779 370931 + 780 279461 + 781 191153 + 782 70277 + 783 31851 + 784 266209 + 785 69867 + 786 41527 + 787 329215 + 788 325119 + 789 19951 + 790 244651 + 791 423763 + 792 490805 + 793 102763 + 794 360783 + 795 157485 + 796 181171 + 797 250549 + 798 348159 + 799 376619 + 800 424555 + 801 411083 + 802 120849 + 803 292387 + 804 220143 + 805 135245 + 806 313547 + 807 236925 + 808 14541 + 809 42625 + 810 499187 + 811 492767 + 812 463587 + 813 437049 + 814 150239 + 815 340937 + 816 109219 + 817 5537 + 818 404167 + 819 27333 + 820 457997 + 821 512891 + 822 149587 + 823 45325 + 824 400001 + 825 410747 + 826 312933 + 827 35217 + 828 254355 + 829 438227 + 830 28987 + 831 341989 + 832 268939 + 833 39717 + 834 480331 + 835 97805 + 836 64169 + 837 426903 + 838 221619 + 839 233027 + 840 194659 + 841 65033 + 842 482401 + 843 357965 + 844 192877 + 845 442829 + 846 84845 + 847 411581 + 848 222481 + 849 189141 + 850 56321 + 851 259061 + 852 287213 + 853 228301 + 854 67101 + 855 441469 + 856 504907 + 857 286941 + 858 34405 + 859 115557 + 860 438613 + 861 507491 + 862 211201 + 863 225171 + 864 327647 + 865 292307 + 866 27565 + 867 36219 + 868 52945 + 869 448235 + 870 330693 + 871 77533 + 872 458459 + 873 176801 + 874 477597 + 875 30227 + 876 116843 + 877 48689 + 878 365109 + 879 400427 + 880 399227 + 881 35919 + 882 193531 + 883 185437 + 884 495707 + 885 66497 + 886 51829 + 887 414757 + 888 185531 + 889 177869 + 890 205659 + 891 278647 + 892 6851 + 893 241547 + 894 411435 + 895 193033 + 896 149285 + 897 330963 + 898 191219 + 899 483163 + 900 151605 + 901 488243 + 902 89829 + 903 395475 + 904 1381 + 905 291993 + 906 179267 + 907 17159 + 908 16195 + 909 101507 + 910 85171 + 911 40411 + 912 423093 + 913 301261 + 914 129437 + 915 76009 + 916 103109 + 917 177167 + 918 337333 + 919 19621 + 920 30365 + 921 339997 + 922 497917 + 923 4367 + 924 86245 + 925 255867 + 926 39757 + 927 11037 + 928 403117 + 929 159581 + 930 63219 + 931 60197 + 932 176671 + 933 234085 + 934 340013 + 935 360333 + 936 443 + 937 179475 + 938 507459 + 939 197457 + 940 51877 + 941 458085 + 942 470697 + 943 423181 + 944 29467 + 945 71357 + 946 452103 + 947 381853 + 948 350749 + 949 33837 + 950 141039 + 951 39473 + 952 144683 + 953 52899 + 954 172499 + 955 518881 + 956 75897 + 957 2385 + 958 428299 + 959 494799 + 960 228181 + 961 408085 + 962 145427 + 963 287243 + 964 366685 + 965 220623 + 966 26827 + 967 117995 + 968 287045 + 969 245829 + 970 273409 + 971 151837 + 972 96073 + 973 70805 + 974 425149 + 975 153789 + 976 472299 + 977 488189 + 978 166709 + 979 43605 + 980 389917 + 981 43693 + 982 165147 + 983 125695 + 984 510797 + 985 474877 + 986 114777 + 987 352529 + 988 200923 + 989 266085 + 990 124811 + 991 450925 + 992 182643 + 993 319955 + 994 356675 + 995 134683 + 996 446687 + 997 373853 + 998 236239 + 999 331691 + 1000 82181 + 1001 150005 + 1002 340367 + 1003 472941 + 1004 106107 + 1005 116129 + 1006 116549 + 1007 100159 + 1008 97203 + 1009 324227 + 1010 19717 + 1011 18373 + 1012 378173 + 1013 406703 + 1014 156321 + 1015 42837 + 1016 407291 + 1017 514159 + 1018 74829 + 1019 144851 + 1020 138323 + 1021 111983 + 1022 233429 + 1023 168813 + 1024 9575 + 1025 269407 + 1026 493421 + 1027 192197 + 1028 459933 + 1029 74595 + 1030 233637 + 1031 185559 + 1032 414111 + 1033 418093 + 1034 307539 + 1035 24147 + 1036 347063 + 1037 422451 + 1038 21139 + 1039 152563 + 1040 328989 + 1041 109121 + 1042 117807 + 1043 385019 + 1044 208541 + 1045 323725 + 1046 234055 + 1047 221237 + 1048 231765 + 1049 152037 + 1050 320181 + 1051 219981 + 1052 518989 + 1053 389219 + 1054 290317 + 1055 312379 + 1056 403405 + 1057 507885 + 1058 498833 + 1059 329757 + 1060 74263 + 1061 224493 + 1062 260227 + 1063 481261 + 1064 419931 + 1065 440079 + 1066 305035 + 1067 206491 + 1068 287125 + 1069 1221 + 1070 198365 + 1071 505909 + 1072 383069 + 1073 513091 + 1074 452597 + 1075 483019 + 1076 24969 + 1077 499547 + 1078 41099 + 1079 124431 + 1080 44429 + 1081 311213 + 1082 32285 + 1083 7727 + 1084 136995 + 1085 241949 + 1086 241333 + 1087 165341 + 1088 190123 + 1089 38877 + 1090 181819 + 1091 503485 + 1092 354267 + 1093 212459 + 1094 355941 + 1095 253627 + 1096 242555 + 1097 326571 + 1098 343469 + 1099 342887 + 1100 52877 + 1101 56123 + 1102 480005 + 1103 136619 + 1104 12945 + 1105 29669 + 1106 380709 + 1107 235693 + 1108 22691 + 1109 43191 + 1110 135661 + 1111 27635 + 1112 307443 + 1113 225885 + 1114 265003 + 1115 133183 + 1116 274369 + 1117 434699 + 1118 161229 + 1119 484283 + 1120 363693 + 1121 505779 + 1122 208033 + 1123 374109 + 1124 433107 + 1125 381805 + 1126 275101 + 1127 417613 + 1128 401921 + 1129 55107 + 1130 425037 + 1131 521857 + 1132 260701 + 1133 402307 + 1134 42587 + 1135 59475 + 1136 271851 + 1137 53453 + 1138 382947 + 1139 234899 + 1140 237259 + 1141 103075 + 1142 310843 + 1143 345373 + 1144 148397 + 1145 349217 + 1146 503419 + 1147 63357 + 1148 6611 + 1149 523429 + 1150 461491 + 1151 19499 + 1152 439379 + 1153 42925 + 1154 218915 + 1155 147571 + 1156 234205 + 1157 349457 + 1158 356795 + 1159 448197 + 1160 503331 + 1161 237789 + 1162 13091 + 1163 258825 + 1164 483437 + 1165 155115 + 1166 490443 + 1167 117725 + 1168 367005 + 1169 129761 + 1170 394445 + 1171 443749 + 1172 156709 + 1173 265315 + 1174 254821 + 1175 361187 + 1176 441331 + 1177 61563 + 1178 416729 + 1179 505253 + 1180 129357 + 1181 284931 + 1182 176765 + 1183 420515 + 1184 207563 + 1185 467093 + 1186 124275 + 1187 402669 + 1188 147117 + 1189 108079 + 1190 150515 + 1191 230897 + 1192 413805 + 1193 233897 + 1194 388931 + 1195 366653 + 1196 32569 + 1197 346229 + 1198 229537 + 1199 64109 + 1200 64613 + 1201 441859 + 1202 13955 + 1203 411549 + 1204 92617 + 1205 475177 + 1206 349443 + 1207 164085 + 1208 482893 + 1209 129979 + 1210 141101 + 1211 404193 + 1212 47375 + 1213 403469 + 1214 100021 + 1215 419637 + 1216 414429 + 1217 326277 + 1218 267867 + 1219 277579 + 1220 375925 + 1221 208753 + 1222 316523 + 1223 189323 + 1224 379107 + 1225 166389 + 1226 207189 + 1227 208701 + 1228 307039 + 1229 228427 + 1230 407965 + 1231 120277 + 1232 489683 + 1233 418765 + 1234 406531 + 1235 319661 + 1236 334415 + 1237 162945 + 1238 307177 + 1239 478021 + 1240 446339 + 1241 99133 + 1242 21165 + 1243 5005 + 1244 322907 + 1245 302495 + 1246 74203 + 1247 210133 + 1248 394363 + 1249 410529 + 1250 35211 + 1251 247301 + 1252 366349 + 1253 236501 + 1254 353205 + 1255 250285 + 1256 282101 + 1257 23219 + 1258 198605 + 1259 21891 + 1260 523695 + 1261 214659 + 1262 416235 + 1263 121597 + 1264 86325 + 1265 205155 + 1266 304405 + 1267 152515 + 1268 380939 + 1269 302683 + 1270 411717 + 1271 436993 + 1272 341875 + 1273 1315 + 1274 30667 + 1275 98363 + 1276 361457 + 1277 486659 + 1278 314139 + 1279 273669 + 1280 143987 + 1281 301379 + 1282 306061 + 1283 243117 + 1284 304173 + 1285 48031 + 1286 513457 + 1287 345965 + 1288 343075 + 1289 237803 + 1290 342593 + 1291 281485 + 1292 344467 + 1293 345121 + 1294 234195 + 1295 3681 + 1296 121005 + 1297 161517 + 1298 505793 + 1299 217137 + 1300 188771 + 1301 498275 + 1302 45499 + 1303 463565 + 1304 101923 + 1305 6063 + 1306 90565 + 1307 47531 + 1308 515491 + 1309 112697 + 1310 127405 + 1311 374309 + 1312 14621 + 1313 482255 + 1314 64333 + 1315 5649 + 1316 269973 + 1317 48063 + 1318 89573 + 1319 489445 + 1320 469029 + 1321 154853 + 1322 68333 + 1323 377307 + 1324 170831 + 1325 327421 + 1326 43505 + 1327 163939 + 1328 327765 + 1329 132115 + 1330 496643 + 1331 7893 + 1332 187469 + 1333 322597 + 1334 435871 + 1335 287147 + 1336 340017 + 1337 153539 + 1338 497955 + 1339 215477 + 1340 345125 + 1341 477475 + 1342 48897 + 1343 181587 + 1344 439025 + 1345 117091 + 1346 403839 + 1347 427133 + 1348 2211 + 1349 169621 + 1350 154165 + 1351 18173 + 1352 91755 + 1353 21613 + 1354 207109 + 1355 476459 + 1356 285123 + 1357 226867 + 1358 469373 + 1359 416685 + 1360 319995 + 1361 444763 + 1362 452337 + 1363 389803 + 1364 168829 + 1365 509811 + 1366 274933 + 1367 236395 + 1368 472687 + 1369 357957 + 1370 332061 + 1371 446555 + 1372 140573 + 1373 275349 + 1374 220549 + 1375 306051 + 1376 93169 + 1377 404795 + 1378 71931 + 1379 191253 + 1380 352291 + 1381 255475 + 1382 498625 + 1383 488063 + 1384 83551 + 1385 158525 + 1386 462577 + 1387 466549 + 1388 373515 + 1389 447037 + 1390 204595 + 1391 441075 + 1392 362579 + 1393 269123 + 1394 21163 + 1395 461777 + 1396 292941 + 1397 311131 + 1398 329301 + 1399 10691 + 1400 348189 + 1401 403579 + 1402 383453 + 1403 124397 + 1404 467219 + 1405 419867 + 1406 323827 + 1407 77835 + 1408 157309 + 1409 523419 + 1410 381363 + 1411 115043 + 1412 52157 + 1413 16899 + 1414 324323 + 1415 265253 + 1416 274787 + 1417 261491 + 1418 393469 + 1419 229869 + 1420 154975 + 1421 259165 + 1422 509405 + 1423 347163 + 1424 133537 + 1425 77361 + 1426 280525 + 1427 382813 + 1428 407763 + 1429 68429 + 1430 32799 + 1431 422173 + 1432 98509 + 1433 154621 + 1434 507157 + 1435 521853 + 1436 424069 + 1437 454059 + 1438 235077 + 1439 105349 + 1440 264563 + 1441 171333 + 1442 144701 + 1443 420677 + 1444 479755 + 1445 224611 + 1446 11179 + 1447 150675 + 1448 258351 + 1449 258853 + 1450 264927 + 1451 207205 + 1452 185997 + 1453 84885 + 1454 342901 + 1455 470053 + 1456 263731 + 1457 293269 + 1458 81197 + 1459 465109 + 1460 354291 + 1461 394283 + 1462 514419 + 1463 108411 + 1464 33387 + 1465 53845 + 1466 216833 + 1467 123075 + 1468 231821 + 1469 88879 + 1470 288187 + 1471 315875 + 1472 354701 + 1473 501901 + 1474 270949 + 1475 367403 + 1476 278227 + 1477 184485 + 1478 399339 + 1479 257181 + 1480 298171 + 1481 289883 + 1482 389349 + 1483 404785 + 1484 183675 + 1485 3005 + 1486 283327 + 1487 381717 + 1488 195581 + 1489 269469 + 1490 95341 + 1491 65457 + 1492 277021 + 1493 371867 + 1494 361811 + 1495 387883 + 1496 280579 + 1497 166021 + 1498 347293 + 1499 469869 + 1500 177855 + 1501 482653 + 1502 404433 + 1503 112003 + 1504 76787 + 1505 242561 + 1506 41917 + 1507 513573 + 1508 410607 + 1509 500461 + 1510 137707 + 1511 264475 + 1512 163901 + 1513 167853 + 1514 480069 + 1515 87563 + 1516 202511 + 1517 375269 + 1518 504779 + 1519 72187 + 1520 182987 + 1521 376339 + 1522 120269 + 1523 322453 + 1524 37443 + 1525 482387 + 1526 158051 + 1527 395211 + 1528 484595 + 1529 347475 + 1530 111411 + 1531 146783 + 1532 240333 + 1533 476339 + 1534 203791 + 1535 475389 + 1536 270117 + 1537 248933 + 1538 352515 + 1539 366523 + 1540 134491 + 1541 285891 + 1542 296893 + 1543 259675 + 1544 372291 + 1545 57583 + 1546 211475 + 1547 390397 + 1548 273533 + 1549 124243 + 1550 290693 + 1551 111749 + 1552 226479 + 1553 75923 + 1554 275011 + 1555 214413 + 1556 270591 + 1557 199019 + 1558 189771 + 1559 158291 + 1560 508717 + 1561 286051 + 1562 166469 + 1563 368909 + 1564 107091 + 1565 337967 + 1566 379395 + 1567 168205 + 1568 199645 + 1569 416989 + 1570 376613 + 1571 140971 + 1572 150091 + 1573 471723 + 1574 274915 + 1575 253163 + 1576 486405 + 1577 277755 + 1578 59041 + 1579 132509 + 1580 87709 + 1581 82115 + 1582 463541 + 1583 49059 + 1584 447421 + 1585 42109 + 1586 161117 + 1587 199173 + 1588 444245 + 1589 364747 + 1590 402571 + 1591 262893 + 1592 497183 + 1593 190179 + 1594 235085 + 1595 263619 + 1596 514661 + 1597 33451 + 1598 224643 + 1599 281905 + 1600 304741 + 1601 85451 + 1602 511101 + 1603 352811 + 1604 71299 + 1605 428749 + 1606 287821 + 1607 415123 + 1608 405275 + 1609 488083 + 1610 61067 + 1611 329715 + 1612 466893 + 1613 95953 + 1614 500005 + 1615 242733 + 1616 26163 + 1617 368701 + 1618 88771 + 1619 416659 + 1620 265139 + 1621 295005 + 1622 386331 + 1623 366893 + 1624 65989 + 1625 142917 + 1626 259795 + 1627 5075 + 1628 291661 + 1629 452651 + 1630 158965 + 1631 474333 + 1632 346235 + 1633 227859 + 1634 10603 + 1635 119027 + 1636 415811 + 1637 159725 + 1638 430289 + 1639 398877 + 1640 466885 + 1641 129803 + 1642 129795 + 1643 385069 + 1644 370941 + 1645 73315 + 1646 438995 + 1647 335259 + 1648 85915 + 1649 57091 + 1650 79811 + 1651 68653 + 1652 282565 + 1653 412155 + 1654 443701 + 1655 67197 + 1656 435237 + 1657 160703 + 1658 28413 + 1659 298645 + 1660 230563 + 1661 219189 + 1662 382241 + 1663 517723 + 1664 49765 + 1665 278901 + 1666 218085 + 1667 468173 + 1668 489837 + 1669 368773 + 1670 18187 + 1671 380845 + 1672 363021 + 1673 409221 + 1674 481411 + 1675 440319 + 1676 339163 + 1677 509093 + 1678 225949 + 1679 381443 + 1680 200539 + 1681 331219 + 1682 6591 + 1683 105153 + 1684 412063 + 1685 451213 + 1686 236451 + 1687 33357 + 1688 36085 + 1689 422587 + 1690 415227 + 1691 58939 + 1692 176013 + 1693 460941 + 1694 464061 + 1695 97669 + 1696 84285 + 1697 395011 + 1698 297757 + 1699 115315 + 1700 346469 + 1701 507731 + 1702 257909 + 1703 465541 + 1704 277299 + 1705 92269 + 1706 337901 + 1707 224467 + 1708 196883 + 1709 77571 + 1710 180645 + 1711 454901 + 1712 521203 + 1713 47845 + 1714 123221 + 1715 411677 + 1716 385125 + 1717 36923 + 1718 401693 + 1719 515901 + 1720 391613 + 1721 425685 + 1722 504227 + 1723 139585 + 1724 278767 + 1725 506381 + 1726 111295 + 1727 371613 + 1728 407131 + 1729 15715 + 1730 124989 + 1731 72645 + 1732 461691 + 1733 319573 + 1734 512299 + 1735 120155 + 1736 20197 + 1737 360269 + 1738 79317 + 1739 87957 + 1740 163307 + 1741 381571 + 1742 132229 + 1743 149685 + 1744 130499 + 1745 261749 + 1746 100051 + 1747 436667 + 1748 2917 + 1749 26293 + 1750 84893 + 1751 42803 + 1752 372333 + 1753 231967 + 1754 317825 + 1755 241869 + 1756 10149 + 1757 499037 + 1758 312317 + 1759 314101 + 1760 78387 + 1761 254227 + 1762 487555 + 1763 48445 + 1764 424333 + 1765 136659 + 1766 220477 + 1767 387149 + 1768 318869 + 1769 368941 + 1770 182501 + 1771 118915 + 1772 510803 + 1773 135317 + 1774 340117 + 1775 500499 + 1776 458805 + 1777 362049 + 1778 408197 + 1779 334645 + 1780 171003 + 1781 164495 + 1782 195051 + 1783 143027 + 1784 328573 + 1785 385397 + 1786 208621 + 1787 330211 + 1788 145701 + 1789 306637 + 1790 306611 + 1791 238655 + 1792 198205 + 1793 299333 + 1794 475237 + 1795 179637 + 1796 347123 + 1797 68051 + 1798 336995 + 1799 34785 + 1800 198723 + 1801 202251 + 1802 452611 + 1803 106181 + 1804 413445 + 1805 366429 + 1806 144621 + 1807 36379 + 1808 449059 + 1809 343157 + 1810 450331 + 1811 265875 + 1812 428235 + 1813 45773 + 1814 38275 + 1815 64717 + 1816 199291 + 1817 113595 + 1818 76571 + 1819 251621 + 1820 310477 + 1821 200693 + 1822 388421 + 1823 299059 + 1824 491741 + 1825 282603 + 1826 169507 + 1827 372421 + 1828 128123 + 1829 407389 + 1830 484037 + 1831 127371 + 1832 48589 + 1833 263131 + 1834 446917 + 1835 290525 + 1836 212035 + 1837 53085 + 1838 369549 + 1839 411611 + 1840 457429 + 1841 456147 + 1842 456595 + 1843 330365 + 1844 320949 + 1845 441491 + 1846 314693 + 1847 253219 + 1848 74437 + 1849 403091 + 1850 437179 + 1851 380403 + 1852 266269 + 1853 264787 + 1854 260379 + 1855 456453 + 1856 378075 + 1857 253229 + 1858 90333 + 1859 205205 + 1860 392803 + 1861 288283 + 1862 371563 + 1863 88829 + 1864 3493 + 1865 368045 + 1866 338555 + 1867 370691 + 1868 179027 + 1869 474109 + 1870 468325 + 1871 107917 + 1872 484701 + 1873 507925 + 1874 35925 + 1875 109843 + 1876 113899 + 1877 119267 + 1878 299867 + 1879 133547 + 1880 425005 + 1881 494109 + 1882 405989 + 1883 134595 + 1884 323413 + 1885 120077 + 1886 496693 + 1887 325659 + 1888 133797 + 1889 99427 + 1890 99173 + 1891 256261 + 1892 102211 + 1893 136499 + 1894 253003 + 1895 269507 + 1896 289997 + 1897 222627 + 1898 493811 + 1899 18259 + 1900 39973 + 1901 72405 + 1902 202973 + 1903 132643 + 1904 89797 + 1905 213747 + 1906 335173 + 1907 44611 + 1908 95115 + 1909 323189 + 1910 398269 + 1911 56691 + 1912 17645 + 1913 14043 + 1914 259301 + 1915 469195 + 1916 3453 + 1917 415443 + 1918 49203 + 1919 78957 + 1920 12517 + 1921 485707 + 1922 33435 + 1923 56891 + 1924 204237 + 1925 459899 + 1926 339189 + 1927 69997 + 1928 242501 + 1929 456955 + 1930 343355 + 1931 115203 + 1932 419373 + 1933 504251 + 1934 75315 + 1935 66483 + 1936 190587 + 1937 443235 + 1938 518691 + 1939 504397 + 1940 397563 + 1941 79397 + 1942 225349 + 1943 40941 + 1944 288685 + 1945 164749 + 1946 10341 + 1947 448605 + 1948 41699 + 1949 345365 + 1950 340229 + 1951 173099 + 1952 202715 + 1953 169469 + 1954 476229 + 1955 117907 + 1956 416381 + 1957 16859 + 1958 514435 + 1959 450035 + 1960 500869 + 1961 200813 + 1962 209141 + 1963 233493 + 1964 264195 + 1965 454251 + 1966 166533 + 1967 53347 + 1968 401379 + 1969 332499 + 1970 200715 + 1971 436781 + 1972 148917 + 1973 252765 + 1974 493595 + 1975 160661 + 1976 370011 + 1977 398509 + 1978 432835 + 1979 28877 + 1980 185563 + 1981 65051 + 1982 59109 + 1983 295491 + 1984 445341 + 1985 215675 + 1986 193893 + 1987 472067 + 1988 109475 + 1989 102181 + 1990 518157 + 1991 243965 + 1992 302691 + 1993 93605 + 1994 120429 + 1995 39173 + 1996 521365 + 1997 70995 + 1998 268451 + 1999 48931 + 2000 27803 + 2001 269587 + 2002 425285 + 2003 289827 + 2004 443989 + 2005 522915 + 2006 363685 + 2007 123669 + 2008 5133 + 2009 406109 + 2010 29659 + 2011 318669 + 2012 482035 + 2013 511381 + 2014 156597 + 2015 105763 + 2016 161067 + 2017 341181 + 2018 445043 + 2019 132011 + 2020 17955 + 2021 204989 + 2022 37693 + 2023 333283 + 2024 522453 + 2025 45005 + 2026 33163 + 2027 39349 + 2028 371283 + 2029 379949 + 2030 474901 + 2031 445557 + 2032 68035 + 2033 108301 + 2034 261661 + 2035 109509 + 2036 358853 + 2037 134723 + 2038 321997 + 2039 41475 + 2040 60731 + 2041 519963 + 2042 343501 + 2043 197141 + 2044 227499 + 2045 347507 + 2046 138427 + 2047 338171 + 2048 412739 + 2049 145925 + 2050 256467 + 2051 386779 + 2052 422067 + 2053 333603 + 2054 28357 + 2055 485325 + 2056 246213 + 2057 107749 + 2058 4755 + 2059 251187 + 2060 135741 + 2061 372293 + 2062 108243 + 2063 270275 + 2064 117637 + 2065 209091 + 2066 438555 + 2067 501933 + 2068 37997 + 2069 301259 + 2070 497323 + 2071 57285 + 2072 459499 + 2073 487693 + 2074 164509 + 2075 248699 + 2076 459365 + 2077 283571 + 2078 510717 + 2079 252501 + 2080 182275 + 2081 15003 + 2082 361091 + 2083 417813 + 2084 471515 + 2085 223909 + 2086 40685 + 2087 47589 + 2088 458387 + 2089 493477 + 2090 249077 + 2091 451667 + 2092 463747 + 2093 145077 + 2094 464613 + 2095 83835 + 2096 237419 + 2097 138195 + 2098 402285 + 2099 60347 + 2100 443779 + 2101 336869 + 2102 99827 + 2103 452571 + 2104 209763 + 2105 81701 + 2106 258541 + 2107 117381 + 2108 172237 + 2109 184843 + 2110 71293 + 2111 237083 + 2112 15267 + 2113 355443 + 2114 178203 + 2115 334685 + 2116 405395 + 2117 369883 + 2118 195691 + 2119 222307 + 2120 387165 + 2121 314987 + 2122 301907 + 2123 136347 + 2124 4451 + 2125 145395 + 2126 364573 + 2127 109869 + 2128 508237 + 2129 163821 + 2130 94907 + 2131 465309 + 2132 158331 + 2133 403827 + 2134 161669 + 2135 181875 + 2136 449965 + 2137 134299 + 2138 128763 + 2139 52509 + 2140 502235 + 2141 5419 + 2142 336899 + 2143 56133 + 2144 174667 + 2145 481731 + 2146 168629 + 2147 20619 + 2148 309955 + 2149 158795 + 2150 296797 + 2151 273907 + 2152 442197 + 2153 179051 + 2154 154107 + 2155 156829 + 2156 42451 + 2157 179811 + 2158 207275 + 2159 95581 + 2160 281557 + 2161 515723 + 2162 401397 + 2163 230419 + 2164 435973 + 2165 448051 + 2166 321747 + 2167 45915 + 2168 175395 + 2169 310149 + 2170 190387 + 2171 33213 + 2172 402709 + 2173 125405 + 2174 483187 + 2175 138645 + 2176 430789 + 2177 46861 + 2178 455109 + 2179 193499 + 2180 53197 + 2181 189405 + 2182 513627 + 2183 69995 + 2184 9229 + 2185 414485 + 2186 284893 + 2187 41205 + 2188 240827 + 2189 165805 + 2190 455219 + 2191 63781 + 2192 513083 + 2193 126323 + 2194 36181 + 2195 335389 + 2196 446693 + 2197 63317 + 2198 43475 + 2199 7485 + 2200 360389 + 2201 220227 + 2202 483059 + 2203 347491 + 2204 304011 + 2205 43675 + 2206 103379 + 2207 53643 + 2208 517891 + 2209 134011 + 2210 382141 + 2211 72365 + 2212 83291 + 2213 487189 + 2214 314989 + 2215 362443 + 2216 319419 + 2217 282829 + 2218 167741 + 2219 137213 + 2220 497483 + 2221 440147 + 2222 487707 + 2223 86501 + 2224 297301 + 2225 110771 + 2226 312059 + 2227 129651 + 2228 410893 + 2229 86531 + 2230 65093 + 2231 327491 + 2232 84251 + 2233 78467 + 2234 140381 + 2235 382021 + 2236 42805 + 2237 171971 + 2238 96851 + 2239 101581 + 2240 369115 + 2241 41179 + 2242 429133 + 2243 327365 + 2244 439933 + 2245 164973 + 2246 278629 + 2247 437997 + 2248 419707 + 2249 161829 + 2250 21731 + 2251 17283 + 2252 32509 + 2253 221797 + 2254 228499 + 2255 29501 + 2256 321509 + 2257 231565 + 2258 485045 + 2259 424573 + 2260 511869 + 2261 474437 + 2262 172781 + 2263 321235 + 2264 9787 + 2265 18483 + 2266 492763 + 2267 116987 + 2268 283795 + 2269 83323 + 2270 225803 + 2271 142237 + 2272 503659 + 2273 97043 + 2274 365731 + 2275 234339 + 2276 9739 + 2277 174981 + 2278 89275 + 2279 344933 + 2280 432499 + 2281 312619 + 2282 372717 + 2283 501923 + 2284 185851 + 2285 247899 + 2286 483821 + 2287 427635 + 2288 137643 + 2289 312245 + 2290 162333 + 2291 220899 + 2292 482795 + 2293 224547 + 2294 146597 + 2295 319349 + 2296 244691 + 2297 204355 + 2298 25859 + 2299 308797 + 2300 51787 + 2301 263819 + 2302 230573 + 2303 25917 + 2304 480405 + 2305 324331 + 2306 347581 + 2307 410053 + 2308 167915 + 2309 227331 + 2310 330243 + 2311 517883 + 2312 46309 + 2313 474893 + 2314 365701 + 2315 28781 + 2316 140347 + 2317 445013 + 2318 290211 + 2319 417139 + 2320 459371 + 2321 59299 + 2322 439653 + 2323 314683 + 2324 442139 + 2325 196387 + 2326 221349 + 2327 461477 + 2328 22067 + 2329 87389 + 2330 178253 + 2331 300075 + 2332 413667 + 2333 345555 + 2334 310941 + 2335 261235 + 2336 434227 + 2337 340027 + 2338 430997 + 2339 482605 + 2340 341171 + 2341 316037 + 2342 385419 + 2343 200035 + 2344 243541 + 2345 29451 + 2346 213781 + 2347 102515 + 2348 35371 + 2349 476901 + 2350 439389 + 2351 336861 + 2352 85453 + 2353 28477 + 2354 187125 + 2355 450829 + 2356 6485 + 2357 193539 + 2358 440541 + 2359 384539 + 2360 396629 + 2361 306965 + 2362 41373 + 2363 276003 + 2364 459115 + 2365 143565 + 2366 54267 + 2367 231133 + 2368 205115 + 2369 190875 + 2370 277037 + 2371 11301 + 2372 317731 + 2373 215355 + 2374 283877 + 2375 282525 + 2376 61659 + 2377 380563 + 2378 238387 + 2379 129083 + 2380 496613 + 2381 381677 + 2382 380371 + 2383 374373 + 2384 202915 + 2385 377965 + 2386 217691 + 2387 296205 + 2388 379013 + 2389 520957 + 2390 59461 + 2391 75603 + 2392 366211 + 2393 1061 + 2394 255373 + 2395 47701 + 2396 425371 + 2397 301357 + 2398 220485 + 2399 187315 + 2400 21531 + 2401 143069 + 2402 164059 + 2403 313285 + 2404 176019 + 2405 495301 + 2406 442189 + 2407 130253 + 2408 41365 + 2409 469115 + 2410 357837 + 2411 367845 + 2412 47677 + 2413 235885 + 2414 48125 + 2415 451365 + 2416 496525 + 2417 149179 + 2418 470877 + 2419 1949 + 2420 517243 + 2421 434803 + 2422 325261 + 2423 174869 + 2424 180155 + 2425 311083 + 2426 480979 + 2427 246515 + 2428 461797 + 2429 162779 + 2430 3059 + 2431 242221 + 2432 312579 + 2433 172165 + 2434 437821 + 2435 61701 + 2436 75949 + 2437 356389 + 2438 179389 + 2439 81979 + 2440 162405 + 2441 492621 + 2442 65427 + 2443 194437 + 2444 301653 + 2445 39731 + 2446 71043 + 2447 508219 + 2448 63147 + 2449 219427 + 2450 403619 + 2451 449765 + 2452 398171 + 2453 489221 + 2454 254909 + 2455 68147 + 2456 91749 + 2457 355859 + 2458 245157 + 2459 83163 + 2460 275565 + 2461 88469 + 2462 103027 + 2463 11171 + 2464 119963 + 2465 476045 + 2466 511301 + 2467 156221 + 2468 219 + 2469 398675 + 2470 294587 + 2471 267069 + 2472 56677 + 2473 395437 + 2474 343995 + 2475 491901 + 2476 402429 + 2477 93197 + 2478 88325 + 2479 22893 + 2480 224283 + 2481 483541 + 2482 149491 + 2483 307101 + 2484 304605 + 2485 281835 + 2486 69509 + 2487 19419 + 2488 51501 + 2489 458659 + 2490 174021 + 2491 455939 + 2492 335501 + 2493 105637 + 2494 13893 + 2495 21773 + 2496 505965 + 2497 448379 + 2498 435277 + 2499 408371 + 2500 122085 + 2501 170275 + 2502 389925 + 2503 146963 + 2504 296059 + 2505 404867 + 2506 66627 + 2507 220315 + 2508 400941 + 2509 227013 + 2510 458003 + 2511 372573 + 2512 320923 + 2513 225299 + 2514 46853 + 2515 170611 + 2516 278299 + 2517 365269 + 2518 355675 + 2519 205357 + 2520 136875 + 2521 235499 + 2522 144027 + 2523 200253 + 2524 125491 + 2525 243739 + 2526 193109 + 2527 79187 + 2528 230851 + 2529 231907 + 2530 407483 + 2531 214131 + 2532 7685 + 2533 270781 + 2534 202421 + 2535 169549 + 2536 22267 + 2537 40053 + 2538 58179 + 2539 182355 + 2540 335813 + 2541 521787 + 2542 225459 + 2543 151907 + 2544 264435 + 2545 204197 + 2546 235925 + 2547 228379 + 2548 98477 + 2549 450885 + 2550 449277 + 2551 326851 + 2552 23717 + 2553 308237 + 2554 460589 + 2555 489509 + 2556 309781 + 2557 280765 + 2558 436357 + 2559 78125 + 2560 292453 + 2561 412019 + 2562 427253 + 2563 236779 + 2564 36973 + 2565 444707 + 2566 445333 + 2567 162661 + 2568 338877 + 2569 511877 + 2570 50179 + 2571 396109 + 2572 142299 + 2573 352699 + 2574 326765 + 2575 144603 + 2576 420387 + 2577 50483 + 2578 138509 + 2579 238949 + 2580 117531 + 2581 353619 + 2582 117293 + 2583 379557 + 2584 354467 + 2585 270485 + 2586 250069 + 2587 242893 + 2588 155747 + 2589 190443 + 2590 289885 + 2591 355029 + 2592 139357 + 2593 81579 + 2594 504947 + 2595 291525 + 2596 73101 + 2597 422139 + 2598 484763 + 2599 302157 + 2600 493349 + 2601 481773 + 2602 290757 + 2603 149051 + 2604 455293 + 2605 70331 + 2606 359875 + 2607 185805 + 2608 380667 + 2609 36419 + 2610 331461 + 2611 440685 + 2612 460419 + 2613 478709 + 2614 458995 + 2615 85429 + 2616 434195 + 2617 251875 + 2618 368869 + 2619 372909 + 2620 173221 + 2621 241067 + 2622 71667 + 2623 337989 + 2624 446899 + 2625 22661 + 2626 297315 + 2627 348371 + 2628 101339 + 2629 37315 + 2630 505371 + 2631 294445 + 2632 475811 + 2633 103643 + 2634 355093 + 2635 392179 + 2636 428475 + 2637 152085 + 2638 286237 + 2639 301219 + 2640 208101 + 2641 1173 + 2642 405795 + 2643 340885 + 2644 97075 + 2645 72101 + 2646 263013 + 2647 402909 + 2648 245011 + 2649 223917 + 2650 165211 + 2651 259045 + 2652 261123 + 2653 219259 + 2654 55923 + 2655 520597 + 2656 24205 + 2657 508571 + 2658 457029 + 2659 403565 + 2660 119501 + 2661 268795 + 2662 58483 + 2663 145387 + 2664 358875 + 2665 83 + 2666 29891 + 2667 344379 + 2668 303949 + 2669 260003 + 2670 432187 + 2671 260995 + 2672 287475 + 2673 479685 + 2674 24877 + 2675 346715 + 2676 111317 + 2677 331677 + 2678 247595 + 2679 208747 + 2680 472131 + 2681 334165 + 2682 102731 + 2683 284451 + 2684 294627 + 2685 202509 + 2686 498571 + 2687 179611 + 2688 336435 + 2689 92869 + 2690 240899 + 2691 451971 + 2692 272877 + 2693 54349 + 2694 48891 + 2695 435157 + 2696 258979 + 2697 241413 + 2698 120557 + 2699 132261 + 2700 102845 + 2701 428867 + 2702 57739 + 2703 82139 + 2704 348717 + 2705 512573 + 2706 182099 + 2707 173019 + 2708 521109 + 2709 164493 + 2710 206171 + 2711 518499 + 2712 468549 + 2713 521533 + 2714 206053 + 2715 447837 + 2716 108365 + 2717 268219 + 2718 186501 + 2719 348965 + 2720 278557 + 2721 518741 + 2722 298525 + 2723 126523 + 2724 72909 + 2725 146667 + 2726 241373 + 2727 426651 + 2728 241773 + 2729 12309 + 2730 77987 + 2731 385389 + 2732 314355 + 2733 19611 + 2734 15741 + 2735 379355 + 2736 386347 + 2737 391579 + 2738 14355 + 2739 129557 + 2740 518333 + 2741 422373 + 2742 391853 + 2743 477125 + 2744 280235 + 2745 193651 + 2746 213499 + 2747 147699 + 2748 509859 + 2749 275853 + 2750 399499 + 2751 63173 + 2752 374995 + 2753 358251 + 2754 470819 + 2755 243307 + 2756 401779 + 2757 303717 + 2758 249011 + 2759 74875 + 2760 216333 + 2761 73053 + 2762 125787 + 2763 275603 + 2764 300181 + 2765 438043 + 2766 388163 + 2767 228813 + 2768 9915 + 2769 167037 + 2770 415621 + 2771 159917 + 2772 80741 + 2773 1747 + 2774 288483 + 2775 198917 + 2776 490221 + 2777 123093 + 2778 242795 + 2779 250211 + 2780 236541 + 2781 42021 + 2782 277811 + 2783 157029 + 2784 79491 + 2785 232773 + 2786 314715 + 2787 471123 + 2788 522685 + 2789 115483 + 2790 20317 + 2791 51907 + 2792 196155 + 2793 191723 + 2794 244813 + 2795 267483 + 2796 308691 + 2797 392773 + 2798 376107 + 2799 215677 + 2800 342259 + 2801 152619 + 2802 472667 + 2803 215261 + 2804 434043 + 2805 279155 + 2806 498499 + 2807 157445 + 2808 267059 + 2809 117077 + 2810 515805 + 2811 34837 + 2812 390237 + 2813 465549 + 2814 263707 + 2815 437363 + 2816 38299 + 2817 292923 + 2818 432019 + 2819 458155 + 2820 430555 + 2821 297235 + 2822 310813 + 2823 468597 + 2824 304565 + 2825 414381 + 2826 39005 + 2827 483643 + 2828 190445 + 2829 97539 + 2830 274763 + 2831 448363 + 2832 248845 + 2833 51875 + 2834 44421 + 2835 315021 + 2836 239587 + 2837 158203 + 2838 201883 + 2839 17341 + 2840 204627 + 2841 357733 + 2842 101611 + 2843 8971 + 2844 91285 + 2845 255245 + 2846 252067 + 2847 192533 + 2848 430925 + 2849 293317 + 2850 3533 + 2851 402749 + 2852 316997 + 2853 68907 + 2854 251619 + 2855 478555 + 2856 291555 + 2857 250773 + 2858 121819 + 2859 377581 + 2860 493923 + 2861 378021 + 2862 387981 + 2863 179243 + 2864 59171 + 2865 124133 + 2866 335531 + 2867 219619 + 2868 30963 + 2869 210235 + 2870 219669 + 2871 380829 + 2872 473499 + 2873 209309 + 2874 180515 + 2875 287963 + 2876 15507 + 2877 153659 + 2878 441549 + 2879 384845 + 2880 172293 + 2881 486477 + 2882 296443 + 2883 462235 + 2884 426659 + 2885 213891 + 2886 423531 + 2887 420315 + 2888 28371 + 2889 45613 + 2890 189891 + 2891 511555 + 2892 55419 + 2893 349611 + 2894 270829 + 2895 407685 + 2896 129477 + 2897 357373 + 2898 123507 + 2899 98789 + 2900 68131 + 2901 134803 + 2902 179803 + 2903 20229 + 2904 236531 + 2905 23363 + 2906 79147 + 2907 487213 + 2908 274747 + 2909 462059 + 2910 417357 + 2911 189083 + 2912 208803 + 2913 302235 + 2914 124819 + 2915 273293 + 2916 102907 + 2917 421203 + 2918 298869 + 2919 450709 + 2920 499075 + 2921 395101 + 2922 519515 + 2923 124739 + 2924 480909 + 2925 374571 + 2926 439131 + 2927 303347 + 2928 197403 + 2929 515755 + 2930 440339 + 2931 138347 + 2932 981 + 2933 509731 + 2934 417965 + 2935 154445 + 2936 57365 + 2937 420195 + 2938 148331 + 2939 282339 + 2940 377365 + 2941 300493 + 2942 61883 + 2943 170691 + 2944 169339 + 2945 183259 + 2946 286771 + 2947 21093 + 2948 227299 + 2949 207331 + 2950 285411 + 2951 410075 + 2952 143035 + 2953 333069 + 2954 395181 + 2955 122205 + 2956 62683 + 2957 488141 + 2958 221883 + 2959 304195 + 2960 23979 + 2961 465715 + 2962 12347 + 2963 393477 + 2964 461443 + 2965 312891 + 2966 349459 + 2967 391387 + 2968 60493 + 2969 472693 + 2970 508349 + 2971 417003 + 2972 433299 + 2973 394597 + 2974 131363 + 2975 433765 + 2976 191091 + 2977 180539 + 2978 405371 + 2979 489885 + 2980 291541 + 2981 360355 + 2982 46941 + 2983 502939 + 2984 281971 + 2985 235299 + 2986 35333 + 2987 126067 + 2988 268139 + 2989 254051 + 2990 33899 + 2991 352597 + 2992 138859 + 2993 359331 + 2994 459819 + 2995 108787 + 2996 189093 + 2997 151675 + 2998 121203 + 2999 258027 + 3000 211789 + 3001 142875 + 3002 127331 + 3003 287973 + 3004 185683 + 3005 311469 + 3006 402843 + 3007 176803 + 3008 337061 + 3009 404493 + 3010 200955 + 3011 398803 + 3012 173573 + 3013 257763 + 3014 227219 + 3015 75109 + 3016 323101 + 3017 10803 + 3018 245051 + 3019 449835 + 3020 294611 + 3021 440795 + 3022 59605 + 3023 443123 + 3024 359995 + 3025 412877 + 3026 279267 + 3027 21541 + 3028 407501 + 3029 16205 + 3030 241221 + 3031 111299 + 3032 418667 + 3033 287525 + 3034 329437 + 3035 73565 + 3036 371947 + 3037 303325 + 3038 205029 + 3039 281715 + 3040 243653 + 3041 210851 + 3042 100011 + 3043 236437 + 3044 123827 + 3045 500861 + 3046 417643 + 3047 246043 + 3048 422845 + 3049 305477 + 3050 420517 + 3051 488269 + 3052 379901 + 3053 186107 + 3054 225523 + 3055 373333 + 3056 60827 + 3057 16403 + 3058 234893 + 3059 25643 + 3060 140563 + 3061 381797 + 3062 286365 + 3063 102421 + 3064 264163 + 3065 245475 + 3066 250171 + 3067 496989 + 3068 142635 + 3069 126181 + 3070 110963 + 3071 16109 + 3072 173627 + 3073 165251 + 3074 214221 + 3075 430485 + 3076 258693 + 3077 144573 + 3078 247931 + 3079 352477 + 3080 227195 + 3081 80883 + 3082 339301 + 3083 349299 + 3084 62981 + 3085 219621 + 3086 497501 + 3087 129813 + 3088 256483 + 3089 472221 + 3090 60323 + 3091 314829 + 3092 315733 + 3093 296101 + 3094 59451 + 3095 440211 + 3096 457581 + 3097 324005 + 3098 338013 + 3099 137659 + 3100 288851 + 3101 369085 + 3102 247003 + 3103 49837 + 3104 203739 + 3105 311123 + 3106 343357 + 3107 287253 + 3108 390293 + 3109 129971 + 3110 461275 + 3111 434477 + 3112 124251 + 3113 154581 + 3114 51101 + 3115 228459 + 3116 85773 + 3117 120219 + 3118 368349 + 3119 46691 + 3120 201221 + 3121 513323 + 3122 301107 + 3123 17139 + 3124 9829 + 3125 266979 + 3126 352005 + 3127 523085 + 3128 335419 + 3129 2723 + 3130 151701 + 3131 35611 + 3132 32141 + 3133 452051 + 3134 469347 + 3135 186581 + 3136 55275 + 3137 104611 + 3138 363365 + 3139 239331 + 3140 504069 + 3141 190093 + 3142 127197 + 3143 320141 + 3144 326299 + 3145 264981 + 3146 278869 + 3147 244195 + 3148 384205 + 3149 264789 + 3150 405899 + 3151 38003 + 3152 450053 + 3153 514227 + 3154 326341 + 3155 249139 + 3156 47829 + 3157 90205 + 3158 326549 + 3159 333419 + 3160 101309 + 3161 449957 + 3162 343451 + 3163 350771 + 3164 408259 + 3165 315451 + 3166 523701 + 3167 307885 + 3168 93917 + 3169 308443 + 3170 289211 + 3171 297699 + 3172 34683 + 3173 163597 + 3174 372061 + 3175 122565 + 3176 246605 + 3177 498611 + 3178 480091 + 3179 437595 + 3180 91805 + 3181 433195 + 3182 340877 + 3183 382523 + 3184 249107 + 3185 98083 + 3186 60565 + 3187 340453 + 3188 176291 + 3189 285925 + 3190 380819 + 3191 417619 + 3192 353963 + 3193 118635 + 3194 400149 + 3195 227347 + 3196 406653 + 3197 463717 + 3198 494387 + 3199 491995 + 3200 300771 + 3201 276851 + 3202 25243 + 3203 77803 + 3204 488435 + 3205 294157 + 3206 155323 + 3207 206123 + 3208 195043 + 3209 386949 + 3210 190557 + 3211 290845 + 3212 501547 + 3213 332907 + 3214 460899 + 3215 411021 + 3216 256517 + 3217 39789 + 3218 422501 + 3219 350883 + 3220 9179 + 3221 507603 + 3222 308067 + 3223 267045 + 3224 82483 + 3225 364627 + 3226 6395 + 3227 401629 + 3228 308181 + 3229 241813 + 3230 410197 + 3231 514389 + 3232 393165 + 3233 50755 + 3234 51845 + 3235 278115 + 3236 357147 + 3237 358157 + 3238 37317 + 3239 115709 + 3240 460485 + 3241 119629 + 3242 245395 + 3243 35077 + 3244 66213 + 3245 345949 + 3246 445205 + 3247 339037 + 3248 117645 + 3249 248667 + 3250 280285 + 3251 444771 + 3252 272795 + 3253 2995 + 3254 471765 + 3255 220763 + 3256 326037 + 3257 14227 + 3258 393349 + 3259 175461 + 3260 196323 + 3261 230083 + 3262 176187 + 3263 154419 + 3264 226115 + 3265 437355 + 3266 379387 + 3267 101531 + 3268 506813 + 3269 256371 + 3270 364987 + 3271 326669 + 3272 252579 + 3273 260835 + 3274 389595 + 3275 147477 + 3276 60883 + 3277 174613 + 3278 505171 + 3279 182755 + 3280 261531 + 3281 489565 + 3282 155307 + 3283 60685 + 3284 461285 + 3285 475789 + 3286 39133 + 3287 461781 + 3288 478059 + 3289 288595 + 3290 221021 + 3291 432581 + 3292 365797 + 3293 214195 + 3294 29581 + 3295 174805 + 3296 25253 + 3297 349403 + 3298 96819 + 3299 414323 + 3300 56555 + 3301 76091 + 3302 186611 + 3303 430293 + 3304 28523 + 3305 55005 + 3306 335517 + 3307 237285 + 3308 486125 + 3309 225947 + 3310 1179 + 3311 15565 + 3312 10219 + 3313 60843 + 3314 254691 + 3315 257869 + 3316 152683 + 3317 510051 + 3318 212731 + 3319 10181 + 3320 233187 + 3321 303133 + 3322 123981 + 3323 372859 + 3324 40029 + 3325 446139 + 3326 38861 + 3327 260437 + 3328 176349 + 3329 50139 + 3330 377507 + 3331 281189 + 3332 456261 + 3333 416883 + 3334 398515 + 3335 502213 + 3336 283965 + 3337 311203 + 3338 439595 + 3339 153195 + 3340 520029 + 3341 422405 + 3342 273949 + 3343 17243 + 3344 332787 + 3345 11499 + 3346 228869 + 3347 62157 + 3348 176483 + 3349 288091 + 3350 44685 + 3351 512475 + 3352 54995 + 3353 6011 + 3354 299885 + 3355 279595 + 3356 436243 + 3357 410843 + 3358 178861 + 3359 447717 + 3360 73619 + 3361 63739 + 3362 307867 + 3363 417501 + 3364 2197 + 3365 214755 + 3366 523059 + 3367 120619 + 3368 513131 + 3369 111155 + 3370 187789 + 3371 228509 + 3372 1435 + 3373 317099 + 3374 365299 + 3375 466459 + 3376 78045 + 3377 502435 + 3378 420083 + 3379 88939 + 3380 419131 + 3381 242403 + 3382 396403 + 3383 132395 + 3384 283803 + 3385 340061 + 3386 122717 + 3387 492467 + 3388 448827 + 3389 39701 + 3390 514461 + 3391 362949 + 3392 295091 + 3393 347677 + 3394 289627 + 3395 195355 + 3396 338765 + 3397 196549 + 3398 308099 + 3399 394757 + 3400 185277 + 3401 422259 + 3402 361851 + 3403 215061 + 3404 18077 + 3405 288941 + 3406 27605 + 3407 118443 + 3408 330285 + 3409 467651 + 3410 84565 + 3411 131989 + 3412 183091 + 3413 396635 + 3414 207515 + 3415 184035 + 3416 395347 + 3417 201149 + 3418 212859 + 3419 430885 + 3420 315443 + 3421 450781 + 3422 61589 + 3423 132059 + 3424 440763 + 3425 142747 + 3426 436787 + 3427 435981 + 3428 270075 + 3429 356253 + 3430 296285 + 3431 22419 + 3432 452283 + 3433 50061 + 3434 199109 + 3435 101077 + 3436 53851 + 3437 244659 + 3438 127139 + 3439 221589 + 3440 26747 + 3441 230115 + 3442 453907 + 3443 478605 + 3444 183451 + 3445 515621 + 3446 309155 + 3447 465741 + 3448 5853 + 3449 140957 + 3450 367109 + 3451 34131 + 3452 32357 + 3453 384541 + 3454 261829 + 3455 513259 + 3456 459093 + 3457 326387 + 3458 56213 + 3459 520987 + 3460 460579 + 3461 180373 + 3462 130859 + 3463 107163 + 3464 230413 + 3465 237589 + 3466 322909 + 3467 269611 + 3468 174733 + 3469 181205 + 3470 17523 + 3471 369445 + 3472 124829 + 3473 470221 + 3474 266181 + 3475 136259 + 3476 295747 + 3477 481893 + 3478 311547 + 3479 142189 + 3480 64677 + 3481 345741 + 3482 134867 + 3483 256677 + 3484 182445 + 3485 315845 + 3486 224573 + 3487 276195 + 3488 328555 + 3489 452771 + 3490 451123 + 3491 345627 + 3492 235915 + 3493 381171 + 3494 324091 + 3495 3149 + 3496 445285 + 3497 242005 + 3498 88157 + 3499 147235 + 3500 33557 + 3501 389011 + 3502 133603 + 3503 376187 + 3504 189261 + 3505 89669 + 3506 98861 + 3507 389787 + 3508 279323 + 3509 409245 + 3510 217827 + 3511 307491 + 3512 416661 + 3513 37589 + 3514 241531 + 3515 378829 + 3516 334805 + 3517 139877 + 3518 240755 + 3519 433915 + 3520 437867 + 3521 171357 + 3522 353075 + 3523 331925 + 3524 132523 + 3525 156333 + 3526 103205 + 3527 501389 + 3528 260117 + 3529 182189 + 3530 120387 + 3531 265787 + 3532 49291 + 3533 173739 + 3534 171747 + 3535 451035 + 3536 258675 + 3537 223291 + 3538 186147 + 3539 379443 + 3540 215717 + 3541 278691 + 3542 315515 + 3543 314291 + 3544 3771 + 3545 462141 + 3546 165709 + 3547 269245 + 3548 41275 + 3549 320667 + 3550 2461 + 3551 78613 + 3552 69875 + 3553 487517 + 3554 372253 + 3555 333099 + 3556 387947 + 3557 468147 + 3558 204005 + 3559 125595 + 3560 266067 + 3561 360093 + 3562 340581 + 3563 318571 + 3564 33059 + 3565 326861 + 3566 75259 + 3567 463987 + 3568 211683 + 3569 166747 + 3570 366805 + 3571 312509 + 3572 252971 + 3573 298667 + 3574 421213 + 3575 477035 + 3576 130821 + 3577 201389 + 3578 56051 + 3579 49563 + 3580 158707 + 3581 385477 + 3582 353555 + 3583 145245 + 3584 401389 + 3585 165083 + 3586 372515 + 3587 131477 + 3588 25899 + 3589 422021 + 3590 200333 + 3591 24525 + 3592 366853 + 3593 402587 + 3594 7949 + 3595 377339 + 3596 177891 + 3597 189533 + 3598 56667 + 3599 211571 + 3600 168725 + 3601 6811 + 3602 199269 + 3603 377779 + 3604 241363 + 3605 523035 + 3606 15203 + 3607 165445 + 3608 273875 + 3609 97101 + 3610 146325 + 3611 165533 + 3612 170467 + 3613 161699 + 3614 399077 + 3615 491411 + 3616 430021 + 3617 85107 + 3618 390827 + 3619 165181 + 3620 207829 + 3621 44237 + 3622 282645 + 3623 505381 + 3624 454947 + 3625 391317 + 3626 479795 + 3627 223685 + 3628 247645 + 3629 477701 + 3630 301731 + 3631 238293 + 3632 131171 + 3633 205539 + 3634 224795 + 3635 410405 + 3636 489693 + 3637 169387 + 3638 173203 + 3639 344187 + 3640 111579 + 3641 293189 + 3642 119933 + 3643 185229 + 3644 366277 + 3645 490675 + 3646 333035 + 3647 521051 + 3648 117837 + 3649 338597 + 3650 433821 + 3651 165603 + 3652 423019 + 3653 169613 + 3654 112853 + 3655 504421 + 3656 241421 + 3657 363749 + 3658 24917 + 3659 237661 + 3660 271565 + 3661 78499 + 3662 376165 + 3663 416149 + 3664 193251 + 3665 200525 + 3666 155003 + 3667 384155 + 3668 52291 + 3669 30547 + 3670 284165 + 3671 35443 + 3672 243845 + 3673 88285 + 3674 150677 + 3675 145891 + 3676 329779 + 3677 515029 + 3678 301781 + 3679 253539 + 3680 452155 + 3681 214477 + 3682 229539 + 3683 298859 + 3684 170739 + 3685 177139 + 3686 516539 + 3687 186813 + 3688 309509 + 3689 451803 + 3690 423147 + 3691 397069 + 3692 452549 + 3693 57957 + 3694 159459 + 3695 301165 + 3696 43299 + 3697 347243 + 3698 212971 + 3699 246131 + 3700 88731 + 3701 470957 + 3702 443163 + 3703 484467 + 3704 440661 + 3705 185549 + 3706 411555 + 3707 148133 + 3708 362717 + 3709 201059 + 3710 250957 + 3711 444741 + 3712 4941 + 3713 46429 + 3714 486565 + 3715 62309 + 3716 157381 + 3717 436909 + 3718 485475 + 3719 460283 + 3720 418517 + 3721 226347 + 3722 105789 + 3723 79419 + 3724 396829 + 3725 17869 + 3726 479395 + 3727 87915 + 3728 94811 + 3729 90363 + 3730 353213 + 3731 515261 + 3732 483205 + 3733 173171 + 3734 62571 + 3735 273123 + 3736 145813 + 3737 83355 + 3738 192221 + 3739 87219 + 3740 491307 + 3741 223573 + 3742 300237 + 3743 200837 + 3744 54925 + 3745 275813 + 3746 371043 + 3747 79893 + 3748 518939 + 3749 499933 + 3750 206043 + 3751 326891 + 3752 203427 + 3753 380485 + 3754 344789 + 3755 66637 + 3756 99725 + 3757 147171 + 3758 522715 + 3759 223789 + 3760 181093 + 3761 513805 + 3762 510101 + 3763 144659 + 3764 429627 + 3765 481877 + 3766 386061 + 3767 137309 + 3768 51363 + 3769 501819 + 3770 479877 + 3771 46397 + 3772 127957 + 3773 138125 + 3774 81619 + 3775 224667 + 3776 297637 + 3777 505349 + 3778 409117 + 3779 285357 + 3780 25139 + 3781 409259 + 3782 181397 + 3783 41877 + 3784 137043 + 3785 384669 + 3786 493157 + 3787 64691 + 3788 102139 + 3789 421667 + 3790 371635 + 3791 187107 + 3792 258837 + 3793 364493 + 3794 396587 + 3795 328355 + 3796 26525 + 3797 408219 + 3798 226085 + 3799 199525 + 3800 496845 + 3801 19963 + 3802 288323 + 3803 214181 + 3804 347325 + 3805 509539 + 3806 306219 + 3807 124685 + 3808 450693 + 3809 104157 + 3810 352365 + 3811 106949 + 3812 414011 + 3813 391539 + 3814 439067 + 3815 96093 + 3816 308339 + 3817 48747 + 3818 457795 + 3819 92309 + 3820 153315 + 3821 477525 + 3822 12995 + 3823 385083 + 3824 112547 + 3825 222101 + 3826 15707 + 3827 365979 + 3828 324403 + 3829 304709 + 3830 260275 + 3831 364461 + 3832 158179 + 3833 323363 + 3834 294245 + 3835 147781 + 3836 60339 + 3837 411771 + 3838 242923 + 3839 195883 + 3840 363699 + 3841 453283 + 3842 365107 + 3843 102755 + 3844 305173 + 3845 328485 + 3846 466075 + 3847 481907 + 3848 399835 + 3849 152109 + 3850 168675 + 3851 97165 + 3852 12741 + 3853 441115 + 3854 94893 + 3855 204973 + 3856 103963 + 3857 238443 + 3858 58203 + 3859 210573 + 3860 495859 + 3861 422229 + 3862 268579 + 3863 97989 + 3864 488405 + 3865 421725 + 3866 462597 + 3867 211763 + 3868 184107 + 3869 239709 + 3870 257131 + 3871 404987 + 3872 271539 + 3873 411427 + 3874 229395 + 3875 445029 + 3876 134883 + 3877 446725 + 3878 347755 + 3879 225635 + 3880 10189 + 3881 107173 + 3882 89387 + 3883 99597 + 3884 162531 + 3885 507755 + 3886 199451 + 3887 11621 + 3888 345437 + 3889 204899 + 3890 344173 + 3891 215173 + 3892 390363 + 3893 70541 + 3894 84757 + 3895 456947 + 3896 98645 + 3897 83099 + 3898 264413 + 3899 511629 + 3900 506773 + 3901 228933 + 3902 329165 + 3903 289859 + 3904 109027 + 3905 47611 + 3906 361429 + 3907 72387 + 3908 435123 + 3909 463885 + 3910 176581 + 3911 104389 + 3912 507291 + 3913 270173 + 3914 286813 + 3915 259371 + 3916 32747 + 3917 455859 + 3918 153925 + 3919 125747 + 3920 378589 + 3921 147307 + 3922 330587 + 3923 220509 + 3924 122595 + 3925 490139 + 3926 30803 + 3927 329051 + 3928 277931 + 3929 346467 + 3930 517005 + 3931 27541 + 3932 349691 + 3933 174819 + 3934 319365 + 3935 330563 + 3936 484507 + 3937 56659 + 3938 365491 + 3939 303893 + 3940 11661 + 3941 225501 + 3942 421405 + 3943 210603 + 3944 277275 + 3945 399973 + 3946 330899 + 3947 406571 + 3948 228053 + 3949 271821 + 3950 62245 + 3951 198523 + 3952 218691 + 3953 420101 + 3954 344115 + 3955 58219 + 3956 235891 + 3957 499259 + 3958 41779 + 3959 499653 + 3960 418035 + 3961 197981 + 3962 283037 + 3963 524115 + 3964 156851 + 3965 153157 + 3966 518459 + 3967 409507 + 3968 371355 + 3969 131779 + 3970 310037 + 3971 28835 + 3972 252813 + 3973 151141 + 3974 78179 + 3975 395555 + 3976 360597 + 3977 312213 + 3978 427691 + 3979 493781 + 3980 411747 + 3981 137437 + 3982 239099 + 3983 255141 + 3984 329619 + 3985 506261 + 3986 361243 + 3987 281301 + 3988 110307 + 3989 428979 + 3990 185125 + 3991 488101 + 3992 144099 + 3993 505299 + 3994 59845 + 3995 298189 + 3996 299877 + 3997 379123 + 3998 73549 + 3999 373827 + 4000 72747 + 4001 359965 + 4002 258661 + 4003 170005 + 4004 444253 + 4005 366221 + 4006 390541 + 4007 393779 + 4008 422037 + 4009 247133 + 4010 306875 + 4011 205141 + 4012 221 + 4013 167019 + 4014 428941 + 4015 184187 + 4016 408397 + 4017 503083 + 4018 12195 + 4019 475387 + 4020 111973 + 4021 94331 + 4022 505565 + 4023 458397 + 4024 16869 + 4025 137955 + 4026 106555 + 4027 152811 + 4028 181325 + 4029 410419 + 4030 481755 + 4031 92995 + 4032 273029 + 4033 281445 + 4034 211451 + 4035 292179 + 4036 191171 + 4037 293773 + 4038 117349 + 4039 119579 + 4040 161491 + 4041 116451 + 4042 96739 + 4043 476731 + 4044 125995 + 4045 472283 + 4046 31677 + 4047 63083 + 4048 27469 + 4049 266611 + 4050 77381 + 4051 171021 + 4052 154275 + 4053 491259 + 4054 297835 + 4055 53811 + 4056 274653 + 4057 247131 + 4058 229035 + 4059 75693 + 4060 117653 + 4061 159651 + 4062 322859 + 4063 327701 + 4064 180323 + 4065 93541 + 4066 498765 + 4067 59243 + 4068 183803 + 4069 340211 + 4070 365723 + 4071 395619 + 4072 69469 + 4073 266413 + 4074 371547 + 4075 80853 + 4076 145723 + 4077 354749 + 4078 394005 + 4079 381747 + 4080 350157 + 4081 359195 + 4082 23963 + 4083 205709 + 4084 131811 + 4085 243259 + 4086 198715 + 4087 74941 + 4088 289475 + 4089 433693 + 4090 186709 + 4091 8325 + 4092 411869 + 4093 328923 + 4094 500557 + 4095 258339 + 4096 48235 + 4097 381299 + 4098 1605 + 4099 460075 + 4100 29347 + 4101 115645 + 4102 104163 + 4103 141637 + 4104 437043 + 4105 447141 + 4106 117683 + 4107 223109 + 4108 494949 + 4109 408115 + 4110 213075 + 4111 327531 + 4112 372757 + 4113 163155 + 4114 10147 + 4115 128507 + 4116 361357 + 4117 53603 + 4118 17253 + 4119 167309 + 4120 99371 + 4121 165275 + 4122 426147 + 4123 490261 + 4124 262387 + 4125 84451 + 4126 44261 + 4127 445605 + 4128 403797 + 4129 327123 + 4130 274211 + 4131 257643 + 4132 451691 + 4133 156387 + 4134 3883 + 4135 316237 + 4136 482005 + 4137 121123 + 4138 178027 + 4139 80243 + 4140 290363 + 4141 127651 + 4142 308005 + 4143 128205 + 4144 409659 + 4145 277693 + 4146 250563 + 4147 174757 + 4148 130125 + 4149 289435 + 4150 98019 + 4151 278419 + 4152 74171 + 4153 306587 + 4154 320397 + 4155 197867 + 4156 296699 + 4157 61347 + 4158 153763 + 4159 271509 + 4160 321891 + 4161 400229 + 4162 339461 + 4163 465459 + 4164 499491 + 4165 446123 + 4166 54229 + 4167 361579 + 4168 301299 + 4169 391035 + 4170 72163 + 4171 62285 + 4172 395285 + 4173 217813 + 4174 229475 + 4175 236259 + 4176 201499 + 4177 103995 + 4178 250803 + 4179 296645 + 4180 279203 + 4181 346739 + 4182 73211 + 4183 404645 + 4184 152691 + 4185 13107 + 4186 220813 + 4187 362555 + 4188 21285 + 4189 199613 + 4190 16093 + 4191 182421 + 4192 97627 + 4193 520877 + 4194 388053 + 4195 476517 + 4196 369347 + 4197 30893 + 4198 214685 + 4199 265371 + 4200 30379 + 4201 262051 + 4202 402325 + 4203 439061 + 4204 29875 + 4205 149947 + 4206 363109 + 4207 362275 + 4208 456259 + 4209 257485 + 4210 319571 + 4211 91875 + 4212 2373 + 4213 152875 + 4214 314445 + 4215 262021 + 4216 440341 + 4217 194397 + 4218 443621 + 4219 68403 + 4220 375923 + 4221 495141 + 4222 248547 + 4223 27029 + 4224 131443 + 4225 82373 + 4226 404131 + 4227 184563 + 4228 124123 + 4229 36997 + 4230 386923 + 4231 387171 + 4232 4147 + 4233 17915 + 4234 159483 + 4235 454765 + 4236 117605 + 4237 153309 + 4238 135509 + 4239 225059 + 4240 447899 + 4241 480445 + 4242 76907 + 4243 379947 + 4244 445981 + 4245 482317 + 4246 271003 + 4247 406181 + 4248 15659 + 4249 179379 + 4250 362403 + 4251 245819 + 4252 226189 + 4253 42653 + 4254 62699 + 4255 302003 + 4256 428739 + 4257 205891 + 4258 225723 + 4259 110907 + 4260 243149 + 4261 258461 + 4262 407099 + 4263 240435 + 4264 37659 + 4265 519517 + 4266 319325 + 4267 521869 + 4268 99163 + 4269 223475 + 4270 31893 + 4271 85731 + 4272 500581 + 4273 226523 + 4274 385365 + 4275 300731 + 4276 458269 + 4277 269651 + 4278 57195 + 4279 234453 + 4280 486323 + 4281 207765 + 4282 223971 + 4283 37381 + 4284 449421 + 4285 523563 + 4286 427741 + 4287 433331 + 4288 318053 + 4289 87843 + 4290 311701 + 4291 257381 + 4292 436317 + 4293 138587 + 4294 70451 + 4295 122859 + 4296 67229 + 4297 114131 + 4298 301499 + 4299 501843 + 4300 139827 + 4301 61781 + 4302 363291 + 4303 492437 + 4304 348867 + 4305 219925 + 4306 440443 + 4307 438717 + 4308 437181 + 4309 365379 + 4310 149445 + 4311 268741 + 4312 373581 + 4313 394589 + 4314 144165 + 4315 169851 + 4316 99533 + 4317 408461 + 4318 512149 + 4319 482149 + 4320 145651 + 4321 73443 + 4322 80485 + 4323 323323 + 4324 225651 + 4325 54195 + 4326 376995 + 4327 506923 + 4328 49373 + 4329 121315 + 4330 119523 + 4331 154325 + 4332 213435 + 4333 502387 + 4334 92677 + 4335 471707 + 4336 493859 + 4337 100331 + 4338 140123 + 4339 468203 + 4340 379195 + 4341 330413 + 4342 281371 + 4343 269661 + 4344 80213 + 4345 2957 + 4346 116381 + 4347 405405 + 4348 271467 + 4349 494131 + 4350 122035 + 4351 165019 + 4352 30869 + 4353 110499 + 4354 410971 + 4355 488131 + 4356 353323 + 4357 164565 + 4358 365645 + 4359 107235 + 4360 220731 + 4361 382917 + 4362 156877 + 4363 431323 + 4364 106739 + 4365 260931 + 4366 458427 + 4367 521149 + 4368 176741 + 4369 59875 + 4370 313565 + 4371 203269 + 4372 440237 + 4373 53421 + 4374 358451 + 4375 170651 + 4376 207723 + 4377 453051 + 4378 356643 + 4379 281421 + 4380 34445 + 4381 297877 + 4382 482973 + 4383 124949 + 4384 123003 + 4385 180963 + 4386 328819 + 4387 447643 + 4388 216363 + 4389 438597 + 4390 474661 + 4391 441661 + 4392 475811 + 4393 506867 + 4394 432635 + 4395 105883 + 4396 46123 + 4397 313861 + 4398 93181 + 4399 322957 + 4400 319245 + 4401 79813 + 4402 27037 + 4403 365221 + 4404 186589 + 4405 321485 + 4406 282885 + 4407 224077 + 4408 200141 + 4409 361621 + 4410 152005 + 4411 29027 + 4412 90837 + 4413 168115 + 4414 156245 + 4415 137299 + 4416 82211 + 4417 94947 + 4418 308301 + 4419 258533 + 4420 388507 + 4421 426651 + 4422 484963 + 4423 162627 + 4424 454181 + 4425 135493 + 4426 144563 + 4427 32917 + 4428 28915 + 4429 274653 + 4430 335821 + 4431 523261 + 4432 66181 + 4433 92837 + 4434 117611 + 4435 98181 + 4436 22115 + 4437 318309 + 4438 82659 + 4439 181355 + 4440 507549 + 4441 424453 + 4442 387123 + 4443 117181 + 4444 509539 + 4445 523835 + 4446 328883 + 4447 16059 + 4448 347515 + 4449 513243 + 4450 70371 + 4451 303317 + 4452 48909 + 4453 381955 + 4454 352435 + 4455 167037 + 4456 377445 + 4457 203933 + 4458 495019 + 4459 86893 + 4460 261077 + 4461 365269 + 4462 34363 + 4463 310179 + 4464 371981 + 4465 43349 + 4466 488541 + 4467 144733 + 4468 452203 + 4469 29325 + 4470 439501 + 4471 82659 + 4472 443973 + 4473 47155 + 4474 75677 + 4475 384315 + 4476 8453 + 4477 441923 + 4478 51613 + 4479 372787 + 4480 451733 + 4481 461021 + 4482 522181 + 4483 465541 + 4484 212325 + 4485 184973 + 4486 466653 + 4487 508467 + 4488 11579 + 4489 171869 + 4490 446315 + 4491 398037 + 4492 217957 + 4493 361157 + 4494 350229 + 4495 238685 + 4496 497323 + 4497 121923 + 4498 340621 + 4499 451931 + 4500 323805 + 4501 238595 + 4502 47587 + 4503 31141 + 4504 151099 + 4505 458995 + 4506 513203 + 4507 35685 + 4508 58053 + 4509 343437 + 4510 242877 + 4511 377933 + 4512 94821 + 4513 387989 + 4514 73053 + 4515 513531 + 4516 433701 + 4517 395091 + 4518 495957 + 4519 58083 + 4520 20347 + 4521 480299 + 4522 269107 + 4523 105123 + 4524 514853 + 4525 504947 + 4526 119045 + 4527 436323 + 4528 74765 + 4529 167611 + 4530 283491 + 4531 508027 + 4532 286157 + 4533 343339 + 4534 292813 + 4535 445669 + 4536 500197 + 4537 333741 + 4538 453275 + 4539 520947 + 4540 313123 + 4541 515845 + 4542 348949 + 4543 123029 + 4544 273987 + 4545 184563 + 4546 460387 + 4547 283581 + 4548 187803 + 4549 336469 + 4550 27499 + 4551 327843 + 4552 308147 + 4553 453757 + 4554 377275 + 4555 351053 + 4556 221637 + 4557 122205 + 4558 17643 + 4559 401093 + 4560 402939 + 4561 516451 + 4562 470557 + 4563 450339 + 4564 173099 + 4565 91243 + 4566 247467 + 4567 219077 + 4568 288861 + 4569 32819 + 4570 36139 + 4571 290525 + 4572 9819 + 4573 322877 + 4574 105587 + 4575 139373 + 4576 246939 + 4577 70299 + 4578 140667 + 4579 229509 + 4580 100253 + 4581 70861 + 4582 492891 + 4583 100723 + 4584 372395 + 4585 193613 + 4586 430789 + 4587 45795 + 4588 13205 + 4589 126733 + 4590 400195 + 4591 443507 + 4592 472283 + 4593 354979 + 4594 229637 + 4595 319163 + 4596 40165 + 4597 55459 + 4598 511821 + 4599 64667 + 4600 38691 + 4601 270485 + 4602 499085 + 4603 53075 + 4604 117141 + 4605 126853 + 4606 270051 + 4607 338373 + 4608 152589 + 4609 470427 + 4610 506731 + 4611 35299 + 4612 180387 + 4613 378091 + 4614 371789 + 4615 271061 + 4616 464555 + 4617 134101 + 4618 410829 + 4619 152005 + 4620 166733 + 4621 456763 + 4622 389213 + 4623 20125 + 4624 179547 + 4625 168499 + 4626 292347 + 4627 501053 + 4628 253085 + 4629 181083 + 4630 33899 + 4631 204557 + 4632 484117 + 4633 470365 + 4634 470725 + 4635 9293 + 4636 306715 + 4637 254909 + 4638 292421 + 4639 158605 + 4640 95235 + 4641 494373 + 4642 175907 + 4643 519013 + 4644 33507 + 4645 465309 + 4646 312677 + 4647 295731 + 4648 443741 + 4649 470715 + 4650 149405 + 4651 352597 + 4652 523493 + 4653 243795 + 4654 39475 + 4655 10917 + 4656 408277 + 4657 220275 + 4658 460707 + 4659 17587 + 4660 466027 + 4661 181755 + 4662 352923 + 4663 261661 + 4664 286611 + 4665 376699 + 4666 356203 + 4667 488131 + 4668 441301 + 4669 235741 + 4670 415795 + 4671 483619 + 4672 62613 + 4673 142635 + 4674 295525 + 4675 238515 + 4676 366933 + 4677 504251 + 4678 337467 + 4679 75405 + 4680 430243 + 4681 105843 + 4682 23011 + 4683 69509 + 4684 297779 + 4685 287979 + 4686 347291 + 4687 282381 + 4688 454203 + 4689 84027 + 4690 286771 + 4691 131517 + 4692 450821 + 4693 263907 + 4694 491875 + 4695 473893 + 4696 91243 + 4697 171469 + 4698 188509 + 4699 413221 + 4700 127685 + 4701 52621 + 4702 21219 + 4703 138509 + 4704 283419 + 4705 514725 + 4706 98525 + 4707 208611 + 4708 305315 + 4709 236389 + 4710 322043 + 4711 175027 + 4712 416619 + 4713 443459 + 4714 309955 + 4715 193885 + 4716 287859 + 4717 470315 + 4718 12901 + 4719 371947 + 4720 5309 + 4721 81221 + 4722 482845 + 4723 359491 + 4724 7125 + 4725 331925 + 4726 362091 + 4727 355533 + 4728 71163 + 4729 192171 + 4730 19805 + 4731 381837 + 4732 494213 + 4733 72829 + 4734 154163 + 4735 294587 + 4736 368477 + 4737 201907 + 4738 487163 + 4739 422835 + 4740 360205 + 4741 344933 + 4742 76189 + 4743 167621 + 4744 221637 + 4745 258181 + 4746 510173 + 4747 42189 + 4748 209187 + 4749 371059 + 4750 478101 + 4751 314715 + 4752 44701 + 4753 186461 + 4754 149845 + 4755 449765 + 4756 413029 + 4757 141027 + 4758 453413 + 4759 204093 + 4760 519749 + 4761 107755 + 4762 286843 + 4763 288709 + 4764 214131 + 4765 470669 + 4766 322725 + 4767 152725 + 4768 359347 + 4769 163115 + 4770 230115 + 4771 46235 + 4772 438365 + 4773 39429 + 4774 461525 + 4775 106051 + 4776 386227 + 4777 140869 + 4778 343501 + 4779 37955 + 4780 10723 + 4781 103317 + 4782 314325 + 4783 429043 + 4784 303325 + 4785 269723 + 4786 55971 + 4787 493405 + 4788 410971 + 4789 263485 + 4790 258915 + 4791 213141 + 4792 465029 + 4793 35269 + 4794 522803 + 4795 438029 + 4796 46013 + 4797 1949 + 4798 382157 + 4799 11947 + 4800 500421 + 4801 441421 + 4802 227245 + 4803 485397 + 4804 30053 + 4805 437363 + 4806 281829 + 4807 1131 + 4808 446573 + 4809 65245 + 4810 366933 + 4811 519403 + 4812 61155 + 4813 432933 + 4814 440541 + 4815 418661 + 4816 327501 + 4817 387131 + 4818 118621 + 4819 376107 + 4820 230051 + 4821 81467 + 4822 410813 + 4823 495133 + 4824 376571 + 4825 422037 + 4826 426309 + 4827 504909 + 4828 393843 + 4829 174869 + 4830 496229 + 4831 314253 + 4832 269517 + 4833 296443 + 4834 348037 + 4835 85309 + 4836 427051 + 4837 428475 + 4838 511907 + 4839 467299 + 4840 328859 + 4841 478029 + 4842 511437 + 4843 326507 + 4844 435811 + 4845 515853 + 4846 227043 + 4847 130405 + 4848 1565 + 4849 39731 + 4850 451517 + 4851 305827 + 4852 412453 + 4853 155515 + 4854 315021 + 4855 480363 + 4856 67243 + 4857 83291 + 4858 8931 + 4859 279851 + 4860 41755 + 4861 231053 + 4862 368197 + 4863 372957 + 4864 423531 + 4865 222043 + 4866 182835 + 4867 131235 + 4868 63395 + 4869 307149 + 4870 207707 + 4871 64627 + 4872 291269 + 4873 185851 + 4874 168277 + 4875 257101 + 4876 135483 + 4877 382269 + 4878 14395 + 4879 182355 + 4880 136037 + 4881 375915 + 4882 144085 + 4883 454947 + 4884 242837 + 4885 128739 + 4886 454899 + 4887 320589 + 4888 439091 + 4889 355093 + 4890 119851 + 4891 507421 + 4892 266091 + 4893 263971 + 4894 355675 + 4895 293709 + 4896 132211 + 4897 213605 + 4898 172293 + 4899 274757 + 4900 75827 + 4901 69277 + 4902 36957 + 4903 162661 + 4904 246565 + 4905 492893 + 4906 3357 + 4907 408005 + 4908 326451 + 4909 432499 + 4910 367549 + 4911 199909 + 4912 284331 + 4913 473765 + 4914 197171 + 4915 160661 + 4916 277661 + 4917 479907 + 4918 175419 + 4919 94331 + 4920 376461 + 4921 33475 + 4922 479365 + 4923 388163 + 4924 72781 + 4925 88981 + 4926 150021 + 4927 27349 + 4928 13853 + 4929 515755 + 4930 199723 + 4931 391973 + 4932 157133 + 4933 377075 + 4934 62613 + 4935 384571 + 4936 511091 + 4937 202467 + 4938 451285 + 4939 358341 + 4940 303253 + 4941 73565 + 4942 109389 + 4943 216645 + 4944 401187 + 4945 137309 + 4946 92867 + 4947 136269 + 4948 187349 + 4949 281765 + 4950 349299 + 4951 474347 + 4952 99123 + 4953 10683 + 4954 459365 + 4955 100765 + 4956 252571 + 4957 146587 + 4958 442723 + 4959 298525 + 4960 27413 + 4961 243549 + 4962 441573 + 4963 339677 + 4964 15645 + 4965 52621 + 4966 152219 + 4967 232259 + 4968 126917 + 4969 13517 + 4970 59171 + 4971 243037 + 4972 437093 + 4973 501419 + 4974 51101 + 4975 390251 + 4976 260613 + 4977 120981 + 4978 299251 + 4979 212899 + 4980 62683 + 4981 207253 + 4982 131181 + 4983 51877 + 4984 111539 + 4985 290091 + 4986 11835 + 4987 366221 + 4988 469901 + 4989 51333 + 4990 48811 + 4991 122565 + 4992 107477 + 4993 191555 + 4994 79587 + 4995 372291 + 4996 265979 + 4997 497101 + 4998 126755 + 4999 74931 + 5000 179051 + 5001 381091 + 5002 69019 + 5003 318813 + 5004 123205 + 5005 91021 + 5006 250773 + 5007 48051 + 5008 72469 + 5009 175979 + 5010 25643 + 5011 350291 + 5012 317499 + 5013 26141 + 5014 275523 + 5015 51907 + 5016 41765 + 5017 353485 + 5018 313251 + 5019 162235 + 5020 267835 + 5021 200141 + 5022 324261 + 5023 93853 + 5024 221427 + 5025 62309 + 5026 412507 + 5027 371205 + 5028 302237 + 5029 63147 + 5030 240845 + 5031 152259 + 5032 179853 + 5033 365339 + 5034 65659 + 5035 190443 + 5036 27933 + 5037 434467 + 5038 179093 + 5039 105637 + 5040 42213 + 5041 259251 + 5042 295859 + 5043 17109 + 5044 61155 + 5045 6819 + 5046 360901 + 5047 65669 + 5048 385365 + 5049 23437 + 5050 371493 + 5051 10461 + 5052 462059 + 5053 154469 + 5054 462755 + 5055 334549 + 5056 519709 + 5057 144027 + 5058 393365 + 5059 86459 + 5060 417629 + 5061 332949 + 5062 401459 + 5063 357837 + 5064 355123 + 5065 71003 + 5066 411235 + 5067 67299 + 5068 179611 + 5069 193429 + 5070 246669 + 5071 494549 + 5072 17341 + 5073 55237 + 5074 232371 + 5075 143603 + 5076 521869 + 5077 330069 + 5078 38429 + 5079 418147 + 5080 117525 + 5081 75259 + 5082 155387 + 5083 414677 + 5084 147677 + 5085 40221 + 5086 256675 + 5087 434803 + 5088 202139 + 5089 173245 + 5090 467763 + 5091 429211 + 5092 80517 + 5093 145813 + 5094 6307 + 5095 491149 + 5096 123675 + 5097 211093 + 5098 160035 + 5099 445333 + 5100 513381 + 5101 142797 + 5102 290091 + 5103 423027 + 5104 443571 + 5105 362363 + 5106 136995 + 5107 313787 + 5108 265899 + 5109 271043 + 5110 480179 + 5111 28357 + 5112 68957 + 5113 314939 + 5114 479355 + 5115 485469 + 5116 12347 + 5117 15155 + 5118 351013 + 5119 472131 + 5120 55011 + 5121 128155 + 5122 211651 + 5123 199795 + 5124 300181 + 5125 416691 + 5126 120749 + 5127 28347 + 5128 117525 + 5129 167773 + 5130 351643 + 5131 516579 + 5132 521787 + 5133 463683 + 5134 65779 + 5135 392179 + 5136 432805 + 5137 246827 + 5138 146597 + 5139 481797 + 5140 213949 + 5141 288709 + 5142 85867 + 5143 211507 + 5144 312619 + 5145 164645 + 5146 326813 + 5147 285803 + 5148 50717 + 5149 348027 + 5150 326699 + 5151 167915 + 5152 420685 + 5153 324309 + 5154 447837 + 5155 64797 + 5156 434843 + 5157 335965 + 5158 352699 + 5159 112981 + 5160 422109 + 5161 215411 + 5162 208101 + 5163 179085 + 5164 118429 + 5165 300139 + 5166 324261 + 5167 384077 + 5168 127795 + 5169 90483 + 5170 336741 + 5171 37317 + 5172 12045 + 5173 301205 + 5174 114397 + 5175 197171 + 5176 184211 + 5177 42723 + 5178 180387 + 5179 35429 + 5180 518123 + 5181 324813 + 5182 429291 + 5183 482987 + 5184 468549 + 5185 489251 + 5186 39707 + 5187 402317 + 5188 263003 + 5189 54349 + 5190 456187 + 5191 389827 + 5192 83163 + 5193 410779 + 5194 235613 + 5195 429123 + 5196 298859 + 5197 180899 + 5198 60373 + 5199 340229 + 5200 504291 + 5201 236365 + 5202 269205 + 5203 333035 + 5204 125341 + 5205 104107 + 5206 496229 + 5207 427973 + 5208 469827 + 5209 280333 + 5210 362595 + 5211 17109 + 5212 129981 + 5213 146283 + 5214 128461 + 5215 430997 + 5216 77085 + 5217 506531 + 5218 10917 + 5219 383795 + 5220 205605 + 5221 57797 + 5222 267379 + 5223 172165 + 5224 331109 + 5225 287701 + 5226 238011 + 5227 521533 + 5228 199757 + 5229 406827 + 5230 386701 + 5231 180515 + 5232 348501 + 5233 117989 + 5234 89869 + 5235 220315 + 5236 345595 + 5237 456787 + 5238 215261 + 5239 44147 + 5240 481429 + 5241 82083 + 5242 30435 + 5243 284059 + 5244 63005 + 5245 208269 + 5246 193613 + 5247 179899 + 5248 52045 + 5249 277661 + 5250 240805 + 5251 482765 + 5252 465339 + 5253 104901 + 5254 470819 + 5255 86109 + 5256 330533 + 5257 212173 + 5258 1173 + 5259 355173 + 5260 321195 + 5261 459819 + 5262 162581 + 5263 483477 + 5264 292189 + 5265 220227 + 5266 283541 + 5267 65165 + 5268 247867 + 5269 414309 + 5270 310813 + 5271 417067 + 5272 462869 + 5273 89373 + 5274 469901 + 5275 43827 + 5276 109757 + 5277 256163 + 5278 220507 + 5279 270075 + 5280 167693 + 5281 15437 + 5282 250211 + 5283 235003 + 5284 430533 + 5285 372859 + 5286 468429 + 5287 14243 + 5288 243307 + 5289 210027 + 5290 514725 + 5291 48867 + 5292 330435 + 5293 107587 + 5294 285925 + 5295 131413 + 5296 54117 + 5297 99627 + 5298 388829 + 5299 179243 + 5300 508611 + 5301 310053 + 5302 468147 + 5303 490611 + 5304 331939 + 5305 392773 + 5306 70003 + 5307 447565 + 5308 286853 + 5309 4245 + 5310 152619 + 5311 214819 + 5312 75293 + 5313 238949 + 5314 423061 + 5315 225843 + 5316 378021 + 5317 101661 + 5318 296141 + 5319 176803 + 5320 190109 + 5321 64323 + 5322 72549 + 5323 477637 + 5324 280235 + 5325 207637 + 5326 247195 + 5327 479291 + 5328 496435 + 5329 318571 + 5330 334733 + 5331 163747 + 5332 78045 + 5333 492003 + 5334 123685 + 5335 384235 + 5336 388507 + 5337 67827 + 5338 42333 + 5339 215411 + 5340 124869 + 5341 306355 + 5342 23619 + 5343 18147 + 5344 242795 + 5345 124411 + 5346 431685 + 5347 314291 + 5348 296811 + 5349 109867 + 5350 245307 + 5351 381171 + 5352 85675 + 5353 201957 + 5354 386659 + 5355 263003 + 5356 168883 + 5357 14253 + 5358 111501 + 5359 143035 + 5360 132275 + 5361 48485 + 5362 385315 + 5363 115483 + 5364 393571 + 5365 473067 + 5366 355123 + 5367 228507 + 5368 264099 + 5369 67243 + 5370 240179 + 5371 474987 + 5372 207331 + 5373 499603 + 5374 111963 + 5375 176291 + 5376 367573 + 5377 59613 + 5378 169339 + 5379 271979 + 5380 421181 + 5381 5859 + 5382 290693 + 5383 252693 + 5384 207573 + 5385 207523 + 5386 35333 + 5387 373653 + 5388 111731 + 5389 453675 + 5390 113949 + 5391 241221 + 5392 156467 + 5393 59763 + 5394 402843 + 5395 297917 + 5396 353203 + 5397 210075 + 5398 51363 + 5399 56171 + 5400 432933 + 5401 413603 + 5402 127429 + 5403 497605 + 5404 44795 + 5405 470557 + 5406 516467 + 5407 245517 + 5408 210027 + 5409 131685 + 5410 114125 + 5411 422845 + 5412 127811 + 5413 352035 + 5414 280133 + 5415 48051 + 5416 302763 + 5417 449219 + 5418 164749 + 5419 272517 + 5420 94357 + 5421 203933 + 5422 316595 + 5423 283419 + 5424 504533 + 5425 430755 + 5426 478605 + 5427 391845 + 5428 373803 + 5429 412467 + 5430 334165 + 5431 297749 + 5432 339301 + 5433 301891 + 5434 82725 + 5435 110883 + 5436 143005 + 5437 502939 + 5438 428011 + 5439 272533 + 5440 193651 + 5441 126237 + 5442 13819 + 5443 439131 + 5444 466781 + 5445 500165 + 5446 178235 + 5447 130253 + 5448 87581 + 5449 339179 + 5450 65779 + 5451 457379 + 5452 131917 + 5453 518757 + 5454 513131 + 5455 6429 + 5456 99789 + 5457 514853 + 5458 513955 + 5459 492699 + 5460 514773 + 5461 198203 + 5462 302157 + 5463 389563 + 5464 334045 + 5465 435157 + 5466 283301 + 5467 381885 + 5468 343357 + 5469 126843 + 5470 105579 + 5471 334963 + 5472 500915 + 5473 390293 + 5474 331451 + 5475 485293 + 5476 495133 + 5477 72499 + 5478 91301 + 5479 263245 + 5480 117077 + 5481 85645 + 5482 123675 + 5483 150939 + 5484 385117 + 5485 36579 + 5486 81979 + 5487 239261 + 5488 230757 + 5489 334733 + 5490 519851 + 5491 77603 + 5492 384875 + 5493 454093 + 5494 258027 + 5495 236843 + 5496 163549 + 5497 13893 + 5498 480573 + 5499 96773 + 5500 66627 + 5501 155525 + 5502 506227 + 5503 263013 + 5504 138525 + 5505 195691 + 5506 341341 + 5507 183501 + 5508 52403 + 5509 39701 + 5510 362645 + 5511 99869 + 5512 246827 + 5513 289573 + 5514 432187 + 5515 234139 + 5516 341181 + 5517 359317 + 5518 152923 + 5519 310941 + 5520 175675 + 5521 78925 + 5522 303347 + 5523 439757 + 5524 2211 + 5525 237253 + 5526 479715 + 5527 296141 + 5528 490381 + 5529 146475 + 5530 382955 + 5531 398171 + 5532 507461 + 5533 18717 + 5534 461021 + 5535 216925 + 5536 273253 + 5537 145925 + 5538 511053 + 5539 236133 + 5540 359491 + 5541 284765 + 5542 367965 + 5543 212731 + 5544 363341 + 5545 297365 + 5546 100011 + 5547 267149 + 5548 236395 + 5549 70357 + 5550 204005 + 5551 302397 + 5552 360819 + 5553 437981 + 5554 430885 + 5555 150813 + 5556 174533 + 5557 347291 + 5558 184469 + 5559 254515 + 5560 5419 + 5561 311637 + 5562 297749 + 5563 149917 + 5564 515261 + 5565 66603 + 5566 463765 + 5567 470221 + 5568 91485 + 5569 196829 + 5570 462235 + 5571 193883 + 5572 345155 + 5573 286813 + 5574 128581 + 5575 236723 + 5576 287045 + 5577 197061 + 5578 43917 + 5579 477125 + 5580 9997 + 5581 95885 + 5582 258171 + 5583 377779 + 5584 185187 + 5585 269093 + 5586 170691 + 5587 119915 + 5588 242893 + 5589 207365 + 5590 112157 + 5591 518499 + 5592 179021 + 5593 197403 + 5594 116587 + 5595 346403 + 5596 94549 + 5597 268851 + 5598 480091 + 5599 9371 + 5600 323341 + 5601 42723 + 5602 513173 + 5603 105395 + 5604 288685 + 5605 355909 + 5606 216925 + 5607 179315 + 5608 261187 + 5609 65669 + 5610 440099 + 5611 510293 + 5612 281835 + 5613 46491 + 5614 261467 + 5615 352923 + 5616 214947 + 5617 163101 + 5618 323101 + 5619 377557 + 5620 121627 + 5621 335419 + 5622 294763 + 5623 511131 + 5624 359317 + 5625 241293 + 5626 183613 + 5627 93917 + 5628 368995 + 5629 160725 + 5630 267469 + 5631 350883 + 5632 248613 + 5633 267379 + 5634 32709 + 5635 342805 + 5636 446725 + 5637 103613 + 5638 421043 + 5639 212971 + 5640 15467 + 5641 523469 + 5642 174021 + 5643 433563 + 5644 154581 + 5645 289715 + 5646 506019 + 5647 137659 + 5648 401165 + 5649 350579 + 5650 256517 + 5651 303963 + 5652 336435 + 5653 118109 + 5654 293205 + 5655 471261 + 5656 300771 + 5657 453467 + 5658 15437 + 5659 501307 + 5660 175389 + 5661 126067 + 5662 226603 + 5663 111963 + 5664 135261 + 5665 291995 + 5666 408397 + 5667 805 + 5668 238195 + 5669 402749 + 5670 33941 + 5671 124445 + 5672 523493 + 5673 60349 + 5674 71117 + 5675 61883 + 5676 478779 + 5677 167581 + 5678 258915 + 5679 452757 + 5680 32931 + 5681 235499 + 5682 336163 + 5683 185139 + 5684 19611 + 5685 122539 + 5686 129813 + 5687 494699 + 5688 402547 + 5689 68907 + 5690 317957 + 5691 94357 + 5692 467427 + 5693 66603 + 5694 144317 + 5695 425421 + 5696 147699 + 5697 329115 + 5698 91485 + 5699 441139 + 5700 194501 + 5701 40125 + 5702 326549 + 5703 474035 + 5704 332389 + 5705 333603 + 5706 22971 + 5707 251533 + 5708 291555 + 5709 443213 + 5710 483003 + 5711 351013 + 5712 376709 + 5713 71971 + 5714 43675 + 5715 31005 + 5716 461477 + 5717 467925 + 5718 471261 + 5719 326733 + 5720 395181 + 5721 516763 + 5722 181867 + 5723 317099 + 5724 445291 + 5725 267149 + 5726 80597 + 5727 359653 + 5728 131443 + 5729 5299 + 5730 283965 + 5731 114595 + 5732 126523 + 5733 204357 + 5734 508037 + 5735 256483 + 5736 498755 + 5737 208747 + 5738 64829 + 5739 302763 + 5740 428549 + 5741 199565 + 5742 56213 + 5743 101171 + 5744 320667 + 5745 464803 + 5746 272739 + 5747 61731 + 5748 64677 + 5749 310427 + 5750 282787 + 5751 238293 + 5752 411085 + 5753 158371 + 5754 510101 + 5755 240597 + 5756 165667 + 5757 145387 + 5758 74645 + 5759 387861 + 5760 451365 + 5761 495595 + 5762 39757 + 5763 481339 + 5764 455139 + 5765 279267 + 5766 509117 + 5767 101581 + 5768 128571 + 5769 478989 + 5770 129971 + 5771 344419 + 5772 495301 + 5773 194931 + 5774 363917 + 5775 420517 + 5776 43293 + 5777 447259 + 5778 76117 + 5779 281715 + 5780 65797 + 5781 247003 + 5782 414021 + 5783 142413 + 5784 338877 + 5785 131747 + 5786 436837 + 5787 477701 + 5788 283187 + 5789 430533 + 5790 174523 + 5791 238797 + 5792 387981 + 5793 292701 + 5794 273451 + 5795 101531 + 5796 87821 + 5797 124053 + 5798 368349 + 5799 199845 + 5800 339627 + 5801 264981 + 5802 351389 + 5803 361789 + 5804 60827 + 5805 404587 + 5806 241293 + 5807 363819 + 5808 488269 + 5809 405445 + 5810 136733 + 5811 185277 + 5812 473957 + 5813 123029 + 5814 408227 + 5815 474893 + 5816 445629 + 5817 362083 + 5818 461781 + 5819 154829 + 5820 390221 + 5821 478101 + 5822 108603 + 5823 187677 + 5824 417003 + 5825 302883 + 5826 52805 + 5827 262021 + 5828 133955 + 5829 331939 + 5830 242341 + 5831 199565 + 5832 176389 + 5833 310053 + 5834 364451 + 5835 5299 + 5836 106043 + 5837 326733 + 5838 192157 + 5839 239099 + 5840 442851 + 5841 307867 + 5842 297523 + 5843 386347 + 5844 53955 + 5845 359653 + 5846 358059 + 5847 6429 + 5848 154213 + 5849 422797 + 5850 190557 + 5851 206699 + 5852 387477 + 5853 10019 + 5854 455525 + 5855 469811 + 5856 288851 + 5857 432917 + 5858 332949 + 5859 326075 + 5860 491861 + 5861 225523 + 5862 202461 + 5863 344923 + 5864 152683 + 5865 309925 + 5866 121203 + 5867 199965 + 5868 981 + 5869 56619 + 5870 119629 + 5871 212701 + 5872 494699 + 5873 141179 + 5874 191555 + 5875 390493 + 5876 261531 + 5877 205901 + 5878 500779 + 5879 104389 + 5880 494797 + 5881 410053 + 5882 246899 + 5883 19675 + 5884 266091 + 5885 337899 + 5886 56781 + 5887 101309 + 5888 509435 + 5889 231907 + 5890 42845 + 5891 191333 + 5892 205171 + 5893 28451 + 5894 77381 + 5895 244165 + 5896 358059 + 5897 434269 + 5898 46397 + 5899 228133 + 5900 160611 + 5901 300237 + 5902 205595 + 5903 31005 + 5904 94341 + 5905 179021 + 5906 50341 + 5907 41907 + 5908 124251 + 5909 263837 + 5910 42445 + 5911 372573 + 5912 23667 + 5913 172739 + 5914 88939 + 5915 319843 + 5916 446139 + 5917 36987 + 5918 340885 + 5919 430563 + 5920 52509 + 5921 172901 + 5922 108765 + 5923 225947 + 5924 333917 + 5925 274581 + 5926 310037 + 5927 491763 + 5928 322909 + 5929 387797 + 5930 518757 + 5931 274773 + 5932 500779 + 5933 355213 + 5934 129083 + 5935 288251 + 5936 289211 + 5937 213811 + 5938 449429 + 5939 303949 + 5940 407181 + 5941 123981 + 5942 266693 + 5943 158371 + 5944 93251 + 5945 85453 + 5946 487133 + 5947 26475 + 5948 185563 + 5949 120037 + 5950 324309 + 5951 55581 + 5952 158885 + 5953 445285 + 5954 450539 + 5955 129843 + 5956 514389 + 5957 149021 + 5958 34837 + 5959 92243 + 5960 36069 + 5961 24205 + 5962 476893 + 5963 189619 + 5964 225723 + 5965 413939 + 5966 17869 + 5967 431675 + 5968 49765 + 5969 226227 + 5970 515933 + 5971 214819 + 5972 470131 + 5973 433195 + 5974 355179 + 5975 460387 + 5976 197443 + 5977 451517 + 5978 164757 + 5979 302235 + 5980 177659 + 5981 48891 + 5982 302427 + 5983 212253 + 5984 23717 + 5985 57685 + 5986 400149 + 5987 418275 + 5988 408371 + 5989 40155 + 5990 91251 + 5991 196155 + 5992 271549 + 5993 243005 + 5994 405795 + 5995 477627 + 5996 197333 + 5997 193579 + 5998 450709 + 5999 264133 + 6000 465853 + 6001 38299 + 6002 21581 + 6003 300139 + 6004 39283 + 6005 309925 + 6006 373939 + 6007 7485 + 6008 140637 + 6009 412877 + 6010 473429 + 6011 67869 + 6012 3533 + 6013 353579 + 6014 208803 + 6015 91291 + 6016 508571 + 6017 262469 + 6018 453413 + 6019 258893 + 6020 245981 + 6021 286365 + 6022 277733 + 6023 480405 + 6024 410547 + 6025 478989 + 6026 98747 + 6027 224541 + 6028 58483 + 6029 398843 + 6030 314475 + 6031 308067 + 6032 505707 + 6033 336163 + 6034 450683 + 6035 396941 + 6036 301219 + 6037 477973 + 6038 265787 + 6039 109723 + 6040 476045 + 6041 232859 + 6042 358157 + 6043 33749 + 6044 161309 + 6045 97075 + 6046 177219 + 6047 59451 + 6048 159403 + 6049 390493 + 6050 29803 + 6051 10803 + 6052 383197 + 6053 431685 + 6054 84061 + 6055 204651 + 6056 498611 + 6057 128411 + 6058 165211 + 6059 312253 + 6060 193579 + 6061 266077 + 6062 10219 + 6063 126157 + 6064 456187 + 6065 385883 + 6066 516579 + 6067 256341 + 6068 441661 + 6069 250581 + 6070 357147 + 6071 485747 + 6072 80157 + 6073 486477 + 6074 378797 + 6075 426659 + 6076 286981 + 6077 103643 + 6078 409147 + 6079 454093 + 6080 392347 + 6081 282381 + 6082 490317 + 6083 91285 + 6084 91755 + 6085 208061 + 6086 484467 + 6087 124221 + 6088 248163 + 6089 513259 + 6090 509035 + 6091 250299 + 6092 64691 + 6093 297251 + 6094 274747 + 6095 236829 + 6096 36923 + 6097 249189 + 6098 267469 + 6099 373915 + 6100 29581 + 6101 216733 + 6102 458659 + 6103 254869 + 6104 65659 + 6105 49523 + 6106 350885 + 6107 411707 + 6108 501419 + 6109 520413 + 6110 27605 + 6111 63637 + 6112 117925 + 6113 131363 + 6114 67067 + 6115 241531 + 6116 330819 + 6117 122859 + 6118 82547 + 6119 205901 + 6120 371523 + 6121 504533 + 6122 173597 + 6123 167773 + 6124 515483 + 6125 106949 + 6126 340949 + 6127 466125 + 6128 2723 + 6129 376491 + 6130 350771 + 6131 336115 + 6132 41755 + 6133 364693 + 6134 209763 + 6135 510861 + 6136 412453 + 6137 110917 + 6138 362717 + 6139 92445 + 6140 453709 + 6141 396109 + 6142 419397 + 6143 117653 + 6144 249117 + 6145 236779 + 6146 46379 + 6147 273949 + 6148 411035 + 6149 165795 + 6150 149051 + 6151 228507 + 6152 5437 + 6153 325261 + 6154 210125 + 6155 389925 + 6156 228285 + 6157 496525 + 6158 38971 + 6159 152811 + 6160 224363 + 6161 246605 + 6162 401851 + 6163 56171 + 6164 397573 + 6165 287011 + 6166 497501 + 6167 473957 + 6168 291523 + 6169 128507 + 6170 295267 + 6171 187315 + 6172 396749 + 6173 297301 + 6174 174493 + 6175 288483 + 6176 74685 + 6177 193883 + 6178 36411 + 6179 279595 + 6180 114539 + 6181 23437 + 6182 490795 + 6183 51875 + 6184 519397 + 6185 418035 + 6186 250469 + 6187 135509 + 6188 185885 + 6189 242483 + 6190 226115 + 6191 375965 + 6192 486565 + 6193 319355 + 6194 254691 + 6195 16221 + 6196 117837 + 6197 495987 + 6198 108765 + 6199 214165 + 6200 144603 + 6201 523029 + 6202 341171 + 6203 267845 + 6204 119915 + 6205 382413 + 6206 129843 + 6207 22819 + 6208 46309 + 6209 113347 + 6210 17915 + 6211 131981 + 6212 25243 + 6213 392037 + 6214 372061 + 6215 415595 + 6216 291269 + 6217 354917 + 6218 245981 + 6219 93227 + 6220 303963 + 6221 165645 + 6222 405987 + 6223 59299 + 6224 39253 + 6225 181093 + 6226 495173 + 6227 228459 + 6228 116365 + 6229 182189 + 6230 333765 + 6231 226603 + 6232 162739 + 6233 189261 + 6234 60635 + 6235 104733 + 6236 189093 + 6237 480189 + 6238 48909 + 6239 40635 + 6240 252813 + 6241 508165 + 6242 143069 + 6243 405483 + 6244 81579 + 6245 311859 + 6246 111317 + 6247 454805 + 6248 441301 + 6249 292843 + 6250 266979 + 6251 184413 + 6252 414787 + 6253 367109 + 6254 498483 + 6255 66483 + 6256 234843 + 6257 138347 + 6258 305997 + 6259 316997 + 6260 313797 + 6261 109219 + 6262 289573 + 6263 287515 + 6264 523469 + 6265 198173 + 6266 146283 + 6267 326195 + 6268 151907 + 6269 410307 + 6270 32931 + 6271 136035 + 6272 106125 + 6273 151675 + 6274 27803 + 6275 336325 + 6276 375923 + 6277 32155 + 6278 428867 + 6279 390947 + 6280 62699 + 6281 342075 + 6282 332907 + 6283 288413 + 6284 12579 + 6285 353963 + 6286 153749 + 6287 330099 + 6288 97165 + 6289 261405 + 6290 89669 + 6291 426843 + 6292 492621 + 6293 74573 + 6294 363819 + 6295 113621 + 6296 247645 + 6297 393699 + 6298 367845 + 6299 258291 + 6300 460283 + 6301 109413 + 6302 271565 + 6303 72293 + 6304 457795 + 6305 359075 + 6306 393779 + 6307 232131 + 6308 67869 + 6309 454997 + 6310 432805 + 6311 207653 + 6312 340061 + 6313 60309 + 6314 196387 + 6315 269389 + 6316 417643 + 6317 339515 + 6318 127957 + 6319 181867 + 6320 316059 + 6321 441549 + 6322 192187 + 6323 304195 + 6324 64397 + 6325 478059 + 6326 373605 + 6327 76189 + 6328 480491 + 6329 211789 + 6330 260821 + 6331 61731 + 6332 116293 + 6333 23363 + 6334 198739 + 6335 521109 + 6336 30661 + 6337 111299 + 6338 184197 + 6339 244195 + 6340 177835 + 6341 349691 + 6342 210331 + 6343 131981 + 6344 116515 + 6345 495987 + 6346 415651 + 6347 176389 + 6348 13773 + 6349 55275 + 6350 106413 + 6351 162883 + 6352 504909 + 6353 273693 + 6354 86459 + 6355 76965 + 6356 126181 + 6357 233635 + 6358 317731 + 6359 214221 + 6360 268965 + 6361 187349 + 6362 33221 + 6363 81115 + 6364 169613 + 6365 180467 + 6366 201883 + 6367 24427 + 6368 127651 + 6369 237909 + 6370 435123 + 6371 265067 + 6372 503083 + 6373 250469 + 6374 117021 + 6375 164757 + 6376 381411 + 6377 154445 + 6378 435011 + 6379 387861 + 6380 241309 + 6381 290757 + 6382 449893 + 6383 267059 + 6384 382067 + 6385 408227 + 6386 109747 + 6387 403397 + 6388 408259 + 6389 187173 + 6390 423019 + 6391 90981 + 6392 352477 + 6393 28109 + 6394 456261 + 6395 67067 + 6396 394923 + 6397 139357 + 6398 325483 + 6399 275523 + 6400 10693 + 6401 212701 + 6402 213973 + 6403 439595 + 6404 314483 + 6405 144099 + 6406 247787 + 6407 320923 + 6408 343739 + 6409 232371 + 6410 243469 + 6411 160611 + 6412 158515 + 6413 521051 + 6414 275803 + 6415 479685 + 6416 277733 + 6417 340339 + 6418 252067 + 6419 210461 + 6420 7949 + 6421 85069 + 6422 387947 + 6423 242621 + 6424 119963 + 6425 343621 + 6426 379443 + 6427 294067 + 6428 186461 + 6429 429819 + 6430 473893 + 6431 157917 + 6432 122539 + 6433 420821 + 6434 303253 + 6435 435435 + 6436 496989 + 6437 220045 + 6438 1131 + 6439 43525 + 6440 230083 + 6441 106579 + 6442 183595 + 6443 286237 + 6444 129309 + 6445 504421 + 6446 272443 + 6447 15565 + 6448 436565 + 6449 412019 + 6450 344981 + 6451 463717 + 6452 261853 + 6453 242403 + 6454 360427 + 6455 153157 + 6456 467803 + 6457 422451 + 6458 121677 + 6459 176581 + 6460 101595 + 6461 382141 + 6462 498483 + 6463 347059 + 6464 458397 + 6465 45851 + 6466 266077 + 6467 228005 + 6468 165181 + 6469 9283 + 6470 287629 + 6471 181397 + 6472 231133 + 6473 167269 + 6474 295747 + 6475 253731 + 6476 445029 + 6477 390379 + 6478 448363 + 6479 320555 + 6480 219619 + 6481 400451 + 6482 402587 + 6483 257965 + 6484 100331 + 6485 154117 + 6486 308339 + 6487 134251 + 6488 355909 + 6489 99251 + 6490 418517 + 6491 219477 + 6492 501819 + 6493 65443 + 6494 395347 + 6495 330099 + 6496 97485 + 6497 9787 + 6498 102643 + 6499 249011 + 6500 439645 + 6501 300493 + 6502 36005 + 6503 276195 + 6504 491861 + 6505 195813 + 6506 82211 + 6507 418923 + 6508 180373 + 6509 480555 + 6510 450885 + 6511 400541 + 6512 391973 + 6513 285981 + 6514 149947 + 6515 191643 + 6516 33475 + 6517 432349 + 6518 338765 + 6519 405957 + 6520 82483 + 6521 261773 + 6522 442851 + 6523 181453 + 6524 379557 + 6525 400427 + 6526 517197 + 6527 483205 + 6528 264709 + 6529 408461 + 6530 492955 + 6531 305173 + 6532 5053 + 6533 380667 + 6534 133213 + 6535 151469 + 6536 198715 + 6537 435093 + 6538 513173 + 6539 467891 + 6540 118443 + 6541 381603 + 6542 72469 + 6543 314779 + 6544 69875 + 6545 13355 + 6546 225635 + 6547 495173 + 6548 437453 + 6549 261235 + 6550 269883 + 6551 410405 + 6552 222749 + 6553 62285 + 6554 243861 + 6555 20701 + 6556 385083 + 6557 115355 + 6558 179389 + 6559 373915 + 6560 298269 + 6561 43299 + 6562 250581 + 6563 2389 + 6564 276851 + 6565 150421 + 6566 165445 + 6567 141597 + 6568 17243 + 6569 353741 + 6570 428739 + 6571 437477 + 6572 506813 + 6573 316763 + 6574 165083 + 6575 512291 + 6576 68403 + 6577 62643 + 6578 301731 + 6579 226419 + 6580 92677 + 6581 16221 + 6582 474267 + 6583 204651 + 6584 410557 + 6585 79893 + 6586 28347 + 6587 396365 + 6588 383069 + 6589 341795 + 6590 162405 + 6591 477973 + 6592 426067 + 6593 347243 + 6594 100293 + 6595 501843 + 6596 369123 + 6597 174805 + 6598 315371 + 6599 376461 + 6600 102853 + 6601 98645 + 6602 235371 + 6603 162739 + 6604 439485 + 6605 306219 + 6606 519485 + 6607 314483 + 6608 328811 + 6609 160035 + 6610 271155 + 6611 301499 + 6612 24819 + 6613 281557 + 6614 140971 + 6615 310557 + 6616 195883 + 6617 508763 + 6618 203269 + 6619 452203 + 6620 397979 + 6621 90205 + 6622 291685 + 6623 363699 + 6624 304277 + 6625 287859 + 6626 368077 + 6627 269093 + 6628 158515 + 6629 369435 + 6630 52291 + 6631 192069 + 6632 165603 + 6633 32155 + 6634 189789 + 6635 489693 + 6636 235037 + 6637 480909 + 6638 245307 + 6639 246963 + 6640 243653 + 6641 44973 + 6642 491259 + 6643 187045 + 6644 329165 + 6645 122075 + 6646 314475 + 6647 212045 + 6648 445205 + 6649 270691 + 6650 147235 + 6651 65685 + 6652 1179 + 6653 350915 + 6654 228509 + 6655 396221 + 6656 299333 + 6657 376491 + 6658 265067 + 6659 237859 + 6660 1435 + 6661 375693 + 6662 217827 + 6663 473067 + 6664 483491 + 6665 223685 + 6666 332877 + 6667 437043 + 6668 203587 + 6669 122085 + 6670 356835 + 6671 321195 + 6672 293845 + 6673 301781 + 6674 235003 + 6675 321293 + 6676 326075 + 6677 240533 + 6678 58203 + 6679 184691 + 6680 338597 + 6681 258291 + 6682 373939 + 6683 340531 + 6684 110499 + 6685 123605 + 6686 252579 + 6687 9061 + 6688 59243 + 6689 269883 + 6690 158835 + 6691 371493 + 6692 68813 + 6693 313285 + 6694 390379 + 6695 400701 + 6696 501923 + 6697 235037 + 6698 153885 + 6699 213435 + 6700 478387 + 6701 429123 + 6702 272013 + 6703 250803 + 6704 184197 + 6705 44139 + 6706 487133 + 6707 272997 + 6708 111459 + 6709 205539 + 6710 355179 + 6711 127771 + 6712 408115 + 6713 295133 + 6714 151701 + 6715 173211 + 6716 477525 + 6717 70771 + 6718 313861 + 6719 130405 + 6720 516013 + 6721 25917 + 6722 116643 + 6723 445605 + 6724 148557 + 6725 146325 + 6726 40517 + 6727 271155 + 6728 246851 + 6729 334805 + 6730 251613 + 6731 343451 + 6732 228005 + 6733 265885 + 6734 362555 + 6735 292843 + 6736 20821 + 6737 465715 + 6738 475589 + 6739 463683 + 6740 467427 + 6741 521173 + 6742 322859 + 6743 272301 + 6744 440763 + 6745 24819 + 6746 96773 + 6747 345323 + 6748 124123 + 6749 417117 + 6750 54117 + 6751 319227 + 6752 335501 + 6753 443277 + 6754 316237 + 6755 232515 + 6756 479795 + 6757 523371 + 6758 32747 + 6759 166173 + 6760 284451 + 6761 27725 + 6762 4245 + 6763 495291 + 6764 369445 + 6765 431283 + 6766 197981 + 6767 226419 + 6768 383429 + 6769 364627 + 6770 113893 + 6771 34445 + 6772 214699 + 6773 417501 + 6774 181453 + 6775 174955 + 6776 193251 + 6777 291995 + 6778 173355 + 6779 360355 + 6780 281917 + 6781 244659 + 6782 270395 + 6783 46491 + 6784 158653 + 6785 236437 + 6786 247325 + 6787 304709 + 6788 196267 + 6789 246213 + 6790 36005 + 6791 366499 + 6792 206171 + 6793 297523 + 6794 469699 + 6795 233635 + 6796 387131 + 6797 408781 + 6798 207829 + 6799 202731 + 6800 421667 + 6801 333973 + 6802 30803 + 6803 207365 + 6804 344547 + 6805 207637 + 6806 53005 + 6807 56677 + 6808 33981 + 6809 187173 + 6810 172989 + 6811 384155 + 6812 70771 + 6813 430805 + 6814 27469 + 6815 156595 + 6816 251619 + 6817 45973 + 6818 303717 + 6819 111035 + 6820 502435 + 6821 506227 + 6822 355557 + 6823 80213 + 6824 36573 + 6825 471123 + 6826 33941 + 6827 67363 + 6828 322725 + 6829 3187 + 6830 308181 + 6831 521421 + 6832 499259 + 6833 261405 + 6834 142555 + 6835 235925 + 6836 208635 + 6837 288091 + 6838 354867 + 6839 490675 + 6840 401733 + 6841 201059 + 6842 35763 + 6843 416661 + 6844 219427 + 6845 413547 + 6846 363365 + 6847 417421 + 6848 298667 + 6849 102643 + 6850 35259 + 6851 329115 + 6852 425117 + 6853 424453 + 6854 563 + 6855 353213 + 6856 259613 + 6857 124949 + 6858 299827 + 6859 127197 + 6860 335965 + 6861 433259 + 6862 10181 + 6863 13355 + 6864 517235 + 6865 120981 + 6866 310571 + 6867 84757 + 6868 207011 + 6869 381797 + 6870 385869 + 6871 404645 + 6872 113949 + 6873 60067 + 6874 429627 + 6875 58179 + 6876 340915 + 6877 458085 + 6878 262587 + 6879 439067 + 6880 64829 + 6881 61523 + 6882 104163 + 6883 431787 + 6884 356643 + 6885 214165 + 6886 133845 + 6887 206043 + 6888 174451 + 6889 344187 + 6890 275803 + 6891 460093 + 6892 335389 + 6893 484419 + 6894 120219 + 6895 449651 + 6896 494387 + 6897 473029 + 6898 62571 + 6899 375301 + 6900 309155 + 6901 316595 + 6902 220083 + 6903 420083 + 6904 22971 + 6905 300267 + 6906 264413 + 6907 24427 + 6908 413355 + 6909 99371 + 6910 84877 + 6911 21093 + 6912 136085 + 6913 257485 + 6914 271901 + 6915 159483 + 6916 475589 + 6917 273563 + 6918 426147 + 6919 199965 + 6920 201917 + 6921 15659 + 6922 270315 + 6923 192221 + 6924 40141 + 6925 429133 + 6926 519397 + 6927 29043 + 6928 140123 + 6929 86883 + 6930 213949 + 6931 130829 + 6932 513531 + 6933 355173 + 6934 431787 + 6935 157675 + 6936 240179 + 6937 262587 + 6938 319843 + 6939 292411 + 6940 154419 + 6941 359075 + 6942 163035 + 6943 181205 + 6944 174955 + 6945 357723 + 6946 239331 + 6947 490317 + 6948 479011 + 6949 147781 + 6950 248613 + 6951 409517 + 6952 382917 + 6953 361587 + 6954 159651 + 6955 145259 + 6956 136259 + 6957 95885 + 6958 343147 + 6959 347677 + 6960 5437 + 6961 201549 + 6962 365645 + 6963 255211 + 6964 180963 + 6965 186811 + 6966 360389 + 6967 9627 + 6968 27541 + 6969 311005 + 6970 315733 + 6971 441045 + 6972 320397 + 6973 200251 + 6974 238387 + 6975 163133 + 6976 451123 + 6977 155797 + 6978 83099 + 6979 367973 + 6980 268579 + 6981 168019 + 6982 44261 + 6983 470083 + 6984 170005 + 6985 113621 + 6986 485893 + 6987 136875 + 6988 123827 + 6989 3371 + 6990 195043 + 6991 426843 + 6992 146085 + 6993 409507 + 6994 456787 + 6995 204579 + 6996 297835 + 6997 250299 + 6998 475507 + 6999 85773 + 7000 207653 + 7001 189789 + 7002 17229 + 7003 254821 + 7004 238699 + 7005 335517 + 7006 481339 + 7007 361587 + 7008 187187 + 7009 56891 + 7010 269723 + 7011 29507 + 7012 27413 + 7013 456867 + 7014 2995 + 7015 153885 + 7016 98043 + 7017 283491 + 7018 59763 + 7019 113893 + 7020 322845 + 7021 123003 + 7022 338363 + 7023 363109 + 7024 463139 + 7025 72909 + 7026 404587 + 7027 441155 + 7028 269245 + 7029 439757 + 7030 341309 + 7031 335531 + 7032 152461 + 7033 402939 + 7034 85867 + 7035 40635 + 7036 64579 + 7037 296285 + 7038 220203 + 7039 99173 + 7040 176349 + 7041 431283 + 7042 315229 + 7043 244813 + 7044 293317 + 7045 146085 + 7046 202731 + 7047 284189 + 7048 163597 + 7049 348965 + 7050 508763 + 7051 339405 + 7052 271509 + 7053 291541 + 7054 473429 + 7055 207069 + 7056 515029 + 7057 455835 + 7058 30869 + 7059 402547 + 7060 432221 + 7061 377507 + 7062 185549 + 7063 202811 + 7064 219925 + 7065 339515 + 7066 515483 + 7067 332259 + 7068 437355 + 7069 178461 + 7070 371635 + 7071 434843 + 7072 167091 + 7073 364987 + 7074 246115 + 7075 168675 + 7076 350579 + 7077 303021 + 7078 363749 + 7079 463139 + 7080 380109 + 7081 1605 + 7082 372757 + 7083 166693 + 7084 292347 + 7085 44349 + 7086 506773 + 7087 14899 + 7088 289859 + 7089 399701 + 7090 38003 + 7091 449693 + 7092 80485 + 7093 452549 + 7094 4955 + 7095 422259 + 7096 424085 + 7097 280285 + 7098 183595 + 7099 432973 + 7100 60493 + 7101 466075 + 7102 172485 + 7103 241421 + 7104 155323 + 7105 418133 + 7106 125747 + 7107 382955 + 7108 366499 + 7109 187045 + 7110 481501 + 7111 83 + 7112 420821 + 7113 210155 + 7114 360597 + 7115 294003 + 7116 131989 + 7117 183515 + 7118 38429 + 7119 375997 + 7120 132395 + 7121 249117 + 7122 489915 + 7123 257381 + 7124 288251 + 7125 451355 + 7126 207723 + 7127 52403 + 7128 309923 + 7129 484507 + 7130 188707 + 7131 99163 + 7132 102139 + 7133 190749 + 7134 181325 + 7135 396749 + 7136 340925 + 7137 75693 + 7138 222525 + 7139 122717 + 7140 359965 + 7141 414139 + 7142 451691 + 7143 427661 + 7144 292923 + 7145 72293 + 7146 175675 + 7147 240525 + 7148 295731 + 7149 315299 + 7150 373827 + 7151 146213 + 7152 401629 + 7153 329051 + 7154 214699 + 7155 523341 + 7156 406571 + 7157 432973 + 7158 400701 + 7159 325069 + 7160 361621 + 7161 195813 + 7162 274515 + 7163 449835 + 7164 418133 + 7165 492389 + 7166 215061 + 7167 92995 + 7168 323435 + 7169 490261 + 7170 187187 + 7171 43525 + 7172 292643 + 7173 466653 + 7174 254869 + 7175 308109 + 7176 131811 + 7177 305827 + 7178 498853 + 7179 342259 + 7180 174523 + 7181 126605 + 7182 221797 + 7183 169925 + 7184 452155 + 7185 287525 + 7186 284189 + 7187 336115 + 7188 86997 + 7189 250957 + 7190 302147 + 7191 3771 + 7192 145259 + 7193 62307 + 7194 433331 + 7195 455835 + 7196 340531 + 7197 150421 + 7198 295267 + 7199 375693 + 7200 182613 + 7201 438365 + 7202 328499 + 7203 297637 + 7204 57797 + 7205 102341 + 7206 256371 + 7207 104733 + 7208 78915 + 7209 202139 + 7210 152781 + 7211 504251 + 7212 146213 + 7213 522531 + 7214 289475 + 7215 201045 + 7216 308147 + 7217 523029 + 7218 196525 + 7219 167019 + 7220 248653 + 7221 372253 + 7222 47829 + 7223 264709 + 7224 394389 + 7225 520987 + 7226 224573 + 7227 188707 + 7228 516763 + 7229 224541 + 7230 209765 + 7231 489565 + 7232 471765 + 7233 205939 + 7234 453051 + 7235 240805 + 7236 112619 + 7237 39475 + 7238 69853 + 7239 226347 + 7240 55147 + 7241 296797 + 7242 144733 + 7243 336325 + 7244 398683 + 7245 430925 + 7246 317499 + 7247 330645 + 7248 308301 + 7249 69277 + 7250 491763 + 7251 203037 + 7252 190093 + 7253 437453 + 7254 152461 + 7255 34475 + 7256 484763 + 7257 247325 + 7258 103357 + 7259 477701 + 7260 310117 + 7261 188509 + 7262 503659 + 7263 339405 + 7264 286981 + 7265 125733 + 7266 516539 + 7267 400541 + 7268 229499 + 7269 423147 + 7270 285981 + 7271 283571 + 7272 65373 + 7273 279323 + 7274 29043 + 7275 152781 + 7276 85725 + 7277 260117 + 7278 10461 + 7279 45973 + 7280 394389 + 7281 76965 + 7282 16043 + 7283 183451 + 7284 64397 + 7285 35651 + 7286 359995 + 7287 64333 + 7288 220203 + 7289 53005 + 7290 488797 + 7291 164565 + 7292 131685 + 7293 110917 + 7294 489915 + 7295 357723 + 7296 203995 + 7297 513091 + 7298 222525 + 7299 319971 + 7300 68147 + 7301 333741 + 7302 169925 + 7303 148587 + 7304 181755 + 7305 319571 + 7306 220083 + 7307 344285 + 7308 80853 + 7309 498755 + 7310 245909 + 7311 61701 + 7312 287011 + 7313 394923 + 7314 225259 + 7315 407181 + 7316 492749 + 7317 263907 + 7318 152219 + 7319 127771 + 7320 138355 + 7321 468203 + 7322 298269 + 7323 300331 + 7324 492467 + 7325 154213 + 7326 226197 + 7327 380485 + 7328 173597 + 7329 351411 + 7330 12741 + 7331 11469 + 7332 260931 + 7333 392037 + 7334 84843 + 7335 62683 + 7336 207523 + 7337 74435 + 7338 117645 + 7339 223291 + 7340 16043 + 7341 483421 + 7342 106413 + 7343 117925 + 7344 369203 + 7345 509731 + 7346 398683 + 7347 305997 + 7348 80325 + 7349 443973 + 7350 319859 + 7351 307491 + 7352 112619 + 7353 375301 + 7354 123605 + 7355 209765 + 7356 514197 + 7357 297917 + 7358 320555 + 7359 319971 + 7360 163101 + 7361 330645 + 7362 208653 + 7363 176483 + 7364 60339 + 7365 251563 + 7366 37659 + 7367 509859 + 7368 492749 + 7369 314779 + 7370 300267 + 7371 184483 + 7372 315451 + 7373 261187 + 7374 267075 + 7375 72387 + 7376 517235 + 7377 474269 + 7378 328485 + 7379 405957 + 7380 269389 + 7381 457893 + 7382 125995 + 7383 224363 + 7384 316763 + 7385 351437 + 7386 345741 + 7387 80157 + 7388 233323 + 7389 372515 + 7390 211507 + 7391 482885 + 7392 83355 + 7393 27493 + 7394 247133 + 7395 233131 + 7396 117611 + 7397 170467 + 7398 248653 + 7399 381011 + 7400 175461 + 7401 33059 + 7402 463757 + 7403 79813 + 7404 124411 + 7405 6869 + 7406 292421 + 7407 53955 + 7408 125733 + 7409 179899 + 7410 512845 + 7411 23619 + 7412 29235 + 7413 350229 + 7414 350291 + 7415 60309 + 7416 72859 + 7417 389213 + 7418 102853 + 7419 70357 + 7420 167693 + 7421 404403 + 7422 378091 + 7423 34965 + 7424 260437 + 7425 248099 + 7426 156387 + 7427 293845 + 7428 215859 + 7429 504947 + 7430 432349 + 7431 355557 + 7432 4955 + 7433 180203 + 7434 384541 + 7435 282253 + 7436 48235 + 7437 467891 + 7438 316059 + 7439 505915 + 7440 360093 + 7441 39429 + 7442 328525 + 7443 313787 + 7444 328499 + 7445 85725 + 7446 84843 + 7447 151469 + 7448 224475 + 7449 214755 + 7450 105125 + 7451 191171 + 7452 313251 + 7453 233131 + 7454 13773 + 7455 116365 + 7456 200251 + 7457 433563 + 7458 17293 + 7459 282885 + 7460 60349 + 7461 90981 + 7462 429859 + 7463 156851 + 7464 193885 + 7465 233323 + 7466 226197 + 7467 458427 + 7468 310557 + 7469 296477 + 7470 269611 + 7471 395285 + 7472 435435 + 7473 105253 + 7474 144573 + 7475 144317 + 7476 255131 + 7477 228933 + 7478 292251 + 7479 445669 + 7480 104107 + 7481 240525 + 7482 215859 + 7483 37731 + 7484 428979 + 7485 299251 + 7486 394197 + 7487 361579 + 7488 344923 + 7489 311005 + 7490 485893 + 7491 563 + 7492 202915 + 7493 444267 + 7494 79419 + 7495 212045 + 7496 190749 + 7497 105125 + 7498 357171 + 7499 149445 + 7500 467651 + 7501 447531 + 7502 127139 + 7503 465339 + 7504 442723 + 7505 498845 + 7506 451733 + 7507 480573 + 7508 450219 + 7509 61347 + 7510 59875 + 7511 172485 + 7512 272013 + 7513 410557 + 7514 60067 + 7515 381011 + 7516 383539 + 7517 308005 + 7518 258893 + 7519 72859 + 7520 86875 + 7521 328819 + 7522 450781 + 7523 322845 + 7524 451355 + 7525 9627 + 7526 67563 + 7527 287979 + 7528 253035 + 7529 37589 + 7530 343621 + 7531 360157 + 7532 523085 + 7533 57285 + 7534 211763 + 7535 164211 + 7536 280235 + 7537 156595 + 7538 245909 + 7539 130829 + 7540 307683 + 7541 71163 + 7542 59613 + 7543 166693 + 7544 510821 + 7545 207765 + 7546 242877 + 7547 439643 + 7548 107163 + 7549 482005 + 7550 283187 + 7551 335133 + 7552 435277 + 7553 416883 + 7554 155387 + 7555 36411 + 7556 484501 + 7557 140869 + 7558 55581 + 7559 411707 + 7560 326589 + 7561 422501 + 7562 298189 + 7563 140331 + 7564 46429 + 7565 364461 + 7566 360157 + 7567 57685 + 7568 255211 + 7569 399117 + 7570 100723 + 7571 84877 + 7572 473701 + 7573 363685 + 7574 441573 + 7575 434269 + 7576 144205 + 7577 41877 + 7578 109723 + 7579 244955 + 7580 462141 + 7581 400451 + 7582 331451 + 7583 336021 + 7584 396829 + 7585 440661 + 7586 479011 + 7587 459853 + 7588 150021 + 7589 72747 + 7590 17203 + 7591 440341 + 7592 370011 + 7593 431675 + 7594 90029 + 7595 297251 + 7596 56619 + 7597 331333 + 7598 365107 + 7599 94947 + 7600 484501 + 7601 189619 + 7602 308765 + 7603 83163 + 7604 148587 + 7605 342075 + 7606 124109 + 7607 315021 + 7608 177219 + 7609 228197 + 7610 311203 + 7611 144701 + 7612 449651 + 7613 503355 + 7614 310941 + 7615 407109 + 7616 371789 + 7617 28915 + 7618 450219 + 7619 253085 + 7620 125077 + 7621 241373 + 7622 396173 + 7623 129813 + 7624 45915 + 7625 166869 + 7626 203427 + 7627 316309 + 7628 281189 + 7629 345595 + 7630 209691 + 7631 122035 + 7632 501389 + 7633 232515 + 7634 43571 + 7635 393477 + 7636 43349 + 7637 203037 + 7638 9061 + 7639 204579 + 7640 198739 + 7641 67563 + 7642 439643 + 7643 284765 + 7644 265435 + 7645 44237 + 7646 153659 + 7647 234139 + 7648 487507 + 7649 66637 + 7650 65685 + 7651 64323 + 7652 353579 + 7653 331333 + 7654 503355 + 7655 308765 + 7656 77085 + 7657 420757 + 7658 468147 + 7659 413987 + 7660 440541 + 7661 135147 + 7662 114125 + 7663 124109 + 7664 338363 + 7665 205939 + 7666 84773 + 7667 306875 + 7668 27499 + 7669 12045 + 7670 332389 + 7671 315229 + 7672 340915 + 7673 490795 + 7674 210155 + 7675 309923 + 7676 416933 + 7677 361243 + 7678 495957 + 7679 428549 + 7680 13155 + 7681 80741 + 7682 277693 + 7683 172989 + 7684 103741 + 7685 388053 + 7686 15467 + 7687 307683 + 7688 354155 + 7689 54925 + 7690 256341 + 7691 325069 + 7692 215325 + 7693 247131 + 7694 384669 + 7695 130619 + 7696 522181 + 7697 12995 + 7698 17293 + 7699 121677 + 7700 464077 + 7701 38299 + 7702 413987 + 7703 414787 + 7704 355483 + 7705 271467 + 7706 89373 + 7707 275533 + 7708 488405 + 7709 280133 + 7710 341795 + 7711 396173 + 7712 483491 + 7713 385883 + 7714 452091 + 7715 190443 + 7716 432221 + 7717 184691 + 7718 430805 + 7719 453061 + 7720 187469 + 7721 213075 + 7722 215189 + 7723 430021 + 7724 162581 + 7725 105253 + 7726 321053 + 7727 306355 + 7728 384205 + 7729 439645 + 7730 208653 + 7731 196267 + 7732 209691 + 7733 124053 + 7734 483421 + 7735 213605 + 7736 470083 + 7737 414139 + 7738 162923 + 7739 228509 + 7740 255131 + 7741 285915 + 7742 98083 + 7743 5309 + 7744 64165 + 7745 119523 + 7746 315845 + 7747 29235 + 7748 113347 + 7749 139555 + 7750 105637 + 7751 50291 + 7752 39731 + 7753 494549 + 7754 2389 + 7755 115355 + 7756 38971 + 7757 18803 + 7758 118635 + 7759 191077 + 7760 409117 + 7761 46941 + 7762 92445 + 7763 355483 + 7764 165099 + 7765 117683 + 7766 504069 + 7767 264435 + 7768 407109 + 7769 452091 + 7770 16467 + 7771 297877 + 7772 385869 + 7773 238941 + 7774 344789 + 7775 99789 + 7776 429171 + 7777 506731 + 7778 246851 + 7779 31973 + 7780 348867 + 7781 384077 + 7782 126157 + 7783 483003 + 7784 84773 + 7785 242117 + 7786 454947 + 7787 119987 + 7788 470669 + 7789 127331 + 7790 234843 + 7791 101661 + 7792 22507 + 7793 222101 + 7794 381269 + 7795 182755 + 7796 181083 + 7797 233565 + 7798 219077 + 7799 319245 + 7800 64579 + 7801 111035 + 7802 498845 + 7803 50291 + 7804 523059 + 7805 310733 + 7806 281445 + 7807 267045 + 7808 294763 + 7809 447531 + 7810 177835 + 7811 481501 + 7812 341499 + 7813 320923 + 7814 101077 + 7815 26333 + 7816 149051 + 7817 22507 + 7818 465267 + 7819 119579 + 7820 426067 + 7821 255557 + 7822 486323 + 7823 5269 + 7824 303325 + 7825 4941 + 7826 410469 + 7827 227043 + 7828 344981 + 7829 508165 + 7830 10915 + 7831 174869 + 7832 126237 + 7833 139555 + 7834 299827 + 7835 64165 + 7836 523341 + 7837 521173 + 7838 451173 + 7839 254909 + 7840 103613 + 7841 496755 + 7842 265787 + 7843 256163 + 7844 377557 + 7845 143211 + 7846 357837 + 7847 430563 + 7848 89869 + 7849 420757 + 7850 438597 + 7851 237909 + 7852 15043 + 7853 174021 + 7854 341499 + 7855 158885 + 7856 172941 + 7857 29875 + 7858 487517 + 7859 64293 + 7860 258027 + 7861 72499 + 7862 104005 + 7863 179853 + 7864 158653 + 7865 510821 + 7866 378797 + 7867 251563 + 7868 75293 + 7869 437477 + 7870 172739 + 7871 310733 + 7872 5269 + 7873 389787 + 7874 12579 + 7875 91547 + 7876 74171 + 7877 454573 + 7878 470819 + 7879 136845 + 7880 302003 + 7881 360901 + 7882 264043 + 7883 242923 + 7884 457379 + 7885 306395 + 7886 257131 + 7887 367573 + 7888 167091 + 7889 467299 + 7890 127845 + 7891 130253 + 7892 178461 + 7893 62307 + 7894 496755 + 7895 178235 + 7896 302147 + 7897 150813 + 7898 22549 + 7899 83291 + 7900 457893 + 7901 339021 + 7902 396587 + 7903 36957 + 7904 58475 + 7905 296443 + 7906 436565 + 7907 413939 + 7908 369435 + 7909 134877 + 7910 51907 + 7911 301891 + 7912 210125 + 7913 381269 + 7914 64293 + 7915 433693 + 7916 353741 + 7917 222779 + 7918 358251 + 7919 128581 + 7920 387797 + 7921 140331 + 7922 363341 + 7923 10915 + 7924 427661 + 7925 292643 + 7926 252693 + 7927 273563 + 7928 417629 + 7929 451173 + 7930 273293 + 7931 30661 + 7932 212253 + 7933 473963 + 7934 37317 + 7935 517197 + 7936 86875 + 7937 397875 + 7938 392773 + 7939 316309 + 7940 454573 + 7941 112157 + 7942 374171 + 7943 234339 + 7944 115645 + 7945 291523 + 7946 509435 + 7947 268965 + 7948 154701 + 7949 470221 + 7950 215325 + 7951 306395 + 7952 287629 + 7953 144205 + 7954 214947 + 7955 397979 + 7956 336021 + 7957 499933 + 7958 228197 + 7959 123205 + 7960 58475 + 7961 219477 + 7962 134877 + 7963 31973 + 7964 470315 + 7965 78915 + 7966 126605 + 7967 22549 + 7968 78179 + 7969 347179 + 7970 446725 + 7971 286477 + 7972 428475 + 7973 200763 + 7974 214195 + 7975 314939 + 7976 259613 + 7977 480491 + 7978 464077 + 7979 127811 + 7980 164181 + 7981 447837 + 7982 175389 + 7983 105357 + 7984 144603 + 7985 473963 + 7986 467803 + 7987 480603 + 7988 470957 + 7989 211651 + 7990 154701 + 7991 435093 + 7992 16291 + 7993 391539 + 7994 456763 + 7995 199269 + 7996 127845 + 7997 5053 + 7998 111459 + 7999 230907 + 8000 101581 + 8001 409309 + 8002 336435 + 8003 179781 + 8004 28523 + 8005 323363 + 8006 29803 + 8007 40115 + 8008 377933 + 8009 261077 + 8010 108787 + 8011 399701 + 8012 429171 + 8013 133955 + 8014 168549 + 8015 335419 + 8016 273637 + 8017 270075 + 8018 16467 + 8019 54427 + 8020 197867 + 8021 226085 + 8022 488797 + 8023 310571 + 8024 227613 + 8025 472131 + 8026 71117 + 8027 418275 + 8028 236829 + 8029 23205 + 8030 160661 + 8031 278869 + 8032 18803 + 8033 244531 + 8034 214131 + 8035 460579 + 8036 104005 + 8037 95381 + 8038 146597 + 8039 261853 + 8040 286477 + 8041 107477 + 8042 246963 + 8043 67605 + 8044 211093 + 8045 13819 + 8046 29619 + 8047 144027 + 8048 154779 + 8049 409245 + 8050 84027 + 8051 376995 + 8052 63005 + 8053 292251 + 8054 33221 + 8055 319859 + 8056 340925 + 8057 44349 + 8058 300765 + 8059 52805 + 8060 97485 + 8061 43813 + 8062 204005 + 8063 114595 + 8064 509035 + 8065 468651 + 8066 54349 + 8067 166869 + 8068 342805 + 8069 463757 + 8070 46379 + 8071 273693 + 8072 143211 + 8073 397875 + 8074 48931 + 8075 23205 + 8076 511877 + 8077 341309 + 8078 260771 + 8079 143035 + 8080 201549 + 8081 27493 + 8082 67605 + 8083 105357 + 8084 362949 + 8085 122963 + 8086 498499 + 8087 284059 + 8088 409309 + 8089 523371 + 8090 244531 + 8091 317957 + 8092 20821 + 8093 449693 + 8094 47547 + 8095 222043 + 8096 14395 + 8097 417067 + 8098 95381 + 8099 190179 + 8100 296397 + 8101 430885 + 8102 103357 + 8103 397069 + 8104 263245 + 8105 136845 + 8106 74931 + 8107 136733 + 8108 130619 + 8109 68813 + 8110 273637 + 8111 418661 + 8112 335133 + 8113 102755 + 8114 13155 + 8115 34965 + 8116 29619 + 8117 421725 + 8118 345323 + 8119 179781 + 8120 74435 + 8121 474069 + 8122 387981 + 8123 134251 + 8124 453283 + 8125 468651 + 8126 512291 + 8127 168549 + 8128 88285 + 8129 49523 + 8130 521563 + 8131 3533 + 8132 316483 + 8133 445333 + 8134 230907 + 8135 287963 + 8136 364451 + 8137 95437 + 8138 398171 + 8139 358341 + 8140 295395 + 8141 300181 + 8142 103741 + 8143 122963 + 8144 164181 + 8145 186811 + 8146 3371 + 8147 443163 + 8148 62643 + 8149 227613 + 8150 376165 + 8151 172941 + 8152 385477 + 8153 305235 + 8154 59299 + 8155 12309 + 8156 310117 + 8157 426133 + 8158 17869 + 8159 508861 + 8160 446139 + 8161 41907 + 8162 245517 + 8163 319227 + 8164 247787 + 8165 364835 + 8166 488269 + 8167 251533 + 8168 326875 + 8169 78045 + 8170 347421 + 8171 344933 + 8172 324403 + 8173 480603 + 8174 416933 + 8175 177659 + 8176 343147 + 8177 341107 + 8178 39701 + 8179 223573 + 8180 35763 + 8181 394197 + 8182 91547 + 8183 292189 + 8184 260821 + 8185 210461 + 8186 509117 + 8187 171973 + 8188 268139 + 8189 255557 + 8190 476731 + 8191 112661 + 8192 497501 + 8193 302237 + 8194 95437 + 8195 433821 + 8196 340339 + 8197 364835 + 8198 495859 + 8199 55237 + 8200 106043 + 8201 40115 + 8202 418923 + 8203 43813 + 8204 65443 + 8205 57907 + 8206 377275 + 8207 93251 + 8208 474069 + 8209 107235 + 8210 173171 + 8211 193219 + 8212 352597 + 8213 201499 + 8214 304277 + 8215 295395 + 8216 451285 + 8217 348077 + 8218 62309 + 8219 489251 + 8220 27725 + 8221 426133 + 8222 165099 + 8223 411035 + 8224 129309 + 8225 127835 + 8226 185851 + 8227 521563 + 8228 41779 + 8229 253035 + 8230 238941 + 8231 465267 + 8232 362837 + 8233 129971 + 8234 326589 + 8235 196829 + 8236 337051 + 8237 350771 + 8238 15043 + 8239 205605 + 8240 119987 + 8241 185229 + 8242 477627 + 8243 33435 + 8244 90403 + 8245 179611 + 8246 312509 + 8247 213973 + 8248 197061 + 8249 321053 + 8250 445291 + 8251 435405 + 8252 471123 + 8253 264133 + 8254 44795 + 8255 347421 + 8256 262469 + 8257 46861 + 8258 238699 + 8259 23333 + 8260 208101 + 8261 326813 + 8262 155307 + 8263 120043 + 8264 58483 + 8265 508861 + 8266 192069 + 8267 351411 + 8268 233565 + 8269 260771 + 8270 384875 + 8271 309619 + 8272 365269 + 8273 181171 + 8274 204557 + 8275 154779 + 8276 498853 + 8277 120315 + 8278 25643 + 8279 485397 + 8280 133797 + 8281 162923 + 8282 254515 + 8283 408781 + 8284 90403 + 8285 390827 + 8286 473701 + 8287 520413 + 8288 141597 + 8289 148557 + 8290 266693 + 8291 305301 + 8292 261661 + 8293 316483 + 8294 487507 + 8295 403397 + 8296 133827 + 8297 468549 + 8298 60635 + 8299 187677 + 8300 341107 + 8301 74941 + 8302 355029 + 8303 500915 + 8304 337051 + 8305 510869 + 8306 131443 + 8307 515301 + 8308 250211 + 8309 26333 + 8310 435405 + 8311 382523 + 8312 383851 + 8313 10803 + 8314 470877 + 8315 17755 + 8316 235499 + 8317 260613 + 8318 127835 + 8319 185885 + 8320 52907 + 8321 258915 + 8322 16291 + 8323 134211 + 8324 7485 + 8325 314829 + 8326 23333 + 8327 482885 + 8328 267307 + 8329 445029 + 8330 410419 + 8331 120043 + 8332 416691 + 8333 226189 + 8334 406421 + 8335 180515 + 8336 131917 + 8337 510627 + 8338 458995 + 8339 290363 + 8340 217957 + 8341 359709 + 8342 432499 + 8343 65797 + 8344 202811 + 8345 413547 + 8346 362837 + 8347 89387 + 8348 515301 + 8349 177891 + 8350 339021 + 8351 440099 + 8352 114075 + 8353 51363 + 8354 428941 + 8355 383851 + 8356 47547 + 8357 422109 + 8358 120315 + 8359 257965 + 8360 11621 + 8361 17755 + 8362 281765 + 8363 393699 + 8364 192187 + 8365 432917 + 8366 449429 + 8367 184029 + 8368 300237 + 8369 465741 + 8370 165019 + 8371 347179 + 8372 74685 + 8373 133827 + 8374 308443 + 8375 95581 + 8376 266147 + 8377 25139 + 8378 61781 + 8379 87915 + 8380 89021 + 8381 266611 + 8382 455109 + 8383 374171 + 8384 112661 + 8385 499653 + 8386 404403 + 8387 359709 + 8388 53603 + 8389 396403 + 8390 224435 + 8391 158179 + 8392 433259 + 8393 28229 + 8394 451365 + 8395 400195 + 8396 70451 + 8397 323341 + 8398 437403 + 8399 225501 + 8400 353323 + 8401 6485 + 8402 309619 + 8403 40165 + 8404 184029 + 8405 217813 + 8406 323435 + 8407 246899 + 8408 425117 + 8409 213939 + 8410 264981 + 8411 375973 + 8412 477125 + 8413 185493 + 8414 521787 + 8415 106579 + 8416 199099 + 8417 420083 + 8418 154117 + 8419 114075 + 8420 256677 + 8421 273203 + 8422 33899 + 8423 237661 + 8424 345437 + 8425 138525 + 8426 134211 + 8427 283803 + 8428 14899 + 8429 410307 + 8430 269995 + 8431 300771 + 8432 228133 + 8433 127429 + 8434 408755 + 8435 53811 + 8436 87581 + 8437 40141 + 8438 351389 + 8439 406421 + 8440 78925 + 8441 174451 + 8442 494525 + 8443 170691 + 8444 28229 + 8445 199909 + 8446 391781 + 8447 364627 + 8448 355213 + 8449 510293 + 8450 505915 + 8451 267307 + 8452 433915 + 8453 515805 + 8454 79147 + 8455 9723 + 8456 396109 + 8457 185493 + 8458 246565 + 8459 498765 + 8460 486053 + 8461 196387 + 8462 199845 + 8463 428011 + 8464 417421 + 8465 350651 + 8466 381171 + 8467 507549 + 8468 437403 + 8469 88157 + 8470 371997 + 8471 318571 + 8472 74987 + 8473 59243 + 8474 458269 + 8475 109867 + 8476 449893 + 8477 341341 + 8478 3187 + 8479 409147 + 8480 436787 + 8481 166173 + 8482 118621 + 8483 380109 + 8484 271293 + 8485 294587 + 8486 458461 + 8487 449765 + 8488 61589 + 8489 269995 + 8490 480445 + 8491 328811 + 8492 391781 + 8493 117605 + 8494 459853 + 8495 39979 + 8496 408371 + 8497 39133 + 8498 486053 + 8499 518123 + 8500 97101 + 8501 9723 + 8502 17523 + 8503 375973 + 8504 210603 + 8505 333765 + 8506 193219 + 8507 516013 + 8508 265435 + 8509 271901 + 8510 266147 + 8511 80243 + 8512 350651 + 8513 111155 + 8514 453061 + 8515 37731 + 8516 371997 + 8517 416619 + 8518 199613 + 8519 213939 + 8520 299877 + 8521 513805 + 8522 349403 + 8523 39893 + 8524 502435 + 8525 328525 + 8526 303829 + 8527 310037 + 8528 136085 + 8529 458461 + 8530 139877 + 8531 229637 + 8532 123323 + 8533 410053 + 8534 340211 + 8535 521421 + 8536 282253 + 8537 261005 + 8538 388163 + 8539 371205 + 8540 474987 + 8541 133179 + 8542 212971 + 8543 24917 + 8544 383197 + 8545 371523 + 8546 348077 + 8547 492003 + 8548 291611 + 8549 439131 + 8550 181355 + 8551 455859 + 8552 275533 + 8553 215717 + 8554 460093 + 8555 28109 + 8556 34475 + 8557 516003 + 8558 291555 + 8559 199525 + 8560 77603 + 8561 109157 + 8562 279595 + 8563 11469 + 8564 315683 + 8565 437363 + 8566 13893 + 8567 293739 + 8568 430885 + 8569 74987 + 8570 292493 + 8571 250773 + 8572 154275 + 8573 513323 + 8574 91875 + 8575 398259 + 8576 106949 + 8577 215189 + 8578 296477 + 8579 512845 + 8580 491875 + 8581 328549 + 8582 426651 + 8583 157717 + 8584 379443 + 8585 229459 + 8586 241221 + 8587 100869 + 8588 68403 + 8589 427973 + 8590 271293 + 8591 463987 + 8592 2853 + 8593 111299 + 8594 365339 + 8595 76117 + 8596 375965 + 8597 168795 + 8598 93917 + 8599 236843 + 8600 401165 + 8601 164211 + 8602 70371 + 8603 58715 + 8604 513131 + 8605 330563 + 8606 452771 + 8607 210331 + 8608 29931 + 8609 377779 + 8610 220731 + 8611 154829 + 8612 510627 + 8613 252971 + 8614 454805 + 8615 414021 + 8616 201045 + 8617 28451 + 8618 333341 + 8619 66627 + 8620 410469 + 8621 516003 + 8622 142747 + 8623 176187 + 8624 478387 + 8625 294003 + 8626 208635 + 8627 199099 + 8628 91213 + 8629 228459 + 8630 235891 + 8631 293739 + 8632 185125 + 8633 186611 + 8634 136035 + 8635 57907 + 8636 36573 + 8637 252611 + 8638 83 + 8639 80325 + 8640 100869 + 8641 513203 + 8642 168795 + 8643 510861 + 8644 447643 + 8645 384285 + 8646 271565 + 8647 117989 + 8648 116451 + 8649 371779 + 8650 145387 + 8651 247867 + 8652 174757 + 8653 182613 + 8654 39893 + 8655 303829 + 8656 479715 + 8657 2853 + 8658 178027 + 8659 143603 + 8660 29931 + 8661 123323 + 8662 482973 + 8663 404131 + 8664 510869 + 8665 212899 + 8666 500165 + 8667 390221 + 8668 351437 + 8669 77987 + 8670 282061 + 8671 162405 + 8672 499491 + 8673 292493 + 8674 372395 + 8675 502203 + 8676 368349 + 8677 390293 + 8678 335013 + 8679 75259 + 8680 261005 + 8681 185187 + 8682 37955 + 8683 328549 + 8684 252611 + 8685 44139 + 8686 99251 + 8687 384285 + 8688 447259 + 8689 173245 + 8690 236365 + 8691 383539 + 8692 53099 + 8693 461477 + 8694 110963 + 8695 98043 + 8696 44973 + 8697 272443 + 8698 333341 + 8699 312253 + 8700 157717 + 8701 123685 + 8702 347093 + 8703 437043 + 8704 11835 + 8705 351643 + 8706 140637 + 8707 390947 + 8708 224435 + 8709 54427 + 8710 315683 + 8711 459093 + 8712 262387 + 8713 15125 + 8714 352699 + 8715 312213 + 8716 437547 + 8717 164749 + 8718 67299 + 8719 39979 + 8720 63147 + 8721 312003 + 8722 314291 + 8723 84843 + 8724 335013 + 8725 211461 + 8726 441549 + 8727 226523 + 8728 523421 + 8729 223685 + 8730 282061 + 8731 481893 + 8732 502203 + 8733 484467 + 8734 153971 + 8735 279267 + 8736 387989 + 8737 505565 + 8738 93853 + 8739 45851 + 8740 45925 + 8741 352477 + 8742 282717 + 8743 270485 + 8744 345949 + 8745 58715 + 8746 31677 + 8747 410547 + 8748 343739 + 8749 373581 + 8750 345629 + 8751 312619 + 8752 124869 + 8753 61523 + 8754 202773 + 8755 510101 + 8756 41251 + 8757 428867 + 8758 121923 + 8759 478779 + 8760 326195 + 8761 288093 + 8762 267059 + 8763 101595 + 8764 347093 + 8765 365979 + 8766 15125 + 8767 242005 + 8768 105789 + 8769 72811 + 8770 97165 + 8771 481797 + 8772 86883 + 8773 412467 + 8774 437901 + 8775 89669 + 8776 396573 + 8777 320667 + 8778 303347 + 8779 91213 + 8780 173739 + 8781 291611 + 8782 209755 + 8783 521787 + 8784 293739 + 8785 381411 + 8786 304307 + 8787 342259 + 8788 165211 + 8789 163747 + 8790 17627 + 8791 376107 + 8792 497605 + 8793 240533 + 8794 232131 + 8795 426547 + 8796 289211 + 8797 153971 + 8798 409517 + 8799 41251 + 8800 202467 + 8801 365491 + 8802 494525 + 8803 49373 + 8804 396699 + 8805 220315 + 8806 323323 + 8807 70541 + 8808 131235 + 8809 211461 + 8810 241813 + 8811 394589 + 8812 371779 + 8813 480299 + 8814 269517 + 8815 60181 + 8816 479685 + 8817 497323 + 8818 198173 + 8819 191077 + 8820 49947 + 8821 203933 + 8822 138125 + 8823 45795 + 8824 72811 + 8825 162627 + 8826 209755 + 8827 152725 + 8828 9293 + 8829 408755 + 8830 274875 + 8831 264435 + 8832 210573 + 8833 108603 + 8834 469811 + 8835 233181 + 8836 410405 + 8837 235299 + 8838 445093 + 8839 352597 + 8840 157675 + 8841 43571 + 8842 229459 + 8843 312891 + 8844 365723 + 8845 52045 + 8846 44685 + 8847 394821 + 8848 68907 + 8849 105123 + 8850 55147 + 8851 56781 + 8852 31637 + 8853 64677 + 8854 385117 + 8855 120315 + 8856 180467 + 8857 398259 + 8858 21219 + 8859 45925 + 8860 4451 + 8861 17627 + 8862 46123 + 8863 369123 + 8864 60181 + 8865 274211 + 8866 293773 + 8867 449219 + 8868 145749 + 8869 357147 + 8870 521149 + 8871 242117 + 8872 183091 + 8873 258339 + 8874 275605 + 8875 120219 + 8876 474269 + 8877 496533 + 8878 288483 + 8879 194501 + 8880 451931 + 8881 357171 + 8882 278691 + 8883 448141 + 8884 519749 + 8885 437181 + 8886 340581 + 8887 93107 + 8888 179243 + 8889 507755 + 8890 161309 + 8891 96093 + 8892 469827 + 8893 422797 + 8894 450821 + 8895 312003 + 8896 354979 + 8897 455501 + 8898 35333 + 8899 390251 + 8900 236699 + 8901 135509 + 8902 480555 + 8903 105237 + 8904 266979 + 8905 286157 + 8906 106739 + 8907 394821 + 8908 82373 + 8909 233181 + 8910 247003 + 8911 523421 + 8912 152691 + 8913 437547 + 8914 135493 + 8915 238515 + 8916 294053 + 8917 115483 + 8918 132275 + 8919 275605 + 8920 501053 + 8921 43293 + 8922 33725 + 8923 445285 + 8924 271821 + 8925 144165 + 8926 391845 + 8927 17203 + 8928 323805 + 8929 373803 + 8930 202773 + 8931 59845 + 8932 241581 + 8933 208803 + 8934 427691 + 8935 109157 + 8936 6819 + 8937 496533 + 8938 274581 + 8939 345629 + 8940 371059 + 8941 100293 + 8942 44701 + 8943 93107 + 8944 96773 + 8945 240435 + 8946 454997 + 8947 243269 + 8948 254691 + 8949 126733 + 8950 507613 + 8951 203933 + 8952 49947 + 8953 491149 + 8954 294053 + 8955 2957 + 8956 105237 + 8957 480363 + 8958 8453 + 8959 455501 + 8960 265371 + 8961 271549 + 8962 433723 + 8963 388163 + 8964 426547 + 8965 337899 + 8966 173467 + 8967 216645 + 8968 85069 + 8969 241581 + 8970 221 + 8971 322765 + 8972 420517 + 8973 267483 + 8974 135261 + 8975 89021 + 8976 332259 + 8977 394283 + 8978 301205 + 8979 133179 + 8980 304307 + 8981 13205 + 8982 322053 + 8983 186611 + 8984 112981 + 8985 507613 + 8986 111317 + 8987 23667 + 8988 203627 + 8989 279267 + 8990 519013 + 8991 288093 + 8992 209755 + 8993 106125 + 8994 103995 + 8995 163133 + 8996 191717 + 8997 498611 + 8998 164645 + 8999 96819 + 9000 396699 + 9001 409259 + 9002 165667 + 9003 496845 + 9004 357917 + 9005 23363 + 9006 17643 + 9007 20317 + 9008 364693 + 9009 267221 + 9010 349299 + 9011 11421 + 9012 61883 + 9013 448141 + 9014 523835 + 9015 33725 + 9016 382269 + 9017 31637 + 9018 502939 + 9019 364301 + 9020 81979 + 9021 154445 + 9022 243269 + 9023 437981 + 9024 465997 + 9025 402843 + 9026 5419 + 9027 326507 + 9028 256675 + 9029 239901 + 9030 124251 + 9031 402325 + 9032 335955 + 9033 72909 + 9034 311859 + 9035 396573 + 9036 205891 + 9037 142555 + 9038 16059 + 9039 11421 + 9040 119045 + 9041 322053 + 9042 334165 + 9043 220045 + 9044 247829 + 9045 286365 + 9046 54229 + 9047 302883 + 9048 271181 + 9049 162661 + 9050 12195 + 9051 277427 + 9052 480091 + 9053 355093 + 9054 266531 + 9055 180373 + 9056 192171 + 9057 386701 + 9058 130347 + 9059 196155 + 9060 473029 + 9061 222749 + 9062 191717 + 9063 328923 + 9064 419397 + 9065 128205 + 9066 379123 + 9067 30043 + 9068 87083 + 9069 56213 + 9070 443741 + 9071 408861 + 9072 437363 + 9073 456091 + 9074 382141 + 9075 2211 + 9076 371395 + 9077 263013 + 9078 148547 + 9079 486477 + 9080 199109 + 9081 432645 + 9082 238387 + 9083 500579 + 9084 225523 + 9085 242837 + 9086 139827 + 9087 414309 + 9088 475507 + 9089 17301 + 9090 405795 + 9091 179379 + 9092 274875 + 9093 283581 + 9094 430787 + 9095 168019 + 9096 449421 + 9097 293205 + 9098 315299 + 9099 239557 + 9100 23717 + 9101 298525 + 9102 264043 + 9103 150293 + 9104 208101 + 9105 21581 + 9106 253731 + 9107 330533 + 9108 239901 + 9109 523563 + 9110 151099 + 9111 1677 + 9112 81579 + 9113 350883 + 9114 445093 + 9115 243149 + 9116 179093 + 9117 488627 + 9118 225635 + 9119 267845 + 9120 87083 + 9121 156877 + 9122 408861 + 9123 482149 + 9124 247829 + 9125 256517 diff --git a/torchquad/integration/qmc.py b/torchquad/integration/qmc.py index 9d28229b..0d667c11 100644 --- a/torchquad/integration/qmc.py +++ b/torchquad/integration/qmc.py @@ -91,3 +91,209 @@ def uniform(self, size, dtype): sampler = qmc.Sobol(d=dim, scramble=self._scramble, seed=self._seed) points = sampler.random(number_of_points) return anp.array(points, dtype=dtype, like=self._backend) + + +import numpy as np +from pathlib import Path + +DATA_DIR = Path(__file__).resolve().parent + + +def load_lattice_vector(d, filename="lattice-33002-1024-1048576.9125"): + """ + Load the first d components of the generating vector z + from a generating vectors file for rank-1 lattice rules. + + + The file must contain two columns: + dimension z_j + + Parameters + ---------- + d : int + Desired dimension. + filename : str + Path to the generating vectors file. + + Returns + ------- + z : np.ndarray + NumPy array [z1, z2, ..., zd] with dtype uint64. + """ + path = DATA_DIR / filename + if d <= 0: + raise ValueError("The dimension d must be strictly positive.") + + data = np.loadtxt(path, dtype=np.uint64) + + if data.ndim != 2 or data.shape[1] < 2: + raise ValueError("The file must contain at least two columns: dimension and z_j.") + + max_d = data.shape[0] + + if d > max_d: + raise ValueError( + f"Requested dimension d={d}, but the file contains only {max_d} components." + ) + + z = data[:d, 1] + + return z + + +import numbers + + +def _check_positive_whole_number(value, name): + """Accept any real number equal to a whole number (2, 2.0, np.float64(2.0), ...), + reject bool (a subtype of int in Python) and anything non-integral (2.5).""" + if isinstance(value, bool): + raise TypeError(f"{name} must be a number, but got a bool.") + if not isinstance(value, (numbers.Real, np.floating, np.integer)): + raise TypeError(f"{name} must be a real number, but got {type(value).__name__}.") + if float(value) != int(value): + raise ValueError(f"{name} must be a whole number, but got {value}.") + return int(value) + + +class Lattice: + """A randomly shifted rank-1 lattice low-discrepancy sampler. + + Pass an instance as the ``rng`` argument of :meth:`MonteCarlo.integrate` to + turn plain Monte Carlo into quasi-Monte Carlo (QMC). Rank-1 lattice points + cover the unit hypercube more evenly than pseudo-random draws, which can + reduce the integration error substantially for sufficiently smooth + integrands. + + Like :class:`RNG`, an instance exposes ``uniform(size, dtype)`` returning + points in ``[0, 1)`` as a PyTorch tensor, so it is a drop-in replacement for + the sampler ``MonteCarlo`` uses internally. + + The generating vector is loaded from the file + ``lattice-33002-1024-1048576.9125``, obtained from the *Lattice Rule + Generating Vectors* collection maintained by Frances Y. Kuo. This file + provides an extensible rank-1 lattice rule for dimensions up to 9125 and + sample sizes from 1024 to 1048576. + + The generating vector was constructed using a component-by-component (CBC) + algorithm. The construction minimizes, as much as possible, the + shift-averaged worst-case integration error in a weighted unanchored Sobolev + space. The file uses order-3 weights with + ``Gamma_1 = Gamma_2 = 1`` and ``Gamma_3 = 0.5``. + + For a generating vector ``z`` and ``N`` points, the ``i``-th lattice point + is computed componentwise as + + ``x_i = frac(i * z / N)``, + + where ``i = 0, ..., N - 1`` and ``frac`` denotes the fractional part. Since + this is an extensible lattice rule, this simple construction is valid when + the total number of points is an exact power of two. + + When ``shift=True``, a random shift is sampled uniformly from the unit + hypercube on every call to ``uniform`` (added modulo one to every lattice + point). This preserves the lattice structure while randomizing the point + set, making the resulting randomized QMC estimator unbiased for each call. + With a fixed ``seed``, the shift drawn on each call is identical, so + successive calls reproduce the same points; without a seed, each call + draws its own independent shift. + + As with plain Monte Carlo, the sample points are constants, so gradients + still flow through the integrand and the integration domain; only the point + placement differs. + + Notes: + - The dimension must be a whole number between 1 and 9125, inclusive + (e.g. ``5`` or ``5.0`` are both accepted; ``5.5`` is not). + - The number of points must be a whole number between 1024 and + 1048576, inclusive. + - The number of points should be a power of two for the simple + construction above to be valid for this extensible lattice rule. + - This sampler targets the eager :meth:`MonteCarlo.integrate` path, not + the JIT-compiled one (which builds its own RNG internally). + - The random shift uses a private ``torch.Generator``, not PyTorch's + global RNG state, so constructing or calling this sampler never + affects unrelated random draws elsewhere in your program. + """ + + def __init__(self, seed=None, shift=True): + """Initialize a rank-1 lattice sampler. + + Args: + seed (int or None, optional): Seed used to generate the random + shift, redrawn on every call to ``uniform``. A fixed seed + makes that draw reproducible across calls; if None, each + call gets an independent random shift. Defaults to None. + shift (bool, optional): Whether to apply a random shift modulo one + to the lattice points. Defaults to True. + """ + self._seed = seed + self._shift = shift + + def uniform(self, size, dtype): + """Draw rank-1 lattice points in ``[0, 1)``. + + Args: + size (list): Two-element ``[number_of_points, dim]`` shape. + dtype (torch dtype): Floating-point dtype of the returned tensor. + + Returns: + torch tensor: ``[number_of_points, dim]`` lattice points in + ``[0, 1)``. + + Raises: + ValueError: If the number of points is not between 1024 and + 1048576, or if the dimension is not between 1 and 9125, or if + either is not a whole number. + """ + import torch + + number_of_points = _check_positive_whole_number(size[0], "The number of points") + dim = _check_positive_whole_number(size[1], "The dimension") + + if not 1024 <= number_of_points <= 1048576: + raise ValueError( + "The number of points must be between 1024 and 1048576, " + f"but got {number_of_points}." + ) + + if not 1 <= dim <= 9125: + raise ValueError(f"The dimension must be between 1 and 9125, but got {dim}.") + + if number_of_points & (number_of_points - 1) != 0: + warnings.warn( + "The simple lattice construction used here requires the number " + f"of points to be a power of 2, but {number_of_points} was " + "requested.", + stacklevel=2, + ) + + device = torch.empty(0).device + + # z and index are kept in INT64 for the whole modular reduction, and + # only converted to `dtype` at the very last step. Computing + # (index * z) directly in `dtype` (e.g. float32, as requested by the + # caller) loses precision catastrophically for realistic generating + # vector magnitudes (millions) and sample sizes: verified to return + # completely wrong points (e.g. 0.0 instead of 0.6358) for a + # representative (i, z, N) triple in float32. int64 comfortably + # covers the largest possible product for this sampler's documented + # size limits (N <= 1048576, and generating vector entries typically + # well under 1e8). + z = torch.tensor(load_lattice_vector(d=dim), dtype=torch.int64) + index = torch.arange(number_of_points, dtype=torch.int64, device=device) + mod = (index[:, None] * z[None, :]) % number_of_points # (N, dim), exact + points = mod.to(dtype) / number_of_points + + if self._shift: + gen = torch.Generator(device=device) + if self._seed is not None: + gen.manual_seed(self._seed) + else: + gen.seed() # a fresh torch.Generator() otherwise keeps a fixed internal + # default seed, which would make every unseeded shift + # identical instead of independently random + shift_values = torch.rand(dim, generator=gen, device=device) + points = torch.remainder(points + shift_values.to(dtype), 1) + + return points.to(dtype)