advent-of-code

Solutions for Advent of Code.
git clone git://git.amin.space/advent-of-code.git
Log | Files | Refs | LICENSE

commit 40116daacf3e433f0edecc9bcffa4783ff689cf1
parent 2ffd1510f8de1a3b12588aaa3d583edb35525ed8
Author: amin <dev@aminmesbah.com>
Date:   Mon,  3 Dec 2018 11:39:55 +0000

Add solution for 03-2

I tried to go to sleep, but then I figured out the solution for this
one, so I had to do it. Sleeping for real now!

FossilOrigin-Name: e6deb68c407eb2b452bfa6fa59ba7bd4e4178e731543e8dffdd9adf208432b80
Diffstat:
Aday_03_2.zig | 1713+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 1713 insertions(+), 0 deletions(-)

diff --git a/day_03_2.zig b/day_03_2.zig @@ -0,0 +1,1713 @@ +const std = @import("std"); +const debug = std.debug; +const fmt = std.fmt; +const mem = std.mem; + +pub fn main() !void { + debug.warn("03-2: {}\n", try solitary_rect(input_03)); +} + +fn solitary_rect(input: []const []const u8) !usize { + var allocator = std.heap.DirectAllocator.init().allocator; + + var rects = std.ArrayList(Rect).init(&allocator); + defer rects.deinit(); + + var max = V2 { .x = 0, .y = 0 }; + for (input) |claim_string| { + var r = Rect.from_claim(try Claim.parse(claim_string)); + try rects.append(r); + + if (r.se.x > max.x) max.x = r.se.x; + if (r.se.y > max.y) max.y = r.se.y; + } + + //V2.print(max); + + var squares = try allocator.alloc(u32, ((max.x + 1) * (max.y + 1))); + defer allocator.free(squares); + for (squares) |*s| { + s.* = 0; + } + + var rect_it = rects.iterator(); + while (rect_it.next()) |next| { + const rect_squares = try Rect.covered_squares(next, &allocator); + for (rect_squares) |s| { + squares[(s.x + ((max.x) * s.y))] += 1; + } + } + rect_it.reset(); + + //buf_print_2d(squares, max.x + 1); + + var total_count: u64 = 0; + for (squares) |count| { + if (count > 1) { + total_count += 1; + } + } + + var the_one: usize = 0; + outer: while (rect_it.next()) |next| { + const rect_squares = try Rect.covered_squares(next, &allocator); + //Rect.print(next); + for (rect_squares) |s| { + if (!(squares[(s.x + ((max.x) * s.y))] == 1)) { + continue :outer; + } + } + the_one = rect_it.count; + } + rect_it.reset(); + + return the_one; +} + +fn num_overlapped_squares(input: []const []const u8) !u64 { + var allocator = std.heap.DirectAllocator.init().allocator; + + var rects = std.ArrayList(Rect).init(&allocator); + defer rects.deinit(); + + var max = V2 { .x = 0, .y = 0 }; + for (input) |claim_string| { + var r = Rect.from_claim(try Claim.parse(claim_string)); + try rects.append(r); + + if (r.se.x > max.x) max.x = r.se.x; + if (r.se.y > max.y) max.y = r.se.y; + } + + //V2.print(max); + + var squares = try allocator.alloc(u32, ((max.x + 1) * (max.y + 1))); + defer allocator.free(squares); + for (squares) |*s| { + s.* = 0; + } + + var rect_it = rects.iterator(); + while (rect_it.next()) |next| { + const rect_squares = try Rect.covered_squares(next, &allocator); + for (rect_squares) |s| { + squares[(s.x + ((max.x) * s.y))] += 1; + } + } + + //buf_print_2d(squares, max.x + 1); + + var total_count: u64 = 0; + for (squares) |count| { + if (count > 1) { + total_count += 1; + } + } + return total_count; +} + +test "num_overlapped_squares" { + const test_input = []const []const u8 { + "#1 @ 1,3: 4x4", + "#2 @ 3,1: 4x4", + "#3 @ 5,5: 2x2", + }; + debug.assert(4 == try num_overlapped_squares(test_input)); +} + +fn buf_print_2d(buf: []u32, stride: u32) void { + for (buf) |val, i| { + if (i % stride == 0) { + debug.warn("\n"); + } + debug.warn("{} ", val); + } + debug.warn("\n"); +} + +const Claim = struct { + id: u32, + offset_left: u32, + offset_top: u32, + width: u32, + height: u32, + + pub fn print(c: Claim) void { + debug.warn("id: {}\n", c.id); + debug.warn("offset_left: {}\n", c.offset_left); + debug.warn("offset_top: {}\n", c.offset_top); + debug.warn("width: {}\n", c.width); + debug.warn("height: {}\n", c.height); + } + + pub fn parse(s: []const u8) !Claim { + var c = Claim { + .id = 0, + .offset_left = 0, + .offset_top = 0, + .width = 0, + .height = 0, + }; + + // Harrowing tale: I did these in the wrong order at first and it took + // me forever to track down! Yes, my tests were also wrong. + var pos: usize = 0; + consume(s, &pos, "#"); + c.id = try get_int(s, &pos); + consume(s, &pos, " @ "); + c.offset_left = try get_int(s, &pos); + consume(s, &pos, ","); + c.offset_top = try get_int(s, &pos); + consume(s, &pos, ": "); + c.width = try get_int(s, &pos); + consume(s, &pos, "x"); + c.height = try get_int(s, &pos); + + return c; + } + + fn consume(s: []const u8, pos: *usize, consume_me: []const u8) void { + for (consume_me) |c| { + debug.assert(s[pos.*] == c); + pos.* += 1; + } + } + + fn get_int(s: []const u8, pos: *usize) !u32 { + var initial_pos = pos.*; + debug.assert(is_digit(s[initial_pos])); + + var encountered_non_digit = false; + + for (s[initial_pos..]) |c, i| { + if (!is_digit(c)) { + encountered_non_digit = true; + pos.* += i; + break; + } + } + + if (encountered_non_digit) { + return try fmt.parseInt(u32, s[initial_pos..pos.*], 10); + } else { + return try fmt.parseInt(u32, s[initial_pos..], 10); + } + } + + fn is_digit(char: u8) bool { + if (char >= '0' and char <= '9') { + return true; + } + return false; + } +}; + +test "parse claim" { + const claim1 = try Claim.parse("#1 @ 1,3: 4x4"); + debug.assert(claim1.id == 1); + debug.assert(claim1.offset_left == 1); + debug.assert(claim1.offset_top == 3); + debug.assert(claim1.width == 4); + debug.assert(claim1.height == 4); + + const claim2 = try Claim.parse("#2 @ 3,1: 4x4"); + debug.assert(claim2.id == 2); + debug.assert(claim2.offset_left == 3); + debug.assert(claim2.offset_top == 1); + debug.assert(claim2.width == 4); + debug.assert(claim2.height == 4); + + const claim3 = try Claim.parse("#3 @ 5,5: 2x2"); + debug.assert(claim3.id == 3); + debug.assert(claim3.offset_left == 5); + debug.assert(claim3.offset_top == 5); + debug.assert(claim3.width == 2); + debug.assert(claim3.height == 2); + + const claim4 = try Claim.parse("#1391 @ 256,801: 23x10"); + debug.assert(claim4.id == 1391); + debug.assert(claim4.offset_left == 256); + debug.assert(claim4.offset_top == 801); + debug.assert(claim4.width == 23); + debug.assert(claim4.height == 10); +} + +const V2 = struct { + x: u32, + y: u32, + + pub fn init(_x: u32, _y: u32) V2 { + return V2 { + .x = _x, + .y = _y, + }; + } + + pub fn equal(self: V2, other: V2) bool { + return (self.x == other.x and self.y == other.y); + } + + pub fn print(v: V2) void { + debug.warn("({}, {})\n", v.x, v.y); + } +}; + +const Rect = struct { + nw: V2, + se: V2, + + pub fn init(nwx: u32, nwy: u32, sex: u32, sey: u32) Rect { + debug.assert(nwx <= sex); + debug.assert(nwy <= sey); + return Rect { + .nw = V2.init(nwx, nwy), + .se = V2.init(sex, sey), + }; + } + + pub fn from_claim(c: Claim) Rect { + return Rect { + .nw = V2 { .x = c.offset_left, .y = c.offset_top }, + .se = V2 { .x = c.offset_left + c.width - 1, .y = c.offset_top + c.height - 1}, + }; + } + + pub fn print(r: Rect) void { + debug.warn("({}, {}), ({}, {})\n", r.nw.x, r.nw.y, r.se.x, r.se.y); + } + + pub fn covered_squares(r: Rect, a: *mem.Allocator) ![]V2 { + //Rect.print(r); + var squares = try a.alloc(V2, (((r.se.x - r.nw.x) + 1) * ((r.se.y - r.nw.y) + 1))); + var x = r.nw.x; + var z: usize = 0; + while (x <= r.se.x) { + var y = r.nw.y; + while (y <= r.se.y) { + debug.assert(z < squares.len); + squares[z] = V2.init(x, y); + //V2.print(squares[z]); + y += 1; + z += 1; + } + x += 1; + } + return squares; + } +}; + +test "rect from claim" { + const c = Claim { + .id = 123, + .offset_left = 3, + .offset_top = 2, + .width = 5, + .height = 4, + }; + + const r = Rect.from_claim(c); + debug.assert(V2.equal(r.nw, V2 { .x = 3, .y = 2})); + debug.assert(V2.equal(r.se, V2 { .x = 7, .y = 5})); +} + +const input_03 = []const []const u8 { + "#1 @ 669,271: 17x11", + "#2 @ 153,186: 20x26", + "#3 @ 186,838: 28x11", + "#4 @ 119,248: 18x13", + "#5 @ 57,843: 14x11", + "#6 @ 868,833: 18x20", + "#7 @ 225,38: 26x20", + "#8 @ 208,673: 29x22", + "#9 @ 25,877: 23x13", + "#10 @ 406,555: 11x25", + "#11 @ 567,243: 29x14", + "#12 @ 369,930: 21x14", + "#13 @ 692,175: 21x12", + "#14 @ 662,511: 24x10", + "#15 @ 860,645: 27x26", + "#16 @ 959,534: 28x12", + "#17 @ 453,236: 27x25", + "#18 @ 299,300: 16x19", + "#19 @ 233,190: 12x14", + "#20 @ 306,190: 29x16", + "#21 @ 896,206: 13x24", + "#22 @ 96,944: 23x25", + "#23 @ 194,475: 22x21", + "#24 @ 712,414: 20x12", + "#25 @ 146,332: 22x22", + "#26 @ 407,579: 15x12", + "#27 @ 790,662: 20x21", + "#28 @ 372,130: 10x23", + "#29 @ 871,601: 22x25", + "#30 @ 546,853: 28x29", + "#31 @ 921,667: 24x23", + "#32 @ 117,257: 21x26", + "#33 @ 72,855: 13x29", + "#34 @ 370,67: 18x19", + "#35 @ 860,777: 15x21", + "#36 @ 450,249: 17x14", + "#37 @ 764,208: 7x3", + "#38 @ 127,910: 13x15", + "#39 @ 447,467: 25x27", + "#40 @ 386,294: 19x11", + "#41 @ 504,771: 28x10", + "#42 @ 237,783: 27x19", + "#43 @ 98,544: 25x28", + "#44 @ 456,777: 12x20", + "#45 @ 252,488: 28x21", + "#46 @ 859,864: 22x12", + "#47 @ 581,5: 18x10", + "#48 @ 716,165: 19x28", + "#49 @ 408,803: 23x24", + "#50 @ 438,954: 18x16", + "#51 @ 746,834: 10x27", + "#52 @ 791,699: 18x13", + "#53 @ 323,392: 27x18", + "#54 @ 131,384: 28x15", + "#55 @ 233,697: 11x28", + "#56 @ 265,31: 15x23", + "#57 @ 954,467: 19x27", + "#58 @ 195,471: 23x15", + "#59 @ 625,769: 7x6", + "#60 @ 440,701: 11x13", + "#61 @ 243,406: 13x25", + "#62 @ 500,928: 21x18", + "#63 @ 444,246: 28x28", + "#64 @ 668,568: 10x18", + "#65 @ 27,456: 29x13", + "#66 @ 182,673: 26x21", + "#67 @ 213,661: 24x26", + "#68 @ 409,0: 23x12", + "#69 @ 688,177: 27x19", + "#70 @ 935,912: 22x17", + "#71 @ 444,739: 20x29", + "#72 @ 781,367: 15x13", + "#73 @ 890,432: 29x21", + "#74 @ 668,611: 21x13", + "#75 @ 39,144: 19x25", + "#76 @ 524,774: 21x11", + "#77 @ 905,957: 21x17", + "#78 @ 936,359: 10x24", + "#79 @ 922,315: 26x28", + "#80 @ 107,355: 11x28", + "#81 @ 519,641: 12x25", + "#82 @ 760,337: 18x21", + "#83 @ 357,329: 27x18", + "#84 @ 847,317: 14x12", + "#85 @ 902,505: 15x23", + "#86 @ 964,559: 10x21", + "#87 @ 126,257: 19x12", + "#88 @ 883,780: 12x28", + "#89 @ 621,934: 10x4", + "#90 @ 861,874: 24x11", + "#91 @ 409,111: 21x22", + "#92 @ 784,929: 17x26", + "#93 @ 133,387: 3x7", + "#94 @ 609,545: 14x14", + "#95 @ 383,93: 11x26", + "#96 @ 878,383: 22x15", + "#97 @ 555,423: 23x17", + "#98 @ 580,900: 29x25", + "#99 @ 440,496: 22x16", + "#100 @ 973,526: 16x10", + "#101 @ 675,245: 19x14", + "#102 @ 588,216: 22x14", + "#103 @ 687,775: 12x11", + "#104 @ 973,762: 12x7", + "#105 @ 653,948: 16x21", + "#106 @ 464,973: 15x16", + "#107 @ 832,289: 27x16", + "#108 @ 194,224: 26x11", + "#109 @ 46,327: 18x23", + "#110 @ 635,662: 19x17", + "#111 @ 41,853: 19x21", + "#112 @ 351,298: 14x29", + "#113 @ 57,34: 21x14", + "#114 @ 549,958: 23x17", + "#115 @ 136,515: 15x20", + "#116 @ 365,965: 10x29", + "#117 @ 52,58: 16x28", + "#118 @ 622,25: 19x17", + "#119 @ 716,284: 17x29", + "#120 @ 131,111: 26x12", + "#121 @ 576,919: 19x21", + "#122 @ 963,748: 11x29", + "#123 @ 742,842: 22x18", + "#124 @ 654,124: 3x6", + "#125 @ 174,913: 22x13", + "#126 @ 433,680: 10x24", + "#127 @ 206,547: 11x14", + "#128 @ 876,908: 26x15", + "#129 @ 285,775: 4x6", + "#130 @ 203,478: 22x20", + "#131 @ 732,394: 11x26", + "#132 @ 315,757: 10x27", + "#133 @ 17,520: 25x18", + "#134 @ 277,445: 14x13", + "#135 @ 638,648: 16x18", + "#136 @ 542,34: 27x13", + "#137 @ 175,547: 10x25", + "#138 @ 78,159: 20x16", + "#139 @ 456,312: 25x16", + "#140 @ 886,385: 21x16", + "#141 @ 39,91: 13x22", + "#142 @ 150,517: 12x13", + "#143 @ 730,185: 17x18", + "#144 @ 770,76: 13x16", + "#145 @ 769,367: 13x17", + "#146 @ 548,82: 22x18", + "#147 @ 669,813: 15x16", + "#148 @ 523,718: 27x10", + "#149 @ 786,361: 14x25", + "#150 @ 168,641: 24x22", + "#151 @ 274,324: 24x22", + "#152 @ 88,729: 24x21", + "#153 @ 4,579: 20x22", + "#154 @ 494,942: 23x17", + "#155 @ 215,527: 28x14", + "#156 @ 117,536: 24x18", + "#157 @ 916,64: 28x28", + "#158 @ 502,106: 13x23", + "#159 @ 244,713: 13x23", + "#160 @ 628,438: 20x23", + "#161 @ 978,893: 19x16", + "#162 @ 646,750: 25x10", + "#163 @ 628,596: 22x17", + "#164 @ 280,808: 29x13", + "#165 @ 487,906: 11x21", + "#166 @ 880,283: 11x27", + "#167 @ 644,921: 21x23", + "#168 @ 488,925: 29x15", + "#169 @ 409,804: 10x10", + "#170 @ 656,787: 27x29", + "#171 @ 132,498: 18x28", + "#172 @ 658,213: 17x24", + "#173 @ 607,917: 13x20", + "#174 @ 646,962: 10x14", + "#175 @ 536,277: 22x10", + "#176 @ 335,634: 16x16", + "#177 @ 176,535: 20x22", + "#178 @ 76,843: 14x25", + "#179 @ 759,869: 27x20", + "#180 @ 589,729: 17x29", + "#181 @ 348,514: 18x16", + "#182 @ 900,747: 13x26", + "#183 @ 149,958: 3x6", + "#184 @ 316,77: 20x26", + "#185 @ 464,544: 24x22", + "#186 @ 44,515: 29x24", + "#187 @ 948,659: 15x17", + "#188 @ 505,83: 28x26", + "#189 @ 340,480: 21x14", + "#190 @ 491,950: 19x18", + "#191 @ 62,245: 26x23", + "#192 @ 384,657: 18x22", + "#193 @ 787,954: 18x18", + "#194 @ 934,581: 22x14", + "#195 @ 48,236: 22x22", + "#196 @ 822,675: 11x26", + "#197 @ 817,821: 15x16", + "#198 @ 823,700: 11x20", + "#199 @ 665,390: 20x25", + "#200 @ 252,972: 28x21", + "#201 @ 224,541: 21x19", + "#202 @ 159,326: 10x27", + "#203 @ 27,386: 10x28", + "#204 @ 587,119: 25x18", + "#205 @ 969,628: 23x27", + "#206 @ 940,34: 18x21", + "#207 @ 153,5: 25x12", + "#208 @ 784,55: 17x13", + "#209 @ 816,806: 17x18", + "#210 @ 228,231: 12x24", + "#211 @ 124,379: 14x20", + "#212 @ 894,961: 25x24", + "#213 @ 125,425: 15x29", + "#214 @ 759,155: 20x22", + "#215 @ 606,966: 16x20", + "#216 @ 417,18: 12x19", + "#217 @ 901,455: 20x22", + "#218 @ 369,304: 28x13", + "#219 @ 939,56: 24x20", + "#220 @ 542,288: 27x29", + "#221 @ 213,279: 16x22", + "#222 @ 927,150: 13x27", + "#223 @ 571,964: 22x19", + "#224 @ 230,644: 25x21", + "#225 @ 338,411: 20x14", + "#226 @ 348,3: 19x11", + "#227 @ 498,914: 29x26", + "#228 @ 641,974: 27x13", + "#229 @ 463,258: 26x26", + "#230 @ 926,281: 11x26", + "#231 @ 573,449: 11x29", + "#232 @ 606,861: 19x20", + "#233 @ 394,871: 17x18", + "#234 @ 407,785: 27x20", + "#235 @ 681,447: 21x16", + "#236 @ 471,808: 19x27", + "#237 @ 794,294: 17x23", + "#238 @ 446,935: 16x15", + "#239 @ 156,589: 17x24", + "#240 @ 353,489: 19x17", + "#241 @ 291,171: 28x25", + "#242 @ 935,484: 27x17", + "#243 @ 230,116: 14x27", + "#244 @ 946,740: 26x16", + "#245 @ 894,245: 13x29", + "#246 @ 13,414: 12x18", + "#247 @ 282,667: 28x16", + "#248 @ 84,245: 28x29", + "#249 @ 6,77: 21x15", + "#250 @ 68,23: 19x19", + "#251 @ 216,542: 22x13", + "#252 @ 19,448: 19x19", + "#253 @ 50,870: 12x27", + "#254 @ 133,607: 14x19", + "#255 @ 658,927: 18x13", + "#256 @ 253,447: 23x23", + "#257 @ 938,137: 12x21", + "#258 @ 74,347: 19x16", + "#259 @ 789,87: 11x11", + "#260 @ 116,168: 10x20", + "#261 @ 351,34: 23x17", + "#262 @ 312,171: 22x10", + "#263 @ 419,176: 27x13", + "#264 @ 340,616: 14x23", + "#265 @ 316,195: 11x22", + "#266 @ 152,381: 12x11", + "#267 @ 950,599: 18x19", + "#268 @ 648,954: 27x16", + "#269 @ 215,319: 11x10", + "#270 @ 630,382: 26x20", + "#271 @ 594,513: 20x25", + "#272 @ 174,311: 11x28", + "#273 @ 391,183: 22x10", + "#274 @ 195,824: 21x27", + "#275 @ 675,426: 23x23", + "#276 @ 739,219: 24x18", + "#277 @ 619,932: 15x12", + "#278 @ 433,583: 16x26", + "#279 @ 35,192: 23x19", + "#280 @ 930,177: 28x28", + "#281 @ 825,327: 17x23", + "#282 @ 807,145: 25x14", + "#283 @ 529,796: 10x21", + "#284 @ 289,265: 15x29", + "#285 @ 647,974: 17x19", + "#286 @ 901,313: 22x18", + "#287 @ 135,499: 10x29", + "#288 @ 826,38: 10x27", + "#289 @ 335,205: 13x28", + "#290 @ 72,541: 19x22", + "#291 @ 762,546: 14x10", + "#292 @ 183,32: 28x27", + "#293 @ 194,158: 17x23", + "#294 @ 855,66: 25x26", + "#295 @ 937,460: 11x9", + "#296 @ 332,524: 28x26", + "#297 @ 629,760: 24x15", + "#298 @ 183,836: 24x12", + "#299 @ 373,121: 21x12", + "#300 @ 859,53: 27x28", + "#301 @ 735,903: 27x21", + "#302 @ 666,397: 16x28", + "#303 @ 586,105: 24x20", + "#304 @ 246,298: 19x11", + "#305 @ 578,882: 18x22", + "#306 @ 180,450: 26x19", + "#307 @ 228,292: 23x18", + "#308 @ 350,492: 17x10", + "#309 @ 894,358: 20x26", + "#310 @ 864,147: 27x16", + "#311 @ 193,399: 18x29", + "#312 @ 685,443: 16x24", + "#313 @ 56,690: 29x18", + "#314 @ 540,502: 16x14", + "#315 @ 292,249: 28x28", + "#316 @ 25,612: 20x15", + "#317 @ 640,451: 12x17", + "#318 @ 466,981: 27x11", + "#319 @ 874,876: 17x29", + "#320 @ 870,532: 11x16", + "#321 @ 866,870: 22x23", + "#322 @ 946,2: 23x15", + "#323 @ 538,553: 11x29", + "#324 @ 937,963: 24x12", + "#325 @ 745,818: 21x24", + "#326 @ 851,574: 20x16", + "#327 @ 333,852: 12x19", + "#328 @ 448,585: 13x28", + "#329 @ 155,822: 12x29", + "#330 @ 948,586: 12x24", + "#331 @ 286,665: 29x10", + "#332 @ 965,4: 16x13", + "#333 @ 283,847: 3x7", + "#334 @ 967,350: 17x12", + "#335 @ 801,863: 11x19", + "#336 @ 928,63: 20x22", + "#337 @ 66,274: 14x22", + "#338 @ 849,572: 25x27", + "#339 @ 279,381: 23x25", + "#340 @ 603,741: 24x21", + "#341 @ 637,357: 17x29", + "#342 @ 422,200: 14x19", + "#343 @ 728,306: 15x14", + "#344 @ 232,312: 14x18", + "#345 @ 539,490: 27x25", + "#346 @ 841,664: 26x24", + "#347 @ 711,527: 12x24", + "#348 @ 269,189: 23x16", + "#349 @ 42,276: 11x12", + "#350 @ 245,784: 22x25", + "#351 @ 732,899: 27x17", + "#352 @ 820,295: 22x26", + "#353 @ 200,842: 12x16", + "#354 @ 22,140: 24x24", + "#355 @ 573,849: 25x25", + "#356 @ 653,58: 23x25", + "#357 @ 590,224: 10x27", + "#358 @ 535,577: 10x11", + "#359 @ 856,203: 18x22", + "#360 @ 344,901: 14x21", + "#361 @ 308,921: 25x13", + "#362 @ 74,452: 17x15", + "#363 @ 878,645: 26x19", + "#364 @ 518,321: 13x13", + "#365 @ 531,25: 10x21", + "#366 @ 751,321: 29x14", + "#367 @ 120,430: 10x16", + "#368 @ 88,457: 16x11", + "#369 @ 679,882: 21x14", + "#370 @ 650,227: 28x26", + "#371 @ 578,688: 11x14", + "#372 @ 342,643: 12x20", + "#373 @ 41,151: 10x12", + "#374 @ 842,283: 27x24", + "#375 @ 718,224: 25x23", + "#376 @ 23,472: 17x22", + "#377 @ 930,358: 19x27", + "#378 @ 274,438: 21x11", + "#379 @ 329,25: 26x10", + "#380 @ 716,417: 18x12", + "#381 @ 158,693: 13x24", + "#382 @ 345,398: 13x13", + "#383 @ 861,793: 28x25", + "#384 @ 176,940: 14x28", + "#385 @ 536,664: 27x16", + "#386 @ 884,932: 21x29", + "#387 @ 942,567: 24x13", + "#388 @ 568,869: 12x12", + "#389 @ 451,307: 10x15", + "#390 @ 883,876: 13x11", + "#391 @ 198,509: 12x18", + "#392 @ 695,961: 17x18", + "#393 @ 245,809: 20x23", + "#394 @ 587,495: 16x23", + "#395 @ 902,947: 17x15", + "#396 @ 822,551: 22x26", + "#397 @ 645,540: 22x15", + "#398 @ 955,93: 27x16", + "#399 @ 940,155: 29x12", + "#400 @ 841,570: 25x10", + "#401 @ 326,524: 14x13", + "#402 @ 395,114: 25x15", + "#403 @ 498,490: 13x21", + "#404 @ 823,217: 20x25", + "#405 @ 720,139: 27x27", + "#406 @ 526,788: 13x10", + "#407 @ 394,509: 12x21", + "#408 @ 923,814: 15x19", + "#409 @ 819,525: 12x28", + "#410 @ 755,659: 27x27", + "#411 @ 84,668: 18x25", + "#412 @ 789,497: 23x21", + "#413 @ 959,589: 10x15", + "#414 @ 146,362: 15x12", + "#415 @ 378,679: 27x19", + "#416 @ 718,489: 19x10", + "#417 @ 264,339: 19x10", + "#418 @ 61,758: 27x17", + "#419 @ 191,691: 22x28", + "#420 @ 159,280: 18x25", + "#421 @ 805,288: 11x28", + "#422 @ 43,54: 16x17", + "#423 @ 146,954: 20x15", + "#424 @ 917,607: 19x12", + "#425 @ 551,962: 16x22", + "#426 @ 125,44: 27x22", + "#427 @ 330,225: 29x11", + "#428 @ 602,527: 12x26", + "#429 @ 733,209: 10x20", + "#430 @ 557,860: 20x28", + "#431 @ 804,345: 18x12", + "#432 @ 731,157: 17x29", + "#433 @ 617,641: 19x14", + "#434 @ 714,490: 11x25", + "#435 @ 821,519: 14x11", + "#436 @ 864,135: 16x13", + "#437 @ 619,898: 27x29", + "#438 @ 16,969: 24x23", + "#439 @ 521,727: 12x13", + "#440 @ 247,829: 12x25", + "#441 @ 569,205: 26x29", + "#442 @ 322,139: 15x26", + "#443 @ 722,402: 23x11", + "#444 @ 955,194: 25x14", + "#445 @ 924,875: 16x19", + "#446 @ 447,349: 16x24", + "#447 @ 877,87: 17x24", + "#448 @ 129,40: 26x23", + "#449 @ 172,262: 21x25", + "#450 @ 563,476: 16x18", + "#451 @ 693,377: 24x18", + "#452 @ 595,813: 23x13", + "#453 @ 111,421: 25x12", + "#454 @ 275,254: 23x23", + "#455 @ 170,72: 26x21", + "#456 @ 16,680: 23x15", + "#457 @ 720,172: 17x20", + "#458 @ 734,414: 21x16", + "#459 @ 888,157: 23x27", + "#460 @ 674,225: 21x12", + "#461 @ 485,30: 25x16", + "#462 @ 177,542: 20x23", + "#463 @ 394,524: 18x17", + "#464 @ 225,55: 17x23", + "#465 @ 848,258: 6x24", + "#466 @ 868,840: 20x10", + "#467 @ 914,613: 25x10", + "#468 @ 961,71: 24x27", + "#469 @ 41,144: 12x22", + "#470 @ 949,913: 18x14", + "#471 @ 808,772: 14x10", + "#472 @ 844,665: 24x27", + "#473 @ 128,378: 27x13", + "#474 @ 761,382: 11x13", + "#475 @ 19,431: 14x24", + "#476 @ 623,766: 13x16", + "#477 @ 244,703: 10x19", + "#478 @ 464,613: 21x12", + "#479 @ 731,344: 12x14", + "#480 @ 216,31: 21x13", + "#481 @ 332,84: 10x14", + "#482 @ 378,37: 25x14", + "#483 @ 615,521: 22x10", + "#484 @ 464,427: 10x22", + "#485 @ 287,320: 23x13", + "#486 @ 736,123: 10x22", + "#487 @ 779,652: 16x23", + "#488 @ 371,973: 25x14", + "#489 @ 213,503: 20x27", + "#490 @ 231,912: 17x25", + "#491 @ 487,62: 14x19", + "#492 @ 128,539: 18x22", + "#493 @ 246,972: 21x10", + "#494 @ 889,385: 21x10", + "#495 @ 827,697: 16x12", + "#496 @ 760,65: 15x12", + "#497 @ 630,622: 19x21", + "#498 @ 503,416: 11x28", + "#499 @ 268,241: 23x18", + "#500 @ 25,457: 19x27", + "#501 @ 81,828: 19x25", + "#502 @ 797,25: 10x19", + "#503 @ 717,69: 22x27", + "#504 @ 701,606: 12x28", + "#505 @ 227,544: 29x23", + "#506 @ 65,150: 25x16", + "#507 @ 728,174: 16x25", + "#508 @ 49,287: 21x14", + "#509 @ 222,256: 10x23", + "#510 @ 870,736: 11x13", + "#511 @ 448,256: 23x22", + "#512 @ 499,950: 14x25", + "#513 @ 591,674: 17x15", + "#514 @ 977,915: 14x23", + "#515 @ 948,463: 19x18", + "#516 @ 847,398: 18x18", + "#517 @ 136,539: 20x11", + "#518 @ 129,377: 11x25", + "#519 @ 416,621: 22x10", + "#520 @ 651,744: 10x26", + "#521 @ 12,413: 11x18", + "#522 @ 966,164: 21x19", + "#523 @ 508,313: 29x24", + "#524 @ 938,915: 16x11", + "#525 @ 768,902: 29x16", + "#526 @ 225,297: 21x18", + "#527 @ 224,24: 17x15", + "#528 @ 598,169: 13x22", + "#529 @ 832,544: 18x16", + "#530 @ 187,602: 22x14", + "#531 @ 734,409: 15x25", + "#532 @ 838,29: 29x18", + "#533 @ 186,499: 18x12", + "#534 @ 780,104: 26x18", + "#535 @ 769,39: 12x28", + "#536 @ 347,640: 15x19", + "#537 @ 30,605: 28x13", + "#538 @ 670,492: 16x21", + "#539 @ 398,778: 15x9", + "#540 @ 226,484: 18x26", + "#541 @ 743,616: 21x15", + "#542 @ 123,810: 15x21", + "#543 @ 863,969: 29x29", + "#544 @ 316,56: 22x22", + "#545 @ 771,383: 10x16", + "#546 @ 786,161: 11x10", + "#547 @ 925,11: 20x24", + "#548 @ 848,586: 22x25", + "#549 @ 251,638: 14x17", + "#550 @ 51,688: 17x10", + "#551 @ 366,32: 27x29", + "#552 @ 571,533: 20x15", + "#553 @ 27,613: 17x16", + "#554 @ 387,664: 11x23", + "#555 @ 358,837: 17x15", + "#556 @ 309,305: 20x20", + "#557 @ 136,62: 13x29", + "#558 @ 373,921: 25x12", + "#559 @ 228,262: 24x24", + "#560 @ 951,141: 10x23", + "#561 @ 281,776: 13x20", + "#562 @ 94,715: 19x15", + "#563 @ 485,624: 25x25", + "#564 @ 724,126: 17x29", + "#565 @ 668,870: 16x16", + "#566 @ 30,677: 20x29", + "#567 @ 63,203: 22x11", + "#568 @ 608,794: 22x29", + "#569 @ 322,289: 18x12", + "#570 @ 69,640: 24x10", + "#571 @ 61,228: 28x20", + "#572 @ 613,779: 20x19", + "#573 @ 711,540: 12x11", + "#574 @ 295,590: 14x29", + "#575 @ 383,199: 28x13", + "#576 @ 171,152: 11x13", + "#577 @ 18,35: 21x16", + "#578 @ 742,314: 28x25", + "#579 @ 942,703: 28x29", + "#580 @ 348,407: 23x17", + "#581 @ 580,914: 20x18", + "#582 @ 570,911: 18x16", + "#583 @ 935,589: 23x14", + "#584 @ 966,904: 21x13", + "#585 @ 70,712: 11x13", + "#586 @ 58,686: 13x18", + "#587 @ 954,516: 24x24", + "#588 @ 339,136: 22x29", + "#589 @ 757,367: 11x23", + "#590 @ 103,138: 20x13", + "#591 @ 498,159: 14x18", + "#592 @ 191,414: 11x29", + "#593 @ 754,780: 26x18", + "#594 @ 962,296: 29x23", + "#595 @ 815,100: 24x29", + "#596 @ 949,147: 19x18", + "#597 @ 949,158: 13x4", + "#598 @ 31,550: 26x27", + "#599 @ 810,658: 19x23", + "#600 @ 222,933: 17x21", + "#601 @ 704,115: 10x27", + "#602 @ 927,457: 26x18", + "#603 @ 751,345: 10x20", + "#604 @ 306,601: 24x11", + "#605 @ 641,759: 21x24", + "#606 @ 233,485: 15x11", + "#607 @ 18,90: 24x16", + "#608 @ 77,355: 11x12", + "#609 @ 792,343: 18x26", + "#610 @ 482,622: 13x19", + "#611 @ 69,844: 16x15", + "#612 @ 639,953: 15x23", + "#613 @ 848,567: 12x28", + "#614 @ 791,87: 27x29", + "#615 @ 261,261: 23x12", + "#616 @ 745,813: 13x24", + "#617 @ 518,45: 16x28", + "#618 @ 483,266: 27x24", + "#619 @ 971,353: 26x20", + "#620 @ 835,59: 12x29", + "#621 @ 679,439: 10x14", + "#622 @ 36,378: 21x20", + "#623 @ 408,781: 28x28", + "#624 @ 305,165: 26x22", + "#625 @ 788,648: 14x10", + "#626 @ 875,304: 26x16", + "#627 @ 122,817: 21x20", + "#628 @ 134,834: 23x27", + "#629 @ 494,489: 13x18", + "#630 @ 695,383: 18x3", + "#631 @ 540,460: 22x25", + "#632 @ 5,613: 25x29", + "#633 @ 405,950: 19x22", + "#634 @ 261,494: 20x19", + "#635 @ 26,733: 20x10", + "#636 @ 664,916: 23x10", + "#637 @ 963,622: 19x14", + "#638 @ 434,627: 10x18", + "#639 @ 246,800: 21x27", + "#640 @ 794,776: 13x13", + "#641 @ 715,119: 27x12", + "#642 @ 680,100: 19x23", + "#643 @ 277,766: 19x15", + "#644 @ 803,812: 15x14", + "#645 @ 636,537: 29x29", + "#646 @ 398,128: 13x18", + "#647 @ 299,170: 25x28", + "#648 @ 461,515: 14x10", + "#649 @ 386,233: 24x10", + "#650 @ 251,100: 11x18", + "#651 @ 37,975: 23x24", + "#652 @ 538,310: 25x18", + "#653 @ 596,682: 19x28", + "#654 @ 746,338: 20x12", + "#655 @ 917,703: 25x22", + "#656 @ 895,749: 16x16", + "#657 @ 38,396: 26x28", + "#658 @ 518,278: 19x22", + "#659 @ 463,620: 15x25", + "#660 @ 691,923: 14x17", + "#661 @ 53,798: 21x22", + "#662 @ 566,968: 13x24", + "#663 @ 905,620: 23x11", + "#664 @ 359,526: 19x23", + "#665 @ 672,236: 19x13", + "#666 @ 189,602: 29x17", + "#667 @ 740,830: 28x17", + "#668 @ 902,221: 13x13", + "#669 @ 68,418: 24x17", + "#670 @ 109,137: 23x14", + "#671 @ 950,484: 11x22", + "#672 @ 957,797: 22x24", + "#673 @ 2,403: 12x25", + "#674 @ 382,76: 11x14", + "#675 @ 171,728: 13x14", + "#676 @ 180,533: 18x26", + "#677 @ 756,891: 20x27", + "#678 @ 805,277: 17x22", + "#679 @ 41,737: 12x15", + "#680 @ 552,772: 22x22", + "#681 @ 863,488: 25x13", + "#682 @ 139,906: 28x13", + "#683 @ 864,865: 22x16", + "#684 @ 863,465: 16x23", + "#685 @ 468,11: 13x14", + "#686 @ 414,252: 29x21", + "#687 @ 433,238: 12x23", + "#688 @ 664,520: 16x22", + "#689 @ 415,229: 21x23", + "#690 @ 11,781: 19x27", + "#691 @ 598,823: 10x27", + "#692 @ 188,940: 17x15", + "#693 @ 984,678: 11x23", + "#694 @ 539,972: 15x14", + "#695 @ 660,763: 17x29", + "#696 @ 969,204: 23x13", + "#697 @ 118,686: 22x13", + "#698 @ 810,679: 12x16", + "#699 @ 275,42: 14x22", + "#700 @ 568,309: 16x16", + "#701 @ 777,892: 28x20", + "#702 @ 411,197: 16x15", + "#703 @ 894,479: 10x23", + "#704 @ 823,691: 23x26", + "#705 @ 494,838: 23x27", + "#706 @ 663,909: 26x24", + "#707 @ 159,51: 21x29", + "#708 @ 913,253: 22x23", + "#709 @ 320,606: 11x14", + "#710 @ 678,594: 21x19", + "#711 @ 816,812: 22x10", + "#712 @ 562,32: 26x14", + "#713 @ 281,221: 10x28", + "#714 @ 562,467: 27x11", + "#715 @ 876,745: 18x14", + "#716 @ 326,185: 15x28", + "#717 @ 567,632: 15x26", + "#718 @ 929,280: 20x22", + "#719 @ 375,275: 29x15", + "#720 @ 877,976: 15x16", + "#721 @ 9,552: 24x10", + "#722 @ 673,821: 18x25", + "#723 @ 877,374: 23x10", + "#724 @ 319,941: 27x11", + "#725 @ 667,274: 17x28", + "#726 @ 102,430: 28x14", + "#727 @ 960,174: 26x16", + "#728 @ 628,22: 14x21", + "#729 @ 346,747: 13x24", + "#730 @ 329,154: 15x24", + "#731 @ 209,74: 26x18", + "#732 @ 602,621: 20x29", + "#733 @ 927,251: 20x18", + "#734 @ 213,864: 21x22", + "#735 @ 876,485: 25x29", + "#736 @ 383,455: 25x12", + "#737 @ 487,100: 17x13", + "#738 @ 878,479: 16x17", + "#739 @ 317,49: 29x20", + "#740 @ 945,388: 22x12", + "#741 @ 149,89: 18x10", + "#742 @ 181,658: 15x10", + "#743 @ 667,225: 12x14", + "#744 @ 249,542: 18x17", + "#745 @ 18,571: 12x17", + "#746 @ 49,412: 17x17", + "#747 @ 405,28: 18x14", + "#748 @ 121,263: 18x17", + "#749 @ 415,2: 16x12", + "#750 @ 189,51: 11x12", + "#751 @ 836,371: 26x29", + "#752 @ 700,44: 14x11", + "#753 @ 443,713: 28x10", + "#754 @ 570,544: 15x13", + "#755 @ 652,397: 21x23", + "#756 @ 767,88: 24x24", + "#757 @ 396,774: 21x22", + "#758 @ 515,452: 26x13", + "#759 @ 920,590: 27x23", + "#760 @ 180,490: 18x19", + "#761 @ 875,637: 10x28", + "#762 @ 966,498: 20x22", + "#763 @ 486,428: 12x20", + "#764 @ 445,317: 17x19", + "#765 @ 400,779: 26x28", + "#766 @ 455,932: 22x10", + "#767 @ 218,861: 18x28", + "#768 @ 419,329: 16x27", + "#769 @ 728,220: 23x10", + "#770 @ 597,221: 17x14", + "#771 @ 317,764: 14x18", + "#772 @ 182,627: 12x17", + "#773 @ 842,285: 22x19", + "#774 @ 805,673: 16x25", + "#775 @ 651,122: 10x12", + "#776 @ 243,264: 20x26", + "#777 @ 572,628: 14x21", + "#778 @ 942,558: 15x13", + "#779 @ 187,13: 12x23", + "#780 @ 316,45: 16x24", + "#781 @ 29,144: 18x23", + "#782 @ 568,674: 24x19", + "#783 @ 480,2: 24x13", + "#784 @ 789,895: 25x22", + "#785 @ 494,537: 13x23", + "#786 @ 159,659: 10x10", + "#787 @ 323,63: 22x22", + "#788 @ 655,472: 10x22", + "#789 @ 781,39: 15x18", + "#790 @ 621,602: 22x21", + "#791 @ 957,169: 12x25", + "#792 @ 203,699: 23x11", + "#793 @ 908,815: 27x25", + "#794 @ 420,803: 27x29", + "#795 @ 966,281: 25x28", + "#796 @ 423,266: 11x23", + "#797 @ 168,460: 28x16", + "#798 @ 522,951: 20x26", + "#799 @ 272,490: 16x15", + "#800 @ 359,271: 22x13", + "#801 @ 193,581: 12x16", + "#802 @ 978,532: 21x25", + "#803 @ 585,355: 3x7", + "#804 @ 449,225: 10x26", + "#805 @ 831,411: 12x23", + "#806 @ 280,452: 27x25", + "#807 @ 963,771: 18x26", + "#808 @ 681,121: 24x16", + "#809 @ 440,770: 20x20", + "#810 @ 984,898: 13x24", + "#811 @ 333,928: 27x28", + "#812 @ 179,140: 14x29", + "#813 @ 933,476: 16x23", + "#814 @ 5,967: 11x11", + "#815 @ 277,794: 11x26", + "#816 @ 925,445: 16x27", + "#817 @ 582,212: 22x18", + "#818 @ 451,98: 15x4", + "#819 @ 451,429: 21x17", + "#820 @ 670,217: 11x29", + "#821 @ 847,209: 17x21", + "#822 @ 3,432: 25x29", + "#823 @ 659,462: 24x23", + "#824 @ 590,884: 11x10", + "#825 @ 182,838: 28x20", + "#826 @ 39,615: 26x14", + "#827 @ 310,7: 23x23", + "#828 @ 394,678: 24x28", + "#829 @ 740,859: 19x11", + "#830 @ 236,704: 21x16", + "#831 @ 495,419: 16x12", + "#832 @ 271,489: 13x18", + "#833 @ 869,618: 21x15", + "#834 @ 437,248: 16x29", + "#835 @ 284,424: 10x29", + "#836 @ 203,224: 20x15", + "#837 @ 469,947: 29x21", + "#838 @ 971,751: 28x26", + "#839 @ 646,357: 19x27", + "#840 @ 767,885: 11x25", + "#841 @ 293,168: 13x18", + "#842 @ 745,53: 25x25", + "#843 @ 65,273: 10x13", + "#844 @ 883,380: 19x18", + "#845 @ 107,919: 25x24", + "#846 @ 923,447: 10x15", + "#847 @ 62,549: 24x19", + "#848 @ 574,795: 15x10", + "#849 @ 439,696: 13x20", + "#850 @ 329,497: 29x26", + "#851 @ 471,700: 14x28", + "#852 @ 908,253: 11x14", + "#853 @ 509,89: 16x8", + "#854 @ 483,548: 15x21", + "#855 @ 887,615: 21x13", + "#856 @ 177,909: 10x12", + "#857 @ 577,700: 25x27", + "#858 @ 144,31: 10x22", + "#859 @ 399,864: 18x10", + "#860 @ 33,157: 13x20", + "#861 @ 447,480: 16x24", + "#862 @ 239,528: 29x20", + "#863 @ 485,337: 17x10", + "#864 @ 180,480: 12x24", + "#865 @ 26,460: 21x15", + "#866 @ 31,865: 22x16", + "#867 @ 313,79: 25x17", + "#868 @ 647,386: 13x13", + "#869 @ 396,309: 18x16", + "#870 @ 696,196: 4x8", + "#871 @ 906,615: 10x25", + "#872 @ 658,53: 22x27", + "#873 @ 112,332: 15x23", + "#874 @ 704,404: 29x13", + "#875 @ 777,320: 15x11", + "#876 @ 36,729: 14x18", + "#877 @ 357,816: 26x27", + "#878 @ 694,184: 18x24", + "#879 @ 91,126: 14x17", + "#880 @ 333,121: 16x27", + "#881 @ 81,394: 21x16", + "#882 @ 174,1: 19x19", + "#883 @ 440,733: 17x13", + "#884 @ 98,960: 14x11", + "#885 @ 327,0: 19x12", + "#886 @ 907,354: 16x21", + "#887 @ 905,849: 24x10", + "#888 @ 544,971: 12x18", + "#889 @ 729,597: 21x29", + "#890 @ 228,138: 11x24", + "#891 @ 784,701: 25x12", + "#892 @ 596,219: 10x20", + "#893 @ 760,204: 18x11", + "#894 @ 902,150: 29x13", + "#895 @ 25,321: 17x10", + "#896 @ 904,959: 16x23", + "#897 @ 940,600: 10x18", + "#898 @ 24,81: 12x20", + "#899 @ 416,171: 25x16", + "#900 @ 681,235: 10x22", + "#901 @ 959,345: 16x28", + "#902 @ 776,871: 17x11", + "#903 @ 888,273: 15x17", + "#904 @ 746,797: 22x29", + "#905 @ 326,273: 28x29", + "#906 @ 111,71: 26x15", + "#907 @ 660,156: 10x14", + "#908 @ 23,280: 16x19", + "#909 @ 126,860: 11x13", + "#910 @ 134,521: 17x11", + "#911 @ 733,152: 15x26", + "#912 @ 955,623: 25x16", + "#913 @ 802,815: 25x23", + "#914 @ 577,464: 14x15", + "#915 @ 503,824: 14x20", + "#916 @ 648,756: 19x29", + "#917 @ 923,966: 24x17", + "#918 @ 524,72: 15x19", + "#919 @ 403,89: 14x26", + "#920 @ 605,459: 13x10", + "#921 @ 96,453: 27x13", + "#922 @ 869,776: 25x18", + "#923 @ 921,528: 22x22", + "#924 @ 682,896: 16x28", + "#925 @ 858,224: 15x18", + "#926 @ 121,615: 17x16", + "#927 @ 848,303: 10x21", + "#928 @ 17,513: 19x10", + "#929 @ 83,256: 22x15", + "#930 @ 793,750: 24x21", + "#931 @ 924,196: 17x27", + "#932 @ 605,482: 27x23", + "#933 @ 532,785: 22x11", + "#934 @ 522,972: 11x26", + "#935 @ 706,972: 12x26", + "#936 @ 160,367: 16x27", + "#937 @ 304,664: 12x15", + "#938 @ 407,273: 19x10", + "#939 @ 9,180: 14x14", + "#940 @ 181,685: 23x14", + "#941 @ 26,812: 14x10", + "#942 @ 412,252: 10x18", + "#943 @ 50,339: 23x11", + "#944 @ 336,909: 28x18", + "#945 @ 829,277: 16x22", + "#946 @ 607,22: 12x19", + "#947 @ 412,871: 27x21", + "#948 @ 865,28: 12x18", + "#949 @ 104,449: 22x27", + "#950 @ 714,78: 11x22", + "#951 @ 550,492: 27x20", + "#952 @ 5,972: 24x18", + "#953 @ 491,907: 13x21", + "#954 @ 75,19: 24x29", + "#955 @ 114,550: 26x19", + "#956 @ 608,527: 25x21", + "#957 @ 714,551: 20x25", + "#958 @ 593,545: 22x20", + "#959 @ 603,1: 16x29", + "#960 @ 621,155: 27x19", + "#961 @ 353,330: 18x14", + "#962 @ 911,103: 24x14", + "#963 @ 695,42: 22x16", + "#964 @ 416,247: 28x14", + "#965 @ 911,266: 21x12", + "#966 @ 632,523: 21x20", + "#967 @ 840,256: 25x29", + "#968 @ 542,34: 11x10", + "#969 @ 721,807: 17x17", + "#970 @ 559,226: 27x16", + "#971 @ 510,661: 27x12", + "#972 @ 645,734: 14x18", + "#973 @ 755,665: 16x17", + "#974 @ 229,484: 22x17", + "#975 @ 654,80: 29x15", + "#976 @ 946,395: 23x20", + "#977 @ 274,771: 23x23", + "#978 @ 954,510: 24x13", + "#979 @ 162,259: 28x29", + "#980 @ 822,624: 19x13", + "#981 @ 182,503: 28x17", + "#982 @ 427,774: 11x11", + "#983 @ 486,271: 14x27", + "#984 @ 126,553: 14x12", + "#985 @ 406,262: 27x16", + "#986 @ 926,955: 15x10", + "#987 @ 670,262: 18x12", + "#988 @ 45,49: 23x29", + "#989 @ 533,311: 15x14", + "#990 @ 504,33: 12x24", + "#991 @ 346,299: 13x25", + "#992 @ 565,478: 17x18", + "#993 @ 840,391: 14x24", + "#994 @ 416,950: 13x23", + "#995 @ 212,668: 14x16", + "#996 @ 515,958: 13x15", + "#997 @ 397,583: 29x24", + "#998 @ 404,606: 24x21", + "#999 @ 438,983: 27x16", + "#1000 @ 0,159: 28x15", + "#1001 @ 860,823: 21x28", + "#1002 @ 411,818: 21x21", + "#1003 @ 958,36: 19x14", + "#1004 @ 918,443: 22x23", + "#1005 @ 972,79: 19x25", + "#1006 @ 825,314: 28x14", + "#1007 @ 239,478: 14x27", + "#1008 @ 411,261: 13x27", + "#1009 @ 34,48: 26x16", + "#1010 @ 258,373: 19x11", + "#1011 @ 862,222: 28x11", + "#1012 @ 718,224: 23x26", + "#1013 @ 908,962: 27x27", + "#1014 @ 554,479: 29x24", + "#1015 @ 570,785: 13x27", + "#1016 @ 752,172: 18x29", + "#1017 @ 276,346: 15x15", + "#1018 @ 744,134: 25x23", + "#1019 @ 653,424: 25x14", + "#1020 @ 177,168: 24x18", + "#1021 @ 958,558: 11x11", + "#1022 @ 819,49: 23x15", + "#1023 @ 356,611: 22x21", + "#1024 @ 318,90: 16x11", + "#1025 @ 486,421: 13x22", + "#1026 @ 152,685: 27x22", + "#1027 @ 925,527: 23x10", + "#1028 @ 601,696: 17x20", + "#1029 @ 106,265: 29x20", + "#1030 @ 955,925: 19x26", + "#1031 @ 957,165: 22x28", + "#1032 @ 549,977: 26x19", + "#1033 @ 415,182: 29x11", + "#1034 @ 134,587: 29x16", + "#1035 @ 456,975: 14x13", + "#1036 @ 143,493: 22x25", + "#1037 @ 250,800: 19x12", + "#1038 @ 179,553: 10x14", + "#1039 @ 721,965: 12x23", + "#1040 @ 52,639: 27x21", + "#1041 @ 668,233: 15x19", + "#1042 @ 859,801: 11x26", + "#1043 @ 873,599: 29x22", + "#1044 @ 62,504: 13x14", + "#1045 @ 140,609: 28x22", + "#1046 @ 534,301: 19x20", + "#1047 @ 426,949: 14x21", + "#1048 @ 18,146: 23x18", + "#1049 @ 659,550: 19x19", + "#1050 @ 755,817: 12x21", + "#1051 @ 182,322: 12x18", + "#1052 @ 194,591: 18x12", + "#1053 @ 807,306: 28x21", + "#1054 @ 521,780: 17x27", + "#1055 @ 97,938: 18x26", + "#1056 @ 946,40: 29x28", + "#1057 @ 639,169: 24x23", + "#1058 @ 142,573: 11x22", + "#1059 @ 89,45: 13x25", + "#1060 @ 655,35: 10x28", + "#1061 @ 392,274: 28x24", + "#1062 @ 382,325: 11x26", + "#1063 @ 521,744: 21x28", + "#1064 @ 499,780: 29x14", + "#1065 @ 162,819: 28x22", + "#1066 @ 17,93: 19x21", + "#1067 @ 506,931: 13x18", + "#1068 @ 283,495: 21x11", + "#1069 @ 400,459: 10x15", + "#1070 @ 574,640: 28x19", + "#1071 @ 236,233: 23x10", + "#1072 @ 513,632: 16x29", + "#1073 @ 816,147: 14x25", + "#1074 @ 870,221: 10x24", + "#1075 @ 918,323: 15x22", + "#1076 @ 158,894: 11x15", + "#1077 @ 854,144: 15x15", + "#1078 @ 336,901: 19x25", + "#1079 @ 580,497: 26x29", + "#1080 @ 523,81: 18x10", + "#1081 @ 54,685: 22x20", + "#1082 @ 318,232: 11x19", + "#1083 @ 363,319: 29x20", + "#1084 @ 335,1: 19x26", + "#1085 @ 888,455: 21x12", + "#1086 @ 700,164: 28x25", + "#1087 @ 959,786: 20x16", + "#1088 @ 764,545: 21x14", + "#1089 @ 927,599: 13x22", + "#1090 @ 122,505: 26x20", + "#1091 @ 595,227: 11x17", + "#1092 @ 802,43: 10x20", + "#1093 @ 97,250: 29x23", + "#1094 @ 536,506: 17x26", + "#1095 @ 951,713: 11x14", + "#1096 @ 577,651: 12x12", + "#1097 @ 409,266: 13x22", + "#1098 @ 945,504: 11x24", + "#1099 @ 806,810: 20x14", + "#1100 @ 896,560: 19x12", + "#1101 @ 76,251: 22x27", + "#1102 @ 118,430: 25x16", + "#1103 @ 873,114: 21x14", + "#1104 @ 920,956: 22x29", + "#1105 @ 723,397: 25x26", + "#1106 @ 183,572: 26x19", + "#1107 @ 705,96: 29x21", + "#1108 @ 413,287: 17x23", + "#1109 @ 405,625: 23x20", + "#1110 @ 622,870: 13x11", + "#1111 @ 575,628: 27x28", + "#1112 @ 492,54: 17x12", + "#1113 @ 64,418: 27x19", + "#1114 @ 551,423: 15x24", + "#1115 @ 589,198: 15x23", + "#1116 @ 828,570: 24x23", + "#1117 @ 863,189: 22x15", + "#1118 @ 190,588: 11x10", + "#1119 @ 309,617: 13x28", + "#1120 @ 916,856: 12x25", + "#1121 @ 333,760: 23x17", + "#1122 @ 68,751: 27x10", + "#1123 @ 763,394: 17x23", + "#1124 @ 39,613: 26x15", + "#1125 @ 404,397: 25x12", + "#1126 @ 393,313: 16x22", + "#1127 @ 615,467: 16x23", + "#1128 @ 78,142: 20x29", + "#1129 @ 259,86: 25x18", + "#1130 @ 444,938: 28x23", + "#1131 @ 934,167: 27x14", + "#1132 @ 145,183: 13x28", + "#1133 @ 557,871: 20x12", + "#1134 @ 106,414: 20x11", + "#1135 @ 101,923: 10x18", + "#1136 @ 579,10: 25x21", + "#1137 @ 146,111: 26x14", + "#1138 @ 2,178: 26x26", + "#1139 @ 810,628: 13x24", + "#1140 @ 860,516: 20x15", + "#1141 @ 218,692: 12x21", + "#1142 @ 850,671: 26x10", + "#1143 @ 766,152: 21x21", + "#1144 @ 147,463: 26x26", + "#1145 @ 328,159: 17x21", + "#1146 @ 853,207: 21x17", + "#1147 @ 583,396: 24x26", + "#1148 @ 191,621: 14x22", + "#1149 @ 527,300: 17x16", + "#1150 @ 390,113: 23x18", + "#1151 @ 103,83: 13x17", + "#1152 @ 747,225: 20x23", + "#1153 @ 574,652: 25x13", + "#1154 @ 509,91: 15x11", + "#1155 @ 200,715: 14x21", + "#1156 @ 479,176: 22x12", + "#1157 @ 761,298: 22x26", + "#1158 @ 50,879: 25x25", + "#1159 @ 34,806: 23x10", + "#1160 @ 901,634: 25x22", + "#1161 @ 488,52: 28x17", + "#1162 @ 220,651: 14x23", + "#1163 @ 311,243: 26x20", + "#1164 @ 866,219: 23x29", + "#1165 @ 223,316: 19x26", + "#1166 @ 322,915: 13x21", + "#1167 @ 881,640: 14x29", + "#1168 @ 685,164: 22x22", + "#1169 @ 824,36: 18x18", + "#1170 @ 468,939: 13x20", + "#1171 @ 208,495: 22x24", + "#1172 @ 629,152: 18x10", + "#1173 @ 804,129: 26x28", + "#1174 @ 283,232: 17x24", + "#1175 @ 217,765: 19x13", + "#1176 @ 638,225: 20x21", + "#1177 @ 598,585: 27x26", + "#1178 @ 920,698: 10x18", + "#1179 @ 798,772: 16x23", + "#1180 @ 130,101: 16x24", + "#1181 @ 852,42: 14x26", + "#1182 @ 400,200: 13x18", + "#1183 @ 346,894: 18x11", + "#1184 @ 555,86: 21x23", + "#1185 @ 789,116: 13x25", + "#1186 @ 357,39: 5x8", + "#1187 @ 95,378: 22x29", + "#1188 @ 271,312: 20x21", + "#1189 @ 448,95: 22x12", + "#1190 @ 797,879: 14x18", + "#1191 @ 261,373: 19x28", + "#1192 @ 881,192: 29x13", + "#1193 @ 863,23: 17x26", + "#1194 @ 421,114: 10x26", + "#1195 @ 971,793: 20x27", + "#1196 @ 45,788: 12x29", + "#1197 @ 947,583: 29x18", + "#1198 @ 594,565: 22x29", + "#1199 @ 642,272: 28x13", + "#1200 @ 759,65: 27x26", + "#1201 @ 957,77: 26x27", + "#1202 @ 24,801: 22x21", + "#1203 @ 432,317: 11x20", + "#1204 @ 644,238: 17x20", + "#1205 @ 753,351: 4x7", + "#1206 @ 849,217: 14x18", + "#1207 @ 942,657: 12x26", + "#1208 @ 454,723: 18x24", + "#1209 @ 81,461: 18x11", + "#1210 @ 851,869: 11x10", + "#1211 @ 66,591: 14x17", + "#1212 @ 740,174: 15x19", + "#1213 @ 394,286: 14x28", + "#1214 @ 466,464: 20x19", + "#1215 @ 858,372: 24x16", + "#1216 @ 340,4: 12x18", + "#1217 @ 607,154: 12x29", + "#1218 @ 589,474: 23x28", + "#1219 @ 583,27: 19x23", + "#1220 @ 831,223: 20x25", + "#1221 @ 259,850: 14x26", + "#1222 @ 116,172: 27x26", + "#1223 @ 963,342: 26x17", + "#1224 @ 367,333: 11x11", + "#1225 @ 637,887: 16x17", + "#1226 @ 262,258: 27x11", + "#1227 @ 493,568: 17x29", + "#1228 @ 675,524: 17x16", + "#1229 @ 740,834: 25x14", + "#1230 @ 866,525: 14x13", + "#1231 @ 593,736: 16x25", + "#1232 @ 618,153: 15x18", + "#1233 @ 286,296: 26x24", + "#1234 @ 923,849: 27x14", + "#1235 @ 839,66: 20x25", + "#1236 @ 584,488: 14x15", + "#1237 @ 414,168: 26x18", + "#1238 @ 42,27: 20x26", + "#1239 @ 943,740: 15x19", + "#1240 @ 108,336: 28x29", + "#1241 @ 677,222: 19x16", + "#1242 @ 912,816: 19x13", + "#1243 @ 40,371: 11x13", + "#1244 @ 595,895: 26x26", + "#1245 @ 232,418: 24x17", + "#1246 @ 902,609: 26x18", + "#1247 @ 67,25: 21x17", + "#1248 @ 737,354: 13x25", + "#1249 @ 843,355: 28x19", + "#1250 @ 59,665: 22x29", + "#1251 @ 369,255: 14x17", + "#1252 @ 775,750: 23x23", + "#1253 @ 329,838: 14x16", + "#1254 @ 591,983: 24x15", + "#1255 @ 918,380: 12x19", + "#1256 @ 499,94: 13x18", + "#1257 @ 269,224: 22x29", + "#1258 @ 918,324: 21x15", + "#1259 @ 213,201: 21x22", + "#1260 @ 411,634: 26x14", + "#1261 @ 875,547: 27x16", + "#1262 @ 706,973: 23x23", + "#1263 @ 568,846: 15x15", + "#1264 @ 64,620: 15x21", + "#1265 @ 612,143: 10x17", + "#1266 @ 446,537: 24x17", + "#1267 @ 472,742: 24x12", + "#1268 @ 76,715: 25x15", + "#1269 @ 666,603: 20x23", + "#1270 @ 708,808: 14x16", + "#1271 @ 228,828: 23x17", + "#1272 @ 159,664: 20x24", + "#1273 @ 508,616: 28x13", + "#1274 @ 971,175: 15x19", + "#1275 @ 914,494: 22x23", + "#1276 @ 145,105: 15x11", + "#1277 @ 292,661: 13x21", + "#1278 @ 805,777: 18x22", + "#1279 @ 14,403: 23x23", + "#1280 @ 451,252: 26x22", + "#1281 @ 931,155: 23x15", + "#1282 @ 851,873: 18x16", + "#1283 @ 141,259: 24x13", + "#1284 @ 489,604: 22x19", + "#1285 @ 672,613: 21x28", + "#1286 @ 677,761: 15x25", + "#1287 @ 25,740: 23x11", + "#1288 @ 383,181: 20x22", + "#1289 @ 55,213: 10x19", + "#1290 @ 468,799: 17x24", + "#1291 @ 265,865: 25x12", + "#1292 @ 200,507: 11x17", + "#1293 @ 718,774: 13x15", + "#1294 @ 869,93: 13x27", + "#1295 @ 1,296: 21x22", + "#1296 @ 903,570: 12x28", + "#1297 @ 386,233: 27x22", + "#1298 @ 427,233: 23x18", + "#1299 @ 902,452: 17x15", + "#1300 @ 893,625: 21x19", + "#1301 @ 620,734: 17x13", + "#1302 @ 372,298: 28x19", + "#1303 @ 794,115: 27x15", + "#1304 @ 845,467: 28x10", + "#1305 @ 474,31: 23x10", + "#1306 @ 47,32: 12x18", + "#1307 @ 671,564: 14x28", + "#1308 @ 146,495: 26x24", + "#1309 @ 795,808: 23x28", + "#1310 @ 740,118: 13x11", + "#1311 @ 209,22: 19x19", + "#1312 @ 215,762: 16x11", + "#1313 @ 121,449: 29x27", + "#1314 @ 233,313: 28x25", + "#1315 @ 197,41: 29x16", + "#1316 @ 492,590: 24x29", + "#1317 @ 246,467: 26x23", + "#1318 @ 608,550: 12x25", + "#1319 @ 869,860: 19x21", + "#1320 @ 274,834: 22x27", + "#1321 @ 833,61: 28x22", + "#1322 @ 904,91: 27x18", + "#1323 @ 921,373: 14x17", + "#1324 @ 868,218: 18x19", + "#1325 @ 646,51: 14x22", + "#1326 @ 930,825: 20x11", + "#1327 @ 336,292: 14x13", + "#1328 @ 164,438: 16x29", + "#1329 @ 351,585: 23x28", + "#1330 @ 788,141: 18x27", + "#1331 @ 739,386: 28x22", + "#1332 @ 460,504: 16x16", + "#1333 @ 956,176: 18x24", + "#1334 @ 418,876: 11x5", + "#1335 @ 92,36: 26x14", + "#1336 @ 810,826: 12x5", + "#1337 @ 958,729: 15x20", + "#1338 @ 643,609: 26x10", + "#1339 @ 486,324: 10x18", + "#1340 @ 884,869: 11x26", + "#1341 @ 1,297: 28x24", + "#1342 @ 939,522: 11x27", + "#1343 @ 401,385: 10x23", + "#1344 @ 582,351: 10x17", + "#1345 @ 109,566: 16x14", + "#1346 @ 135,840: 29x17", + "#1347 @ 30,34: 17x17", + "#1348 @ 730,782: 24x23", + "#1349 @ 977,696: 11x18", + "#1350 @ 967,632: 27x20", + "#1351 @ 854,61: 21x25", + "#1352 @ 946,175: 14x26", + "#1353 @ 6,99: 20x16", + "#1354 @ 898,59: 26x11", + "#1355 @ 107,424: 18x29", + "#1356 @ 166,740: 27x10", + "#1357 @ 654,70: 10x28", + "#1358 @ 787,281: 10x18", + "#1359 @ 102,354: 13x23", + "#1360 @ 489,731: 10x12", + "#1361 @ 918,682: 24x24", + "#1362 @ 632,529: 25x14", + "#1363 @ 877,236: 17x23", + "#1364 @ 383,119: 20x26", + "#1365 @ 866,918: 23x26", + "#1366 @ 909,723: 11x22", + "#1367 @ 598,502: 14x29", + "#1368 @ 70,579: 24x23", + "#1369 @ 176,456: 19x14", + "#1370 @ 311,280: 28x21", + "#1371 @ 588,401: 14x26", + "#1372 @ 148,77: 12x13", + "#1373 @ 194,527: 22x21", + "#1374 @ 552,234: 22x11", + "#1375 @ 367,324: 16x13", + "#1376 @ 450,358: 25x15", + "#1377 @ 71,615: 17x21", + "#1378 @ 793,87: 26x17", + "#1379 @ 894,450: 17x16", + "#1380 @ 708,629: 17x14", + "#1381 @ 919,335: 14x29", + "#1382 @ 563,243: 22x10", + "#1383 @ 504,783: 22x18", + "#1384 @ 726,515: 13x18", + "#1385 @ 909,722: 17x11", + "#1386 @ 276,490: 18x18", + "#1387 @ 98,560: 14x28", + "#1388 @ 23,274: 10x24", + "#1389 @ 32,323: 15x20", + "#1390 @ 778,886: 26x18", + "#1391 @ 256,801: 23x10", + "#1392 @ 916,500: 10x13", + "#1393 @ 856,667: 7x18", + "#1394 @ 103,682: 24x17", + "#1395 @ 727,567: 17x25", + "#1396 @ 52,176: 19x21", + "#1397 @ 453,308: 19x24", + "#1398 @ 238,370: 21x18", + "#1399 @ 724,519: 23x10", +};