From ee0afed6da08f038db322e941390a515b4e9d379 Mon Sep 17 00:00:00 2001 From: Elias Kohout Date: Sat, 7 Dec 2024 14:35:24 +0100 Subject: [PATCH] add day7 --- day7/combine.go | 106 +++++ day7/combine_with_concat.go | 111 +++++ day7/data.txt | 850 ++++++++++++++++++++++++++++++++++++ 3 files changed, 1067 insertions(+) create mode 100644 day7/combine.go create mode 100644 day7/combine_with_concat.go create mode 100644 day7/data.txt diff --git a/day7/combine.go b/day7/combine.go new file mode 100644 index 0000000..481e632 --- /dev/null +++ b/day7/combine.go @@ -0,0 +1,106 @@ +package main + +import ( + "os" + "fmt" + "strings" + "strconv" + "math" +) + +// data types +type Equation struct { + result int + params []int +} + +// general util +func check(e error) { + if e != nil { panic(e) } +} + +func newEquations(data string) []*Equation { + /* Reads the puzzle input, return a list of Equation structs. + */ + lines := strings.Split(data, "\n") + equations := make([]*Equation, 0, len(lines)) + + for _, line := range lines { + split_line := strings.Split(line, ":") + + // get result/ number before the colon + result, err := strconv.Atoi(split_line[0]) + check(err) + + // parse paramter/ numbers after the colon + str_params := strings.Split(strings.TrimSpace(split_line[1]), " ") + params := make([]int, 0, len(str_params)) + for _, num := range str_params { + param, err := strconv.Atoi(num) + check(err) + + params = append(params, param) + } + + equations = append(equations, &Equation{ result: result, params: params }) + } + + return equations +} + +func incr(arr []bool) []bool { + /* least significant bit first increment, true = 1/ false = 0 */ + over := true + for i := range arr { + if !over { break } + over = over && arr[i] + arr[i] = !arr[i] + } + return arr +} + +func isValid(eq *Equation) bool { + /* Checks whether the equation could be right by combining the paramters in + * all possible ways and comparing to the result. + */ + + operators := make([]bool, len(eq.params) - 1) + + for range int(math.Pow(2.0, float64(len(operators)))) { + + // calc possible result + acc := eq.params[0] + for i, op := range operators { + if op { + acc += eq.params[i + 1] + } else { + acc *= eq.params[i + 1] + } + } + + // compare to actual result + if acc == eq.result { return true } + + operators = incr(operators) + } + return false +} + +// main loop +func main() { + + // read in file + dat, err := os.ReadFile("data.txt") + check(err) + dat_str := strings.TrimSpace(string(dat)) + + + equations := newEquations(dat_str) + + result := 0 + for _, eq := range equations { + if isValid(eq) { result += eq.result } + } + + fmt.Println(result) +} diff --git a/day7/combine_with_concat.go b/day7/combine_with_concat.go new file mode 100644 index 0000000..4ec915c --- /dev/null +++ b/day7/combine_with_concat.go @@ -0,0 +1,111 @@ +package main + +import ( + "os" + "fmt" + "strings" + "strconv" + "math" +) + +// data types +type Equation struct { + result int + params []int +} + +// general util +func check(e error) { + if e != nil { panic(e) } +} + +func newEquations(data string) []*Equation { + /* Reads the puzzle input, return a list of Equation structs. + */ + lines := strings.Split(data, "\n") + equations := make([]*Equation, 0, len(lines)) + + for _, line := range lines { + split_line := strings.Split(line, ":") + + // get result/ number before the colon + result, err := strconv.Atoi(split_line[0]) + check(err) + + // parse paramter/ numbers after the colon + str_params := strings.Split(strings.TrimSpace(split_line[1]), " ") + params := make([]int, 0, len(str_params)) + for _, num := range str_params { + param, err := strconv.Atoi(num) + check(err) + + params = append(params, param) + } + + equations = append(equations, &Equation{ result: result, params: params }) + } + + return equations +} + +func incr(arr []int) []int { + /* least significant bit first increment, base 3 */ + over := 1 + for i := range arr { + if over == 0 { break } + arr[i] += over + over = arr[i] / 3 + arr[i] = arr[i] % 3 + } + return arr +} + +func isValid(eq *Equation) bool { + /* Checks whether the equation could be right by combining the paramters in + * all possible ways and comparing to the result. + */ + + operators := make([]int, len(eq.params) - 1) + + for range int(math.Pow(3.0, float64(len(operators)))) { + + // calc possible result + acc := eq.params[0] + for i, op := range operators { + if op == 0 { + acc += eq.params[i + 1] + } else if op == 1 { + acc *= eq.params[i + 1] + } else if op == 2 { + num, err := strconv.Atoi(strconv.Itoa(acc) + strconv.Itoa(eq.params[i + 1])) + check(err) + acc = num + } + } + + // compare to actual result + if acc == eq.result { return true } + + operators = incr(operators) + } + return false +} + +// main loop +func main() { + + // read in file + dat, err := os.ReadFile("data.txt") + check(err) + dat_str := strings.TrimSpace(string(dat)) + + + equations := newEquations(dat_str) + + result := 0 + for _, eq := range equations { + if isValid(eq) { result += eq.result } + } + + fmt.Println(result) +} diff --git a/day7/data.txt b/day7/data.txt new file mode 100644 index 0000000..bdf9537 --- /dev/null +++ b/day7/data.txt @@ -0,0 +1,850 @@ +173208328696: 3 2 9 4 8 6 796 23 8 5 3 9 +195319: 5 44 8 71 124 2 967 38 +9382: 840 634 28 2 53 4 1 6 9 +1050614: 87 7 173 61 4 +46769533: 668 7 86 86 850 +50103815: 937 65 5 3 817 +11627904330228: 6 57 4 2 566 3 330 229 +9640750: 3 19 32 43 431 47 +176753610: 5 36 33 23 6 4 8 4 90 9 +1491740: 2 1 6 6 4 82 303 980 +473797474: 7 93 9 2 7 2 23 6 485 1 1 +4658890797: 456 60 15 40 4 255 +899769951: 89 9 769 95 1 +33808: 84 1 727 41 425 91 +237736: 4 73 814 40 8 +111339277: 433 9 93 4 81 901 3 4 +15423392: 12 3 691 62 7 256 7 +18654335611: 62 1 804 6 3 1 2 5 57 3 9 +34773: 7 340 7 3 +29342764218: 4 8 4 57 4 8 6 6 2 38 21 8 +140334464965: 333 336 421 8 967 +1021970: 452 7 323 +97516249: 2 4 8 1 7 578 9 8 2 30 7 +55311448805: 2 7 7 581 7 6 2 4 744 61 +8645866556662: 622 139 66 556 662 +186625: 7 73 5 76 1 519 6 2 14 +12262: 116 3 74 42 244 +9207: 20 3 1 75 93 +522723: 6 879 6 99 3 +4594: 55 7 160 569 4 138 +201855: 60 82 41 50 87 +1794930: 2 3 9 7 3 4 20 34 802 9 6 +2674551570: 308 867 419 156 7 +529252: 40 71 65 6 4 2 +2996: 908 91 3 +18604557: 6 6 26 10 92 195 80 2 9 +20648: 89 58 4 +53121262: 30 7 7 9 1 7 1 2 199 264 +2203236858: 554 971 5 397 1 +19707460158: 99 886 37 2 590 11 5 8 +2062312: 4 65 3 88 5 5 52 5 3 9 +501583867: 501 537 46 2 51 615 +36728328875: 538 806 44 847 5 +531: 5 98 23 96 2 87 +2378172: 1 433 91 898 7 59 +4177289: 505 74 6 7 12 90 +1285293979: 64 9 80 84 93 979 +248323: 8 5 7 4 2 5 27 6 2 2 3 757 +3330350484: 82 3 3 2 4 580 7 61 1 4 4 +1517321: 4 33 8 6 56 6 668 4 +16266949: 1 4 55 2 559 5 10 +64950877: 8 8 864 86 879 +75374: 2 134 762 3 26 +378629: 74 5 4 96 919 +487792627: 8 6 1 975 5 495 7 4 7 7 +10124118: 993 5 14 34 6 65 9 +69360: 578 3 5 8 +776022: 773 1 28 87 19 4 11 +5613507: 7 48 12 8 2 9 87 2 178 +1073186408: 157 8 167 5 4 59 33 5 8 +5739006: 7 5 99 47 83 8 9 897 1 +77852717: 9 1 388 76 3 50 88 +173180: 50 795 886 77 +25224: 70 9 5 3 8 +497910888363: 1 2 2 7 6 51 4 3 3 72 366 +139560: 367 63 35 9 95 1 6 +481559956: 963 5 465 81 4 49 56 +721542: 6 20 1 188 893 +10392: 4 8 74 98 4 +2836496: 4 521 7 4 28 338 +140252: 4 49 44 4 1 470 98 7 7 +6423309: 5 7 4 3 964 7 4 53 2 1 1 5 +789503484: 61 20 63 924 7 +3898900: 79 1 8 4 7 2 61 7 3 25 4 +168740: 291 174 340 729 2 55 +863315: 880 9 1 9 961 337 +177326: 2 481 7 96 51 +731146118: 36 549 8 200 4 607 6 +25880320176: 694 8 41 286 2 4 786 +16468278: 963 30 4 57 747 +964078: 6 1 1 80 9 7 6 788 2 1 6 8 +194724839: 194 35 37 483 6 +4478885245: 5 7 5 30 3 649 7 9 4 44 +518056: 4 7 6 9 6 9 34 +55358: 673 792 4 59 9 9 6 4 2 +4209408000: 6 960 30 406 60 +193948: 17 81 6 89 18 +83817: 119 23 1 22 508 +199: 2 9 137 1 48 +50160193774: 4 7 526 14 1 6 628 2 9 6 +1467279411: 803 9 71 25 55 388 73 +352535: 9 7 22 3 40 98 97 +622: 9 3 46 1 67 3 +68391051: 4 908 789 3 6 76 4 9 +9736104476: 487 98 204 47 9 +411019350: 116 107 118 3 56 2 8 +543345014: 21 528 645 9 7 7 9 959 +849671326: 983 3 686 8 6 730 7 +41233974730: 8 3 2 9 8 7 793 5 5 72 2 7 +496719210: 8 625 1 2 8 34 4 620 2 5 +918833: 9 602 4 7 40 6 2 14 32 9 +2480248311: 1 9 8 77 8 6 8 38 795 11 +90772933445: 12 172 772 966 5 +96271: 275 675 4 3 32 63 478 +11504025: 812 1 4 38 585 23 +4879421: 487 94 24 +388165644: 7 412 28 38 85 3 9 516 +9632840: 1 9 11 390 64 40 8 6 47 +63: 7 52 4 +43438680: 8 9 5 6 220 3 6 5 81 8 15 +2190248: 6 7 80 30 785 6 1 85 4 3 +168489793: 6 70 5 8 627 22 +5487709622: 8 443 61 8 7 107 6 22 +2357364652535: 294 67 1 2 4 46 525 38 +95: 2 1 93 +72323678: 833 4 24 5 9 78 7 8 1 8 3 +559314: 99 9 70 208 7 23 9 +16046: 8 18 2 9 1 8 6 2 436 1 2 +2369572: 351 75 4 9 286 +170113174449972: 1 77 38 6 959 44 997 2 +59230664510: 840 3 3 5 7 2 8 503 7 4 1 +1338177606394: 4 9 50 8 67 76 7 3 3 91 +44461117852: 9 8 6 6 748 66 861 844 +135471: 6 9 899 7 5 606 +4413178: 5 62 895 65 +24946219642600: 791 9 3 5 49 2 6 5 73 8 +100348312: 93 5 9 59 456 7 20 1 2 +157192: 33 123 7 4 92 +1105122: 6 1 36 50 9 8 87 5 6 5 6 7 +7864821: 5 930 2 2 9 35 8 786 37 +1039674107225: 86 73 93 89 1 1 737 79 +144941172533: 399 8 536 84 454 +110668181: 27 5 12 155 4 153 27 +22161191631: 724 90 363 555 75 6 +2880: 1 23 58 1 11 15 +213307: 3 84 846 62 50 +7350: 15 1 9 2 8 82 3 4 33 2 6 7 +1657672668: 6 38 801 963 37 37 +899189: 75 8 6 91 88 +2169887: 98 16 601 885 1 +262681: 74 8 5 44 3 +14531696: 454 1 4 34 5 4 56 8 97 1 +22656: 4 41 2 4 7 1 3 5 2 3 298 8 +588717: 4 8 1 12 716 +2052840248: 51 193 401 6 3 78 7 7 +430697484: 3 2 935 2 76 94 64 4 8 +3078207: 206 358 85 527 3 3 +933478661: 45 39 9 347 802 64 4 +46438640640: 785 896 393 3 56 +404: 8 1 4 89 4 +7863532: 8 6 4 2 7 98 134 2 8 4 5 9 +9569: 9 563 6 +4092695: 7 50 4 2 35 4 71 313 13 +1619: 97 5 3 729 109 36 439 +2066910348: 7 5 6 6 4 589 7 376 7 48 +1322691: 68 9 5 74 863 688 +42730400: 169 7 602 6 8 36 10 +953383: 5 14 76 3 382 +501340: 16 481 9 34 41 +5694: 5 670 1 2 22 +422: 2 3 2 6 2 +77790: 6 4 1 103 7 71 +5403064: 59 633 7 78 3 +1500824: 677 7 569 247 827 +694: 89 7 35 12 18 6 +4835712448810: 359 8 60 4 7 561 2 8 2 5 +55447: 553 1 3 5 10 +1535429885: 2 36 5 69 88 4 529 923 +70489: 6 2 8 88 4 70 2 5 6 6 1 +26190: 1 63 22 49 194 +37811407: 50 806 9 818 6 175 +4689794: 127 1 4 2 4 3 5 343 853 +6708329: 71 7 46 95 9 +67331628: 9 16 19 85 884 27 +697: 322 257 7 1 69 42 +13618: 7 5 645 694 277 +177224228: 79 4 88 5 6 333 7 9 1 9 8 +12354211711: 7 8 17 3 623 421 9 8 4 1 +267142: 169 1 96 2 141 +3312433473: 662 4 4 8 724 1 4 969 +497009: 3 41 240 250 7 9 +694691: 77 174 9 77 40 7 +12247173726: 2 654 568 71 737 2 9 +1055594: 65 5 71 52 1 5 42 7 967 +1606519: 57 542 52 3 28 +857: 5 64 1 345 445 +66088791: 6 608 8 124 666 +13020606: 23 72 17 6 778 +55198873491: 36 19 538 45 15 59 91 +1670860779: 1 2 7 10 3 86 9 198 6 9 7 +86483611627: 3 3 5 56 461 1 15 9 6 28 +1463: 18 3 310 4 7 +138924: 5 8 42 70 8 29 2 9 4 +19805024: 9 5 44 43 78 648 +4522971: 4 893 3 9 5 7 173 4 67 3 +27375516: 8 9 2 8 6 57 6 745 8 5 1 6 +1453326: 4 97 96 3 9 93 334 +1279737: 7 434 29 11 817 6 +393527: 367 30 15 949 57 +354442420181: 31 4 15 6 46 6 835 3 1 9 +9855: 65 7 15 +1174437: 13 961 94 95 +90: 1 3 80 +5779207060: 57 17 117 7 864 53 +12839008: 860 12 5 49 7 8 52 +92267662: 167 85 65 99 63 +1838678: 7 5 8 653 947 7 73 9 1 +454: 3 5 3 3 +123726779: 47 257 8 78 69 652 +1927200174: 23 441 3 52 633 1 9 3 +37782673: 3 8 982 8 2 43 9 35 +108870: 450 632 91 569 12 +194673606: 1 965 8 6 990 1 4 +3659230: 9 4 592 30 +2206980009071: 976 25 335 9 3 30 71 +2034: 20 96 9 4 781 +690757020220: 6 307 25 468 15 218 +5906451: 590 4 982 875 594 +250448: 7 59 86 8 84 4 8 86 2 3 6 +515184135: 515 177 7 1 35 +447595: 4 6 39 333 9 6 5 50 3 1 +498405: 7 61 1 59 762 80 7 5 +2208129617: 2 642 54 32 39 878 3 +849680: 1 256 453 68 83 988 +356449: 53 5 91 369 80 +186208: 4 2 7 8 2 4 9 2 78 95 4 2 +23006: 745 1 1 30 623 +67118844: 533 4 4 19 8 5 6 124 +10980376: 865 965 6 377 2 +136144: 9 91 580 1 6 6 4 291 1 4 +1788958: 5 96 64 15 32 93 6 61 +21245830200: 58 5 3 3 225 3 771 8 9 +32685330: 81 5 11 3 6 2 936 3 934 +37939114: 8 8 1 3 3 17 56 82 3 7 +4738978179: 2 6 2 535 5 9 762 6 59 1 +693233917: 2 1 5 4 6 1 5 12 7 797 3 4 +1140381237821: 37 8 97 42 8 8 5 1 3 6 4 8 +16808181: 10 858 2 774 +1555609: 299 30 6 13 8 47 3 +83221672799: 3 26 7 73 5 3 4 851 4 1 +4052315445073: 5 2 5 8 899 3 206 439 7 +95302617702: 28 678 58 52 1 502 +5925957075: 705 4 5 9 7 5 5 4 3 7 8 +10884456: 5 14 2 8 6 7 62 1 3 4 422 +151605359: 67 2 7 9 2 5 9 75 837 3 1 +303086778: 962 9 8 26 687 7 765 5 +5203359000: 441 828 3 250 19 +11535068: 94 3 1 87 47 +128608464831: 68 31 335 489 61 +202182652: 39 99 988 6 93 1 53 +145614996: 61 46 4 5 68 85 9 996 +13036008: 7 4 1 71 48 5 30 9 718 4 +26419188096: 6 4 16 3 4 7 7 9 6 84 8 38 +15028360965: 8 88 20 9 9 940 9 4 2 21 +218888219: 4 4 3 912 8 219 +426810949: 121 423 240 83 52 +49353: 403 5 900 2 +61693566814: 1 83 7 4 294 184 89 +167334843: 415 2 9 32 8 6 7 3 822 +16070692795953: 767 50 29 9 5 170 493 +51093428: 3 6 9 8 309 7 7 3 94 5 3 1 +293012370846: 54 26 155 75 8 7 87 9 +1720384242: 9 448 1 1 684 376 970 +16704052: 449 6 2 62 4 1 8 +141170995: 7 4 23 3 9 25 1 66 8 7 2 +83255555200: 5 26 6 1 93 5 60 170 +1123297: 180 3 33 2 93 46 +141398: 5 701 698 61 936 2 +76175058991: 24 6 71 5 3 8 4 149 9 94 +6324912: 5 7 6 9 6 1 265 67 4 91 2 +31971371: 3 2 4 4 9 83 6 786 32 3 +524: 7 5 162 347 1 +554485: 79 7 433 964 87 +14905934: 87 3 57 2 8 1 66 2 93 3 7 +315612: 8 307 61 3 +14678: 1 6 1 8 2 179 537 4 5 9 9 +486285: 8 6 1 73 5 358 5 7 48 6 +831: 4 29 6 6 96 +1665453: 4 84 1 37 93 9 +188046320: 367 664 528 770 +31216565: 941 99 52 10 30 967 +14207: 1 3 7 326 5 3 9 5 1 4 7 8 +14975989630: 9 268 333 14 6 8 9 +27149546: 1 2 90 685 42 768 43 1 +1493894328: 8 5 24 4 5 8 894 3 29 +1283489214: 1 31 98 2 238 6 7 42 +23535263: 2 3 839 869 443 9 +2659356081: 854 3 346 30 81 +7689530016: 14 2 90 894 98 6 138 +1771209: 2 66 3 6 6 9 73 4 9 60 9 +1998: 100 2 97 5 +318874799: 704 297 9 1 5 305 349 +936444186: 18 1 18 9 43 2 4 61 +69550895822: 6 689 508 86 1 97 22 +21978: 2 7 2 757 27 +283339: 16 1 9 5 105 3 649 690 +1144: 5 7 9 80 33 13 6 826 78 +1197824965: 21 747 3 918 7 3 2 62 +1955647: 21 72 9 24 820 +739192: 706 53 5 2 965 +291852: 41 71 4 7 704 +444019415197: 863 40 765 5 851 599 +517880145: 4 4 43 4 6 2 737 88 148 +1388088989: 355 9 2 39 989 +136749523: 9 26 1 6 7 163 85 673 +3972460849: 10 7 4 3 8 6 6 13 192 5 1 +2044442413: 38 2 2 7 740 5 46 22 7 6 +191171828: 5 2 8 3 8 3 271 9 87 4 3 6 +14735403: 786 59 6 7 17 415 +2217140647: 7 64 6 4 15 52 8 55 9 7 +848: 3 30 3 85 149 1 344 +397578: 8 833 419 3 56 762 +41368344: 1 9 6 127 7 2 42 3 9 1 8 3 +56287: 260 851 10 137 10 5 2 +373255344: 2 1 80 2 3 9 1 7 98 1 687 +4440751: 955 2 5 465 2 +5480: 29 63 3 +178978: 10 69 94 4 6 6 73 7 3 8 2 +2114222: 9 748 314 249 30 96 +371039: 6 4 525 209 15 27 4 +5627352: 1 84 4 3 95 350 1 +451: 2 4 6 9 148 29 4 +3414: 30 639 5 63 6 +2277661652: 5 694 4 61 654 +1117230: 86 8 697 22 794 72 +48168432970: 297 328 8 162 969 +985318: 9 37 7 46 63 +44902298: 375 3 60 7 10 7 8 13 4 9 +778944: 7 8 880 1 7 1 7 4 7 31 2 8 +184447293: 230 42 1 6 7 9 8 4 5 2 +10369163970: 2 8 3 9 8 386 9 6 5 326 8 +2623880887: 28 21 37 73 93 1 +48694800: 44 595 6 5 62 +3990322610: 5 424 5 7 7 3 30 62 5 7 +35265031: 8 44 649 87 1 1 40 +16956332984: 78 5 3 9 416 8 1 4 90 80 +27800027: 99 171 64 94 83 6 +1252480701: 5 429 88 9 6 7 2 4 8 1 2 3 +10518288: 71 3 64 1 863 44 33 2 9 +459815681640: 57 476 9 6 8 163 9 +338508657393: 7 919 405 74 522 7 +449073: 411 75 924 9 +542239627: 94 9 89 642 4 +7052900814: 67 99 7 86 793 89 45 5 +25411160027: 29 412 5 309 8 44 5 86 +5263273: 39 58 1 77 44 3 76 +290296762079: 85 48 777 3 31 3 70 79 +266120163481: 3 8 9 88 583 2 2 7 5 3 3 +374709019300: 4 7 661 5 88 45 308 89 +281158: 467 1 6 4 7 35 1 41 7 2 6 +697316184: 2 431 7 809 5 23 +72271: 1 5 874 18 8 96 16 399 +5782981080: 99 2 7 76 21 980 1 9 77 +334302: 3 8 6 866 28 +325652236: 932 20 537 4 637 +308485600749: 7 6 615 2 4 253 66 46 7 +314128368: 990 941 317 63 8 +1295: 404 1 50 586 255 +2953: 6 215 6 728 6 3 +93722943195: 24 69 7 22 94 3 196 +4135752: 56 434 909 2 738 4 +832963: 64 13 9 52 8 +1644301: 42 567 300 9 1 +22182890397: 811 43 825 7 30 865 +42277158: 79 71 38 2 718 39 1 99 +143264857: 1 7 981 6 493 37 43 +14114835828548: 364 72 4 44 387 547 +1236: 952 203 1 6 75 +33196687: 2 567 9 72 83 53 4 9 9 +564396850: 34 8 853 868 9 7 7 +276803: 2 9 5 412 881 5 2 10 4 +917674: 686 151 80 61 6 6 +315724: 6 174 14 1 31 7 8 2 4 9 4 +1186453779: 3 89 5 61 35 65 8 9 199 +9313: 72 8 4 6 2 3 4 3 1 158 8 9 +1586408290: 8 7 6 6 75 3 15 82 13 74 +251953385525: 15 8 394 359 3 5 52 5 +18835200: 23 446 76 8 30 144 +1196758806705: 5 5 4 9 4 95 24 6 6 97 8 +60074037: 17 7 648 2 7 64 3 4 634 +1379040255: 25 5 8 52 13 255 +5280232615: 7 879 24 170 42 67 +98770: 15 94 7 3 7 +1397124720094: 8 411 90 50 177 2 48 +231163656016758: 547 6 514 469 8 5 2 9 9 +5867130: 7 4 9 823 1 9 74 3 4 8 66 +1701440639: 946 93 638 7 40 48 +2593999200: 585 5 923 24 20 +30551453388: 3 9 729 77 2 2 4 1 1 5 6 9 +72045190449: 686 3 434 35 449 +1001: 99 3 1 9 74 +63741796: 6 233 4 24 643 13 5 +7252718059149: 8 315 4 3 7 89 939 14 +260056302: 1 16 2 9 9 956 5 7 2 305 +6147114: 34 580 711 4 +12389376383: 7 39 22 8 27 42 6 14 +186944480: 20 498 33 18 78 4 9 78 +24518893: 491 48 1 950 890 +8183085126: 1 5 1 1 89 96 8 56 852 4 +862344419: 64 1 797 344 404 13 +15195639: 79 866 1 67 8 6 5 30 9 +627792: 39 240 375 7 6 +90704275: 7 9 5 5 3 76 742 77 +11033491950: 83 7 6 357 4 3 975 2 9 1 +129735126: 41 492 42 718 17 1 9 +2666611584: 10 86 321 61 252 416 +134136402670: 3 9 2 7 98 98 9 7 9 9 9 7 +471070532: 977 112 861 5 212 +8158816822417: 6 6 65 70 306 1 56 4 1 5 +476804020: 91 9 189 1 7 2 9 8 77 4 5 +18641025: 6 3 9 4 6 281 27 1 5 387 +101519153: 6 4 2 75 2 4 4 9 569 449 +44618962: 2 63 663 847 676 964 +30282724505: 3 362 12 2 897 4 5 10 5 +1296650782: 383 913 602 48 782 +46584965278: 69 8 71 473 7 94 +1205248: 67 275 404 3 64 +3197303200: 4 417 9 1 93 91 925 +816373: 736 58 63 216 19 +142867725: 591 519 60 5 65 33 +6217653: 57 4 94 22 7 23 928 +1463759856726: 5 28 8 8 33 3 5 960 8 9 8 +95891337: 625 6 7 36 152 24 9 +462816945: 7 764 36 6 945 +16116838: 7 9 9 9 21 2 73 3 836 2 +383765690: 89 429 195 56 79 9 1 +450922923034: 4 40 73 8 878 7 1 5 5 8 4 +9952: 2 30 676 2 892 1 +29920841389: 7 8 2 4 274 7 41 1 2 78 8 +24878478237: 9 627 30 8 72 870 7 +143644907: 6 1 517 109 6 9 38 5 +49260816: 775 47 44 227 6 +378004: 14 4 9 750 4 +73698044: 6 4 4 5 5 9 1 7 7 4 6 602 +25920778050: 982 255 32 30 3 345 +310303150: 56 7 7 425 210 60 28 9 +6285963683: 8 9 976 313 1 491 7 5 7 +77420: 38 989 5 75 21 +3697784: 8 9 2 39 9 5 9 2 55 73 8 +74415704462: 956 5 778 445 9 +53053308: 530 41 3 4 61 7 231 +12253783054: 8 4 868 9 889 7 4 3 4 51 +184035339: 2 920 353 2 9 9 +226148176479: 5 521 4 141 7 9 2 76 81 +226634: 20 548 7 57 2 +85432: 79 45 6 28 4 +45178776: 2 7 4 4 716 17 5 3 8 1 8 +1217420702: 192 649 977 54 5 +333245046: 48 9 29 35 76 8 1 235 1 +37987008: 6 9 838 6 47 8 9 81 7 4 5 +188865644: 7 83 7 8 110 365 3 9 32 +24897902566: 6 69 9 65 6 2 568 1 +23562589: 279 8 1 7 690 84 +1204988402240: 5 3 990 42 92 106 3 2 7 +635570: 1 870 729 528 5 78 +12611: 7 34 53 +1037740: 105 539 393 7 38 +1754635178: 4 4 8 31 3 466 14 8 9 4 3 +33754608: 230 4 4 2 2 2 8 4 9 +788901121: 205 2 8 91 3 3 60 8 4 7 1 +4295925: 45 21 46 8 939 +8940013485: 6 7 8 6 8 2 1 230 98 4 14 +9809641: 4 4 310 816 62 8 6 745 +99308894650: 976 5 752 870 35 773 +100622039: 7 1 2 87 2 4 7 61 1 9 8 82 +64535: 68 29 654 821 67 212 +191629: 50 9 639 91 670 7 29 +512169: 839 1 2 609 2 +10881: 430 24 2 1 6 1 82 466 3 +669103: 2 623 537 3 +17306: 237 73 5 +1265558418809: 90 37 4 168 916 38 +134694072: 257 647 9 22 5 339 3 6 +19087022: 2 3 7 822 43 5 2 8 9 9 8 3 +36885246: 3 4 23 63 15 221 76 7 2 +139124160: 84 7 4 1 93 3 2 938 72 +153418419039377: 7 73 3 947 30 3 393 80 +18319161: 95 1 86 6 5 67 9 15 5 9 2 +195580: 89 5 2 9 3 3 5 9 131 96 5 +3786512: 6 20 35 6 48 9 9 667 4 2 +38649601: 671 4 2 96 75 +221358274: 7 554 88 1 293 +589269: 6 583 26 7 +5017216: 726 691 9 517 27 +7401912272: 881 18 6 14 272 +73805035743: 737 291 759 3 574 3 +1585704776: 8 9 8 8 3 203 4 4 41 2 9 6 +2505766: 513 111 6 44 9 +8170: 1 1 27 8 72 8 38 +3290971123257: 2 72 7 578 7 89 8 48 57 +16312037157835: 3 2 82 1 5 994 7 8 78 3 6 +1153369: 27 9 56 5 821 498 +1196786: 2 59 8 8 785 4 +777575: 77 7 3 2 73 +64958673: 1 8 624 7 5 78 7 9 7 1 4 +20725: 14 1 189 97 920 3 6 2 6 +65749: 785 83 6 588 +53831143762: 24 224 3 4 1 1 4 37 6 4 +1482302380972: 5 68 7 4 555 725 5 975 +750634528: 50 8 3 6 29 5 983 7 7 8 +240110806422: 73 81 9 610 586 284 +3964854: 8 9 43 2 1 2 70 6 5 6 8 6 +519950: 42 9 974 9 202 +2564: 6 8 99 3 5 8 64 3 6 6 8 6 +72341174: 5 1 271 957 5 85 26 7 4 +1149034638: 6 3 2 435 6 49 3 463 8 +15901047: 4 399 243 41 99 +2002: 82 9 2 11 1 +262764825: 7 21 664 9 9 4 1 6 8 3 8 7 +482725: 1 98 39 160 5 65 8 5 60 +173700: 3 7 83 1 104 772 +25270568: 3 9 7 10 4 6 109 3 23 1 4 +2380: 3 755 5 64 46 +1739647907: 7 427 911 976 4 +82945152: 829 44 4 97 40 614 +2203240405: 4 5 6 432 40 392 1 9 3 +549491: 68 6 3 5 8 5 2 +20612: 3 8 4 2 5 1 44 8 22 92 4 +1531649923: 7 530 42 10 5 57 3 70 +3944150: 1 265 8 43 7 738 191 7 +508414544: 7 77 4 21 5 313 4 18 9 1 +75622767: 21 9 8 2 8 6 2 93 186 7 +18554944060: 470 2 7 794 2 6 71 6 5 9 +29636263895376: 98 787 54 63 3 5 36 1 6 +678280: 1 584 4 3 66 94 3 70 +213315675024: 395 54 8 7 674 94 8 1 3 +3780389: 75 866 35 4 731 767 6 +2995929199: 3 54 520 947 55 +334821375109: 72 3 61 850 861 19 90 +5288671: 1 7 111 7 743 +1028181679: 90 4 451 307 79 +8342513: 2 154 85 414 9 +12826305072: 531 180 93 9 28 76 7 +18433855396: 8 23 33 8 23 32 393 +91032673: 708 5 253 1 6 5 8 7 60 2 +1209164: 17 2 7 35 3 7 +2818981: 3 965 71 383 1 +7243612817: 5 7 487 63 36 9 1 636 7 +7250618: 8 9 47 2 756 2 7 15 837 +597242: 6 616 56 902 6 9 7 2 +9198332: 9 8 4 179 5 9 177 2 5 +852776: 3 7 864 47 6 2 +1359: 8 7 510 58 414 245 76 +833956489: 2 27 8 56 1 655 98 1 9 +569164095: 2 973 9 7 6 5 6 959 927 +72394704: 7 6 7 5 2 2 9 2 339 1 7 72 +15888996: 9 1 7 9 1 333 3 7 7 4 20 3 +11480649: 8 7 19 5 1 367 4 3 4 8 5 4 +645216664: 94 858 8 66 1 +211142246: 1 544 37 4 5 6 35 7 8 9 6 +68333974: 3 65 4 52 6 9 4 2 6 45 6 +60103156: 776 30 41 8 887 1 2 6 3 +17916560347: 169 9 729 436 60 349 +8362438459: 4 7 92 37 396 28 6 693 +14961284: 38 82 47 82 57 +4259807196: 6 6 7 3 965 4 190 719 8 +40972520722: 70 28 5 8 2 55 626 8 83 +7138098: 66 591 183 +242784995646: 64 843 1 9 1 3 5 627 1 9 +86448823: 900 960 389 99 23 +1698: 7 3 489 289 899 +798291653: 7 7 42 576 7 4 492 22 5 +4686: 2 34 102 3 7 947 53 4 +20662384: 4 760 601 45 1 +5486: 7 73 3 21 446 +14040224: 20 78 9 219 2 +205023: 32 52 5 7 215 8 5 3 1 1 +74103360: 90 4 5 3 756 75 4 40 4 6 +159833: 6 2 3 607 248 286 81 +504946784: 9 8 2 898 83 38 2 68 46 +2915096565: 71 71 271 56 71 15 +50119694898: 917 93 5 7 1 5 6 47 78 7 +1205: 864 339 2 +1380331044589: 7 8 3 724 909 9 587 +784347: 77 1 7 1 5 95 6 9 5 7 370 +48806218: 610 8 62 18 +5006: 9 394 97 6 +1306: 141 878 217 8 58 4 +4389930: 55 66 40 907 50 +5440984: 5 3 6 799 38 376 6 29 4 +123296551: 1 91 48 2 6 6 3 98 8 7 +3707684: 61 7 4 4 6 5 11 30 340 +798080: 8 2 837 7 928 +187462565: 71 66 6 436 3 2 +12204658256: 5 185 3 4 7 823 6 3 4 4 7 +5520121710: 184 30 114 7 708 +150024909659: 9 5 18 8 140 4 854 332 +790205: 35 7 1 8 2 1 2 8 8 4 7 426 +385859: 96 45 40 9 52 +59657202607: 93 239 787 813 +1810: 48 7 3 16 883 +3105191: 982 62 51 9 98 +52962: 9 827 7 52 809 +3709104: 9 7 9 6 35 9 744 2 7 57 +13375746: 7 904 90 573 3 3 7 9 6 +8750042198: 874 92 8 42 198 +23167862: 549 2 211 26 33 +605984: 74 798 53 1 3 653 +7086116: 8 494 52 141 586 +86018874230: 13 8 5 689 8 4 359 63 +1853640136: 950 271 9 8 7 6 4 +1167263884153: 35 407 7 3 9 565 91 1 +176432934665: 9 962 163 6 4 673 2 65 +488630687: 5 81 45 4 496 78 +363415: 2 5 9 9 9 7 9 5 6 3 447 4 +185192: 8 7 7 91 192 +320219367: 83 643 894 6 3 +26930: 8 1 91 7 32 498 +2401200: 450 58 92 +3401632: 275 8 57 1 630 +60710: 106 5 546 5 99 +574283015: 80 72 11 997 48 +929: 7 9 1 855 55 +33735: 258 9 48 22 32 +1119894065892: 7 833 239 36 43 21 41 +38254669: 3 6 9 2 267 4 9 6 5 78 3 2 +6488556662: 4 6 1 30 7 8 8 8 364 661 +312122703: 8 39 113 9 701 +1153368410: 898 1 67 480 498 82 5 +21397183: 83 4 4 5 68 1 64 +7475128881: 230 1 65 25 776 5 +4615393: 65 71 395 +17803532: 4 890 505 33 34 +45594614: 525 7 84 906 611 +1155709947: 80 7 5 72 52 27 53 +2093439: 25 96 173 54 84 +2703884: 5 5 1 9 552 9 4 215 7 4 4 +64576: 72 8 68 4 8 +48430136579: 7 1 60 4 288 5 7 4 8 577 +81697773: 68 5 39 4 6 4 7 1 624 6 +26107050: 2 4 62 957 9 7 +300202585: 3 47 20 67 529 3 +10498: 5 420 5 +392594631: 19 53 82 539 948 31 +1330: 96 15 22 1 10 +937: 274 3 6 98 6 68 482 +676: 6 75 2 +55320170: 553 161 40 54 8 8 +561541: 72 854 29 183 8 490 1 +46364501: 71 653 1 50 4 +697236: 69 663 3 605 1 +14636: 19 7 5 118 4 4 +15318714: 4 1 642 22 6 5 2 3 9 6 6 +1221402512: 825 290 8 6 418 638 +571167340: 5 711 6 7 33 9 +5023207165830: 1 7 1 2 8 1 669 35 618 +63638880623: 432 930 59 1 2 8 33 6 +124716: 1 8 737 591 9 +122950255400: 9 39 6 76 2 9 195 4 13 +691012: 445 2 3 6 513 +5105946: 663 770 6 4 838 +1422: 945 61 91 7 318 +3476456000: 2 26 6 16 121 247 8 20 +7729: 8 3 117 6 5 +28484126507: 6 57 8 199 2 2 1 71 3 3 4 +234732960: 38 4 1 1 6 52 5 3 56 87 3 +261559: 71 88 7 235 4 +197127853532: 99 22 683 8 602 2 9 9 7 +420778: 5 99 17 6 5 +152982: 60 9 903 681 1 639 54 +821589804: 52 2 490 8 8 437 34 6 9 +47252: 69 43 7 353 52 +42354: 52 9 8 3 3 +284331: 718 44 9 6 +2562320: 376 77 68 232 55 +34595402757: 8 11 7 60 9 9 130 7 38 8 +19453671: 2 9 39 4 43 3 5 2 7 6 4 4 +33041395285: 9 796 9 92 2 76 3 7 1 2 3 +6965764: 2 694 568 8 2 +4286055: 8 1 7 6 5 9 2 80 7 87 167 +36720: 57 25 69 6 347 6 9 8 +8534611: 60 75 470 63 +3152676: 314 384 792 91 3 +13610: 5 8 518 1 91 +81074586: 4 806 646 99 86 +49865: 554 9 4 1 1 +1530863154: 72 7 6 3 863 15 6 +156055335: 7 92 30 5 9 829 893 7 6 +981344: 7 9 1 2 5 306 947 364 2 +295308888629: 3 9 9 63 91 2 6 7 3 1 2 9 +20869696: 6 4 817 52 248 +59436: 3 7 8 22 93 5 97 +3784: 9 14 3 4 +9707401: 9 17 236 37 8 2 +58229115: 4 73 96 30 2 14 1 8 8 4 3 +6527113889: 186 4 3 547 937 363 +277603083: 4 2 6 5 610 10 3 3 5 6 2 3 +77840: 62 78 1 61 48 9 +682863174: 83 599 2 3 45 318 174 +205328: 3 7 1 49 4 7 9 5 62 8 41 +27798: 2 19 7 41 3 +5906761115977: 2 193 742 919 363 7 +265453271372: 273 1 2 9 2 9 16 7 7 9 3 2 +1118: 743 23 56 9 285 2 +15613896284: 582 76 353 2 16 68 +177783: 6 66 26 462 6 +1105560: 9 32 5 9 4 74 +772: 40 435 297 +63021872: 675 9 7 979 4 683 24 4 +13091: 521 761 1 9 7 20 225 +3552539: 7 145 35 36 1 +3544624981: 3 4 4 184 1 8 7 7 3 8 1 19 +66042399: 73 2 8 8 5 7 2 3 2 88 7 6 +368044: 8 72 46 4 1 +1698622: 1 3 13 85 2 8 93 +154405457: 971 572 278 9 1 906 6 +19962722160: 2 2 3 942 7 5 9 218 3 3 2 +10753: 48 111 2 5 93 +1276626: 7 85 491 625 1 +8848320: 3 703 40 79 53 5 9 30 +28601760988: 79 727 2 45 6 3 830 +58420: 6 86 635 +23614361019: 6 87 618 515 12 5 6 9 +639: 13 7 32 +94091908: 5 1 224 16 43 7 8 398 1 +145159: 6 459 6 7 1 96 1 9 4 7 7 +45331853: 3 31 7 606 4 748 6 9 46 +370944000: 863 57 2 8 2 5 36 7 2 5 +3080951: 55 56 948 +44040422731: 8 80 7 5 5 844 5 5 7 475 +9397153: 93 28 6 63 15 1 +18678891: 933 9 2 840 49 +609: 54 95 457 +896384: 6 20 43 117 1 47 +907711: 146 80 853 62 2 4 41 +102812960: 8 361 356 74 1 31 54 +13811166: 9 32 9 4 74 1 1 4 9 2 882 +772565310915: 2 780 73 8 5 99 7 2 2 3 5 +74368834218: 11 7 301 634 217 +7371885861: 74 4 425 1 586 1 +54560139253: 9 301 9 3 595 2 3 337 3 +327377320: 54 562 874 6 75 3 +11741635584: 5 1 307 9 9 6 9 56 8 8 21 +1116361: 7 91 55 82 51 4 73 +3631562: 3 2 3 42 6 2 7 1 4 5 62 +18820803: 4 1 1 822 5 5 7 9 12 375 +2131: 20 9 9 1 8 2 5 1 4 22 10 +146529430: 7 62 380 3 6 1 7 2 2 2 28 +474095: 119 6 83 8 +464339: 30 49 4 63 5 1 3 6 2 18 +3259803: 7 5 2 12 2 5 9 3 29 89 +604192957: 4 9 72 7 3 3 9 66 1 5 3 8 +30112733448: 80 9 933 6 3 5 8 8 2 4 3 9 +40178256: 5 357 1 75 6 +217604132: 7 510 6 9 91 8 667 51 +5144: 474 1 64 3 1 71 9 3 62 +148861: 22 9 6 8 59 +121991616: 43 372 9 3 666 9 3 144 +16606881903: 739 145 30 6 861 +490878368: 1 5 9 8 93 6 752 7 9 3 4 9 +477203921376477: 9 789 2 48 83 672 475 +982790: 980 2 1 7 91 +17463250: 2 2 9 44 6 88 +20141134: 190 4 32 5 46 2 9 2 5 27 +542236: 2 7 27 223 9 +56118: 8 70 4 7 9 +90151180072: 3 429 867 7 700 51 20 +138930: 13 8 931 +38804269: 249 7 21 74 88 9 +320350004: 53 1 3 9 6 961 23 6 158 +1999756702547: 49 9 9 391 750 6 3 3 4 4 +346134883267: 7 1 377 734 434 48 67 +398492587: 11 653 6 92 581 6 +20169703315: 29 7 404 4 809 2 38 83 +11867746097: 15 56 2 8 93 50 591 78 +852875: 8 641 5 7 758 6 6 3 84 3 +96681395: 96 664 1 8 95 70 7 2 1 2 +1089808: 64 3 995 9 57 4 94 2 +29838: 344 28 8 7 6 +68309: 2 465 5 73 54 1 +7335330441549: 13 877 21 824 415 50 +1883658481: 418 94 47 204 5 +356735550: 606 292 672 102 4 3 +533753508: 1 950 71 93 85 +48649: 16 76 8 5 9 +111433: 1 86 8 920 32 +270365368: 21 42 860 23 7 964 +47688817: 3 44 688 81 6 +18201812: 9 95 35 362 5 +7132: 9 6 2 41 45 720 77 81 +268222009: 30 1 403 994 5 82 5 6 3 +269202103: 5 3 471 67 381 73 +15698180: 169 71 150 2 3 436 +751410178127: 983 73 69 55 9 5 625 3 +46979462: 6 3 7 278 99 660 +12033304085: 42 573 608 5 82 +355424569: 8 417 358 8 9 9 5 9 62 1 +938088966: 32 19 922 75 266 66 +22414704: 71 839 3 52 6 +7965: 520 43 14 81 2 +619792607424: 2 71 37 246 8 82 731 +1540204: 7 7 22 5 1 87 7 7 +17871: 1 3 8 2 902 6 392 3 25 2 +1168258953: 901 227 336 17 729 +39965626: 97 4 4 7 52 6 6 6 5 2 971 +35825094: 84 6 9 7 4 59 84 5 6 9 6 7 +9526075: 56 21 9 53 9 +583: 28 14 16 7 3 3 +37790748: 1 8 6 1 6 29 7 5 7 7 3 141 +23467492: 781 58 3 200 77 15 +723087451: 9 8 276 32 745 4 +1332007582: 2 406 668 90 758 2 +49964385278: 7 806 93 52 4 80 2 +2191: 1 4 1 7 62 2 19 +52589284: 795 7 22 78 18 818 64 +2080725: 4 19 7 583 43 +70150: 80 5 86 2 827 2 6 2 5 +519728657: 799 13 7 2 3 719 5 65 +51093504086: 1 3 7 2 63 5 1 6 63 55 86 +29491781: 6 4 12 17 123 7 641 12 +527930: 422 97 8 324 608 +434837717: 6 6 1 56 80 2 8 1 5 3 8 2 +243806992: 4 842 60 7 37 6 88 82 +20093297398: 8 5 7 9 5 3 48 5 94 2 6 50 +6635709: 277 7 1 9 94 7 3 2 30 3 9 +640: 2 1 64 5 +159837: 2 94 9 734 37 +15956170575: 71 88 561 70 5 77 +4279352: 235 394 31 68 44 +1605759657: 96 3 6 72 580 27 +443: 6 5 3 7 212 +711201340: 12 70 7 8 13 40 +1111889114: 39 405 741 95 89 +902315585: 3 6 98 61 870 4 3 99 6 +8128272: 3 3 5 4 32 8 1 8 6 1 5 796 +260474: 3 9 9 27 459 223 +6202901169: 15 5 827 59 342 166 +94872: 59 21 7 9 9 3 2 8 3 1 2 69 +196951390: 2 3 971 78 7 583 32 +1452742464: 403 52 37 6 952 4 6 +6546669: 46 48 21 84 3 565 6 8 +17729853: 240 76 2 3 3 9 3 6 2 78 7 +8627097713: 296 66 1 48 46 2 2 7 2 3 +2400257423699: 506 6 8 47 7 473 3 699 +61209002: 27 95 418 250 2 +191867: 41 8 42 417 46 +1829537137: 3 81 8 1 2 3 4 4 484 85 2 +347642960: 575 2 474 6 602 +14368: 5 7 3 8 1 1 4 58 125 686 +169936506823: 4 6 279 680 3 6 2 9 9 1 4 +1493394: 3 961 2 7 37 +781117743: 86 79 9 772 2 5 +375410694: 723 6 1 721 6 3 4 344 +4026018660: 67 10 12 3 7 32 5 +211507: 101 5 316 8 45 242 +44672: 5 584 8 +149081228522: 3 6 36 127 525 41 +1482006348675: 95 5 416 84 6 49 75 +478820097: 7 5 7 33 9 4 2 47 3 4 7 29 +21691732214: 2 7 9 1 378 182 4 797 1