RandomTree.jl -- Simulation on large random trees with Julia


I have been working on a software package RandomTree.jl that could effectively generate pretty large (\(10^8\) nodes) random trees, in particular Conditional Galton-Watson trees. The package is written in Julia, a language designed for high-performance-computation. It is high-level language that is as easy to use as Python, but also has performance in the same order of C (if you use it correctly).

I have experimented to implement this package with Python + Cython and Python + Numba. Both are quite impressive in terms of efficiency. But writing Cython code is so much like working in C that you lose the reason to use Python in the first place. While numba keeps things close to Python, unfortunately it is pretty slow at generating exponential random variables. Eventually I settled down in Julia and I have to say it's perhaps the best language to use for simulations and computations if you do not want to use C or CPP. It is definitely worth the time to learn it if you care about efficiency of your code.

None

How to use RandomTree.jl

Load the packages

In [1]:
using RandomTree
In [2]:
using BenchmarkTools # For testing the speed
In [3]:
using Statistics
In [4]:
using Plots
┌ Info: Recompiling stale cache file /home/xing/.julia/compiled/v1.1/Plots/ld3vC.ji for Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]
└ @ Base loading.jl:1184
In [5]:
using StatsBase

Genrate random trees

We generate a Catalan trees of size 5.

In [6]:
tree = CatalanTree(5)
degseq = degrees(tree)
println(degseq)
[2, 1, 1, 0, 0]

This tree is represented by its degree sequnce in depth-first-search order. It's corresponding to the following tree

In [7]:
drawtree(degseq, true)
Out[7]:
%3 1 1 2 2 1--2 5 5 1--5 3 3 2--3 4 4 3--4
┌ Warning: `getindex(o::PyObject, s::AbstractString)` is deprecated in favor of dot overloading (`getproperty`) so elements should now be accessed as e.g. `o."s"` instead of `o["s"]`.
│   caller = show(::IOContext{Base.GenericIOBuffer{Array{UInt8,1}}}, ::MIME{Symbol("image/svg+xml")}, ::PyCall.PyObject) at PyCall.jl:895
└ @ PyCall /home/xing/.julia/packages/PyCall/ttONZ/src/PyCall.jl:895

The algorithm for generting the degree sequneces is very fast. For example, for trees of size $10^6$, it take about 30ms

In [8]:
tree = CatalanTree(10^6)
@btime degrees(tree);
  15.767 ms (9 allocations: 15.26 MiB)

For Cayley tree and Binary tree (0 or 2 children), it's even faster

In [9]:
tree = CayleyTree(10^6)
@btime degrees(tree);
  10.855 ms (5 allocations: 7.65 MiB)
In [10]:
tree = BinaryTree(10^6)
@btime degrees(tree);
  10.569 ms (4 allocations: 7.63 MiB)

We can also generate fixed full-d-ary trees

In [11]:
tree = FullDAryTree(4, 2)
Out[11]:
Full 2-arry tree (height 4) of size 31
In [12]:
drawtree(tree)
Out[12]:
%3 1 2 1--2 17 1--17 3 2--3 10 2--10 4 3--4 7 3--7 5 4--5 6 4--6 8 7--8 9 7--9 11 10--11 14 10--14 12 11--12 13 11--13 15 14--15 16 14--16 18 17--18 25 17--25 19 18--19 22 18--22 20 19--20 21 19--21 23 22--23 24 22--24 26 25--26 29 25--29 27 26--27 28 26--28 30 29--30 31 29--31

Simulations on trees

Several types of simulation on random trees are provided. For example, it is know that the number of leaves in a Cayley tree of size $n$ has expectation $n e^{-1}$ and has a normal limit distribution. Let's see if it's true by generate 2000 samples.

In [13]:
tree = CayleyTree(10^6)
sim = LeafSimulator(tree)
Out[13]:
leaf number simulation of Cayley Tree of size 1000000
In [14]:
samples = simulation(sim, 2000);

The mean is about

In [15]:
mu = mean(samples)
Out[15]:
367880.4965

Comparing with theoretical expectaion.

In [16]:
mu/(10^6*exp(-1))
Out[16]:
1.0000028686804414

If we shift the samples by its mean and rescale by square root of the variance and draw a histogram, it does look a bit like a normal distribution.

In [17]:
sigma = std(samples)
samples_rescaled = @. (samples-mu)/sigma;
histogram(samples_rescaled)
Out[17]:
-2 0 2 4 0 50 100 150 y1

The moments also suggest a normal distribution.

In [18]:
print([round(moment(samples_rescaled, r), digits=3) for r in 1:7])
[0.0, 1.0, 0.088, 2.838, 0.97, 13.55, 11.872]

Drawing trees

To draw trees, you must have the graph drawing software Graphviz and this Python package installed.

If you want draw a tree from a degree sequence

In [19]:
drawtree([1, 1, 2, 0, 0], true)
Out[19]:
%3 1 1 2 2 1--2 3 3 2--3 4 4 3--4 5 5 3--5

If you want to draw some random trees

In [20]:
tree = CayleyTree(6)
drawtree(tree)
Out[20]:
%3 1 2 1--2 3 1--3 4 1--4 5 4--5 6 5--6

Conditional Galton-Watson trees are considered tall and skinny. Let's see it with our eyes.

In [21]:
tree = CayleyTree(1000)
drawtree(tree)
Out[21]:
%3 1 2 1--2 3 1--3 8 1--8 996 1--996 997 1--997 4 3--4 7 3--7 5 4--5 6 4--6 9 8--9 10 9--10 11 10--11 987 10--987 12 11--12 16 11--16 13 12--13 14 13--14 15 14--15 17 16--17 18 16--18 19 18--19 20 19--20 979 19--979 21 20--21 835 20--835 22 21--22 23 22--23 24 22--24 25 24--25 26 25--26 27 26--27 32 26--32 28 27--28 30 27--30 29 28--29 31 30--31 33 32--33 832 32--832 833 32--833 34 33--34 831 33--831 35 34--35 38 34--38 828 34--828 36 35--36 37 36--37 39 38--39 40 38--40 41 38--41 42 41--42 43 42--43 827 42--827 44 43--44 45 44--45 823 44--823 46 45--46 47 45--47 819 45--819 48 47--48 564 47--564 49 48--49 50 48--50 56 48--56 74 48--74 51 50--51 52 50--52 53 50--53 54 53--54 55 54--55 57 56--57 73 56--73 58 57--58 59 58--59 60 59--60 61 59--61 62 61--62 63 62--63 71 62--71 64 63--64 65 64--65 66 64--66 67 66--67 70 66--70 68 67--68 69 68--69 72 71--72 75 74--75 76 75--76 77 75--77 78 77--78 79 78--79 80 79--80 557 79--557 81 80--81 82 81--82 556 81--556 83 82--83 555 82--555 84 83--84 99 83--99 172 83--172 209 83--209 85 84--85 91 84--91 86 85--86 87 85--87 88 87--88 89 88--89 90 89--90 92 91--92 93 91--93 94 93--94 95 93--95 98 93--98 96 95--96 97 96--97 100 99--100 171 99--171 101 100--101 102 101--102 103 102--103 170 102--170 104 103--104 105 103--105 106 105--106 151 105--151 107 106--107 108 107--108 109 108--109 110 108--110 111 110--111 112 111--112 113 112--113 130 112--130 137 112--137 114 113--114 129 113--129 115 114--115 116 115--116 119 115--119 117 116--117 118 117--118 120 119--120 121 120--121 127 120--127 122 121--122 125 121--125 123 122--123 124 122--124 126 125--126 128 127--128 131 130--131 132 131--132 134 131--134 133 132--133 135 134--135 136 135--136 138 137--138 140 137--140 142 137--142 139 138--139 141 140--141 143 142--143 144 143--144 145 144--145 146 145--146 147 145--147 148 147--148 149 148--149 150 148--150 152 151--152 153 152--153 154 152--154 155 154--155 168 154--168 169 154--169 156 155--156 158 155--158 157 156--157 159 158--159 162 158--162 160 159--160 161 160--161 163 162--163 164 163--164 165 164--165 166 165--166 167 166--167 173 172--173 176 172--176 177 172--177 178 172--178 174 173--174 175 174--175 179 178--179 189 178--189 191 178--191 208 178--208 180 179--180 181 179--181 187 179--187 182 181--182 184 181--184 186 181--186 183 182--183 185 184--185 188 187--188 190 189--190 192 191--192 193 191--193 197 191--197 194 193--194 196 193--196 195 194--195 198 197--198 207 197--207 199 198--199 200 199--200 201 200--201 202 201--202 203 202--203 204 202--204 205 202--205 206 205--206 210 209--210 554 209--554 211 210--211 212 211--212 551 211--551 553 211--553 213 212--213 214 213--214 215 214--215 550 214--550 216 215--216 217 216--217 252 216--252 218 217--218 219 218--219 223 218--223 225 218--225 220 219--220 221 219--221 222 219--222 224 223--224 226 225--226 227 226--227 228 227--228 229 228--229 230 228--230 231 230--231 251 230--251 232 231--232 233 232--233 246 232--246 250 232--250 234 233--234 235 233--235 236 235--236 237 236--237 238 236--238 239 238--239 240 238--240 241 240--241 242 240--242 243 242--243 245 242--245 244 243--244 247 246--247 249 246--249 248 247--248 253 252--253 254 253--254 261 253--261 255 254--255 256 254--256 257 254--257 258 257--258 259 258--259 260 258--260 262 261--262 263 261--263 549 261--549 264 263--264 269 263--269 546 263--546 265 264--265 266 264--266 267 266--267 268 267--268 270 269--270 271 269--271 311 269--311 272 271--272 273 272--273 274 273--274 309 273--309 310 273--310 275 274--275 308 274--308 276 275--276 278 275--278 300 275--300 301 275--301 277 276--277 279 278--279 299 278--299 280 279--280 292 279--292 296 279--296 281 280--281 282 280--282 283 282--283 284 283--284 285 283--285 286 285--286 287 286--287 288 286--288 290 286--290 289 288--289 291 290--291 293 292--293 294 293--294 295 293--295 297 296--297 298 297--298 302 301--302 303 302--303 305 302--305 304 303--304 306 305--306 307 306--307 312 311--312 335 311--335 313 312--313 315 312--315 314 313--314 316 315--316 317 316--317 319 316--319 320 316--320 329 316--329 318 317--318 321 320--321 322 321--322 323 322--323 324 323--324 327 323--327 325 324--325 326 325--326 328 327--328 330 329--330 331 330--331 332 331--332 333 332--333 334 333--334 336 335--336 337 335--337 338 337--338 340 337--340 339 338--339 341 340--341 545 340--545 342 341--342 343 341--343 344 341--344 345 344--345 544 344--544 346 345--346 350 345--350 353 345--353 347 346--347 348 347--348 349 348--349 351 350--351 352 351--352 354 353--354 355 354--355 358 354--358 539 354--539 540 354--540 356 355--356 357 356--357 359 358--359 360 359--360 537 359--537 361 360--361 362 360--362 534 360--534 536 360--536 363 362--363 364 363--364 365 364--365 366 365--366 367 366--367 368 366--368 369 368--369 370 369--370 401 369--401 371 370--371 392 370--392 400 370--400 372 371--372 387 371--387 388 371--388 373 372--373 376 372--376 385 372--385 374 373--374 375 373--375 377 376--377 378 377--378 379 377--379 380 379--380 381 379--381 382 381--382 384 381--384 383 382--383 386 385--386 389 388--389 390 388--390 391 388--391 393 392--393 394 393--394 395 393--395 396 395--396 397 396--397 398 397--398 399 398--399 402 401--402 444 401--444 533 401--533 403 402--403 404 402--404 405 402--405 441 402--441 406 405--406 439 405--439 407 406--407 408 407--408 409 407--409 416 407--416 410 409--410 411 409--411 412 411--412 413 412--413 415 412--415 414 413--414 417 416--417 418 416--418 419 416--419 420 419--420 436 419--436 438 419--438 421 420--421 433 420--433 435 420--435 422 421--422 423 422--423 424 422--424 425 422--425 426 425--426 427 426--427 428 427--428 429 428--429 430 429--430 431 430--431 432 430--432 434 433--434 437 436--437 440 439--440 442 441--442 443 441--443 445 444--445 526 444--526 532 444--532 446 445--446 525 445--525 447 446--447 448 446--448 449 448--449 461 448--461 450 449--450 451 449--451 452 451--452 459 451--459 453 452--453 454 452--454 458 452--458 455 454--455 456 454--456 457 456--457 460 459--460 462 461--462 463 462--463 524 462--524 464 463--464 465 463--465 466 465--466 522 465--522 467 466--467 520 466--520 521 466--521 468 467--468 469 468--469 470 469--470 516 469--516 519 469--519 471 470--471 472 471--472 473 471--473 474 473--474 475 474--475 476 475--476 477 475--477 478 477--478 479 478--479 481 478--481 480 479--480 482 481--482 515 481--515 483 482--483 484 483--484 485 484--485 486 485--486 487 485--487 488 487--488 489 488--489 490 489--490 513 489--513 491 490--491 511 490--511 512 490--512 492 491--492 497 491--497 493 492--493 496 492--496 494 493--494 495 493--495 498 497--498 499 498--499 501 498--501 505 498--505 500 499--500 502 501--502 503 502--503 504 502--504 506 505--506 507 505--507 509 505--509 508 507--508 510 509--510 514 513--514 517 516--517 518 516--518 523 522--523 527 526--527 529 526--529 528 527--528 530 529--530 531 530--531 535 534--535 538 537--538 541 540--541 542 541--542 543 541--543 547 546--547 548 547--548 552 551--552 558 557--558 559 558--559 562 558--562 563 558--563 560 559--560 561 559--561 565 564--565 566 565--566 567 566--567 815 566--815 816 566--816 568 567--568 569 568--569 570 569--570 571 570--571 572 570--572 573 572--573 574 573--574 791 573--791 792 573--792 575 574--575 670 574--670 672 574--672 675 574--675 676 574--676 576 575--576 599 575--599 577 576--577 578 576--578 579 578--579 580 579--580 584 579--584 581 580--581 582 580--582 583 580--583 585 584--585 586 585--586 587 586--587 588 586--588 589 588--589 590 588--590 598 588--598 591 590--591 593 590--593 592 591--592 594 593--594 595 594--595 597 594--597 596 595--596 600 599--600 601 600--601 669 600--669 602 601--602 667 601--667 603 602--603 666 602--666 604 603--604 656 603--656 605 604--605 654 604--654 655 604--655 606 605--606 607 606--607 608 607--608 609 608--609 610 609--610 641 609--641 611 610--611 612 611--612 613 612--613 614 613--614 615 613--615 616 615--616 617 615--617 618 617--618 619 618--619 620 619--620 640 619--640 621 620--621 622 621--622 623 622--623 631 622--631 624 623--624 625 624--625 628 624--628 629 624--629 626 625--626 627 625--627 630 629--630 632 631--632 633 631--633 634 633--634 637 633--637 635 634--635 636 635--636 638 637--638 639 638--639 642 641--642 643 642--643 644 643--644 645 643--645 649 643--649 646 645--646 647 645--647 648 647--648 650 649--650 651 650--651 653 650--653 652 651--652 657 656--657 658 656--658 665 656--665 659 658--659 660 659--660 661 660--661 662 661--662 664 661--664 663 662--663 668 667--668 671 670--671 673 672--673 674 673--674 677 676--677 713 676--713 738 676--738 678 677--678 679 678--679 680 679--680 681 680--681 684 680--684 682 681--682 683 681--683 685 684--685 696 684--696 686 685--686 688 685--688 687 686--687 689 688--689 690 689--690 692 689--692 691 690--691 693 692--693 694 693--694 695 694--695 697 696--697 701 696--701 698 697--698 699 697--699 700 699--700 702 701--702 708 701--708 703 702--703 707 702--707 704 703--704 705 704--705 706 704--706 709 708--709 710 709--710 711 709--711 712 709--712 714 713--714 715 714--715 716 715--716 721 715--721 722 715--722 723 715--723 725 715--725 717 716--717 718 717--718 720 717--720 719 718--719 724 723--724 726 725--726 727 726--727 737 726--737 728 727--728 729 728--729 732 728--732 733 728--733 730 729--730 731 729--731 734 733--734 736 733--736 735 734--735 739 738--739 740 739--740 741 740--741 760 740--760 788 740--788 789 740--789 742 741--742 759 741--759 743 742--743 744 743--744 745 744--745 746 745--746 757 745--757 747 746--747 755 746--755 748 747--748 749 748--749 750 749--750 753 749--753 751 750--751 752 751--752 754 753--754 756 755--756 758 757--758 761 760--761 762 761--762 763 762--763 765 762--765 764 763--764 766 765--766 767 766--767 786 766--786 768 767--768 769 768--769 771 768--771 770 769--770 772 771--772 774 771--774 773 772--773 775 774--775 776 774--776 777 774--777 778 777--778 779 778--779 780 779--780 781 780--781 782 781--782 783 782--783 784 783--784 785 784--785 787 786--787 790 789--790 793 792--793 794 793--794 795 794--795 796 795--796 807 795--807 811 795--811 797 796--797 798 797--798 799 798--799 800 799--800 801 800--801 805 800--805 806 800--806 802 801--802 803 801--803 804 803--804 808 807--808 810 807--810 809 808--809 812 811--812 813 812--813 814 813--814 817 816--817 818 817--818 820 819--820 821 820--821 822 820--822 824 823--824 825 823--825 826 825--826 829 828--829 830 829--830 834 833--834 836 835--836 837 836--837 975 836--975 976 836--976 977 836--977 838 837--838 839 838--839 973 838--973 840 839--840 841 839--841 847 839--847 897 839--897 842 841--842 844 841--844 843 842--843 845 844--845 846 845--846 848 847--848 850 847--850 849 848--849 851 850--851 855 850--855 892 850--892 852 851--852 853 852--853 854 853--854 856 855--856 857 855--857 860 855--860 858 857--858 859 858--859 861 860--861 862 861--862 863 862--863 864 863--864 891 863--891 865 864--865 866 865--866 867 865--867 868 867--868 869 868--869 870 868--870 871 870--871 872 871--872 873 872--873 874 873--874 875 874--875 877 874--877 876 875--876 878 877--878 879 878--879 880 879--880 881 879--881 886 879--886 882 881--882 884 881--884 883 882--883 885 884--885 887 886--887 888 886--888 889 888--889 890 888--890 893 892--893 894 892--894 895 894--895 896 895--896 898 897--898 899 898--899 900 899--900 901 900--901 906 900--906 902 901--902 904 901--904 903 902--903 905 904--905 907 906--907 931 906--931 908 907--908 917 907--917 925 907--925 909 908--909 915 908--915 910 909--910 911 910--911 914 910--914 912 911--912 913 911--913 916 915--916 918 917--918 919 917--919 920 919--920 921 919--921 922 921--922 923 922--923 924 922--924 926 925--926 927 926--927 928 927--928 929 928--929 930 928--930 932 931--932 967 931--967 933 932--933 934 932--934 946 932--946 947 932--947 935 934--935 936 934--936 937 934--937 938 937--938 939 937--939 943 937--943 940 939--940 941 939--941 942 941--942 944 943--944 945 943--945 948 947--948 949 948--949 950 949--950 965 949--965 951 950--951 963 950--963 952 951--952 953 952--953 954 952--954 957 952--957 959 952--959 960 952--960 961 952--961 955 954--955 956 955--956 958 957--958 962 961--962 964 963--964 966 965--966 968 967--968 972 967--972 969 968--969 970 969--970 971 969--971 974 973--974 978 977--978 980 979--980 981 980--981 982 980--982 983 982--983 986 982--986 984 983--984 985 984--985 988 987--988 989 988--989 990 989--990 991 990--991 995 990--995 992 991--992 993 991--993 994 993--994 998 997--998 999 998--999 1000 999--1000

