diff --git a/2024/cmd/root.go b/2024/cmd/root.go index eadf85f..fdb1667 100644 --- a/2024/cmd/root.go +++ b/2024/cmd/root.go @@ -27,6 +27,7 @@ import ( "cpatino.com/advent-of-code/2024/day16" "cpatino.com/advent-of-code/2024/day17" "cpatino.com/advent-of-code/2024/day18" + "cpatino.com/advent-of-code/2024/day19" ) var days = map[int]func(string) (interface{}, interface{}){ @@ -48,6 +49,7 @@ var days = map[int]func(string) (interface{}, interface{}){ 16: day16.Run, 17: day17.Run, 18: day18.Run, + 19: day19.Run, } var rootCmd = &cobra.Command{ diff --git a/2024/day19/day19.go b/2024/day19/day19.go new file mode 100755 index 0000000..ed82d41 --- /dev/null +++ b/2024/day19/day19.go @@ -0,0 +1,122 @@ +package day19 + +import ( + "bufio" + "os" + "strings" + "sync" +) + +type Cache struct { + cache map[string]int + lock sync.Mutex +} + +func (c *Cache) Get(key string) (int, bool) { + c.lock.Lock() + defer c.lock.Unlock() + val, ok := c.cache[key] + return val, ok +} + +func (c *Cache) Set(key string, value int) { + c.lock.Lock() + defer c.lock.Unlock() + c.cache[key] = value +} + +var cache Cache + +func match(towels []string, pattern string) int { + if pattern == "" { + return 1 + } + + if result, ok := cache.Get(pattern); ok { + return result + } + + total := 0 + for _, towel := range towels { + if strings.HasPrefix(pattern, towel) { + total += match(towels, strings.TrimPrefix(pattern, towel)) + } + } + + cache.Set(pattern, total) + + return total +} + +func Part1(towels []string, patterns []string) int { + var wg sync.WaitGroup + ch := make(chan int) + + for _, pattern := range patterns { + wg.Add(1) + go func(pattern string) { + defer wg.Done() + ch <- match(towels, pattern) + }(pattern) + } + + go func() { + defer close(ch) + wg.Wait() + }() + + count := 0 + for result := range ch { + if result > 0 { + count++ + } + } + + return count +} + +func Part2(patterns []string) int { + count := 0 + for _, pattern := range patterns { + count += cache.cache[pattern] + } + + return count +} + +func Run(filename string) (interface{}, interface{}) { + file, err := os.Open(filename) + if err != nil { + panic(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + scanner.Scan() + + var towels []string + for _, towel := range strings.Split(scanner.Text(), ", ") { + towels = append(towels, towel) + } + + var patterns []string + for scanner.Scan() { + line := scanner.Text() + if line == "" { + continue + } + + patterns = append(patterns, line) + } + + if err := scanner.Err(); err != nil { + panic(err) + } + + cache = Cache{cache: make(map[string]int)} + + part1 := Part1(towels, patterns) + part2 := Part2(patterns) + + return part1, part2 +} diff --git a/2024/day19/day19_test.go b/2024/day19/day19_test.go new file mode 100755 index 0000000..3ff3130 --- /dev/null +++ b/2024/day19/day19_test.go @@ -0,0 +1,34 @@ +package day19 + +import ( + "os" + "testing" +) + +type TestCase struct { + FileName string + Part1 interface{} + Part2 interface{} +} + +func TestDay19(t *testing.T) { + tests := []TestCase{ + {"test.txt", 6, 16}, + {"input.txt", 350, 769668867512623}, + } + + for _, test := range tests { + if _, err := os.Stat(test.FileName); os.IsNotExist(err) { + t.Fatalf("test file does not exist: %v", test.FileName) + } + + part1, part2 := Run(test.FileName) + if test.Part1 != nil && part1 != test.Part1 { + t.Fatalf("%s: unexpected part1:\nwant:\t%v\ngot:\t%v", test.FileName, test.Part1, part1) + } + + if test.Part2 != nil && part2 != test.Part2 { + t.Fatalf("%s: unexpected part2:\nwant:\t%v\ngot:\t%v", test.FileName, test.Part2, part2) + } + } +} diff --git a/2024/day19/input.txt b/2024/day19/input.txt new file mode 100755 index 0000000..e9b0e2a --- /dev/null +++ b/2024/day19/input.txt @@ -0,0 +1,402 @@ +wbur, gurr, wrbuu, bbrrr, gbb, uugw, rggb, wruwur, uwrwru, gbbwb, rr, ggb, wgub, wbuwrugr, ubugggb, gur, wbgrwu, bbw, guur, ubrwubu, guuwb, uub, gbu, grguwg, wrg, gguuw, urgbg, gubu, brbrbw, gbg, rrub, gwb, uwu, b, guwrguu, rrrrwg, rgwggb, wrbbw, wbb, uww, uwww, wwbw, ggwwbbr, u, wggbrgw, rbr, bwwb, rguwr, gbr, gugb, rbw, rrwburgg, uurb, wbgbgu, urr, brwbrr, ww, uggrrb, bgg, gwggg, wwgbu, wgg, gwrgwu, gwur, gguu, ruugg, grruuwrw, wuuu, grrbbg, rgr, wuwrr, wwgrgu, uurbr, brb, rwgg, ugur, ubwu, ug, buguubrg, wgrg, rwbuw, rgbb, uwwu, bwrrbb, ububru, wrw, brgwrww, bug, rgbwb, rbgw, rgbuuu, uruwr, ugub, bwuwwr, ugu, rbwru, rwg, bwu, rb, gwgrur, rgbgwg, wur, wurg, ruw, uu, wgrgw, grrb, bbrggwb, bwbwg, bbu, rbuurg, bruw, wbgggwg, ugbb, gbugu, rwr, ggurb, bgb, wbuwwur, rg, burbggg, rubbrgbu, grrruub, bwuwb, rrgurrw, rgrbubw, wrww, uguuubu, uwbb, burur, grr, ub, rrruw, urg, ugbr, guwubg, wruu, wbbwb, wgr, bgwru, rbgb, wwur, bbur, rugggr, wggugwu, bwbgb, urrrgrww, ubuuurr, wggrr, wwgw, brr, wwbug, ubww, ggr, wwb, uru, gru, uruu, gwbg, brwr, gwugrr, wbr, urrwur, bbrgwg, gggg, bwug, gbrbwugg, bgr, bugbb, wgww, bruurb, uwgbuw, uwrr, gww, rgub, guwbwwuw, bbgbbr, ruu, bguwb, gug, wgbrbw, rwgrgru, ububrb, wwr, grw, urb, wrrr, buuug, bur, rugwu, bw, bbuwbwb, rrwb, rwbb, gbugur, wuu, ugg, urgu, bbugb, buu, ruwbb, bggbg, rgb, rruww, bgbubwuu, wwub, rguw, gb, rgg, wwwuuu, wgu, ggbu, guurruu, rgu, urwuuwb, rrwu, rbbrbg, br, ugwgu, rrbrwuw, gbbuw, rrgb, uwb, uwrgg, wrgww, guru, rbrw, ugurgbu, bgrr, wrrrwubg, wbgug, rubrwu, gguwu, wgru, wugwgr, guu, rguu, guwwrgg, rru, wbrbbr, wurb, gwbwr, bww, uwwwr, bbwgbw, rwugu, gwug, rrr, ugbgbbr, ugb, rrbu, rruwrbb, rbug, uwwuu, buwgrr, ubwbbgw, bugugw, wwu, uubwwb, gbrggwg, uwr, gbrrr, bwrbwu, uuuwrur, guugu, gwu, gwbbw, buw, uw, rrwg, gugbw, rgwuwr, wgw, gubgu, uggbgr, bwg, grb, wbguw, wrur, wugwg, wbug, grrbrw, wuub, uggbuu, urbgb, w, gruwr, ruug, gurw, bwbg, rbwgwrww, ubw, bwb, bwurgw, rwu, ubr, ubgw, wrb, bu, brw, rw, uwrwr, wbwug, ubrruu, rwuw, ruuu, rbwu, uguu, rug, bwr, gg, wwg, ubu, gwubw, brg, gruwrbrr, uuu, rbwuubgu, wug, rwuu, uuw, gbgw, wru, ugw, bwbgwr, uwbwub, grbr, gwuw, rbub, urw, wr, ubb, rbb, rub, ggw, uurwg, wbg, uuruu, gr, rbwbugg, rbg, wuwg, bub, rgw, bbb, guwb, uurgb, wwbwguwu, rgwgggw, bwbr, wuw, grgrbw, rrw, wbgur, uuww, www, wrwwbb, grrrbgu, gubgr, ugrwb, wgbgwu, ubur, uur, gguwub, gu, bbww, grur, bwbbg, uuurrgb, guuru, burb, bb, gbw, bgbwbbur, rbu, gbrr, ru, wgrgbu, guwuwb, gugg, wgrgrwu, uwg, rrggg, bgw, bbg, gwr, gugw, rubu, wu, gugu, uubu, wg, rrb, wrr, uuugbw, gub, ruwrg, ubrwww, gwggw, ugr, rrrrr, wbu, gwwwurb, wrwrgrw, wrbbrb, rwb, grrw, urrbwbbu, wub, gwrbw, wuuw, wrrrbbbr, ggg, wurw, gbrbw, ugrbgwgr, guw, wugrg, wbwrgrg, uwrrru, rrrgur, r, bru, wgb, wbru, bgu, gw, bwrgbgww, rwwuw, gwrbgbu, rwurg, gbuwrwg, ggu, rwug, wugrb, ubwub, bbr, uug, wwwg, grrugug, wb, grurr, rrg, gbggg, ggrgrwr, rrggburu, rur + +brbbrrugubbbuwbrrwbwwggwrgbgbbbwrbbubbrggruggbgrgubgbbwgbubg +wguwwbubwbbgruwwgbwbwbbubwwuuwbbbgruwuggrwruwwubwbwrw +gbbgwguwbgbgugwugguugbwggwuuburugrruugwwuwrwrurbggrgg +uwuwwgggrbggwbwuugbuubguugrrwguuurguwbwrugrgr +ugbrubguuggwrugubwugbwwrrrgbbrwbbgwrrwuurgbb +bruuwbwrwrbuwgwuuwruggbburgrgubwrbbrbrburuuwr +rgbbuuurwrruuugbwbgugrwwruwbgggwrurwwgggbgubggwwgbbu +uwwugwbuuurubbwgbgguwrwuuguuwrguwrgruguwrrgggggrgw +uuwurgbuwbbwugbgugbgbgwwuuubgbwbbrwgubgrbrbbrb +wgggwwgggbgwgrbrgbgwburwruugrgbwgrwbrrrrbrgugubb +uuurruubugrbubruwbwrbugrbbbbgwgbbrbbbruubwbgrrrbggbbwgg +grwggurugbgrbuburrwgbbwwwgubwbrrwwgubbuwwuuurrwrbubbubuu +rbrgwburgguwwuwubbrbrrbbbwwrgrurbwguugruwrbrrburrwwgubg +wggugbuuwurbruwgbbgbugurbgurbwwbrwbbuwuwwwruwuuuwruw +gwwgbugbrgubwbwbbrgbuwbgguwgrbburrruggwbwwwwrbgbgwgbb +gubrrrwbgruwwwrbugwrbgrwbuwurrrgubuugrwgbrwwuubwuggur +wrgwbbbbgbubwuuwrwwguwwrguwugugurwrbrwubg +rguwgrrgrbubuuwggbrbbgbgwuwuugbrgrrwruggbwburggbrw +rrubuggrwbwbbwrggurgurburwubbuggwgruuuruuwbg +wgrrgwgwbwwbugrgrbrrbrrbggguuuurwruwwurbwbbr +bgrgwbbgwggwrurbgbbgrrbwbrwrbguugugwurgrwgbgbubrgbuggwr +ggbwuburwgbubwbbgbwwgrwgrbuurwurgruwgwwgbuggbbgrbbugubrg +wrwbgbbbuurggwuuwrrgrgwwbubrubrrgrbwwbbwubwguruwrrbbgubwg +wurbwwgwbugggruuwbubrggbbbguwruggbwggbuwuw +rurwrbbgrgrwuuwbggwrrwurwbgubgwgrgbwrwrwrgbwburg +rrrrwrbwbguuwuurgbbwwuggwwbruwrbwbbbwwgwgggurrr +ggububwubbgurrgbwuburwgwwwwuggugbrwgrubwruwuwuwrwu +brgburwwrwgrgrubbwgbrgurrbrbrrrrubwrrwbgur +uurrruwbwrgbrbrbwrgbgwwgurrbrugguubrgbburguurrgbu +uwggbwbrwgrurrugggrubwuguwwgwuugbwrurgruurubbwrbwbruugbgubg +rwrgwggurwrbbgrgrrwgwwrwbwruubbbrgwrrbwbrwru +brggrgugruruwrwbrggrbbgbgruguruggrrwrwrbrrurwuww +bbuurgbbwggbugwgurwubrwuwwrggwbburrbbrbwubwbubu +rwwrgrbrwwbuwrwggbwrrwwgwurgwbuwrwrgrbguubggwwgguubwgruurb +gggwwuuwbgguggwbbuububrwwurruuwurbwbrwrwburbgru +wwrwrbrbrwwugrrurrugbwwuwuubgrgugbwbrbrguubrggrbwurbg +uubgbbrwgurgbwwrwgbgrbwgggbrurgwuwgrbuugrubg +gwuwgrwuubguwrgrrruugwbrgguwrugwgugburuurrwuugbbwguwbwg +rrggrrbubwuwgrruuuruggbwguggbrbugbwbbwruguw +bgugbgrbgwrwggugwrwugwguuggguwrgrwwrrbwuuubg +ggbwbrbgwrbbbbwwgwuggbwgwugrbrburrrgwrrbuwgggrubgwguru +wgrubwggrbuwgrbrgbggrwurbwwbwrbuuburuuwbubrbwwuuggwwwburru +uubugggwwwgurbrurrrwuwgwgwwwgwrrwwbbrubgwrubruuw +rugugbwwwgrrbuuwwuubwgrgbbbuwrrugguuwurbggggub +uburguwrwrrrbgwgrgbwrbgbrwuwubbgrwrbrubrgrgrwbw +rgrgrrguuwuwbgbbbgbbrruuugbwgubwbbrbbgbwwwrbgbggubruwuubuu +ggugwrbggburwwwbguwrwbwrgbgwwrrbwgwrwrbubg +uuuwuuwwwuggggwuwwubuugwbgwwrrwburbrgwbrrwgu +rwrbrbwruwgwuggggguwgbugrgwgbrwrwubrwrububwuuuuugwwb +gruurwugbgwgrbrwbgrrbbrgrwggwwubbguwwgwuwwbrgbrwrgr +urugrurrguwrggubgrurrrwwbgrugbubwbbguwrwuugrbwruwwu +gwguubwbbburgurggrrrubwurrbrbrggguguwrbgwubwurwbuwuw +bbwgrwbgrwubbuurgururbruwuubburbbuugwwgwwuuwb +wguwbbbwbbuggugwwgrwbrggrrugrbubgrbwwgwgurbgubub +rgbbguwuggrrwuuuubwwwgugrgwgrgbrgggbbbuuwuwgwubbgww +uurbwbbrgrwrwrgbwrwbgbugggrbbguurubrbrubgwgbwugurgwubwwbwg +wbbwbgwbrguuwwgrguwubrgrbwbugrbgwbruguggrgwbgwuu +gbwrgwguubgugwgwwgubwgwbgbruuwgwubbbuwwwrrwrrrug +wgbbwgugbuwgrwwurruwwrbgbugbgwuwugwgbubgurrbgbwwgbbwr +grurrbrggrgrbbuuugrgrruwwrrrwuugbbuwuwgggguwugugrbwbrgrb +bwwugbugwbgwrwwwwgbrwrwurbwwuwgbwbwgrwwwgbggr +bbgbwggwwrbuwubgwrbgrubrbubwgrbwuwgurgbggbruub +wbrrurubrrubbwwgrrwrrubrbrgwuwguugwbbgwrbwgwrbr +bguugrwbguuuugugwgrubrbuwruuwgbgggbwrrrwrrgrurrru +ubbgrurrbwgwwrggrrurbugrbwubrrbrbubbuwgwbr +wggbbrwbrrbwguwbgggrgguruuwuruuubbbgwrwugburgwu +gwwrwrggrgrbrwbwrgbbuwrrwgugwrwggwbwwbgbrrwggg +bwrrwguurwrrgbrguruuurgruugwbgggguuubruwbubu +grrburrrugrrbwgwggwrbbgwguwggwuwggbwguubbuugbbwwwrbw +ggubbguwbuuuugwwurugwbwgurrgubbbuggwuuuwbrwgbwguwwgwrruwb +bgrbubrgugrbwgwwgrwrggbrbwbuurbwwrbgwubbgrwubgw +ubuwbugguwrrbrwbwgwurbwbwrggbwwbgurbwwwubwbrbwgr +ubrrbgbwbrgwbwgrrrurrburgrrwrwwrwuwwbbubuuwrwuuguwbuuwb +wgbwgubggubwgbugrwrwuuubbgrbugrbruugrbbubwurbwbbrbwurrrrgb +uurbbuurgbuguubugrbbgbrrwbwgrubrrbbwrbbugggwwwwu +rrrrwbbbrguuuubbgbuugbrwgbrguwgbubwrrugubbbrgbrwrrbguuruuu +uwburubggbbwbwbububrubgbggrwburrbuuurbbwgwwwuwwurwggu +wugwuuwrugggubwwuggbrguwbrubguwwgbbbgwrgwugwwrruwruub +brugwwbbwgrgwwrbbggubrrurbuguwrggwuugggrurguug +grrwrugwbwrurrrgbugrrwrbgwwgwruurrgrugwwggruuwrbwug +wbururrrgrwwgubwwbwbgbbrurgbwgruwuuuwubugrbbwubg +rrbbrwrbbuguwgrubgwwwwrbrrrwrbrubuwbgbbbgrrwgwbbgubgwrbrrw +gugubgurgwgwgruugwugwbuubgbuugrbugbubgrbbu +bwgbrbrbuwggurwurbbbgrrrrwgubwrbbugrrubbruwggwgrwubg +ubgwuuubuuwwwrububgbwwbugubgrubrwurguwwwgruwbuubbwwubwgwubg +wuwwbwbwggurrbgrrgguwbwwuwwbubuugurrbrrgbrwruuuruguubw +rwrubwruwbwwuwbubrgrwbbrrrgrubwubrgrwgbrrbbbgru +gwrbbwugrbbbrbwwggurwbuugburrrubwruwbugrrgruurwr +guwruburwrrgguuurrgbrrbbwrwubuuuuwrugggwwguwuruw +bwrwgrurrgwruguubwwuurgbwurruwbbwugbuwrrrwubguwruurggubg +wrguwrrbubrgrrbwuubguurrbuuwbgurwbbuubrwwguubg +uuuuuwwwrbrbwrrbubuwbrwrgubrwguurwgruguubgrgrww +wwwwuwwgrbgbggrwruruwbbuuguwbuurwgruubuugrurrgwr +bbrbwurgbgubwbrwbrgwgwwwrrrrwbgrrgbwbbubrrgru +rrrbbugbrgurgugwrbruubrurggrwwbgrubrugwwwbbwgrwbgburgrburw +gggwburbuuuugbwbrbbbrbrrwuwurrubuuruwrgrggruwggrwubrb +ururrrruubbgrguuburuwbwwuuuwwbwuwgrbruurru +wrbguwwbrrbrwbbrgggggbgrguwburgbgwuwbrbbwwrrwbuurgrw +gwurrrbbrugugrugbgrrubbgwuwgbggbwrbbrgurubguw +ggwrguwgbgwbwbbbgubrurrugrrbbuwbbuuwgwwgbbbwbugrubg +uuburruuwbbggwbrubuuuwwburbggwrwrwbwggggrg +wgwwguubgwrbbwggrwugggbrwugurgbbubbrrggurbrubububwgww +gguuggwwbwubbbbgwwbwguwuggbbwwrbbbwrrugwbbuwwwugwwubg +ruurgguruubuwuwwrrgwgbgrbgwruuwgwbugwgguwurbwuugrbwgrbuu +bggrbwgrbrubrrwrwrrgwurbrbgbrguwggwgbwurgrruggr +guwwbuurwggruwwuwwrrgurgwgbwbbgwwwuwubruwbuwuuug +bggbwgguubbbruuwrrgrwubgbwgrbubwbubgwuuubg +wrbbbrbbbugwwruuubrgwwwwuwuguwrruuurrugbrrwbbrgrwubbrgr +wwwgubwuwgwuwugbuwguwwgrubburbbwuurbgwurgwgug +ugbgwuurgwrrggugwwgwgrgbrrbbuwrwwwrbwrrbruwugwwbrbbugggub +gwgrubrbwurbbgugwbbbwbbbrububbbwrbgwrwuugwggbbwrgggguw +uwuwgbgwugwrbwruwrgugwrbrwrurrwrrrbbbrbwbu +buuggguuggruugrbwwwbguruwwbrwurururwbgwurw +ubwggwwwgurubgwbrbruwwbgwguuwuuugbrbubbuggbrwggugbb +burwrguwbwwgrwwgburbgbguubwgbgbuugrgbwbwbwbuwub +rubbururgbwrrgbrrwbwgrurwrrrgurwgwurbbgrggurrgbgggwrbwrwbr +rwuurrgguuwbrbwrggubwwbgbwwbruruubwgurwrgwrwwrgrwgwuuw +uwurruugrubrwwrgwrrwwrgwwwgrwbuwrugrugwrbuururrrggbuwuwb +bbrgwuuggugggbbbwruuugrruwrggwgggbrbburgwbbrbbgrgbwugru +bubuwgwwuwruuugbwgrwrubbbwurwuburrrguuuugbbuwurw +gbggrrbgrgwgwrbgubrwubrrbwrgwgrbgwguuuwbubggubg +rgugggguwgguuwbgwwbgrwruugrrggbgwrgwbrubwrbgwwrgbubwgrrw +brrbrggwbuuwgbbwubrwruwbuwbwbuggbugwuwbrwurugbw +ubbburwbbugbugrrububgbbbuwrwgbrguggwbbgwwbggrbrwrbugbrgug +uwburgbuguwggurwwbuuwbrggwrbruguwrbgwggbrwrrwrubugrwgruwb +bbrubgrrbwbwgrggrrwuubbbbrwurrbwwbwrgugruwgu +gwurrwrwbbrwruggurwgwwbgruwwwubwbbwwugbwrbrbwggbg +uwrwuurbwgggugbgwubwrwggbwwubrbgruugbrwgrrb +rruwuuggruuugbuugwwgbguwubbgrrwuwwrrbrwrwrbrbbbggbgrur +uububuubwuwrwbguuwrgrwwgwbgwrggbugruuruwururruggwr +bgbrgwrwrurugggwbbwubwgrwgwwgwgbuubgguwrrrgw +ubruuruurgrgrrgguubbbuurrruugurrugubgwbrrbggwuuwgugbrgw +buwrrwbbbwbgbbgwbuurbrrgubwbuugbugrubbbwbggrgbbgrbubrgwgw +wruuwwbguwubgrbbwbrbguubwrbugwbuguubrgbubg +wuurgbugubbbgrgbuggwurrwgwrwuurbwurrrrubrrrb +grrubrgubwrgrbbbbbwuwrgrbrbrbwwwuubrgrrrwurbbbwg +guugwrrrrwrbbwgwuubwbbruwwrgwbbrurwwrbuurbwgwuwgrruugubg +rugwggrguwruwbwbwurggwgrrrbgwrugwuwwuurrbrguwgwrwubwwrr +uubgwuguwwwugwbbgbgbrbbgrrbbbguubrbbwbbguwgbgr +gbbrgggrgwwuubwbbrgwuuwugwubuwwwrwruwwururbwrwrbbbuugwurr +gggguuwgbggwwuwrbuubgurgwbwbrwbbggggrruuwrwbuuugrrbwuurrb +bbwuwrrbgrgwrwuuwwgbguwgrwuguurrrgrwwgrgbgurbbugugwrrb +guugrwburugbrgbwrwgbrrrwbgwggwwwurbwbwuwbrb +wrgrgrbggrgurrgbubwrwgwrwrubgwurrbbbwubwrwgbwugugrrbrrr +bwwgrrgwuwrruwuuwubrgwbrggwbrwurbbgbgrubgbguu +ruwrrurwggwrwgwuurwburuwgbwubrurbwggwgbwuwwgb +wugbuuguuwuwwwwbwuwgwbuuuwrwurwrwruurwuuru +rurububgbubrrwrrrbbbrbugrrgggbgrggwbbbubg +rwrwrrrbggbbwggwbubbruugrrbwuburwubguugubb +rwgwbruwwrgwwgruwrbrrrrgwgrrrbubwubrbbwggrwrwurggubbrruu +wgwrgrbuwwurrwubwbggwgrbrrurrwgrurwuwrrbububwrgbwuruwgw +bwbggwuurgwggrurwwubrrbgurwburrwruguwbrbbruwbwug +urbrgrbbwubgrbwuwgrguugbbbrbgrrwggbwwbugwbruguuu +rwubuwggruuurwbuuugwwgrrbwuwbugbgwbwrwwugb +ubwrwbuubwubrubgurbrwrguuwwuwwrbbuugubbguuub +rwgwubwurrbwuggrrrwggruwguugwwgwbrubbubwrgubgrbrgbbwrwru +uwrgruwbbrwbuuwguuwwrbbbgurwgrugwuguwwbbbrubbwurb +bubgugwgggbwgwwwbbbbuwugrwuuubguruwbggwbuwwrrrg +wwwgbbgbwubbrgugrubwubguwuwgbuggbbgrrwuggbuwbgwrgrwggruubg +wguggbwwbrgbwrgrurgwwrbuggbwrwwrrwwwgbrrrwwburrrububg +rguurwwrgbuuggrrubwwggwgguwuwrgwwbgubbwguubbrrwr +brbgrbrgwwwbwurwugwbbwrggurbgbrrurugggruww +ugguggbrubrwbwwrrwbuwwggbbwubrrwurwbgbggwbrbuwgru +rbgbgbgrwuubwubwbwwwbwwrbrbugbrbwwwuuwrbrrrugrguw +bgrwrwgrbruruubwgububuwbwrggugwrbwwguuruwrwwugwwbgrbww +bwrrguggurrurrbrggrbwrwuwrurururrugrwbrbbggwuggbrgr +wwwuwbwuwwbrgrgwbbbgurbggwbrgggrggubuwubrbuguwubrwrggbuubg +rwubgbwgwwbguwrwwuwuwwububrbuubgbggrbwrrbb +uurbrbgrrwuuwguugbwrgruggugbrgbbbwggbwwrugbgwuwugbg +grwwbruwggwwbwgggbwrrbgbubbbrbgbrgwggrrruwbubug +ururguuwubrwwwbbgbwuwbrwggbgwwgwbuggrbuwrwwuurrgrwguugwgw +bgugrrrgbbrwurrubbggurgwgbrbguwwugwbbbrwbbbwbwwbubrrggrur +ubwuurrrugwuurwbgrgbugurggrwgbrbbbwuuwuwbwrwrwugg +bwgwgwubwrgbwwwrgrbubrgubrrrrbugrwbbwwrrbgrruwrbwgggwrr +ugbgggrbwgwrwwwrgrwwwrurwbbwwwrugrgubbbrwubwrgrrubg +uggwwugwgwrwgbbgbgbgrubrrwwuwburwrugbrgwrrgbww +bgbgggbwrwwrugrrgwubruggwbrrrurbwuwbwrgggrgu +bggubggurruwrrwwrgrbururgrwbgwrbuubuwbwuuwgrgbgguur +wgwrbguuugrbwrburwruwbwwwuruuuwbwugrgrwgwbwbwwrgbrrrbgrw +bugwuwubgwgwuwwgrbugurubwbrwwurwuugwwbbbuurwwwbgg +gbgrwbubwgrgrbgururgbwurrbruwubgguubrbbbbruurugwwrwr +bgbububbguuwugbrrbwrgwbwgbubrugrgbuwgbbgggbugrggrrguwbubg +gwrrruwurgubrurggururrbggbruburrubruubbgwbr +uubgbbbwrgbuwwbwwwrurugggugbggruwburgbgbrgwubgrgbwwwrruw +uwuwbwgwgwruuugrrbubruwgubrbbgbbubbgrwuwwruugbrurrbrgbww +rbgwbrrwrbwwbbuwrwbuwbbbburrugguugrbrrbgwubgbgbbw +gugwwbwuugbruruugrwrbbrwgrggbgbubwrururbrurbrubg +urwurgwrgrbgbuwbubguwuwwgbrrwuuubruubwgbggbgbbuwubwbw +rggwbbgwwbwrrugggrgurrgbwggguwbgrwwwbuwrugrwburgrwubg +rbubrbbrgwgwbubwgguwgrbwguurrwggwubbgugwrg +gwbbbwgbgwrrbrrgubugwbbwuugrwbwbwuuwugruwuguwwrggug +bwwwguuurgruwurrbbwubgwrbggrgbwwwggwbgbbguguwrrruwuuwrgrwu +ubwbwgguguuwrwururwgurwbwurrrwbrwuugrwuwrubrguugr +grwgruwgrggugggbwggubrrubwrgbrwgbguurwrrbugbbgwwrgbu +wggbbgwwrwuruwruwuggrggbugwuugwbbbggurwuguu +bbgwrwrrwwgrurwrbrrbrgbuugggbgbuubbbwbuwwgugrruubr +uwrrgurbrbgbuwburgbbbuwgrrugugurbrbrwbrugwgbuwwuwur +wgrwrgbgguwrbubbubbbruwrbbuggwgwbubrwrrrwubggbbrrrrrbrg +ubguurrwrwgbrbbrubugugrwrbwbggwrwbubbgrgwubwg +bwuwwwgrgggbgrrrruwugrrwggwuwugubbururuwrgrbbbgrrugrugu +ugwuuwuwrgwwwwwgwwrugbwgubggbrgwuuggwuwrurubbugr +rrggburuguwurrwrggrbgwuwuubwbubbrbbbuugruuuwubg +bgrrgwbrbbbrrgubrgurwwugrbbuuggrubbbwbwrrrbgwuuguwuwgwuwwg +bgwgbubwuuruurrurgubrbgrgbwgbrubburwggwrbwubgguwrgw +rubbwwrurbbrbwrwrgwwrgwuuruuubbgbwgrbgrubwwbugubbbgwu +bbwrugugbwbrguggbrrrubrbuwrbrrbwurugrbrurgrubwggrguw +wrburbgguwrrurgurgubbwruruwrruwruugrrbgwubbbubrur +wruurgrwggwbgrrwgbbgwgwurwuuggwrrrrwgbwggb +gugwwbugbgwuwuwbbrugwuuugrrrrbuuwbrbuwwbwrrggwwrwug +rbuubuuwbwwgruggbubgbgbrggrrbrgbrwubwwggrggububwgbuwwwgbr +ugbrwggwbubugbwwwwrwrrbgruggbruuburuubggwuwrrburwwugbg +wrugubbwbuwuwgwwuuwgbubrbbgbubbuwbbuugrwggugguggbwrbugbrw +ggguuwubggruwrwbubguugwurgbrwuwgrrbuwugbguug +rwwruuuwuuwuugwubuwrwwbburrrurrwburuwuubgug +wuruuuuguubwubrugrbgbwuuburuwurrurgruwubwrrurggrbgwg +rwrubbrgburwgwburbuwbbgwgubwbwwuwgrbbgbwbubrbwurburubg +wbbgruwrrbrrbbwbwubgrbugrwbgbgwbrbwrwbuwgruwbwbwuubgrbg +brwuwwwwgubgbruruwwubggubuuwbbwrruubwrwbwrwrrugwrubw +wburgrwwwgbubggwubrguurbubgguwggbrgwruwbwrwrw +bruugwubgrgbuwbuurrbbwrwbrbbwwwubbuuurwbubru +gwrbwbgrwbwuwrugbggugwrugugbububrwwuruwrgguububwrwgr +uuwrgruubrwwugbuwbrbbwguwuubwbbubbrgwguwbbgrwburrgbgurrrg +brrrwbburwwgwguwrrwrrwgrwwubrbbuurbbururugwbbggggwbrbrwbg +wwwwububbgrbuwrgrwuuuuwwgwrbrwuruwgwrwbggwwbuwbrwbuwugwwgr +ubbrggwbgbwgbruugggrwrrbwbbrwgrurbgggubgurbwbbubrgr +grwrrgwguubrgrruuwrwubbbrrubbbbwwwrbgubg +rwburwbgbwbburgbrbbrgguruggbrrgrurugrubguwgg +wwwuugbgrgrbgggwbugwgwrguurwubgrruwwrgbwuwgubbrbgur +gubrggwbgrwuruggwubbbbbgrwuguurwbrbruggwbbuurguwbr +rwwgrgubbuurrbrgwgwbrrbrugbguwwbugrwrwuruwwruguuwugwgbgubg +bwwwbrrburbgrubguwwwbggburrbrrbwrwbrgrwbbrwrbrrgubugbb +bbrwrrwrbwwbubwubbrwbgwbwrguggrgubrbwwwrwuwgrbbwrrbwg +wbruwruwrggbbbwrrrbuurwbuubbgwrrrrubuwgbguwrugbubg +wrgurgrbbwwbwrgwrrubrbrrbrwugwrrgwgbbrurugwruw +rwbbbgggwguruuuwwruwwgbguwbrbwbubwrwgurbrwwurbrgrbbgugw +gwbrgwgrrggwgrrggbwguugwbgwggrbbuwbggurwgrbwrwrrbr +uwubrgggrwuwwbgububgbguggbugrguwwggubgbrggugurrgwb +gwwgbuugwbwrbrurburubwwgwggwgrbrruubururuubwrbbuwrrbbrbbbu +bwgbubuguruwbubbgwbgggbgubbwugwbbuugugrrgurwrurwggwbwbgrw +gwrrgrgbbuugrgbgrbwbgbrgbgggwgwuuwbrgrbgwggggww +rwbbuwwwuuubrgrwugurbbbgwuruguuugbgburuurwgrgurrbbuuu +rwrggbwwrbrggubrbuuwggwuggrrbbbrgrbugugruu +buuwwrruuuggrguggubwbrgbgwgbugrbgwbruwbwbgbugb +rbbuwrbubggbbwbgbuggwrrrurrwbgrwwgrburrrwgr +rrugrurgwwuggrgwuwrbbgrgbrgbrguwbwwbwgrwruugwu +uwwbgbwbburggwgwgrwrgurrbwrbwurubwrrrgubg +brubwuwurrwrrguwbrrbrgbuuuugrwrwrwuruwgbuurwwgwurwurguw +bgbbgbwwrrbwwbgrbwrwurwgrbgbbwwugbgwgwrbwuubugbugurgr +wwbuugggurubwwgguwrwrugrrrbbuugwwubguwuruwbwwgrbwu +ruwbwugbwuuubwwuuwgwugrwggbbuwbugbruugwurwwbubuuwrwr +bruwrwugrbrwwurbwrbgrbwruguggrggbrugwggbbbrbbwrrgwwbrbug +uuwrgwubbgrbgbrrbbruwbuwgrbwbbwwurrgbrrubwrguwgwwrwbuwwgw +wwbgrrugrgwggguwrgugbguugubwuruugrurruburgbg +gbgbbrgrbgbuguugrrubwrbgwwrrrrubrrugruruurbwguruggwuuwwg +gbwbwurbububbbwbbrubbugrrrrbgrwgubwubbrwubugwwbrrrw +gwubwrbuuwbburwwguwuwguurwbwrwuguruwguubwrbbg +gbuwgwrbbrubggbubwbrgrbwbrbburubrwrgbbrrgrwrgwurwr +uugwrwrrurwwwrugwgwuguruwwuwrbwurwgbrbwuggwuwuwbgguubuugw +guubuuwuwuuwrrwburggbbbrguwbrurrbbwubuubg +grrguwbugggggwurrbrgrrwruuurrbuwwwruwbuuuwuruurwugrbwr +brgwrgrwgubwbwubbwrgrwuburuuwbrrbubbrrrwbg +wuuuubwgbwbrurwubbbbubwububbgwrwburgwwuwbwb +gwrgwrwubbuwurbgbbrrgbrgurwwbwbbrbgbbgwguwrwwgwbbbw +ubgugggwbrbbwuwrurruwwugwbgurbgubuurggugguwuubbuubuwgbw +gwbguwbwwuwrwgrrrwrggbwwwbwrbugurrrbbbubg +rbbbuwwuguuwbggbwubbrbugubuwggubwrbwgubgrg +rbwuurwbgbwbbwubrurugubbrrrbbbwuugubbuubgubbrgwbbw +bbrgwgrbuubrguwwrbgrrrubwbbwbbruggwgbwwburuwgrguwgw +gbbrwugubruwugbwurwrbubbruurrbbggugrugbgurggubwrrgur +bbuwwgbugubwwwbugbgwbwburwrwrguwuwwwgrbbrgurbgwbrwuuwbw +wbuggwbgwrgwbwruwubwbrbbwwbrububrurbruwwbgwg +bguwwwbuwgbrwwrgwubbrruwwruwrbbbwbwwbgbrruggrgrgrgggw +guugrbbwugrggwbrrwuwgbbuwbwwbuugrbgwgrrgrbrruwur +wrwbgruwuugrbubwgrrbrugggguruurrruburwgbrwrrwg +bbrgburuwwgrwrwwgwubgrrrrgbgugwrwwwwwuuggrgu +uwrrwgrguburubrgbgruuruugbuwrgwguruubwbbgur +bbrgbwgwguugwwuguugbuwgrbububbrwbrbwwgbbgwgrbrwuwuuu +brrguuwbguggwbguuggwbrgrbrbwgwrwwbgrwuuuuwwurubgbrbbw +wbrwgrubwruuuugwwrubgwruruubrrbbuguubrgburwr +rrbbuwubwbrbrgbuuurrrwwwgbwuuwbwugrgruwwbwbwbgr +bugruuwbwuwrrrwrwgwwrbguuggwrubrgbgwwbrbwrbgwugbrrbrrb +bgggwrwgrgubgrgggwwrwgugbuurrugbrubggggrwrrwbugrg +wggguubggguuurwbwgwguwubuwwugbruwwurgrwugw +ubgwrrwgurrbuburgwuubuwgrwwggrgbgrubrbggburuwrbuwgrbur +ubbwbrwuwwgrbwruggbwwrrgruuurgwgggwgwbrbgbuggwgw +bbruubbwubuwububgguuwbguggbggwuuuggwgubbbgggbwbbw +grbrrbwrburwgwrbwuwwwbbwbrrbuuubggbbuggurrrggr +wrrgrggbbwggbgwwruubbwbggbgrwrugrugggbuuruuwbrb +ruugwbbrwrrbrugwwwbbubwrugwrwrgguurbgbgwbrrrwbwggubbuw +uwgruwuggubrrggrbgggrwugbuubggwuugrwbgubwruwwug +gbrubbwwgrbrwrbwgwrwbggrbgwggrbrwrwuwburwururbrguubg +ggurgubwbwbuuwrgrbrwwwrguwbwrubwuwbrguwrrgrruw +uwrbrruubrbggwgbbwrbwggrrbbwbgbbwwrugbgrbugbg +bgwbubuuwwwbrgwwuuwwrrbgugubbrrgurugugbbwrbrrwbguugwurbwbg +gguugrgrrwwggbuguwugggbrgbbgguuuwuuruwuwbwubrrbguugwrr +uwgwbrbguurugwuwrbgwrggggrrgrgrururbrwuurguugruruwrrrbgw +wbrrgrgwbwurgrbgbubugubwubbrgugrrurrurwrrwgwg +rbrruurguburbgbrgugrwrbruuuuuwuwbrbrbgruwurrrbrubg +gwbbuwwubwwruuuguwrbbugrwwugrbgwwburbuwrub +ubgrbrrwwrrgbuwgrwguwguuubwrbrrbguuwgbgguuugrgbgbbwguuwr +wgwubwguuubrugubgugruwuwwbrbgwubuwuwggbbbgrrr +rbbguuwwggrrwrgbrwrugugrrruugwbuggurrwruwburrgrruug +rbwbubwbwguguwwrrubgwugrwrwwgbwgruggwrrbbbbugu +wruwrwuuwuwwbgurwrbwbwbuguugwguwuwrubuuuwwwbruwbbgr +urbwbwbbgrbuuwurwruggwgwgwbgwbrbubuwwbrguubgugbwgrw +gwurbubrrbrgrbrgwrrbrrggwrrwburggrbrgrwubbbbggg +ruwbubgwbrgwugbwuwbguugrbwbgrrrwbuggguugwwubggwb +wrwrrwgwuugggbrrrggbururwruuuggrwrbguuuggwgbrbbrwuggwrrbw +rwbbrubwgrbburubgwggwgrbwrbgrggwwgruuubbggggwwbr +bgrubbwgbrrwrgburrrruwgbugbrggwwuurggrwbbggguwrrgbgruw +ruwwrrgwrugburubwwubwwrbrugbrbbbbbrbgggbgruwrbwuuubg +grwrwgwgbwwbugurbwrwuwgbbruwrbburwuurubwgbuubg +wgbgbbgugrrwbbbubbuuuuuwwwwgwrwrgurrwubgrugbgwwbrrrubgruuw +brgwwrbuggrrrurwgrbuwbbwurugguwgbgbrbbububbrbuug +ubrrburggbbgrgbbuwwgrrwbbuugbburgrbrgggrrrruwgu +ururwrwwwwbbgwrbbbugrbgrwwurbbwrrurrurrwwrgrr +gubgurgwgbugbwwbbbrgbuuruwrbbbubgrrbugrbugurgwrbgbwwu +guwbwbuurgbugrwbrgggwgurbwgrrguubrggguuwrwbbwubbrurbgrgrr +gbbgbwbgugwgruururbgugwbgrrwrgwbgwgwuurbwub +wrwubrrwwubuubgwgbwuguugwbrbbwgruubwgruwrugubgr +brwbgbwrbgubrrgwbgubwwwwrrugrubbgurgggguuwurwu +gbrrugguwrggrubgrbgbbgrwuggwruwrwrwwbbwggburuggbub +grrrwurwuuguugrbwggwggbwwgwuwrrrruuurugrbgwgrgubg +bgwrwwrwgwrwgrwbuurggrbrbguuwrwgrbbugwbbrwbubgrrwruuuugr +ugwrwwwubbwgrbruwbguwwburbbwurrubgrwggwgrbgubgu +uwbbwrgwburrgrurubrubrrrbgbbrubgrbwuurwbruruwug +gggbuuwgbugugrwgrurwrggugggbbbururrwwwwrrrwurububg +rurbwwbgrwrurgbruubrwbrbgwbggggggrgwrbbbwwgwbbrgubr +bwuubuwbrbgrrggbwrrbbwrgbgggwrwgwrgwrgugrubuuuu +bgrrbrurwrrbgubbbgbuwubrurrubgruwburggugubuwbwwbbbrww +ugburbubwbwuuwrrbubggwubguubrwruwbbrrwbbwgwwruwrb +guuggbrrrubbwbgbrgrrrbgbuwgugrruwuwrwguugwgbbrbgbubg +bwggrwwbruggrruguurbgwwwrbbbrwwguuuwurwurrrugrbbwrbbbrwg +rwgrwgwwbugbgwbbbrrbrurburbwurrrbgwbbbugbbrbugbgrbgb +wuwrugrbuggbgwubuurwuruwrwbwbuggwrrwrbwgwb +ubrgubuwuubggbbwugwuubruggbggbuuubgwwbubg +uugguuurbuuggbrwwggbwggwurrgrgrrbrubrrrrwubgbuwwbbg +wwwruggugubrugrgrrggbgrruwurbrrbgugbwburgbbwgurwbgbbwbgwb +uuwbbubbbgwbwubuwubwggwbgbgrwuguwgwuggwbbwbbwgrurgb +gbbugrrurbgbbubwurgrgwurgwwbrrwrwwwuurrbbwbrrgurw +uwwbubbwgbgbbwuurwgggbbbrgugbbburrgrgubbggugbrg +brbuuuwrrrbggbuubbuwrbgurwruwrwgrrwwbwguwuggbrruubgwrww +uuwwwrwrrbbwwwwguruwubgurwgburrgwbrubrbuwr +bbwbbwwrgbrgwwwrgrrbrgbrwwwubggwgwbbrgbwgubwwu +rbggwugbburgwbwguwrbrbbuugugwwgwuggrwrubg +ugbggbbbrgbwgwbbwuugbguwbbubguurbgrrrrgubbwwbbww +uuubbrgbuurrwwrubgbuwbgwwgrrrbwrbbrgwrbrgrgrgbwwu +uwgrrrwbrwwruggbgrgbburwgrbwwgurrururruwrwubrgb +wggwwrwurwrrwbwrbugrwwgrubgbguuurwurwugbbgbuggrbugwrr +rbbrgggwgrbburwbwgguubbbggbbgwbgbubrrggbbwrbwrggwgbgur +rgbrubugurgwgwrubwuggbgwggbguwguwwrbguwgrwwbwwwrgubgwbwg +bbwuuburgbggbubgbrruguwurwrwbbuugbrwbrbbgubgub +buubbgbwwrgbrwbgbrbbuurguwgwuubbrrbwgrwwwbbwbrwwguggurubb +wguuuubrrwwrrbbrwrrwugbwbubgrbuwgrguugbbuub +wwrbgguuurwuubggguwgugwwbgrgwbbuwgggwubbwugrrbrugbrbrwbbu +ugrgwubgugruurrrwuurguwrbruguwwwbwbwbrbbggbwuwgbgrruwu +gbuuwwugwbwwrrubugwurgbrbbbwbggwwwrwrgrurwuubru +rwgubugubbrbubggwwrbbbwurwurrrwuwruwwggbggbwrubgg +rugwgugbuuuubrgurwbrugwuwurgugwrgwwguuuuwbburwrrrugbuuwuwu +wruwbubgrwbbbwbguuwurrgubbubwgrrbruwrguubbwrgrubwuuugggubg +bgbburgwbrrwbwguwrrururwwwbbbuwgbwuuburgurrwbrrwrwbruugwwb +gurbrrrurrbwbbuggruburbgwuwbbbuwrurrbubgubuwrwrg +wrwruwwrbubgbwbrwugubgbbgwbrwuububwbrwuggwubwu +wrrrrurgrrggwrbbwbwbgbwbuwwwwrgwwuuruuuwgubwrgwg +ugurrrwugwggbrggrbwububbugwggbwrwbbbugrwwrrbugggwruwggwwb +bwrburrbbburuggwbggwbwwgrgwwuwwbgrwwubwwggubwu +uwugwbgbgggwbrgbrwruurwgbrwbwrwgwgwgbggwuub +bbugwggruwrrrrbruwbwugbbbwgbwugwbwwbggbbwrwwgwuubwggb +ruwgrbrbrrwggbrgwwubrubrruwurgbrubbuuwguurruubrrw +buwgbgbubbrgubruggwuwwruwbgwwuwrbwuwubbgubrggrggwwrbw +guwgbubrggburgguwggwrubrrugwugbggggbgrgwrrbbgrbwruubgrbrbw +rwguwwrgwbruuwwrwgrrwgrbgwgugbbuwgrgrbrrguugrgwbugwubg +uggbwrgbbwwuruwguwbbggurwggrwwwbbbruwubruwbugur +gubbwrubgrwrbgrrwrrgwrrrwbwrgwbgbwrgbburrwrugbuwb +wgbrbwuggguugbwuwuguwruwrwugrubgbrurrwbwggrrrbguwbgggubgrg +rwrgrwrbbrrruubgrbrwwuugbbugrggrrbbugguuubrwurbrbu +rbrurrrwgbbwrwgwuguuwubrrbwbwwbrwbuuguburbguuuuugrg +gwwwwwuwgbbggbrbwuurrbwbwruuwbgwggurrwbruburuuu +bgrgbbwgurrgwwgruubgbubwuuubuubgbrbgrbrurwug +bgwgurwrrgwbgubuwuwrgguwurugbwbruwrggrugwuubbbgrbwggw +brggwwurbugwuwbururgwbgrwwrwuggbbbggwuuwuubg +gwuuwrbuggrggbwbggrurrurgwbrwrwggbwwrbrwrubrbuubgurwwggrrr +rwgbwwbugwubuubbwrubwwwggwbuuurugbubgrggugb +rrubrrwbrgbrwwbubrbwbgbwwrwgwwrburgrbwwrbbwwuwr +bwwrbggrbuwggbubbrbuwuwgbbrguggbbrrwuuwrurguuurgurgur +brwguurgubbrrwwguwbwwbrgbwbbrwgrwgwbrubwuwbbrrgbrgbugwuwrr +guurgbwbrgruggguwrubbrgbugrbgrruubggbugugbwubgrub +ugbwrbwuggwwbwugbugbgbgrubggrgugurbbruwuugrgru +rwbrgwbguwwggurbbgwugbwbwubwbububugwuwuwggbugbugwwuuwb +wguwruwguguuugwbrrwguuwrugbgbgurubrrrgbrgbrbb +bburgbgbwurrbuwrgwgbuuwwrrrrwgubbgubgrrbubgbrwwbgwrgwugrg +bwwwrwwurbrrbbugbwbwruwrgubuubrruuruwwuwwrrwwbbwggb +rrgbwurwurubwbwugwbgrgwbugrwwrbggwurbwuubgubgggbr +brruwwbggbgwguwrwbwrwwbwrburwwuuugrrbrurrbrgwub +bwbuggrgrwrugrrwbrwubggugwgwwgbuwburrubwggwuwrbguwwggggwg +wrwggbbwubrbugubwubwwrburugubwurrrrwgbwugggrbruwr +ugwurwbrrwrwgwgbgwwbwggguugrubbubrguwugbrrb +grrbrubbrurggubburbrbrwwrrurubrwggguwgwrrgugwgurwrwug +rwbuubuugrrrbwrrgwgururrwburrugrugrrbrrurub +rwugburrbwbbuwbwrrwurggubgwuwwubburgrubrrrbuuwgubg diff --git a/2024/day19/test.txt b/2024/day19/test.txt new file mode 100755 index 0000000..29648be --- /dev/null +++ b/2024/day19/test.txt @@ -0,0 +1,10 @@ +r, wr, b, g, bwu, rb, gb, br + +brwrr +bggr +gbbr +rrbgbr +ubwu +bwurrg +brgr +bbrgwb