Geometry : Polycubes (and Polyominoes)
Created on August 16, 2023.
Introduction
Everything started with this YouTube video from Computerphile : Mike's Cube Code where Mike Pound introduces the concept and shares his attempt at enumerating the polycubes with their number of cubes n with some basic Python code. I suggest you watch the video but if you don't, polycubes are shapes formed by the connection of cubes face to face. All cubes have the same size (let's say their side length is 1). Any cube may have up to 6 neighbors in the six possible directions: up, down, left, right, front, back. In any polycube, also called a lattice animal, there is no cube or set of cubes that is separated from the rest.
Since some mathematicians seem to like counting, they have tried counting the number of different polycubes that can be made from n cubes. For precise enumeration, one would need to not overcount or undercount and so define whether two shapes are the same or not. The rules are that two polycubes that differ by reflection are considered different and that two polycubes that differ by rotation are considered identical (there are 24 possible rotations for a given polycube). The result from this computation is available on the Online Encyclopedia of Integer Sequences (OIES) as sequence A000162 up till n=14 and on Kevin Gong's website up till n=16. As you can see, the growth is exponential with a growing factor of around 7. The main algorithm for this computation is to generate polycubes of level n by adding a cube at every possible position on every polycube of level n-1 and discard the identical ones. This growing procedure guarantees that the shapes are always connected and that none is by-passed but the computing time and memory consumption are huge.
The last computation (n=16) is from 2004. Thanks to the Computerphile video, a collaborative open-access Github repository was created: Opencubes where people have started improving the original code, implementing it with other languages and discussing computation techniques. So if you feel like you could make some progress on the matter, I invite you to participate !
I was not satisfy with the rendering tool from the repository. It would generate a view over all the polycubes dispatched over a big plane. So, I decided to make my own viewer. The requirements were to load big datasets, with potentially billions of polycubes, big or small, browse through the models rapidly and rotate around each model. For big model, the limit is the GPU instancing of your computer but ten or hundred thousand cubes on a single polycube is okay. For datasets, I have managed to compress the data and load it into memory in an optimized way. Though, my server drive being only a few gigabytes large, I won't upload larger datasets. You can still view your own datasets if they are in the correct format.
Polycubes that fits exactly into a 3x3x3 cuboid
Actually, my first interest was related to modular origami. I had started building polycubes and planning for others using online voxel builders and suddendly became interested on the polycubes that could fit exactly into a 3x3x3 cube by spanning across this cube. What I mean is there should be at least a cube on each face of the 3x3x3 cube. This way, the shape would not fit into a smaller cuboid. With this restriction, it means that the smallest polycube is of length n=7 and the largest polycube is the 3x3x3 cube itself with n=27. Moreover, all polycubes with n>18 necessarily satisfy the requirement.
For the first step, I took the Python code from the Opencubes repo, modified and optimized it to generate all polycubes that would be contained in a 3x3x3 grid. The modifications are very light. For the first layer (n=1), every position in the 3x3x3 cube is considered as a starting position. The working volume is fixed, it is that of the 3x3x3 grid, which simplifies a lot the rotations (which can be precomputed as a set of permutations) as well as the comparison process because the keys that represent each shape are the same length (27). In the end, the speedup is by a factor of 4 or so for a total of around 20 minutes. All the shapes (1,597,143) are stored in a Numpy array.
For the second step, I just remove the polycubes that do not span across the 3x3x3 grid (it took a minute to run on my computer and removed 22,890 invalid polycubes). In the end, I have counted 1,574,253 polycubes over the 2^(3x3x3)=134,217,728 combinations in a 3x3x3 grid so a little bit more than 1%. The results are summed up in this table:
n | count | n | count | n | count |
---|---|---|---|---|---|
7 | 118 | 14 | 226020 | 21 | 11772 |
8 | 913 | 15 | 277664 | 22 | 3356 |
9 | 4438 | 16 | 277365 | 23 | 769 |
10 | 14922 | 17 | 223799 | 24 | 138 |
11 | 39546 | 18 | 145802 | 25 | 22 |
12 | 84948 | 19 | 77251 | 26 | 4 |
13 | 151992 | 20 | 33413 | 27 | 1 |
Polycubes in cuboids
Edit from 09/09/2023:
Before explaining why I have considered the computation of cuboids, I may explain how a polycube is encoded in the original code. In python, it is represented as a uint8 array with the minimum dimensions to hold it. Values in the array can be either 1 to indicate the presence of a cube or 0 for its absence. At some point, this array needs to be hashed so a hashable key is needed. This key is made of the grid dimensions which are coded onto a byte each then concatenated together with the flattened polycube array. The flattened array is packed in chunks of eight elements per byte and zero padded. This makes for a very simple packing scheme: x y z bits. This is also the encoding I use for the datasets files that I load into the viewer. Such a file can be compressed efficiently with gzip too.
When thinking about the computation of the polycubes of length n. I realized that they can be split into groups based on the minimum cuboid size that they can fit in. So instead of computing the big dataset, we could compute many smaller datasets, one for each cuboid large enough to contain a polycube of a certain length. Really that's all, since that from a cuboid shape we can compute easily the range of polycube lengths it can contain, we know which cuboids to compute.
Thanks to some very fast C code (from here ), I was able to compute the number of polycubes that fits into many cuboids. Please go see the table in the Annex if you want the numbers. I have yet to compute all the cuboids needed for n>10 though. I may update this table in the future if I spend some of my computer time on it.
Looking at the evolution of the number of polycubes with each count in a given cuboid, in a log scale, it certainly follows a polynomial equation of degree 2. I have no idea why though. I mean, I expect it to go up and down but not with this specific shape. Is there a formula that relates the shape of the cuboid to the coefficient of the polynomial ? I don't know.
After thoughts
Polycubes make for interesting puzzle games, the most well known is the Soma cube where a 3x3x3 cube has to be assembled from a set of polycubes, many variations exist for the polycubes that are part of the set. This could be a question on its own: let's say there are a certain number of polycubes in a set, what are all the numbers and shapes these polycubes could have and be assembled into the 3x3x3 cube.
I have seen other puzzles where a given shape had to be made with pentacubes only. I mean at this point, the realm of ideas becomes limitless.
As a final touch to this article, let me show you some of the polycubes I have made with modular origami and a lot of patience. From left to right: a T-Rex, a tree and an abstract four-legged shape, the central column is not into contact with the table beneath.
Annex
The table with my results is below. It is also available for download as a text file.nb | 2x2x1 | 2x2x2 | 3x2x1 | 3x2x2 | 3x3x1 | 3x3x2 | 3x3x3 | nb | 4x2x1 | 4x2x2 | 4x3x1 | 4x3x2 | 4x3x3 | 4x4x1 | 4x4x2 | 4x4x3 | 4x4x4 | nb | 5x2x1 | 5x2x2 | 5x3x1 | 5x3x2 | 5x3x3 | 5x4x1 | 5x4x2 | 5x4x3 | 5x4x4 | 5x5x1 | 5x5x2 | 5x5x3 | 5x5x4 | 5x5x5 | nb | 6x2x1 | 6x2x2 | 6x3x1 | 6x3x2 | 6x3x3 | 6x4x1 | 6x4x2 | 6x5x1 | nb | 7x2x1 | 7x2x2 | 7x3x1 | 7x3x2 | 7x4x1 | 8x2x1 | 8x2x2 | 8x3x1 | 9x2x1 | 9x2x2 | 9x3x1 | 10x2x1 | 11x2x1 | 12x2x1 | 13x2x1 | total | nb | total+Nx1x1 | A000162 |
3 | 1 | 3 | 3 | 3 | 3 | 1 | 3 | 2 | 2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
4 | 1 | 3 | 3 | 4 | 4 | 4 | 4 | 7 | 4 | 8 | 8 | ||||||||||||||||||||||||||||||||||||||||||||||||||
5 | 2 | 2 | 15 | 6 | 5 | 3 | 5 | 5 | 5 | 28 | 5 | 29 | 29 | ||||||||||||||||||||||||||||||||||||||||||||||||
6 | 3 | 1 | 41 | 7 | 59 | 6 | 6 | 28 | 15 | 6 | 5 | 6 | 6 | 165 | 6 | 166 | 166 | ||||||||||||||||||||||||||||||||||||||||||||
7 | 1 | 61 | 7 | 298 | 118 | 7 | 2 | 122 | 39 | 269 | 18 | 7 | 11 | 46 | 25 | 7 | 5 | 7 | 1,022 | 7 | 1,023 | 1,023 | |||||||||||||||||||||||||||||||||||||||
8 | 1 | 58 | 3 | 869 | 913 | 8 | 1 | 324 | 59 | 2,192 | 912 | 77 | 393 | 8 | 10 | 287 | 96 | 537 | 61 | 8 | 19 | 67 | 35 | 8 | 7 | 6,921 | 8 | 6,922 | 6,922 | ||||||||||||||||||||||||||||||||
9 | 29 | 1 | 1,666 | 4,438 | 9 | 521 | 42 | 9,561 | 11,287 | 181 | 4,393 | 3,007 | 9 | 3 | 1,049 | 210 | 5,721 | 2,083 | 383 | 1,715 | 73 | 9 | 22 | 542 | 188 | 921 | 97 | 9 | 28 | 93 | 49 | 7 | 48,310 | 9 | 48,311 | 48,311 | |||||||||||||||||||||||||
10 | 12 | 2,388 | 14,922 | 10 | 602 | 21 | 29,281 | 77,502 | 266 | 27,485 | 50,729 | 3,686 | 10 | 1 | 2,611 | 255 | 33,430 | 32,748 | 1,304 | 24,666 | 14,942 | 529 | 2,127 | 10 | 15 | 2,608 | 550 | 12,300 | 4,041 | 822 | 3,286 | 240 | 10 | 52 | 933 | 332 | 1,467 | 155 | 40 | 122 | 63 | 9 | 346,542 | 10 | 346,543 | 346,543 | |||||||||||||||
11 | 2 | 2,450 | 39,546 | 11 | 428 | 4 | 67,893 | 376,365 | 251 | 121,615 | 470,640 | 81,423 | 11 | 4,678 | 212 | 138,963 | 286,847 | 2,847 | 196,124 | 312,630 | 29,970 | 2,413 | 36,595 | 20,627 | 11 | 3 | 8,630 | 954 | 89,488 | 77,494 | 3,548 | 56,826 | 2,366 | 11 | 45 | 5,474 | 1,231 | 23,322 | 1,551 | 90 | 1,458 | 529 | 53 | 156 | 81 | 9 | 2,465,831 | 11 | 2,465,832 | 2,522,522 | |||||||||||
12 | 1 | 1,854 | 84,948 | 12 | 225 | 1 | 124,428 | 1,444,525 | 168 | 421,801 | 3,113,306 | 989,811 | 12 | 6,041 | 103 | 448,958 | 1,793,893 | 4,441 | 1,124,222 | 3,577,634 | 799,212 | 7,375 | 357,029 | 508,050 | 88,631 | 12 | 1 | 21,710 | 1,184 | 467,753 | 819,837 | 10,323 | 544,687 | 13,161 | 12 | 21 | 22,744 | 2,800 | 203,061 | 8,239 | 119 | 10,246 | 2,406 | 158 | 2,171 | 800 | 69 | 11 | 17,028,158 | 12 | 17,028,159 | 18,598,427 | |||||||||
13 | 967 | 151,992 | 13 | 69 | 181,051 | 4,600,726 | 66 | 1,194,124 | 16,366,444 | 8,580,365 | 13 | 5,544 | 33 | 1,175,417 | 8,922,206 | 5,008 | 5,108,307 | 29,393,289 | 11,664,029 | 17,041 | 2,539,706 | 6,946,475 | 2,755,739 | 94,466 | 13 | 40,949 | 964 | 1,923,100 | 6,212,269 | 21,995 | 3,777,502 | 51,133 | 13 | 4 | 72,853 | 4,634 | 1,271,664 | 29,442 | 73 | 50,930 | 6,818 | 257 | 17,621 | 4,313 | 238 | 86 | 11 | 113,189,920 | 13 | 113,189,921 | 138,462,649 | ||||||||||
14 | 390 | 226,020 | 14 | 20 | 209,240 | 12,533,971 | 20 | 2,830,075 | 72,215,181 | 59,279,199 | 14 | 3,667 | 6 | 2,546,700 | 37,182,650 | 4,168 | 19,305,538 | - | - | 30,320 | 14,528,248 | - | - | - | 14 | 58,669 | 546 | 6,510,918 | - | 36,035 | 20,939,873 | 153,122 | 14 | 1 | 182,721 | 5,497 | 6,313,216 | 79,155 | 28 | 198,474 | 14,182 | 237 | 102,257 | 14,722 | 505 | 360 | 106 | 13 | 255,506,050 | 14 | 255,506,051 | 1,039,496,297 | |||||||||
15 | 103 | 277,664 | 15 | 2 | 188,592 | 29,643,543 | 3 | 5,672,472 | - | 345,337,202 | 15 | 1,723 | 1 | 4,599,312 | 134,054,111 | 2,439 | 62,280,083 | - | - | 42,670 | 70,102,536 | - | - | - | 15 | 62,803 | 187 | 18,587,770 | - | 45,748 | - | 366,832 | 15 | 359,657 | 4,745 | 26,033,702 | 167,354 | 4 | 617,701 | 22,011 | 119 | 467,118 | 36,920 | 591 | 895 | 498 | 127 | 698,977,238 | 15 | 698,977,239 | 7,859,514,470 | ||||||||||
16 | 25 | 277,365 | 16 | 1 | 132,308 | 61,330,773 | 1 | 9,666,678 | - | - | 16 | 606 | 6,917,448 | 426,100,673 | 1,008 | 174,249,373 | - | - | 47,344 | - | - | - | - | 16 | 50,785 | 47 | - | - | 45,289 | - | 720,244 | 16 | 554,323 | 2,833 | 91,547,012 | 285,375 | 1 | 1,553,117 | 26,097 | 36 | 1,732,474 | 70,760 | 429 | 1,353 | 1,493 | 690 | 775,315,961 | 16 | 775,315,962 | 59,795,121,480 | |||||||||||
17 | 3 | 223,799 | 17 | 71,842 | 111,057,760 | 13,974,047 | - | - | 17 | 146 | 8,606,407 | - | 271 | - | - | - | 41,330 | - | - | - | - | 17 | 30,712 | 6 | - | - | 34,112 | - | 1,168,734 | 17 | 666,734 | 1,173 | 278,968,808 | 395,338 | 3,148,397 | 22,883 | 5 | 5,281,824 | 106,490 | 172 | 1,248 | 2,709 | 2,343 | 423,807,293 | 17 | 423,807,294 | |||||||||||||||
18 | 1 | 145,802 | 18 | 30,717 | 175,366,471 | 17,035,290 | - | - | 18 | 30 | 8,789,020 | - | 55 | - | - | - | 27,764 | - | - | - | - | 18 | 14,227 | 1 | - | - | 19,282 | - | 1,574,307 | 18 | 625,422 | 324 | 444,276 | 5,145,036 | 14,761 | 1 | 13,285,053 | 124,513 | 45 | 720 | 3,192 | 5,097 | 222,651,407 | 18 | 222,651,408 | ||||||||||||||||
19 | 77,251 | 19 | 10,165 | 239,732,119 | 17,348,172 | - | - | 19 | 3 | 7,318,039 | - | 6 | - | - | - | 14,083 | - | - | - | - | 19 | 4,927 | - | - | 7,852 | - | 1,752,470 | 19 | 457,680 | 64 | 399,618 | 6,753,583 | 6,730 | 27,576,667 | 112,111 | 5 | 249 | 2,356 | 7,235 | 301,581,385 | 19 | 301,581,386 | |||||||||||||||||||
20 | 33,413 | 20 | 2,662 | 281,562,992 | 14,664,976 | - | - | 20 | 1 | 4,964,070 | - | 1 | - | - | - | 5,279 | - | - | - | - | 20 | 1,335 | - | - | 2,347 | - | 1,599,769 | 20 | 262,726 | 8 | 283,023 | 7,118,427 | 2,207 | 47,173,631 | 75,982 | 1 | 55 | 1,141 | 6,796 | 357,760,842 | 20 | 357,760,843 | |||||||||||||||||||
21 | 11,772 | 21 | 504 | 282,313,760 | 10,261,190 | - | - | 21 | 2,749,124 | - | - | - | - | 1,470 | - | - | - | - | 21 | 252 | - | - | 479 | - | 1,178,618 | 21 | 118,481 | 1 | 154,408 | 6,020,286 | 492 | 66,374,237 | 38,306 | 6 | 335 | 4,201 | 369,227,922 | 21 | 369,227,923 | ||||||||||||||||||||||
22 | 3,356 | 22 | 78 | 241,008,352 | 5,961,764 | - | - | 22 | 1,248,828 | - | - | - | - | 302 | - | - | - | - | 22 | 42 | - | - | 77 | - | 689,716 | 22 | 42,226 | 64,149 | 4,099,241 | 83 | 76,711,623 | 14,110 | 1 | 66 | 1,725 | 329,845,739 | 22 | 329,845,740 | |||||||||||||||||||||||
23 | 769 | 23 | 6 | 175,295,026 | 2,883,576 | - | - | 23 | 465,058 | - | - | - | - | 48 | - | - | - | - | 23 | 3 | - | - | 6 | - | 315,074 | 23 | 11,745 | 19,992 | 2,251,467 | 8 | 72,803,443 | 3,803 | 6 | 451 | 254,050,481 | 23 | 254,050,482 | ||||||||||||||||||||||||
24 | 138 | 24 | 1 | 109,001,974 | 1,165,728 | - | - | 24 | 141,878 | - | - | - | - | 6 | - | - | - | - | 24 | 1 | - | - | 1 | - | 111,790 | 24 | 2,574 | 4,705 | 1,002,112 | 1 | 56,809,616 | 733 | 1 | 78 | 168,241,337 | 24 | 168,241,338 | ||||||||||||||||||||||||
25 | 22 | 25 | 58,119,482 | 391,916 | - | - | 25 | 34,891 | - | - | - | - | 1 | - | - | - | - | 25 | - | - | - | 30,499 | 25 | 415 | 800 | 360,600 | 36,527,278 | 105 | 7 | 95,466,016 | 25 | 95,466,017 | |||||||||||||||||||||||||||||
26 | 4 | 26 | 26,620,639 | 109,373 | - | - | 26 | 6,873 | - | - | - | - | - | - | - | - | 26 | - | - | - | 6,436 | 26 | 56 | 105 | 105,108 | 19,406,655 | 10 | 1 | 46,255,260 | 26 | 46,255,261 | ||||||||||||||||||||||||||||||
27 | 1 | 27 | 10,455,817 | 24,723 | - | - | 27 | 1,020 | - | - | - | - | - | - | - | - | 27 | - | - | - | 1,004 | 27 | 4 | 8 | 24,362 | 8,533,634 | 1 | 19,040,574 | 27 | 19,040,575 | |||||||||||||||||||||||||||||||
28 | 28 | 3,509,584 | 4,541 | - | - | 28 | 120 | - | - | - | - | - | - | - | - | 28 | - | - | - | 122 | 28 | 1 | 1 | 4,521 | 3,107,821 | 6,626,711 | 28 | 6,626,712 | |||||||||||||||||||||||||||||||||
29 | 29 | 997,606 | 619 | - | - | 29 | 8 | - | - | - | - | - | - | - | - | 29 | - | - | - | 9 | 29 | 619 | 934,194 | 1,933,055 | 29 | 1,933,056 | |||||||||||||||||||||||||||||||||||
30 | 30 | 238,069 | 72 | - | - | 30 | 1 | - | - | - | - | - | - | - | - | 30 | - | - | - | 1 | 30 | 72 | 230,761 | 468,976 | 30 | 468,977 | |||||||||||||||||||||||||||||||||||
31 | 31 | 46,638 | 4 | - | - | 31 | - | - | - | - | - | - | - | - | 31 | - | - | - | 31 | 4 | 46,111 | 92,757 | 31 | 92,758 | |||||||||||||||||||||||||||||||||||||
32 | 32 | 7,435 | 1 | - | - | 32 | - | - | - | - | - | - | - | - | 32 | 14,771 | - | - | 32 | 1 | 7,402 | 29,610 | 32 | 29,611 | |||||||||||||||||||||||||||||||||||||
33 | 33 | 901 | - | - | 33 | - | - | - | - | - | - | - | - | 33 | 1,783 | - | - | 33 | 900 | 3,584 | 33 | 3,585 | |||||||||||||||||||||||||||||||||||||||
34 | 34 | 92 | - | - | 34 | - | - | - | - | - | - | - | - | 34 | 171 | - | - | 34 | 90 | 353 | 34 | 354 | |||||||||||||||||||||||||||||||||||||||
35 | 35 | 6 | - | - | 35 | - | - | - | - | - | - | - | - | 35 | 9 | - | - | 35 | 5 | 20 | 35 | 21 | |||||||||||||||||||||||||||||||||||||||
36 | 36 | 1 | - | - | 36 | - | 22,912 | - | - | - | - | - | - | 36 | 1 | - | - | 36 | 1 | 22,915 | 36 | 22,916 | |||||||||||||||||||||||||||||||||||||||
37 | 37 | - | - | 37 | - | 2,468 | - | - | - | - | - | - | 37 | - | - | 37 | 2,468 | 37 | 2,469 | ||||||||||||||||||||||||||||||||||||||||||
38 | 38 | - | - | 38 | - | 210 | - | - | - | - | - | - | 38 | - | - | 38 | 210 | 38 | 211 | ||||||||||||||||||||||||||||||||||||||||||
39 | 39 | - | - | 39 | - | 10 | - | - | - | - | - | - | 39 | - | - | 39 | 10 | 39 | 11 | ||||||||||||||||||||||||||||||||||||||||||
40 | 40 | - | - | 40 | - | 1 | - | - | - | - | - | - | 40 | - | - | 40 | 1 | 40 | 2 | ||||||||||||||||||||||||||||||||||||||||||
41 | 41 | - | - | 41 | 18,770 | - | - | - | - | - | - | 41 | - | - | 41 | 18,770 | 41 | 18,771 | |||||||||||||||||||||||||||||||||||||||||||
42 | 42 | - | - | 42 | 1,821 | - | - | - | - | - | - | 42 | - | - | 42 | 1,821 | 42 | 1,822 | |||||||||||||||||||||||||||||||||||||||||||
43 | 43 | - | - | 43 | 142 | - | - | - | - | - | - | 43 | - | - | 43 | 142 | 43 | 143 | |||||||||||||||||||||||||||||||||||||||||||
44 | 44 | 24,473 | - | 44 | 9 | - | - | - | - | - | - | 44 | - | 48,757 | 44 | 73,239 | 44 | 73,240 | |||||||||||||||||||||||||||||||||||||||||||
45 | 45 | 2,184 | - | 45 | 1 | - | - | - | - | - | - | 45 | - | 4,322 | 45 | 6,507 | 45 | 6,508 | |||||||||||||||||||||||||||||||||||||||||||
46 | 46 | 157 | - | 46 | - | - | 28,928 | - | - | - | 46 | - | 300 | 46 | 29,385 | 46 | 29,386 | ||||||||||||||||||||||||||||||||||||||||||||
47 | 47 | 7 | - | 47 | - | - | 2,455 | - | - | - | 47 | - | 12 | 47 | 2,474 | 47 | 2,475 | ||||||||||||||||||||||||||||||||||||||||||||
48 | 48 | 1 | - | 48 | - | - | 169 | - | - | - | 48 | - | 1 | 48 | 171 | 48 | 172 | ||||||||||||||||||||||||||||||||||||||||||||
49 | 49 | - | 49 | - | - | 7 | - | - | - | 49 | - | 49 | 7 | 49 | 8 | ||||||||||||||||||||||||||||||||||||||||||||||
50 | 50 | - | 50 | - | - | 1 | - | - | - | 50 | 39,742 | 50 | 39,743 | 50 | 39,744 | ||||||||||||||||||||||||||||||||||||||||||||||
51 | 51 | - | 51 | - | - | - | - | - | 51 | 3,125 | 51 | 3,125 | 51 | 3,126 | |||||||||||||||||||||||||||||||||||||||||||||||
52 | 52 | - | 52 | - | - | - | - | - | 52 | 201 | 52 | 201 | 52 | 202 | |||||||||||||||||||||||||||||||||||||||||||||||
53 | 53 | - | 53 | - | - | - | - | - | 53 | 9 | 53 | 9 | 53 | 10 | |||||||||||||||||||||||||||||||||||||||||||||||
54 | 54 | - | 54 | - | - | - | - | - | 54 | 1 | 54 | 1 | 54 | 2 | |||||||||||||||||||||||||||||||||||||||||||||||
55 | 55 | - | 55 | - | - | - | - | - | 55 | 55 | 55 | 1 | |||||||||||||||||||||||||||||||||||||||||||||||||
56 | 56 | - | 56 | 122,145 | - | - | - | - | 56 | 56 | 122,145 | 56 | 122,146 | ||||||||||||||||||||||||||||||||||||||||||||||||
57 | 57 | - | 57 | 8,582 | - | - | - | - | 57 | 57 | 8,582 | 57 | 8,583 | ||||||||||||||||||||||||||||||||||||||||||||||||
58 | 58 | - | 58 | 466 | - | - | - | - | 58 | 58 | 466 | 58 | 467 | ||||||||||||||||||||||||||||||||||||||||||||||||
59 | 59 | - | 59 | 16 | - | - | - | - | 59 | 59 | 16 | 59 | 17 | ||||||||||||||||||||||||||||||||||||||||||||||||
60 | 60 | 26,668 | 60 | 1 | - | - | - | - | 60 | 60 | 26,669 | 60 | 26,670 | ||||||||||||||||||||||||||||||||||||||||||||||||
61 | 61 | 1,743 | 61 | - | - | - | - | 61 | 61 | 1,743 | 61 | 1,744 | |||||||||||||||||||||||||||||||||||||||||||||||||
62 | 62 | 98 | 62 | - | - | - | - | 62 | 62 | 98 | 62 | 99 | |||||||||||||||||||||||||||||||||||||||||||||||||
63 | 63 | 4 | 63 | - | - | - | - | 63 | 63 | 4 | 63 | 5 | |||||||||||||||||||||||||||||||||||||||||||||||||
64 | 64 | 1 | 64 | - | - | - | - | 64 | 64 | 1 | 64 | 2 | |||||||||||||||||||||||||||||||||||||||||||||||||
total | 2 | 10 | 6 | 219 | 24 | 11,073 | 1,574,253 | total | 12 | 2,342 | 181 | 1,060,790 | 1,825,354,328 | 1,051 | 103,765,028 | 92,246,129 | 414,300,200 | total | 30 | 26,432 | 941 | 50,191,823 | 608,395,954 | 21,992 | 262,315,629 | 33,429,705 | 12,493,211 | 238,048 | 87,597,801 | 7,475,152 | 2,844,370 | 94,466 | total | 65 | 298,262 | 4,662 | 27,608,985 | 7,156,719 | 228,013 | 25,375,566 | 9,735,647 | total | 158 | 3,386,862 | 23,691 | 362 | 38,465,884 | 119,271 | 875 | 437,132,743 | 603,760 | 2,064 | 4,984 | 11,914 | 28,764 |