But random recursive trees are much shorter

In [22]:
tree = RandomRecursiveTree(1000)
drawtree(tree)
Out[22]:
%3 1 2 1--2 4 1--4 49 1--49 52 1--52 54 1--54 89 1--89 190 1--190 3 2--3 62 2--62 744 2--744 970 2--970 6 3--6 8 3--8 9 3--9 80 3--80 100 3--100 5 4--5 117 4--117 517 4--517 663 4--663 18 5--18 20 5--20 24 5--24 209 5--209 610 5--610 7 6--7 11 6--11 12 6--12 13 6--13 17 6--17 19 6--19 27 6--27 564 6--564 854 6--854 32 7--32 155 7--155 157 7--157 10 8--10 69 9--69 95 9--95 133 9--133 305 9--305 316 9--316 804 9--804 25 10--25 204 10--204 402 10--402 15 11--15 60 11--60 85 11--85 197 11--197 271 11--271 330 11--330 962 11--962 270 12--270 277 12--277 548 12--548 14 13--14 16 13--16 23 13--23 79 13--79 287 13--287 21 14--21 29 14--29 66 14--66 119 14--119 144 14--144 148 14--148 825 14--825 30 15--30 59 15--59 123 15--123 572 15--572 22 16--22 50 16--50 131 16--131 181 16--181 198 17--198 284 17--284 469 17--469 28 18--28 33 18--33 39 18--39 77 18--77 463 18--463 61 19--61 107 19--107 132 19--132 138 19--138 352 19--352 34 20--34 40 20--40 178 20--178 430 20--430 568 20--568 208 21--208 38 22--38 45 22--45 63 22--63 81 22--81 109 22--109 111 22--111 26 23--26 46 23--46 232 23--232 313 23--313 42 24--42 31 25--31 51 25--51 184 25--184 449 25--449 916 25--916 43 26--43 446 26--446 714 26--714 141 27--141 152 27--152 168 27--168 37 28--37 201 29--201 637 29--637 47 30--47 91 30--91 101 30--101 126 30--126 129 30--129 905 30--905 36 31--36 53 31--53 57 31--57 345 31--345 936 31--936 122 32--122 153 32--153 161 32--161 706 32--706 856 32--856 35 33--35 98 33--98 159 33--159 359 33--359 439 33--439 519 33--519 250 34--250 383 34--383 582 34--582 668 34--668 74 35--74 88 35--88 166 35--166 996 35--996 151 36--151 289 36--289 312 36--312 292 37--292 41 38--41 164 38--164 552 38--552 576 38--576 592 38--592 58 39--58 67 39--67 68 39--68 139 39--139 398 39--398 486 39--486 907 39--907 73 40--73 48 41--48 55 41--55 106 41--106 247 41--247 370 41--370 44 42--44 65 42--65 108 42--108 167 44--167 997 44--997 92 45--92 559 45--559 71 46--71 324 46--324 869 46--869 76 47--76 96 47--96 186 47--186 242 47--242 207 48--207 266 49--266 336 49--336 676 49--676 93 50--93 448 50--448 327 51--327 401 51--401 70 52--70 84 52--84 99 52--99 103 52--103 206 52--206 279 52--279 56 53--56 114 53--114 478 53--478 593 53--593 64 54--64 220 54--220 301 55--301 417 55--417 674 55--674 78 56--78 82 56--82 118 57--118 964 57--964 622 58--622 75 59--75 97 59--97 362 59--362 104 60--104 135 61--135 177 61--177 285 61--285 215 62--215 72 63--72 431 63--431 102 64--102 147 64--147 633 64--633 105 65--105 299 65--299 179 66--179 86 67--86 127 67--127 172 67--172 426 67--426 656 67--656 150 68--150 547 68--547 781 68--781 236 69--236 405 69--405 87 70--87 320 70--320 987 70--987 83 71--83 149 71--149 698 71--698 260 72--260 112 73--112 154 73--154 124 74--124 726 74--726 468 75--468 510 75--510 211 76--211 219 76--219 349 76--349 503 76--503 679 76--679 128 77--128 816 78--816 853 78--853 424 79--424 308 81--308 900 81--900 94 84--94 173 84--173 574 84--574 882 84--882 333 85--333 110 86--110 194 86--194 777 86--777 212 87--212 113 88--113 90 89--90 182 90--182 264 90--264 335 90--335 480 91--480 535 91--535 671 91--671 199 92--199 134 93--134 295 93--295 441 93--441 366 94--366 473 94--473 121 95--121 142 95--142 238 95--238 502 95--502 864 95--864 125 96--125 799 96--799 196 97--196 216 98--216 483 98--483 521 98--521 894 98--894 928 98--928 143 99--143 170 99--170 367 99--367 407 99--407 158 100--158 205 101--205 243 102--243 458 102--458 678 102--678 120 103--120 162 103--162 414 103--414 713 104--713 137 105--137 156 105--156 116 106--116 183 106--183 686 106--686 363 107--363 867 107--867 685 109--685 218 110--218 461 110--461 475 110--475 115 111--115 956 111--956 230 112--230 390 112--390 452 112--452 877 112--877 570 113--570 174 114--174 377 114--377 453 114--453 594 115--594 269 116--269 176 117--176 590 117--590 136 118--136 140 118--140 924 118--924 491 119--491 841 119--841 171 121--171 342 121--342 356 121--356 146 122--146 222 122--222 195 123--195 282 123--282 185 124--185 163 125--163 347 125--347 130 126--130 202 126--202 384 126--384 423 126--423 456 126--456 690 126--690 256 127--256 959 127--959 213 128--213 355 128--355 485 128--485 165 129--165 323 129--323 385 130--385 418 130--418 515 130--515 276 131--276 730 131--730 895 131--895 599 132--599 145 135--145 235 135--235 251 135--251 396 135--396 648 136--648 160 137--160 193 137--193 331 137--331 288 138--288 909 138--909 929 139--929 784 141--784 823 142--823 546 143--546 623 144--623 175 145--175 315 145--315 343 145--343 750 145--750 479 146--479 246 147--246 896 147--896 192 148--192 624 148--624 187 150--187 361 150--361 933 150--933 951 150--951 254 151--254 326 152--326 191 153--191 224 153--224 290 153--290 239 154--239 425 154--425 180 155--180 516 155--516 274 156--274 200 157--200 317 157--317 543 157--543 846 157--846 296 158--296 523 158--523 940 158--940 169 159--169 403 160--403 413 160--413 878 160--878 188 162--188 429 162--429 977 162--977 217 163--217 588 163--588 531 164--531 740 164--740 255 165--255 539 165--539 375 167--375 600 167--600 450 169--450 650 169--650 794 169--794 394 170--394 990 170--990 275 171--275 416 171--416 703 171--703 240 172--240 621 172--621 860 175--860 958 175--958 457 176--457 571 176--571 278 177--278 537 177--537 654 177--654 310 179--310 526 179--526 738 179--738 267 180--267 638 180--638 203 182--203 291 183--291 586 183--586 999 183--999 280 185--280 667 185--667 311 186--311 507 186--507 189 187--189 227 187--227 855 187--855 412 188--412 739 188--739 838 189--838 237 190--237 329 190--329 388 190--388 322 191--322 378 191--378 509 191--509 583 191--583 659 191--659 955 191--955 554 192--554 669 192--669 354 194--354 693 194--693 406 195--406 249 196--249 257 196--257 434 196--434 645 196--645 392 197--392 210 198--210 863 199--863 234 200--234 791 200--791 897 200--897 293 201--293 511 201--511 353 202--353 223 203--223 501 203--501 294 205--294 720 206--720 477 207--477 745 207--745 472 208--472 221 209--221 252 209--252 258 209--258 233 210--233 325 210--325 226 211--226 248 211--248 263 211--263 318 211--318 488 211--488 300 212--300 214 213--214 374 213--374 465 213--465 619 213--619 652 214--652 766 214--766 876 214--876 229 216--229 262 216--262 420 216--420 821 216--821 228 218--228 259 218--259 605 218--605 606 218--606 261 219--261 611 220--611 231 222--231 348 222--348 225 223--225 309 224--309 304 225--304 244 227--244 253 227--253 241 228--241 602 228--602 303 229--303 337 229--337 712 229--712 888 229--888 297 231--297 672 231--672 268 232--268 618 232--618 365 233--365 369 233--369 684 233--684 245 234--245 969 234--969 372 235--372 432 235--432 614 236--614 381 237--381 604 237--604 632 237--632 770 237--770 273 238--273 460 239--460 307 240--307 514 240--514 811 240--811 272 241--272 380 241--380 476 242--476 655 242--655 400 243--400 731 243--731 265 245--265 409 245--409 700 245--700 371 246--371 733 247--733 415 248--415 577 248--577 858 248--858 360 250--360 428 253--428 437 253--437 629 253--629 692 253--692 697 253--697 454 255--454 647 255--647 286 256--286 334 257--334 319 258--319 451 258--451 567 258--567 598 258--598 626 258--626 298 259--298 649 261--649 447 262--447 332 263--332 438 263--438 874 263--874 822 264--822 466 265--466 759 265--759 281 268--281 410 268--410 597 269--597 776 269--776 983 269--983 283 271--283 675 272--675 725 274--725 829 274--829 399 275--399 819 276--819 302 277--302 321 277--321 797 281--797 498 282--498 525 284--525 789 284--789 573 286--573 314 288--314 436 289--436 506 289--506 339 290--339 358 290--358 433 290--433 596 290--596 639 290--639 306 291--306 961 291--961 580 294--580 373 295--373 395 295--395 338 297--338 710 297--710 890 298--890 824 301--824 376 303--376 643 304--643 978 304--978 651 305--651 328 306--328 984 307--984 462 308--462 843 308--843 444 309--444 464 312--464 541 312--541 840 313--840 387 314--387 810 316--810 974 316--974 522 317--522 914 317--914 967 318--967 341 320--341 391 321--391 344 322--344 379 322--379 518 322--518 760 322--760 774 323--774 340 324--340 350 325--350 357 325--357 421 328--421 471 328--471 484 328--484 975 329--975 422 330--422 579 330--579 397 331--397 695 331--695 557 333--557 404 335--404 587 335--587 382 336--382 351 337--351 918 338--918 966 339--966 346 340--346 814 340--814 540 341--540 845 341--845 782 342--782 467 344--467 364 345--364 536 346--536 527 348--527 613 348--613 609 349--609 534 351--534 634 352--634 682 354--682 533 356--533 807 356--807 435 358--435 833 359--833 368 364--368 801 364--801 386 365--386 497 369--497 500 370--500 631 370--631 837 371--837 532 372--532 754 372--754 607 373--607 986 373--986 993 373--993 871 374--871 553 375--553 946 375--946 746 377--746 677 378--677 757 378--757 419 379--419 393 380--393 487 380--487 512 383--512 664 383--664 859 383--859 943 383--943 389 384--389 455 384--455 563 384--563 761 384--761 817 384--817 459 386--459 499 386--499 601 386--601 595 388--595 800 388--800 938 389--938 408 391--408 716 391--716 908 391--908 481 392--481 642 392--642 627 393--627 445 394--445 443 395--443 906 395--906 681 396--681 818 396--818 411 397--411 442 401--442 950 401--950 555 404--555 565 404--565 976 405--976 544 407--544 772 407--772 960 407--960 625 410--625 742 411--742 873 411--873 562 412--562 530 413--530 581 415--581 696 416--696 934 416--934 688 420--688 427 421--427 561 421--561 470 422--470 680 423--680 474 425--474 826 425--826 708 426--708 658 430--658 550 431--550 508 433--508 861 433--861 482 434--482 440 435--440 490 435--490 779 435--779 842 437--842 504 438--504 666 438--666 551 439--551 529 440--529 558 440--558 538 441--538 926 443--926 494 444--494 545 444--545 569 446--569 492 447--492 644 447--644 880 447--880 683 457--683 691 457--691 704 460--704 653 465--653 591 468--591 734 470--734 640 474--640 756 474--756 913 474--913 585 476--585 489 477--489 520 478--520 806 478--806 998 480--998 524 481--524 496 483--496 820 483--820 657 484--657 721 486--721 917 487--917 505 488--505 493 490--493 662 491--662 673 491--673 963 491--963 513 492--513 495 493--495 699 494--699 715 495--715 783 496--783 815 496--815 575 498--575 578 499--578 528 500--528 646 501--646 636 502--636 566 504--566 982 504--982 603 507--603 556 508--556 589 508--589 723 508--723 542 511--542 709 513--709 755 514--755 968 514--968 689 517--689 722 517--722 743 518--743 919 520--919 893 529--893 891 532--891 615 533--615 741 533--741 549 534--549 707 534--707 616 537--616 687 538--687 732 540--732 879 541--879 795 542--795 584 544--584 942 545--942 812 547--812 884 547--884 612 550--612 808 550--808 941 552--941 813 554--813 865 555--865 560 556--560 957 557--957 617 558--617 729 558--729 802 558--802 827 558--827 887 559--887 1000 559--1000 608 562--608 705 564--705 830 565--830 778 566--778 886 567--886 980 567--980 768 571--768 972 571--972 995 571--995 773 573--773 660 574--660 670 575--670 954 577--954 628 579--628 763 582--763 785 583--785 949 583--949 775 584--775 702 586--702 711 587--711 719 589--719 839 589--839 834 591--834 835 595--835 988 595--988 793 598--793 620 601--620 630 606--630 701 607--701 735 607--735 661 609--661 792 610--792 727 613--727 828 614--828 635 615--635 765 615--765 809 618--809 836 625--836 862 626--862 847 628--847 805 630--805 904 630--904 641 631--641 736 635--736 885 635--885 899 636--899 665 643--665 764 643--764 767 646--767 898 649--898 798 656--798 870 660--870 724 662--724 901 665--901 844 666--844 971 666--971 769 668--769 718 669--718 965 669--965 694 672--694 866 673--866 751 674--751 780 674--780 889 674--889 922 679--922 831 680--831 851 680--851 991 683--991 948 686--948 752 688--752 771 695--771 848 695--848 737 696--737 796 696--796 749 697--749 912 697--912 923 701--923 787 706--787 758 707--758 790 707--790 788 708--788 717 715--717 857 721--857 753 724--753 728 727--728 935 728--935 852 729--852 748 730--748 903 734--903 762 735--762 902 742--902 747 743--747 872 745--872 931 753--931 786 762--786 850 763--850 945 765--945 911 779--911 932 781--932 944 798--944 875 799--875 803 800--803 883 803--883 979 803--979 992 808--992 930 813--930 989 815--989 937 817--937 832 827--832 849 842--849 953 842--953 868 843--868 910 846--910 973 850--973 981 851--981 952 863--952 892 866--892 920 866--920 881 868--881 915 869--915 925 879--925 985 885--985 921 899--921 927 902--927 939 902--939 947 938--947 994 969--994
In [ ]: