diff --git a/day19/c/day19 b/day19/c/day19 new file mode 100755 index 0000000..fb8c68b Binary files /dev/null and b/day19/c/day19 differ diff --git a/day19/c/day19.c b/day19/c/day19.c new file mode 100644 index 0000000..aa30a90 --- /dev/null +++ b/day19/c/day19.c @@ -0,0 +1,262 @@ +#include +#include +#include +#include +#include + +#define CHARS_MAX 4*1024 +#define MAX_PATTERNS 1024 +#define MAX_PATTERN_ELEMENTS 1024 +#define MAX_DESIGNS 1024 +#define MAX_DESIGN_ELEMENTS 1024 +#define COLOR_COUNT 5 + +#define cti(a) ((a) == 'w' ? 0 : (((a) == 'u' ? 1 : ((a) == 'b' ? 2 : ((a) == 'r' ? 3 : 4))))) + +typedef struct sequence { + char *colors; + int count; +} sequence_t; + +typedef struct node { + struct node *children[COLOR_COUNT]; + uint64_t variants; + char key; + uint8_t is_leaf; +} node_t; + +node_t* create_node() { + node_t *node = calloc(1, sizeof(node[0])); + return node; +} + +node_t* search(node_t* root, char* word, int len) { + node_t* node = root; + for (int i = 0; i < len; i++) { + if (node->children[cti(word[i])] == NULL) { + return NULL; + } + node = node->children[cti(word[i])]; + } + return node; +} + +void insert(node_t* root, char* word, int len, uint64_t variants) { + node_t* node = root; + for (int i = 0; i < len; i++) { + if (node->children[cti(word[i])] == NULL) { + node->children[cti(word[i])] = create_node(); + } + node = node->children[cti(word[i])]; + } + node->variants = variants; + node->is_leaf = 1; +} + +void free_node(node_t* node) { + for (int i = 0; i < COLOR_COUNT; i++) { + if (node->children[i] != NULL) { + free_node(node->children[i]); + } + } + + free(node); +} + +int possible(sequence_t design, node_t *pattern_trie); +uint64_t possible_variants(sequence_t design, node_t* pattern_trie, node_t* variant_trie); + +int main() { + char *p, *buf, c; + + buf = calloc(CHARS_MAX, sizeof(char)); + p = buf; + + sequence_t *designs = calloc(MAX_DESIGNS, sizeof(designs[0])); + for (int i = 0; i < MAX_DESIGNS; i++) { + designs[i].colors = calloc(MAX_DESIGN_ELEMENTS, sizeof(designs[0].colors[0])); + } + int design_count = 0; + + sequence_t *patterns = calloc(MAX_PATTERNS, sizeof(patterns[0])); + for (int i = 0; i < MAX_PATTERNS; i++) { + patterns[i].colors = calloc(MAX_PATTERN_ELEMENTS, sizeof(patterns[0].colors[0])); + } + int pattern_count = 0; + + int reading_available_patterns = 1; + + while ((c = getchar()) != EOF) { + if (reading_available_patterns) { + *p++ = c; + if (c != '\n') { + continue; + } + if (buf[0] == '\n') { + reading_available_patterns = 0; + continue; + } + + char *q = p; + p = buf; + + do { + while (*p != '\n' && *p != ',') { + patterns[pattern_count].colors[patterns[pattern_count].count++] = *p; + p++; + } + pattern_count++; + p += 2; + } while (p < q); + + memset(buf, 0, CHARS_MAX); + p = buf; + } else { + if (c == '\n') { + design_count++; + continue; + } + designs[design_count].colors[designs[design_count].count++] = c; + } + } + + uint32_t shortest_pattern = UINT32_MAX, longest_pattern = 0; + for (int i = 0; i < pattern_count; i++) { + if (patterns[i].count < shortest_pattern) { + shortest_pattern = patterns[i].count; + } + if (patterns[i].count > longest_pattern) { + longest_pattern = patterns[i].count; + } + } + + node_t *pattern_trie = calloc(1, sizeof(pattern_trie[0])); + + for (int i = 0; i < pattern_count; i++) { + sequence_t current_sequence = { 0 }; + current_sequence.colors = calloc(MAX_DESIGN_ELEMENTS, sizeof(current_sequence.colors[0])); + insert(pattern_trie, patterns[i].colors, patterns[i].count, 0); + free(current_sequence.colors); + } + + int part1 = 0; + uint64_t part2 = 0; + // Try to build each design out of the available patterns +#pragma omp parallel for + for (int i = 0; i < design_count; i++) { + sequence_t current_sequence = { 0 }; + current_sequence.colors = calloc(MAX_DESIGN_ELEMENTS, sizeof(current_sequence.colors[0])); + + if (possible(designs[i], pattern_trie)) +#pragma omp critical + { + part1++; + } + + free(current_sequence.colors); + } + + node_t *variant_trie = calloc(1, sizeof(variant_trie[0])); + + for (int i = 0; i < design_count; i++) { + sequence_t current_sequence = { 0 }; + current_sequence.colors = calloc(MAX_DESIGN_ELEMENTS, sizeof(current_sequence.colors[0])); + + part2 += possible_variants(designs[i], pattern_trie, variant_trie); + + free(current_sequence.colors); + } + + free(buf); + for (int i = 0; i < MAX_DESIGNS; i++) { + free(designs[i].colors); + } + free(designs); + for (int i = 0; i < MAX_PATTERNS; i++) { + free(patterns[i].colors); + } + free(patterns); + free_node(pattern_trie); + free_node(variant_trie); + + printf("%i\n", part1); + printf("%lu\n", part2); +} + +int possible(sequence_t design, node_t *pattern_trie) { + node_t *node = search(pattern_trie, design.colors, design.count); + + if (node != NULL) { + return 1; + } + + for (int i = 1; i <= design.count; i++) { + char *pattern = calloc(i, sizeof(pattern[0])); + memcpy(pattern, design.colors, i*sizeof(pattern[0])); + node_t *node = search(pattern_trie, pattern, i); + + free(pattern); + + if (node == NULL || node->is_leaf == 0) { + continue; + } + + sequence_t subdesign = { 0 }; + subdesign.count = design.count - i; + subdesign.colors = calloc(subdesign.count, sizeof(subdesign.colors[0])); + memcpy(subdesign.colors, design.colors + i, subdesign.count*sizeof(subdesign.colors[0])); + + int good = possible(subdesign, pattern_trie); + free(subdesign.colors); + if (good) { + return 1; + } + } + + return 0; +} + +uint64_t possible_variants(sequence_t design, node_t* pattern_trie, node_t* variant_trie) { + if (design.count == 0) { + return 1; + } + char *pattern = calloc(design.count+1, sizeof(pattern[0])); + memcpy(pattern, design.colors, (design.count+1)*sizeof(pattern[0])); + pattern[design.count] = '\0'; + + node_t *node = search(variant_trie, design.colors, design.count); + + // We already know the answer + if (node != NULL && node->is_leaf) { + char *pattern = calloc(design.count+1, sizeof(pattern[0])); + memcpy(pattern, design.colors, (design.count+1)*sizeof(pattern[0])); + pattern[design.count] = '\0'; + return node->variants; + } + + uint64_t count = 0; + // Try all possible patterns + for (int i = 1; i <= design.count; i++) { + char *pattern = calloc(i+1, sizeof(pattern[0])); + memcpy(pattern, design.colors, (i+1)*sizeof(pattern[0])); + node_t *node = search(pattern_trie, pattern, i); + pattern[i] = '\0'; + + if (node == NULL || node->is_leaf == 0) { + continue; + } + free(pattern); + + sequence_t subdesign = { 0 }; + subdesign.count = design.count - i; + subdesign.colors = calloc(subdesign.count, sizeof(subdesign.colors[0])); + memcpy(subdesign.colors, design.colors + i, subdesign.count*sizeof(subdesign.colors[0])); + + count += possible_variants(subdesign, pattern_trie, variant_trie); + free(subdesign.colors); + } + + insert(variant_trie, design.colors, design.count, count); + + return count; +} diff --git a/day19/input.txt b/day19/input.txt new file mode 100644 index 0000000..2f358fb --- /dev/null +++ b/day19/input.txt @@ -0,0 +1,402 @@ +uurgw, burbgur, rwgbrg, ubburu, rgr, wug, bbwrg, gbbr, ugwuu, ugu, wwrgwwub, rwurr, uggg, rwb, bwwub, gbb, rbwuw, u, guwrr, wbgw, gbrwbwb, gbrgwu, ubrrwuru, wrwur, rru, uuwgbbug, bwu, bwgggrgb, brbgg, bbgr, wrugg, gbwb, rwuw, wuwb, gwb, rgwr, bwrug, wrrb, ubru, wgr, wuuwgb, wgbbrb, uubgr, rrw, bggwuu, wrgb, urr, urbg, rwggbg, wrw, ruwub, uub, rgwgrgb, bubwr, wrg, rrwrrrbw, gu, rgb, bbr, bgb, burrrbr, rbu, gbbg, rwrwuw, wwgw, ruuu, wru, rur, rrwg, ggrb, ggb, bbw, wgub, ww, uugw, ggbbrwr, ubbgwg, uwwubr, bgurbb, buwgbw, uw, bubr, wgubwr, guw, rr, ubr, uww, uwr, ru, bub, uggbubw, bb, rguwu, grbgw, wrgr, gbwwrb, gugg, rrggbrub, uuu, bwb, brb, wrrwr, brww, ruw, rgu, wbguwgu, gbrguww, gbg, buw, uwgr, bwru, bwg, wwwb, grgg, ubg, ugr, gg, rurrb, w, uugg, rbw, gurbbw, rugrrg, gbug, wwu, gwwgr, wrr, wgwrbr, guruw, urwgr, ugruw, rg, gwuw, ugrwubrb, bgwrw, rbur, wgw, brbrub, gwgwgu, rrurbwu, bgr, ugbwwuub, rgrrubuw, bwr, wrru, wrub, gwbu, wbbwgbr, uu, wbubb, bwurwbr, wb, uguwu, bbgb, wruu, ur, ggwb, uug, rwwuw, wuuubwr, ggu, gwwg, gw, rgrg, bggu, rbg, wbu, uwu, ggbbgg, rwgrr, urrw, ruu, bgg, gbrug, brwr, bg, gwwr, brgbw, uwg, wbrub, gbw, ggw, rwguw, gbbguwwg, bgrubu, gug, gb, gwu, bbuu, wbbr, wgg, ggggg, gbru, ugggrw, ggwu, rrr, wbgrg, ruugwb, wu, ruru, uwwgg, brbru, uwbbguw, ubuu, ubwbrg, uwwub, ugbubb, bgggw, rubwrrg, br, ub, ggr, wgwgr, ggbr, bru, gwg, gruw, rb, bgug, buugg, grgwgbg, bgu, wuur, gbuubg, rruwg, urbb, brw, wbgbbbg, rwu, wwr, gwr, wur, ubuw, gbgwbu, wg, wrb, rug, rbwwwgw, bbww, wwbbr, ugrb, bgub, brwgr, wgrbwrbb, gbrw, uubw, rguug, uubu, urw, rbbw, gur, wgb, rrbgr, ubruwu, rggr, rugbgu, urg, rwbww, ububwr, urggb, ruubu, rbgr, wgrrwbb, rbrb, uwwrur, ruwbgwb, wuwgr, gww, wuu, gwgwgr, bgwb, ggubgu, wuwwwub, ugb, uuwbrgr, bggbbwu, wwbwgruu, wbgubb, uuwgb, rbwg, rw, uwuugrr, wguwgb, wgu, wrgg, bwwr, brrwg, gurgu, ruwgu, wbb, gwgrrwrr, bwubbg, ugrguru, grr, bbg, ug, ubwruwu, brgbwrgu, ggbuwru, wuugwu, urwg, bubrwb, gbub, wgbw, ubrubbw, ruwwu, rbrgb, wbbrgg, ubugw, gurb, gub, wwrggrwr, wubgur, gwbww, wwwrwgr, wuw, ubbwwur, grw, wbr, wwg, buwgw, ugbug, brg, brubwbw, buubggg, ubu, urgbw, rwbubw, grg, bubu, gbugw, ubwbubb, uuguw, wrugr, uggb, wugu, rbrrg, bbb, rgw, urwwrb, gurggub, uwbb, uwgg, rbrgu, gbr, ruwur, wwrgu, wub, bgw, ubwb, rwg, urguw, brr, rwr, bwgrwbrb, wbwrbbrg, wwug, buur, wuwwr, rbb, gwug, grwrgub, uwrrbr, gwrw, ubw, ruuub, bgrrrwwu, rub, rgbr, ugw, rbrggr, ubb, gggr, brggrb, bbbw, gugguwb, rbwub, gr, rww, wbgb, uru, ggg, wbg, rgug, ugruugw, bww, urru, bubb, bwrg, guu, rrgrrg, gubrgg, rggwwrgb, bwgrbr, bbgbgg, wwrgw, uur, bgruwu, ruwbrrb, rrww, bbrwgb, brrw, www, rbr, grb, uwb, gru, wubgb, bgwug, uwgwg, ubgruw, g, rwuugr, brrb, uugggb, grrb, urb, uuw, urwgg, gwbr, gbu, ggrwgu, bwbbwgb, wbw, bgwbgb, r, buu, brrg, ggubg, grrgbur, bgbwbg, wgbb, bwburb, guuggu, rggrwrw, wrwrbwwg, wwrw, uugbr, wr, rrb, rwrww, urug, ggrgg, uurrr, bur, ugg, ruwbwg + +ggbgrrgrbwrbuwwgwgbwbbuwrubugurwbbwubbuwgrgurwwgrggbg +grbwbugrurrrwrwurguuubbubgwuugrwurwrbbbgrgu +bugwbgrrrburbwwgwbugguuggbwgrrwgbrbgbuwrgguwubwwbwwrrwrrgrur +ruubrbrbguwgguwurrubwbrwuwbrubwguggbgbrbwurrugrr +uubwbbugurbrrgwuwwguruurbwwrgurrubwwuugbuuuu +bugrbbrrugwrbwgwrbugwruugrwuwwrggrwrwugwguurgwrwgw +bugrrrgggugwwugwrbrurggbwwwbgruwrbubrubbwwbwwwubru +rgurbgwruwbugbgwbrbguwggbggbggwurgguwrgrgubwgwu +grwwubgwgubwrubwgrrbwwugrbbgbgbwurgwgrbbwrgburur +gurbrggubwrwwuurbwrbgrurgwwgubwwubwbbuuwbgbrgurbbbrug +gbuuruuuwbwwwwbrurugbbbwuurrurggwwbwgwbuwgbwruwbgu +ggwugbggwrwwrggrwrgwrwwruurbgbgwuuuurwgbbuwrwgbrug +bugbbwubrugbbrgbwrguurrbbgbuubwwbubuubwrww +ggubuuwuubbwgrwururwbgwrbbgwwgwrbbgwgrurwbgbrwbb +rwgurbbbgrrbwwuwrrbwbgbburuwuuurrrbguwrrrrwbbgggbb +ubgbugugwguwrbbuwgrrgbbrrbwuwrggggwuurwwwgurgbru +wuwugrgbgwgugrrwwurbuguuwggwuwbwwbgwbgrrbuwbr +wrrrwbwruggrwgubrbgubgguurwubuuwwgrwrrurbruuurrww +bugrbuwwggrrbuurrwbrggwrbrbbuwugbbrgurrgggwggurw +uwbbuwuwrwrbwwggbwbrubrwbbgggrrgbrgbwgrwwwubuguuubwuru +ugburwurugburuuwgugrbrbbbwuugwwrbuwgwugguugruugrgbgrguubwb +brggbuugwubggwbubbuurwrrggggrbbrgggrurwggwb +gggwuwrugrguugwgrguwgwwgguugbrurrwrbwuuwwr +bwrgrwrbguwgwbggwuwubgburgurgbgrbgrgwubbwgbruub +bugwgrrwrrrbguwgrwwrgurbruugguwwgbwgwrwrubwb +wrrubuurgrwrrgrubbgwgugbbbbgguggrwrbguwbgrguwrububwg +ururbwuuuguugubgwgurwwwbbguuubwbwbwwugrwbub +bugrbrugrgbwwgwwgwuubggugwuwbbwrwugurbubruwgbbggwur +ugbuwwbwuwbwbuuwgrbbrbuuuwwwuruggwgwgrwgbrug +ruurrgwbgwrwwurggurbgbuugwwubuwwwugbrurwgub +uggubbbwuruwbuuggbbggurbubbbburruruwuugrwuwbgrugggu +buggwbwgurbrbguwbuwgwgrbwuwruwwuwbwwubuugbuwb +gwugrgrwgwwrrrgrwrwrburwuwbbwbrgwbgwbrgguurbbru +ububwbuggrrgbwgbbrubrguuwgguurrugugbbuuubrbrbwbwbbbrgwb +wwwrwbgrwrwwrbugbburrgbuwuwrgrwubguugbwugwggrubwuggu +rgbrbuwuruuuwwugbggrrwgwbugbgwwwrgrgugwbugbrwwwbrrrgggwrrg +bugggwubbbbbgwugbrguuugbbgwuurgwgwbwbbuuu +bugwgwbbbubrrurrrugbrbugugrwrbgurwuwurgwuubuwbuuuru +ubwrguruwrrgbbuugruwgruwbrguurwgrurbuwuwrrrurwrwrgrbwbbu +gguwrbrrwwwggurwwubbgbwbwuggwubggrugbgubuwubrrugb +brrruwuuuruubgururwbrbwuwrgwrbuwurgruurwuubggww +rwuwruwurbgrrgubgruguwrwwwbugbbuuurruguuggu +rugrruggrwrbuubuuwbrbwrrggguugruwrbggbwbbuugbwuugugrbwwrb +bugwgrwrggbgwwruwwwwbrrbrurbruwuuwrubuwurbgrwgwugwguburwurb +bugbbbubrwburubugrggrrwgubuuubuuuuguwggbugguugbrbgurgwuu +rurwbgubgbwgrbwurrbburrurbrrbwgugwuuwuwrubu +rrrwbrwrruruurgwrggbuuubrbruubugbbwuubbgrggruw +bugwuuruuwbwbrwrgwurgwbgubuguwgbwrbwrubuwgwrwb +ubrrruurgwruwgwrbwggrurgbrbuuwrguurbrrbwwbbrbruwrgggbr +bugugwggwbrwbbrgugbwugwwgrgubwuwwrrwbrub +rwubgrgrbrggwugbbrbgbwwgrbwbwuwrgrgwwugrgwg +bwubugrubwugrbwwrwgbggwwgubwrwbrgrbggubuw +ruggwurbgubbbrugwrwubwrbwrrurbguwwgbgwwgwubbwur +urubwuwrguguwwrgwgurgwggbbbruwgbggububbrwbrgb +uwuwgbgbuwubbruwrgburugbrgbugrwurwgwrrrggbrubgguwrugrrgwww +wrbubbwgbgbrwbwbwbgwgrgurggwuwguubwbbwggwgwgwugrrwgwg +ugrbruubrgbgrwgugbgwbugugbrbubrwwuruuwguwrguguwguuwrg +bbguwgwwgubwbwrrwrbrubggruguwwbbrgrgggwgwrrugggwwguwurbugr +gurrggrbruwburruwrbbbbbggrrbwrurbbgbuwgrbbr +ubgrrbubruwbgrgrwwrggwbgrguwwbgburbuugbruurwbu +brgbwuuggbbwbwbwrrwburggbbgwwrwwwguubwwurwgrwuwggwgwrgbr +wgwuggrwwurrbrgwugrbrubrbgurrbbbwgugbwuugugw +bugbwrgbbwbgbuuurbbwrrrwbggrguggbgugurwrggwggrwwggbbrwgrb +brrbrbwbgrbwgggurbuwwgurbrbgwrwguwruwruwgbwwwrrwbugr +rbrrrruwbubgbwwbwgruurgggbbubbwgrgruburbwuwru +uwrrbgwugbggwrburrrbgbururuguwwwwgrrugurwgbbugubbb +rgwrbbbwbwuwbwrrwbbuubububrwbgwbrubgbbwubrgrbuwwbbwgur +uwguggwrggggggrburwwgurgwwgwrgggrurbwrurrr +wgggrwwgbubrurrbbgwrurbbgrwgwrbguuuwugwubruuwurbrggwg +buubugrrrgwbwgubrggrgbbrgwwrugwugugubwggwwgurgubbgu +grbbururwbwwburrwgrwbrgbrbrrruwrrwgbwbrugrbgwrwugggbru +uruubgrrwrwrrurbugwbuwwwwruuwuurbrwbbuwggrbrurwgb +wgbgwrwuwburgurrwuuwguwgurbbrwgruggggurgurguwbbuubug +wgwwbgwgbrwruburugburuwrbbrbuwwguwbbubruuuurgb +wbuugggrgruuguwbbrwrurgwrgbuwgggbbgrruwubbrbww +rwrgrbuwrwgwgwwrwwwbrbwrrruggwguwwgggbuurgrrwwrb +grugurwbwgbgrgbgguruubgbrugbbrbgbrggwgrbrbrru +gugrgwwgruwgugubwwggwwgwrugwurgbwurrbgbbbggw +buggwguwurbgwbbrrgggubbwwrrgrgbrrwwrggbgrbwruuw +gbubrwburbbwuwrbbbwbubwuwwburbgrgrgburrwrwgrwgwgbwbgwug +bugggbwbbuwbugrwgubrggwwwuwrrubwurbrbbgwurwwbbuuubruuuuguruu +brwugugwuggurbrugurgwwwbugbwbgruwgbruburrggww +gwuruururbuubwbrbrubwrbwuwbwgubgbwrggwgguwrbbbwgrbu +bugbbbruuwbrwbgbgrwruuuurgwrwuwwuruubbbrggrgbbguwwggbwwwu +rgugwrbuwbwrubbrwugbwwbbwgbrwwgubggggbrbugrrwbww +rbgbbwbuwbbruubwrgrwuuugbwrubwugwgbbrguwrbwgrbbugubg +bgwuggbrggbbbbrwrgrwuuuwbgbwbrwwwwbwrwrrgbwwgrbugwwub +brbuwwwgwgggrrburwwgbbgwwrwrgguubwwwbugguwrwbwwuguuurg +gggbwrwgbrbrwbrwgrbrbbbugrgbgbrbbwuwurbrburbw +rbbrrugwwwwgrgwbrgrrguwbubwubwururbwbuwgrwggurugrruwbug +grrubrgwuwugrbuwbgwuwrgwuwwwgrburrbuurwgggubguggbwrbrru +bugguguurgwrgggbuugurgugrrbgggbwwbwgwruggwubwgruggb +wwwbgrggbwggrubbwrububwrrurubrgbbbwrurgwguggw +bugruwwrrruggggugwbwwwburwrgwgggrrrgguuuuuwrubwbbuu +grbgguuwruwwbgwrwwbrubrbuuggugbuwuuwbwwubgrrrwbbbwb +bugurbbbwgruugburgggbgwugwgwuwrbbbrgrbgggwb +rbbbguuubrubgruubwgrwuuuwwbwrrugwburugbuwgubwg +bbuwgbugrrrguwgrugguwwbbwruuburwgbwwrbwbwburgrwggbrgrrw +wbwruruwgrubwrgwwgurbuwrbruwgrubgggrwguurwrbbwu +brwwrrbguwrbwwrgbuwbuwuubgbggurguwuguwbgguwrwwgubrrbgrrbw +bugbbrwbbgrgguuwbgrbgwwrubgwbbwrrwggurgbubbuwbwgwugg +wrbuuububbbrwwwwbgrgwuwugwbruugbggbbwgrgurwgruwwruwwgr +bgggrwrbwgubgurbrrwrrguugwwgwbuubwwrrgggbrwrbgbubgrwuru +buugrggbrbwgbggbbbgrrwwugburbbgbrrbrbuuwbuwwbwgrrwrubuwwgw +wurbuurwwbrbwburugggbwwugrrurrwrrwgrbruwrgruuw +guubuwwbbbuwrugbwwuubrbrgwgruwguggbrurrurrrwurr +gwubrgrbgbrwbgwuwwruugrbbbwurwuwwrbwrrwbruuwbr +urrugrrggurwgbgrbgruwrwwuruwwuubrwuurgubwugg +uwrwwbuuubrgugwbwuwgbggrurubbrrgwubrwbbrbrb +bugggbruwwgurrrgwwbrrgbrrbuwbugrbbugbwgrruwubuwwwbwrbrrbgbgg +bugbgrbguurugwwbruugbggbbwuwbrruuwbrrgwggwurwgur +ugwruwbwbwwgbrwbuubrrwgrruuguuwgbrburbwuubrbbwbuwr +uwuguugwbguwbwwugbrbwrrgbuwggrbwurgrwwbrbr +bugrubrugbgwwrrbrubrurgrgwurbruwrggbrwuwwurwrwuguu +urrugwbrwurburgwubuwwuwbbbguwgubrbugrruuwwruugbbwrb +bwuurbwuuubwubrwbugrwgruubwggubrrbwgwubrrrgbburrrwg +wwwrrgugburubbuwrbggwrwrrrrurwgwbuubrbrguuurrwurrwggrwrb +wgrrrbuuwrwwuwbguurburgbbgbruwbuuubwwbbrbgubbbwbubruuguw +gwwgbgwrrrgrrrwuwuuwubuwurrruuwwuwuwgrgrgwbuwgubgbgubuu +uuurrgurrwrrwrrwrgwgrbgugugbbwuwubbrwrubrgbwbgbuuwubbrwwb +bugwwgrbuwgbwbrubuuwuwrgrwgrwruggwwurwbwrw +rrgwubrrwbbgrbbubbbggbgbwuguwurgwwrguwuwburww +buwgbwbbwwggbrgbgguwwurrbwwwwgbburubwguwwrr +ubbubwgugbuugrugwrwuurgubrbrgbrwgrwwgrbwbwbbwurgubbbbbrgw +ubbgguwbgrurrrgbwrbwuguwgbbuuuwurrgubwgwuggu +gwgwggwrwbwggggggurrubwggggwwbwuugbggbwrrwug +rgwurbbbwuguugubruuuggrgwwuugrubruruwbgwgrbbw +rbwgwrgruruugbrrbbrbuwuugrwuguwrwuuugububwg +gwbuububugrguwbwgubwbubbrrrurwwurugwgbgurwrbguuwggrrrubbgb +rubrgurrbbbwgwbwrubbgbbuwrwruugrwbbgrrgwwwgwruur +grgrgbggwruubuguwuugugubgwgbwrbguggbwrrwrgbrubwwurgugb +rburbrbwbgrurrggrwggruuwgwbggbwwbgrbuubbgububgrwgrugwru +ubrrrwrggrugwgubrwgwggurwrbgrrwugrggrgrwwugubgruwubgr +bugwgubgurbgbgwrbubrgbguwgugwburbrurgwrrbwubwgbwrww +bugwugwbwuwwwurbwuurugwubwurgbbgggrgurbbwgrwwwwr +wguwrbwbuwubgugwuuwrwubgruugugbgbugbbwbrbuwbrgwr +uwrugubwbwwbwrburwrurugurbwwbrugwbgbugubgbrguwwrrruubub +urrbrwwwwwuubrggwbbbbuuwgwguugbwrrgbgwugbwgubr +wruguwuggrguwbgbgwbwgugrggbwgbbbuurrwwbuugwgbbguurubruu +rrwwwuugwubruwbwbrubguuwruugwuguubwbwurrrugruuugruw +wubugurwrgrurwgbbgbburgwbggurwguubbrbugurugrguuggg +bugrggurburggrwrbuubbubbgrwwgwgguwrubuugbrurrwbw +gggurugggggbuwgwguwgwgrwgbwbgurbwwrbugbwwuw +wrwurwubwgrgbgugrbwwburwguubbbgwburruggbwgwbwgrur +bgurgugrrwugggubwgwwwwggwrrbwbggrwurgubrrruwwbwbgugrubugu +wbuwwrwbgbgwrwbbbgrgwugrgguuurwgrbrrbbbwrrwrrugggbruwwb +urrwwuruwurgwugbuggrwbwugwbbbruwrgugrwwbrrbrrwwgrwwr +wbwwwrwuurrgrrgrguuubwwgugggguwbgbrrbgbbrwrbwuwruwggubrwr +buwrrwrrwrubwrwwgwrrugbbugbubbbuwrrbrgbubggrwgwgwruwbub +rgruwbrwbugrrbgrruugwrwbwwgguubrrrwrururwurrurwwbbburuwu +grburuubguwbuwbbgrwgrwrrubwuuuuwwrggrwwgwbbbwgrbwbg +rugrgguubgbwugwwburrubrwrwgbrgwrgbgrrgrwwwuwgrbg +bugwwwrwwwgwuwbgggbrbgurgurwwgwbbgbgwwguwubwubbbguu +bwubugwbrgbuuwwuwrbbbwuwguwrggrguururbrgubwrrb +gwuurbbgrguwwbwgbwgburwwurbbgrrbbguwrwbubrrwuru +ugruguubruugbggbrwuguruuguwwrurggrgubugrwwgbbbugwrbu +bugubburwbuuwwbubbrwgbwrrbgggbrubbbguwwruwu +ugurwgbuggbugruwbggrrrwrrrbwbrbubbbbuwruwrbwwrrrbwbg +wrgubrbwwgbubuwuurggrbruwrrwrgggwuubbuuruurbbbwugub +ubrurbwrwrrgrrrrwgrrbbuurbbguuwrwururrgwbg +gugbwwuwuuwurubbwuguuuwubgbgwrgrbbguurwruwbrwugwgugwrrruw +rrubbrwwrwggwwrwwwbbbgurruwggwuurggwgbrrguwwwbrrrwrggwwwu +bugrwrgbbwurubugbuubruuugrwubrbubgugrurw +urguwrrbgbbwbwwgrwuwbbuwwubrrrgrwrwbrrrruurrgrrruwuugu +rwugrgbbggururrbbuuubrrgrgggrwuwbrgrwggwgwbuwrurwbug +bugrgbwbgrruurrwgwgbwgwwuuwgrbwbbbuubgrwuwgrgwrgur +wuuwwwrgubbburrrrugrwugubwburwrugbuwuwugbgwggggwbrugbuwwg +rguuurwbgbrubbbuwwbrbbggbburubururbbwwbbruurrgwbrwgwggb +brggrwubuwubrwbgrguwrubburwwgbgbbrwugruubbugwgb +bwrrrguwbbgbwgugbwgggrgbrbuwuguuwrwrwrbwbrbwb +rwbrgwguurguuubrbbgbgubuwuwwbgrggbbwbbwguu +wgrbbruguggrubbwwwurrrwburwrwuwubbwubruwbrgwwubwubwugr +bugrrwurrurwurrbbgrwwrgwwubuwurrbuwwgbwuwubrwbbubbgu +wbbwwgburuwbwgbwwrugwgwwwrrbrrggwrbbugwgub +wrbgbgrugrurwrwubbgrbgurgrbgrgggubuubwwwwgbbwu +wwrruwgubggbwuggbwrugggrbwwuwwrbururbuubbbuuubbr +bbrbbuubgbrbbgrburrwwggrrrurbuwggruugwrrugguruwurbbr +rrbrbwuwbbuwbuubwubbuuugubrubbruurbrggggwugrbbgurbgw +rbrugrbrbwwrbrgwubgbbrwubgwbbbbrgggwugwugwbb +bugwwburwurbugwguwrrrgbbgrrgbgrgurwwurgwwuwggrbrw +buwwwggbugrgugbggbuwbwwurrbwwbbuwuggggbbguug +rrrwbgrbuwuruwbuwbgrwbrbbuuwwruurwggbrgbwwggwgrwrrbgrwgr +rrrugrwuwwrbwgwwrwrubbbwuugbguguwggbrbrwbr +bugugubbggurwwgrrwbuwrggwbgwurbbwrgugubgbugrwrgwgruwugggbrb +buguuwwubbugbwbugggrwbgruuubrrgbuwbwuwrgbwbbwguburwrg +bugwgbgguwugubbrgrwrgruwuwwrrbbggrwwbggwrggb +bugburrrrrubgrgguwwuwrrwbgbwwbbbwubgbbrrru +wgwugrubrggubwwwruubrgbwwggrwubbguwguurrurggr +rruwuwggbbrbwuwwgurrurrwrrbwruguuwbrbrgrrbguwubuwbg +gwbgwgwbrwguwwwwwbubbbwbbbrwubwgggrgugururgrwbbrwbuguubu +bugggubbwggrburwrrggbrubwuubruburbrrggrbgubbrw +rrwubwrgrwgwrbrgbububwbwrrrbwgbruwuuugrgubgwrb +bugbwwuubwwbwwubrbbbrgrrrwubgruwgbgrwgbbbrwbgb +ubbuggrgwrwrggwbbwrrwbrggurgbbbuwbbgurubbwuwruwg +gbwgbgbgwrwbwrbgwuwbbggbrbwgrwrwwurgwguggwuuwubu +bgugbguggrbrwbwggwbbggbrbbrbgbbbugwgwwbgwwwruuuubww +bggrugbrbgggwgwwrwrubwbwuruuggbuuguubggubgwrgbwuubrbrg +bugugggrwrguwrguwggrggbbbwuruuwrbwbuugwgw +gwbugbgwbwwugwruurwgruwwrbbuggwwbugwrugubwgurbugb +urrbgwgubrburgrugurugubuggwuwwbrwwguuuwwruurbbw +buggbrwbwrwwbwgruuuuwrwbwrbgwgwbrwgugggw +wrrwbbgbgrwggbuggrbwwubrwrbuwuuruubbwbrguu +rbwgbrurwuwguubruwubruwwrwguwuwwurggguwburbgu +rggwwwrubrbbrgrurbuggbgwwbrwwwgbwwbgbuugwurbbbrr +urugrrbgwgbrgbrgbgbuwwgrbubrugwbrggggrgrrbguwbuwwruuw +wgugrbwwwurbgwuwubrgrrwbuwrguwwrbgbubrbgwrbwbgwwwu +wbbbuuwwburbgbwwggbbgbrurgbwrwuwuwgrgurgbbubggwbrrggwbbb +wbbwuburwgurgurruwbbrgbrwubuuwrwbbbbwgwggubuwuwubb +gbgbgwrururuggruuuuuurbwbgrwwurggbgggwwurbwuruw +wbrgubgwrruwwgbwrwuwubggugruwurwwbbrggrrgrrwurbwwgwguww +wgwruugrbuguggrubuuurgwrgguuwbbgwrrrbwbgwrrgbrrguurguur +grrwgrwrwgbbrbugbwrbbwburbuurbugwuwbrwbwgrwbwwbggrgwww +wwruwgwuwrwgburbrbuwwggbubbggbugbgbwgururwurrgwbwrbrbbwbrg +bugwwwwwbwgrbwrbbwggbrwgbwubuwwwwwgruurgbgwb +ggwwugruugggbgbwbgbbugwuubwuwwuggugbuuubgbgu +buuuwgbrrwurugwwuuwbgwbuwbbbrwgwgbugbrubbuwwguww +wubwurbwbrrrbubggwrwggwuwubbgbwbrbgbugguguwgggwugugr +bbubrgrwbgwwwwbguruwwwwwgbbruggrbgrrgugrurrggbgrwguuwubwb +ubbwbrubwrbrwurbgrwbgwrrgwrbwwbbgwbgbbruwrwgurubrwbrgbru +wgubbgbgbrbrrgguuubbbwbwgguruwwgrgrgwwurggbgwwruggwrguwwbw +rburwwubguubrgrrrrgrbggruubrrbuggwwrurrbgrguuuwgrrgw +rbruugrrgrggwgwrrrrbubrrrwrbruuwwwguugwubguuruurgrg +bugrbugbrwbugrbbruburugrbugurbubbrwbrruurgurrwgggrrugruwrrrw +rrrrguubrgubbruuubbrwbguwgubwbwwbbbwgrwbrbbwbuwurwguugwwu +buguggrwgwwgrguwgwurbwwwrgwbggwwruuwrbgb +bugubbrrwrurguuuurwgwwrggbbgrrugbrurrgbuugwwwuwbubr +rwbrbuurbgwbbbuurbrbbrbubrbrwrbrbbburbrwuuurgw +uwgwruggrubgwbrwrwgurwuwrwrgwuguubbruwwugbbbg +rwwrgrbgbwwwurbwruuuugbrbggugugrwubrbwugwubwu +bugbbububbuubugwbuuwwurrwbwgrwrrrgggruwuugwuwururugugbbwbggw +gwgbrugggwgruuwgwwggrwwbbwuwrgguwrrbrbubbbubw +bugwwrgwrrbwgbrubbruwgrubbrwwugrwbwrbbrgbgbbbrgbwwwuwwrrgrb +rwbwgwbwuugbbwwrrrrwwbbwrrrrwugwbugugugrgwwwrbbgu +brubuggwuggrbwruubwgrrwgbuurururgugrwurgwbbwbugbgg +wwuuubwurruuwrwwbubgwgurrubwubwbwgrbruguggwgbwwubrwubuwguw +bgwugguubrgurgubgubbwrururuwbwruwwrbbwwgrwgggbrb +rggurbrbrburguwrwwrrwugwgburrrgwbbubwrggwwwuwrgb +buguwgrgrggwgbuugwurgbugwwbbrbgubwwubgwbgwguggwgu +wbuwgubwbbuuuburgurguurggruuwwrbbbwuubgwrwugwwbrwbg +bgbgwwbgrbbwbrwuuuurbuubgruwgwbrwwubwurbuugurrwwuwub +ruwgwwbwrbbrguguwuguuwbguwrggbugbgrgbuggugg +urubrrubgwgbgwgburbbbgbwrbubuuugwwrwuguwrugwwbbr +rwwwggwuwguururrurrggwgbbrwwbwwrwbbrbwrwgw +ugwgbgwrbbggrgggbbgwbbwruguwgurggwbwwrgwrubbwugggwgww +gwwburgwwrwbruurbugwrgwgbbgbgbuguugrgubbugwguwrrrb +rggbwbubwuubugbuubgwurwwgugubwbbgbggrgwbrgbr +bugwuwwgwgurgwwrrrbwuruuggggubgbrrguruwggw +urwrwuugbgrgubrrgubbuwurwbwrbwrwrugrbrrgrburwurgrr +brgrwbubwgrururrrwwbrgubuuuwubwwgwbbugwruwwurrrw +gwbwwurbbgwugwuubggwuuuwggrbrggwgrwurubrggggrwwurggugggbu +bugbwgggwbwuugggbwgrwbrbbbubwwbrgggggbgrurr +bugugrrgugwrbbbggbrwubwwggubbuwurwururgwwrwuwwrgbgbgbug +rrrubrwrwugrugggurbwbbrwwugwruuuuwgrgwurwuwrrrwu +wggrrurgbbwbruurwrggrubrburgrgguwuwuuwbwruwwrugwbbggrggub +buwbrrgwugugburgrruwbgrgrruburbbuubrruwuwuuubwwg +wwwrruurgrgurugurrggggruguuwuurgwrgrbwrrwwgww +bugwwbbrubggwrbrubwbgubrbwuwwbugugbrbgrrrwwug +wbgrwgurrrrwbbuubwgwruuugbugwgbgrrugrrburur +rgbggrugurrwugwrggwwrgbrgwwrwgwugbruurwrbuwgrrgggrgb +wwwwgguwrbrbbgggrggrbrgwgbubwwrrurgubggbrgggb +gbbuwggugwrrbbwbwbrrgguugurrwwuwbbguuwwbrrwbgr +bbuwrububbwwwwgggrrgwwbugwgguuguggwuuwwbwrbbbgwgw +bugrrgbwggrwrubrruwggrwgbbgurwgubgrbwruuggbbbbw +rbbbgubbgggrbbwgbruubrugbgrurrgbrguwgrwugbuuuuuuugbbwrubrb +ugrbrggbwurgbwgbwwbwgwbugwrrwwbrrrwrurugrwurrwgrwgbrwbrb +bwwbugrrbruuwrwrwrbbrbugbbubrurbwwrwrbwwguurbrwurr +wrugbrbggburwuwbrwwubugrgguwrubugwbwrggrwuwrgrgrwuggbgbwr +wburrgbrbbwrbrwuwwuwbrbgbgwgububurrgbuwruguuguwggurbbbr +ubwggwgrwgbbrwuggbgwwbrgrrubuwggwbwrguruwrrgwbbu +bugrbrguuggurugrgbrrurgbgugrbuguuuruwwwr +urrbrwgrgbgwbgggrbwuwggrrrruugbrugbuwwrwguurggbbbg +uwuwuubrurrbrgurgrurbgguuuwgurruuuwrruurbwubww +bugwrwrwubggrwggrubrbgbrurguuugbwubuurwwggbwruggrwggr +ruwgrruwrrwwwgbrubwrbggrburugwbgbrwguwbwwwugrwurwurubg +rrbrgbubrrrwwggwwbbwbgurbgrrrwwuwwurbwwrwugwbrrubru +wbuwgrurbgbururbrwggbgguwwubguurbuubbrbrbug +buuggwgrugrbugwguuurwruuurgrwggrugrrgbwugrrrg +bugbgguurgbwrurrbwgbwgguwwwwrrbrgwrrgubbbugurr +wugrrgrubruubrggugrgrgwbwrrbrrrwbbbwruuurgururrgr +wbgwbguwruwrwwrwbrbuwrgbuurbwuubbrwbwwurbruuurrgwwr +buguwrubuwgwbruburrugruwuburgrrubuwbwrwur +wbwuwwgururwbrurwuurgwbbuwrrrrbbgbgbugrrgwgwwgww +rrguuubburuugugbbwwuwwuwrwrggburrwugrgwrgggrugg +grgwurguugbruubwwbubrrwuruwbuubwbruubbururg +rrgruwbwbwrwgrrrugbwbugrwrguwbgbubwwbrbrrubguurbu +urgurbruggbwrwwgrgrggrrrwruwrurrwrgubbrwbwwrgrwgrwru +rbugrrguwrbrwubgruuwbwgrbwrbbrggggbwgrgwbrrgrwwwbb +rwbugbgugrgwggurguuwrwbwuggwugwguguwruwuggbbwu +bwgbbrbbbbuubrgrbgbwbubwbwgbgbuuuwwuwuwbgwgwbrbgrurwrwbgg +bgrbbwuuwbrrggbwuwwrbggbwwgggugbwggburwrubw +rrrbgrgburwurwgggwwggbbgbgwgugwguuuwuubgwrruw +bugrrbbwgggubwbrwrggubwurbwruwgwuwrbbubrw +ubwrwgwbrgguburwgbguurgwwrrrbggbubbggbrggwbwwwggbgrrbw +uuggbgbgbuubwrbrwwrrwuwbbrugwbbrwwbrbrbuwgruwrr +rwbwbwgrubwurgbrgwgbuburbbugguwrrrrurbbubwgr +rwgubbbugrrbburbbuwgwguguwbgwggbwbuubbuwuwrubuw +gbrbuugbgwbgbbubgbuggwbbrrbgggguuugwbrwuruurrgbwwrbubguw +rrrugbbuurwggbwgrgrugrbgrgbbrubuwbrgwrwgwgwbwgrugbwrb +rgwrwrurgugbbrbubgbuwwwugwrurgwggwbgguruwuurrbuburgrbww +ugbgggubgrrwubugbuwbbgwrrguuuwgubwggrrrgrgg +wbwwggrggwwgwuuwubgwgwuuuuuuwrbrgubrbugbuwrwgrbguburb +bugbwwruurrwrbguwwwbrggrguggwbgrggbbwwuwurwuwrgwuwuubuwuw +buggbggrbggrbbrgwrubbbwgbrgwrwbwrbgwwugburgwuubggr +bgugbrbbgruuguuuwrgggrwuwgurbguubgbgrbbggwgbrwbbrrguuwgrgg +uwwbbuubrrggguwbuuwrurggburburruwggrrrgurgbbu +wwbrurrgbwgbubwbgwbgbgbbwbbbugbwgubwggbwwbbgbgrrrbwww +wbgwuurbggwurbrggwrgwwbbbrwbbrruggbwuwbbbgbwubuwbguwwgg +rrrgwrbguurwrrgrwwubwwrbuwggbgrbwugugwbrgbbbbwrubbburg +brbrrwurugururggbwrwurbwwurubrwrgwbbrubwuu +gbuggbubgwurgrrgrbggbuwwgwurbubrwgruuurrrubb +buguugrwwugbuwgubuugwuubbugrggbguurrrwgwwuru +rgwgbggwuruwurububrbbrbbrwrwgrbwrbuurgwugururbuwu +buggbwgggrgbbwuggbggbubggwgbwuwwgbrwbruubbgwrgurww +ggurwggrburgbrugggrggggbbbbwwbubwbgwgbwgwur +bugwuuuuugrgguwwrbbrgurbuggbbbwwwuurgrug +bugrgbgurbwwrrbgugbbbbburgbrrbugugwgwgbrrgbwrbwwgbbgwgbgwgrg +bugwrrgrbwuggubrrruwggrrbrgggbrggrurrgurgrwburwgu +bugugrwubgbgrrguwwugwbbbrugrwguuwbrrggwwrgbw +bugwuwgrrbgurwbbuwgugguwugbbrrubuwrrguwurrrbwbuwbwbuwb +ubrggwubrgbrrrwguuwbrwruwbguburgurrbbuwwrg +ugwuubbbgbwubbbrugbwrubwgwuurrgburgrrbbugurbwu +wugwrgbbrubggbwruguuwgwuugbgwurubbbbggrgrruggbbgwburg +bgrurbbwgrgwurruwggwbgrgurguwuuguwubugwuuwwuwuuggubbg +wubgruuwburuugrggbrrrwwwuwrgrgrggrrrguwbwrwwwgwwbguguwu +gggururbuwwrgrrrgurgwuggwrwggwuguubwbubugbruuww +rrrggbwbrbwbrggruurbburbbgwguugbwrgububurrggbgruuwgbr +uurbugwwgbrrwwgrgbrrbwwrwwrbbbggrrggggrruwgwururrgwbrgwg +gbrgurggrgwbruwwrwuruwbrbbgwbggwwrbrurrbrrbrgrurbbuuurwwrr +uuwbgugrugrrgwbwwgwwrrguuuwrrggwurbgbugbbguwwgugrw +wrbuwrbrwbugwbrgbubgrwgrugbgrwbwwbwggruugugrbbggwgrwrubrg +urubbgrguggwbwgbuurwurgwgwbggbguggbrrrbbbwu +uugwgrbbuggrwuwwrbbwbuwwgruubuuwguwugrgrwurwrbw +grgrbugwubwgwgrgrgrggggbwururwwuurrubbruwubwguuuguugurwwug +bugwguwrrugrrbbrubrrbwwrubrrwurugwgubgru +bburbwbgbwurwuwuurubwwguwbuuwrrggubbrrgugr +urgwwwurrrbwgugbwgwuwwrwugubwbuubgrruwguugugbuurubwg +uwggugwwgbburgwgbbgwwuuruuubggbugugurgubuuu +guwrgwrbrbwgwbbwwrwubwbrurbuuruguwwuugubbggrwwbbuuugg +buuugugugwbwgrbgwwubbubrbrwrrrgwwgwwgurgrrurguuuwrrgbugw +ubugbrgbbgbguugbbuwugguuuuwwbbwgruuuwbrurwbbbbuuuugrwr +rurrruwugwbgbwgbwuburrurugruuugbwbgbrbwugguwuuwwruwwbw +urrbwuwrwrwbwwwwrwrggbrubrbbwgbrrrbgrgrwbrbgb +bwbbbwrrwgbggwwgrurrrruwrgbbwgrrwbugrbbwrbbrgrbbbgu +uugwuwbwgrugrgwuwgurwbrrrbuwburwwwrgwgggwbugwwurbggbubbgu +urgubuwbwwwgugururwrurrggugugbbwbbubbrubbwwbgguur +bgwbgugugburuwrwwwbgrguurrrguuwubbburrwrugrrrgrguwwwgrr +gggrwrruwbrbgwwurbggwgrwgwgguruwwrgrbrwgrbrwrubbuwwwgbu +rrgrbrguwbwubugrbbguggurwgrwgwbgruuugrbggbuuwuuurwuwgrwwrb +rgrgbbbgbrrwbbruguwgubbgrbrubuwgbrwwuuwbrbbguurgg +wgurbwuubrgurbrbgwgrrububuggubuwrugbuugwbrrgbrwrugbruwwbww +wuwgwuwuruurugbuwrbbubggbgubwggbwbrugrggbrwrgr +rrguggwwgwrurrwuubruwwgbbwrwbwwruurgwbugubbuwbwwruruguwub +rugubbuggurrggrgbwbbuuguwbgggwuwgrgwwbuububuuugrurrwgr +rgwgrrwrrwbrggbgbggrgguggubgrrgruwrrbwguwwbuggrubbgbwurbgw +grbwurbgurrbuwwwrgbugurrrrubwuwgrwgurgubwubgrrbu +gurbgrbwbgurwwgrwgrggugrbgbgwggrwggbbbruurwb +bugrwbbgggugwrrbbuuwrbgrwwbbbwuubwwwrrrb +wgwbwuguwwrwgrwgrwbuwbbuwgwruubbbbrgbbrgbwrguwbwgbu +rrgwrbbuurbrrggrgurrbwubugubuurgbgbgrurrbbwbubguuu +ugrgrgubwbbwwugubgrurwwwbwrwubbwguwgguuwgwbugrwrw +wwbwwrrrbbugbrbwwbwruuuugrggggwbrwbgurwbgbbrbgwguub +wbgwgwgwwrrwbubrgbwrbwrrgggrwwuuuwgurwbwburrubwrurrbruwug +bugugwgurgrbuwgbuururwrrruggrbwwrubburwwbuwrg +bugbuburbgwwurrwgrwbrbuurggruuwuuugbuwwbgwurrubrrbbubuwbgrbr +ubwwwuwrgrwwrgrwrrwbwbrbrubuwguwgbbgbruubbrugw +grgrwurgbbwgubbbgrubrurrbbuguuuuuwgbbbgrrwbuwub +wgwgguuggrrrrwbbgubgurbgurbbrgwgrbuwuguwrbwbrubg +wbwwwbgggwrwgrrwgwububgbrgwrwrrbbbbwuuurbwggguruwugbr +wwurwubrbuubbgwgwurrbbgrguwgbbbgwgwrrbugbrurubwruug +bugbguugugbrggububrrbbrbgbwgbbrrggrruguwb +bugwbuwwwrrwwgwurburrruggbbwugrgwbbugrrbbwrgwuurbrbwg +burbugrrwrugubrurwubgwbwwbbrwurwwgwgwgwwrw +ugrbwguuruggbgwgrbgwwggwgrwrgrgwbwrgwburubgwwr +bugrwwubrgrurugbbwwrggubwgwrbbbgugbrrwrrrbwguwwbbgbbwgur +bwrbugggrwwrruggbggwwbguugwguuuwgbbugbbrbrbrrgugwb +rrwrwgbuwwbruggbwrwwburbuguwuuwwrbrrwbbguwbguwrgwb +gwbgruwrgwrguuugbgrwuwrbubwrwuugubbugugurgbrur +uuurwbuubbruurubugrbbbuurrbuwwbuurrbuggggwwwuguugrgbgr +bggguubrbuguubbrbuwrgurbwrwbbbwwuubgbwrrwbubgbgbuugwrgrw +ggurrgrwruwurggwggbwwuggwuubrbwgwgrwuuuwbwgwggruuwrb +grbubrurwggurruubbrbbguurgrgwbugwuwbgrwgwbwrbbwggwubwbwbb +wbbrbwwugwgwgwgrbrwurwwburbggggrrruububrbbwggwbuu +ubgbggbuubuguwwgbbbgbuwuwwuugggbgrwrwrruwbrgg +bugggwuwrugrbugbrubgwuwwubrrgwgwgbugbwwruggrrggbuggbgubrbb +uwwwwubbuwwubrwrrubbbwbwbrubwwrbwwuurrgguuubr +grgwwwwwuuubwuuwgbbugwbwurbgburrgurbbbgrbwggrburugwrwgrg +brurgugggrguggwrwgrrgubuwwguuwbbrbbwwwburb +buubwrrrgrbrggbuwrubbbgwgubrbwguuwuwwrurrbwwuwr +brgwbrwurwgwwbwwuguwbrwwgggwgggrwbruguwrgubrguuuwgurrwb +bugwwuurbuwbbugrwwbwrubgbgwuguuuubwuwwurbgurr +bwbbrbgurbbruggrbubbrbburbbugbbrrwbwbwbrbgbbgbwrrgru +ubwgwrwgbbgbbrggbrugrubwrgrwgrbbuwbbbguwruwggrg +rrgbrrugwurggggwwwrwbwrgruugrwgrbwguwrgggbwwrgwwubgu +gubwruuuugbwguruwwgbbrwuurwrgrwgubbruurggwggbuuuwbbg +gwgrgbgurruugruurrrbugruugbgbuurbrrrgwurwgbwb +wbbrbwguuwbwgbubrbwggrbbbrgbrubwwwbrrbrwugbubgwrgu +bbwwgbbggbbgugggbrwbugwbbugbburgubgrbggbrbwwugr +rgruuuuwgwbgwuuggbgurrwbgrbwuwuwbwwugbbrrrbgrgbbwurugwuw +ubwwgrrwbbuuugrgbuuuruggbbugbrbbgrwuuuguwurggwgr +buggbwrbbgwwwbubwubwbugbuwububgrubbrwgwgguburwbg diff --git a/day19/sample.txt b/day19/sample.txt new file mode 100644 index 0000000..29648be --- /dev/null +++ b/day19/sample.txt @@ -0,0 +1,10 @@ +r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb