From 0ff21ba937e51fe4bcb725ae29ff3689f7d0d96a Mon Sep 17 00:00:00 2001 From: Eveldee Date: Fri, 24 Jan 2025 10:19:13 +0100 Subject: [PATCH] Add day 19 --- Days/Day19.cs | 179 +++++++++++++++++++++ Inputs/Day19.txt | 402 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 581 insertions(+) create mode 100644 Days/Day19.cs create mode 100644 Inputs/Day19.txt diff --git a/Days/Day19.cs b/Days/Day19.cs new file mode 100644 index 0000000..bd73b9e --- /dev/null +++ b/Days/Day19.cs @@ -0,0 +1,179 @@ +using System.Collections.Frozen; +using System.Numerics; +using System.Runtime.Intrinsics.X86; +using Spectre.Console; + +namespace AdventOfCode.Days; + +public class Day19 : Day +{ + public override int Number => 19; + public override string Name => "Linen Layout"; + + public override void RunPart1(bool display = true) + { + var (towels, patterns) = ParseInput(); + var impossiblePatterns = new HashSet(); + + var possiblePatterns = 0; + + foreach (var pattern in patterns) + { + // Check if it's possible to make this pattern + if (CheckPattern(pattern)) + { + possiblePatterns++; + } + } + + if (display) + { + AnsiConsole.MarkupLine($"[green]Number of designs that are possible: [yellow]{possiblePatterns}[/][/]"); + } + + return; + + bool CheckPattern(ReadOnlySpan pattern) + { + // Console.WriteLine($"Checking '{pattern}'"); + + if (pattern.Length is 0) + { + return true; + } + + if (impossiblePatterns.Contains(pattern.ToString())) + { + return false; + } + + var prefix = pattern[0]; + + if (!towels.TryGetValue(prefix, out var towelsList)) + { + impossiblePatterns.Add(pattern.ToString()); + + return false; + } + + foreach (var towel in towelsList) + { + if (pattern.StartsWith(towel) && CheckPattern(pattern[towel.Length..])) + { + return true; + } + } + + impossiblePatterns.Add(pattern.ToString()); + + return false; + } + } + + public override void RunPart2(bool display = true) + { + var (towels, patterns) = ParseInput(); + var impossiblePatterns = new HashSet(); + var knownPatterns = new Dictionary(); + + var possibleCombinations = 0L; + + foreach (var pattern in patterns) + { + // Check if it's possible to make this pattern + possibleCombinations += CheckPattern(pattern); + } + + if (display) + { + AnsiConsole.MarkupLine($"[green]Number of combinations that are possible: [yellow]{possibleCombinations}[/][/]"); + } + + return; + + long CheckPattern(ReadOnlySpan pattern) + { + if (pattern.Length is 0) + { + return 1; + } + + if (impossiblePatterns.Contains(pattern.ToString())) + { + return 0; + } + + if (knownPatterns.TryGetValue(pattern.ToString(), out var count)) + { + return count; + } + + var prefix = pattern[0]; + + if (!towels.TryGetValue(prefix, out var towelsList)) + { + impossiblePatterns.Add(pattern.ToString()); + + return 0; + } + + var possibilities = 0L; + + foreach (var towel in towelsList) + { + if (pattern.StartsWith(towel)) + { + possibilities += CheckPattern(pattern[towel.Length..]); + } + } + + if (possibilities is 0) + { + impossiblePatterns.Add(pattern.ToString()); + } + else + { + knownPatterns.Add(pattern.ToString(), possibilities); + } + + return possibilities; + } + } + + private (FrozenDictionary> Towels, List Patterns) ParseInput() + { + var towels = new Dictionary>(); + var patterns = new List(); + + foreach (var line in Input.AsSpan().EnumerateLines()) + { + if (towels.Count is 0) + { + var split = line.Split(", "); + + foreach (var range in split) + { + var towel = line[range].Trim(); + + var prefix = towel[0]; + + if (!towels.TryGetValue(prefix, out var towelsList)) + { + towelsList = []; + towels[prefix] = towelsList; + } + + towelsList.Add(towel.ToString()); + } + } + else if (!line.IsWhiteSpace()) + { + var pattern = line.Trim(); + + patterns.Add(pattern.ToString()); + } + } + + return (towels.ToFrozenDictionary(), patterns); + } +} \ No newline at end of file diff --git a/Inputs/Day19.txt b/Inputs/Day19.txt new file mode 100644 index 0000000..0127906 --- /dev/null +++ b/Inputs/Day19.txt @@ -0,0 +1,402 @@ +wugw, wrrbgr, rbgr, bgbrb, wuwb, bug, wubur, uwbuwbug, wruu, rbbr, wbgrrg, uuwr, bub, brbggggr, brgguw, gwwuu, uwrbggw, wuwrrr, wbuurww, wwwuwru, gubgr, gubu, ug, ubu, gggrgr, wg, wrgbggu, uwgwubw, bgrgb, uu, gbug, gwuwgr, bgwg, rurgb, rr, ubw, wrr, rggw, ubuu, ubr, ugrr, wrbwrruw, uw, ruggrb, urwwurg, gwr, rurwb, bu, uuu, bbuwb, urbu, ugb, uruub, gwgrrw, wbbw, rwgr, wur, bwbu, bbg, wrbugw, brgr, uurrwg, guruu, uurrrbw, bwwbrguw, gbbgu, bgg, bbwwgbw, rww, uurrr, bgubwb, wwgr, gw, wrgub, wgrg, rugwbb, bgwbuguw, brg, ggbw, bgbubb, wwgu, gwgb, grur, gubw, wbruug, rg, brubbgw, uuugr, rru, brbr, rwbuuu, ubuw, rgru, rwrwgb, wub, rwbu, bwwrr, bwrg, uggbur, gwb, gbugwb, br, rbwu, urubg, uuw, rbb, rgrwu, bguuw, w, www, wurgb, rwwu, rwg, uww, gbwurubb, uuugb, rbrurw, gggbwu, rbrwrgwr, bw, uwrw, bugw, brgguugb, brubw, bbrb, bru, urgr, urwu, bwbb, bur, rwrr, wrrbu, guu, ggugwuw, rwrurb, wbur, gbu, bbb, ur, brw, wrwbb, ugbuwgug, rrugbbru, wwggbw, gwgwgur, rgw, rwwr, wrg, wugrwru, ggwr, ggr, wug, ugu, gbbw, wgww, gwwwuw, gbr, rbwwru, bbru, ruw, gbrgw, gug, bwbuwrb, uwg, rbww, bbbrb, ub, rgrbr, ubg, wugwub, bgr, ru, bwr, bwbug, rgr, wwugr, grg, rwu, wbgg, rgwu, ubugubr, buggur, wwb, rub, wugbb, uubb, uwb, wbb, uwgbw, rubrg, rwubgu, wgwbb, bubrbrww, bg, wwrggu, gr, gggr, ggb, wuuuu, bggwb, ubgrwbr, rgubwu, rwr, gbww, wgbub, ubrb, ruu, rgg, wgrwurrw, ubwggr, uubr, wrwrbrr, ruguw, bwu, guwrug, bgggw, urubr, rruruuw, gur, wrgru, wb, rgwwg, rrguu, wwwugg, rgbg, uwwgg, urr, gwu, ruwb, buwbgur, bbwugb, bubu, rwurwg, wgrb, rrw, uwgwr, ugwu, rgrurg, ww, uwgrrrgb, wrub, bgb, grr, bgwbru, wr, brrbg, rurur, wgbbbur, brwgg, bwgwbw, uuurg, rw, uuwguu, guw, bwg, bwrrwrr, ugr, rbwrg, rwb, urw, uubg, bbwrugr, bgw, brb, rb, rbr, ubbwurb, gbw, buu, wgg, wbw, ugguubw, rurbr, rrwbuur, ubwuwr, urg, wwu, wrguwb, bbgbur, grb, gww, gb, buw, bwbg, grgb, bbu, rbw, rrbu, gruwbw, uur, wwbgr, bwbwu, bgug, uwu, wubbw, rgwr, rrgrr, gwg, bbbubu, wwgrbrw, wuuubb, gbg, uwbwbg, wgwbr, ububb, ubbb, rug, gwbbrb, ubrub, urb, ggrwrgg, rrg, wbr, uub, wbrwbb, ugg, wrgb, bbwu, grurwb, uwbr, ugug, grw, gru, rwgu, wrru, rwgggu, rrr, ugwb, rrrw, brr, buwb, rbwbrg, ugw, rwuuguw, bwgggwb, bugr, wggbrr, uwgrrbub, bgbuuwug, burrrbu, wubwuu, ubwur, ubgwb, uru, brrb, wgb, bwuwgbu, wwuwwbu, bgbbg, wwru, wgr, ggg, guwuu, brbg, gbrb, ugrg, wwgur, wbbu, rwug, gbb, wugr, wuur, ubwurrwg, gwruubgu, wrrw, wubwwg, gugur, urgwu, wrbu, wbg, grwb, ugrrrrb, grbg, ggbbu, gbru, wgw, ggug, ubuub, ggu, wuwrbugb, ugrrrr, gbbubrr, rbgbb, bwwbu, uwwu, wwgbbb, gbbu, b, brwgr, wrb, rwrrw, rubwugg, bbr, wwr, wu, bbgwgbb, rbg, rwwgbbu, bgu, wubuug, ubwww, uggr, rbbbw, rbwgwrbw, bbw, bbgr, rur, ubb, uurbg, wguwb, ubbrgug, wrwr, rwwugb, uwrubb, rrgbbru, bwb, gub, ggbu, wwg, bww, ruwrwg, gbwu, wuu, gbbur, wrubru, rgb, grugwbbw, r, rwww, rbbru, wbrrb, rwgub, ubbrr, wuw, uug, rgu, rggg, bb, g, wru, urgw, ggw, ugwwbrg, grrbw, rbu, bbgugrw, grguw + +urwrggwgbrrwggwuubrrwwugbgbubwbuuugwbguggubrgwwrubub +wuwguurugggwbbruubbruwbruugwbguuwrwbrbugurbgugrggb +wrbgrwbwbgrrguwbwuugruugrwbugrwuuuuurrugrgggugwuububwrwbg +bbbrbwrrwrgrwubbwgbbrbwbruuuwuuwwubbwwgwuwgguurbg +bguuubgbwggwgurubuubgurruggbgubwrbrrgbbgugbbugruurggwr +uwbbgwbrwubrwuwwbrbubbuggbbbbrugbbrwrubwrg +rgrrgruwrrrgwwgrrrrwbuuugrgbbrgbwwruggwrwr +wgwwuuruuwrbwbuwwwwbrgurgrgrgruwbrbugbbwggg +guuuuwuwrwwrggggurwrugugbubrguwbrrwbwurbbrgwbwgu +rrrugwggwgwwuugrgrggbbuwgwwrguubbbwuugbgrugwbbwwugrwgu +urubuwwurwgurgwbggurrgrugrbwgrubbwwurbwubwgbgrgrb +bbbwgwrbbwruubwwwwwbuubrrrguwguubbbugwrwwgugrbwugbubguwgu +rurbwuwgugrrwbrgwrwwubgggbwugbbgbruwwbbwrggwbbgwgwgu +ggbgbgwruwguwbwwgruwbbrbgburrwgubuwgbwrbwwwrggwgurwbw +guwrwuwrrbwrbgugwguburrwbggurwbbrugwbgrbrwwwbwrrbbbubbw +gwrgwrggwrgbbwuwbbwuwrgrggwgrbrwrbwbwuugrbubwwwbw +bbwguwgwrggubrgbuuurwwwguubgbbuwbrgggguwbubrbwwrrrbwgu +wrbwgbgwbbbwrubwbrgrwbrguguwrggbbwguwubgwbbbguu +buwuuwurgbbuwgruwwrbbbrbrgggwwuwrubgrrbbbwwrrbwrwrbbwgu +urbrbgugbrbgwbgwrwuuwguwgbgubrgguugbwwgbbbwrrrbubgwgu +wgwbguwugbwguwburgbwuruuwwuwbgrbbruggbrwwruwwrugu +ubburrrbwuwgubrwgrrbbwwrgugwgrwbugwuwrwwuwguru +wwrbgugggrwwrbgbbbbuuurubrugrrurgbrrwrurwbwwggu +grbuggwbruggrrrbrwbwgwubgwuubwgrwwugbwggrububgrbgrg +brubwgubwrbrgruwwrbgruwrrguwuurwwrubrububrbgwrwrbgbbwrgwu +wwrburrburbwbbbrrrggrbuwgubbbgwwbgbgwrububgg +uurbgrwburugubguuwgbwruuwwubbugbgwbbggggrggrb +uuuuurguwwurrbrrgrurwuwgbrwbggbrrugwguurgg +rrgubrwbwwuwbbgrgbuuuwuuubgrubbgwrrgrbbrgwb +uugwugrrgrbgrwubbrbuwugbrbgbubuubggbbgwguwwgu +uruwwgurbrwrgwrggrgubburubrrurrwugrwbrrgbugbbwbgggwubbu +rbbgguugrwgurwgguggggwwwwurbrgwbbbgwwruwrbuugwwgrrugurbb +gruurgrrgrgubrugrubwugguugwbguugbrgbuuwrurruruggguwgwgu +bguugrgrurgwggbbbrguwugbrrrggrwbguwwwrwwurrwuuwgwggbwubwgu +gubgbwgbbruwrwwbbgubrwwrwwwgurrbububbwbwgbwuwbgbuwwgbgwgu +wwwruwgubrbbgbburrwgwbgbrwgbrguwrbbbruuuwgrrg +wuwbwurruwgbgurbgrwggwwwwrggbuuugbugrbwguggwggrr +rrrwwwuwurggbbwuggruugwubgwwgbbgrrgwburwruurwugwuu +uwwwuuugrbwbbwugrwrruuwrgurbbgbubuubgugbrurwr +bbuurbggwuwbwbuurrrgrwbgrggggbwuwgwrwgrwgwg +gbwrwwbwruguugwwbgbwbugwggbubgwugwbuwrrgbg +wurbwgubrwubrrrgurgrwuguwgrgwuwwwgwguruwwurgwgu +uuwgwuuruwuugrrrgugrubbuwgwugrbrgbgrgwwbubrubw +wwbbgguwuwurugguugwggwrurguggburgbguruwbrbbgrbgwuwbw +uwrgrbuwbrbgugrrbwuubrrbgbgrbbbguurugggurgrur +wbbubggwuurugggbubwrrgbgrubggbggugwwgbggwwubugwbgrrwgb +rgguwubwwrbwgbgggbwruwuwugrgrggbwrrwbbbugwbwg +ubwrbbbbbbrbggbbgrwwuurwwggurrrbrbuwwuwbwrgruubuwuur +bwuggrwwgwubbbwrggugwwrbwrrbubbugwggurgurwg +bruugbgwbbwwbrguwrubggwwrggwgrrrrrrrruwgu +gugbrugurbuwgrrugugbuugugrbbgwgguuuwggburgwubguuugrwggggr +rbbrrbrbbwwgruwrwuwgggrbbbgbuwurgwgwggurrgbggubrrrugwubwru +guurwbbubrbbrwgrggrbruubwgbuwgrugrggbbbbuubrwugburww +bgrubggwwgwgggwuuggwgurbgggbuwurwbwbrgrguwuruwuwu +bubwubbburbbggrwgbwurrwgbwuwrbugbwuuruwwgwubrbuburu +brbbgrrbbuuggwbrrrwggwwugugwwbwuwgrbuwrurbuuggugbrgr +bbuubwuubbgwwbbbgbbwbbbrgbuwwbbbburguwrgwgrbrbbbgrwrbbbr +ggwrbwgggrrwbruubururgwruubbgurwbuwbwrwrbrrugguubrrw +gwuguurrrwwgwwgwgwgrurgwuugrrugrbwubwrwrwwbubwwgugbbwgwgr +rbgbbggrugwwuguuwggbugbrbgwgbbwggugruubbgugwgbb +rrgubuubrbgrrubgguuwbrguwwubbubbububgbbgwgu +gbgrgrwbwrugbgbgwwwwubwuwbwbwuwbwrwbgwbugwgu +wrruguguguugwwwgwwgrrubbbgrgwgugbrbrwrrgbrubb +brgbuwgbubgrurrgwrbubbbggbwruurwbrbbuwgrwuurbgrwrbugurbwbr +uggrbrwwwbbrwububrrggrwrwubwuwwubgbuwgbrbbrg +urgbggrwwwuruugrurgugrrbbbwwgrbuwuruugbbwrrurrwwwuguw +brrgbuwwrurguggrrurbrgrgbbrbburgwwbuwuuuggguwbrwbbgb +uwggwgrgrbbgwruwbrwubrbbrrurgrbrgwbwbuwgwgwrgubuuwrbgu +brurrrruwrgurbgbwuwwwwrrrgwwuuggrwwgbbwgrbggubr +ugrwbbwgbbbruggbgrwrgrguubbruuuwwwrrbguguwugurwgbggb +ugwrubwrubuuubbbrurruwurgwgbuwbrgugwurrgwwburbubru +wwgruuubggbgwbrbwgbuwwgbrubgggrrrwrugrggwrbrrwwuw +bwrrrbwbbwrgwguuwubwruwgbbuugrugbggubwuubwwggrrwbrwrbwrgg +rbbgrrwrgbrbuwwurbgwrggrbguuburubwbwbuuwguwrbrw +ugrbubbugbrbwgbrgbuuuubrubbbrurwgurgbwuggbrurbrggugurruuwb +wubuwurubwrrbrgrguwubuwruugugbubuwrrugbwrgwgwug +uugurwrgwburwgbuuuwwwwrbgbgrubrrubbuguuuwbbuw +gubuwruubgubwbrbrwwuuurwrurbrruuurrggwurwgw +wggrbugwuuubbgrbgwuwbrwwbuuuubwurrwgubwuur +wubugrubbrwurbuwbbgwubrgrwbubwwggwrbwggrgwbgrug +rwwgwbwwbugrbgwbbbbwgwgbbuurrggwbrrgwgbbuwbrguwgu +ruwwubrrrrbwrgruwrrgwrgwbwrguruwrgwubbbuggwrugwgur +gwgubguwguwgurrruwbwgbubrwwrbggwguwbbrwwurubburwg +ugruburuurgggwgbwugbuwgugrgbgrgbwuugruwbwwggugbwrguguuwgu +ggubwuwwrbrubgrrrurrurwbugggrguggbwbgbwwuwwwgwggbggbwuuuw +rgbggruubugbrurguurggurgwwrgrbubrrrubrwgbrggurguub +rgguwwububrwgwgbguwgurbggrrwwrrbgwrgrubwugu +burwurwrrgggwrwguburubgrrwrurgrbrrrwguguuwwburgwuuuruwgu +wwuwurwrgggrurbbwgrrrrbwgrurrbggguuwuruuugruruuwburwgrwgur +gwrrwruurbwgbuggbgbbgubggwwbuubgruugrwuurgbwuwwu +bgggwrbrrrubbbbwrrrbburwgurbburwugubbggwuburbwbuwwgwwbuggwgu +rgwuwgbbrugrwguguubwguuruubbgwugbguwurgrgbgruuwrwbg +ggbrguguruuugwrgwrwbrbwwwgrwwrubbrwuuurbrwrrb +bgruwubbbwrgwwbuuwrrwwuwubgrbwwurwbbugurgbgrbgggurrrw +uurbugwuwuwwrrrwbbgwgwubwwbrguwuwrgggwuuruwrrgwbwrbbgrbb +gwurwbbwurbbwurubbwwgwwwrrrbuwrgubbwbgrbwwbugrggwu +wrwugwwugurwrwrurwurrgrugrubggwubwgbbguurbugrwubgwgww +gbggrguuwuwgrwgbrgugbwwbbwuwrbwugrguuwururbbgrbwwggu +ggruwrburubgubwurbbwbbwbwrbguubbuwwgwbbwrbbuwgrubrwg +rbwrubrbgwwrgguwwgwrbwuurubbrguwbwrrrubbrrubbruwubwggw +ubbrrubrbwrubbrwwgrbggbgurrwggwbggbrbrrbgurbrbur +bwwurruwugubwrgwrwuwbwbwugurggwbwurruggggbbbrwbggbg +wurgrugwugbuggbbrgrburgguwurgurrubguwrrgbuwwg +buwuwrrurruuruugggggbwurubbggrgwrgrwgwgwgu +bggrbbbgbubuuguwwgubgrgrburrrbwrbwrruwwbuwbwwbwgwgu +gwurbugurwbbbrbburwggruwgrwburruruwuugggggwuuwbur +rrbwgbbwrgwbwuwgwwuwbrubbwrrrubbgruggbggwgu +wrrbruuwubugggbubbubwbgbwwbrwbbgguwrwwwwgugggggwurggggu +gwgggbrrugrugbuugbbrugrbgugrwrbwbwrwbgwrubwubrwbbwguuruguw +wwgbgwruubrbugrwrbuuurbrgwrrbgugugbbrwbubbrrubgrbugw +rbbgwrgbgwgubwrguuugwgrbwurbwbbgwbrggurwugbgbbbuw +brgbgburgbrugbwrwgrrbgugbrwugbgbgwbrgwwwwgg +rgwbugburuwwrrgbgrbgbwrubrwwbgbubrubwurguwu +rugurrgrgrrwgwrbbubrbrwwwuwwwwuurwwwwubbbguwuwggwgu +ruggbwbgbbuwbugrubgugubgruggwrwwbbwgrwugwurwuuru +wbrrwgbwbrbbbgwrgubuuuwwgrgwrbwbggwwwugbwuwwr +rwbgwgwgrrbbbwgwurrrrbrugrbrgubrrwgwwwuwgwrwrbrwuwu +wuwrbgwrbbuguuurubwrrurwwgrugbrurgbrgrubrurrwwur +gugrurgugrwgwgwrwrrggrwgbwwuwurbrbbgbuwuubuggrwuuu +brwwwguwbgrubgrgugruwwrbrugggbggbggbgwrrrguug +buwuwugggwwwrgwrugubugbrugwrwuubgbbbwwbgrubb +wbrguugwrbwgwgggrggbrgurbggrugubbwrbubbwggwrbuubgrrgrwr +wrgrbwgwrbwrwgbrubwgwubbrgrguwrgrbuurgggggg +wbuuggwurbwgwguugbuuuwugrwbwwuuuggwbuuwwbbruubwwu +buwrgbruwbwwrgbbbuwrrrrrugbbrubbgwguuurbrrgrwuubgwguwbb +urbuguubguwuwrwwurwwuuwwbwguugbgbgbububwwbwrwgwugwgu +ggrgbrwrbwuurggbgbgrbugggwuubbwrgwrgbgwrrwgwgwuug +uwwubwurrwgggwbgrbbruuwruuwbgbrgbgrbrubgbwgwwubwgu +rrugububgrbwuguguwrrwwwrgwbwurggruwgbubbruwubuwgbgww +uwgwgwbuwgrbgrgugwwwrwwwbuuwguwwgwuggrwbrrruwwbuuw +bbrgwubwwuwbruuurguuwbgurwurgbgubgbrrbbwwur +bubwrgbuwbuwugbbuburbuwggrrbuwuwrbugbbgrurbwgu +ruubggwrgbubwbwugwrbubrrbrbrwgbwgbbuguwbrgurwgggbbbr +brrggwurbgrrrruugbubruwrrwggugwgwwrbggrwrbguggbbbru +buurwrwwuububbuwwuwwwbgwgubuugbrguugububbgggugbwgu +brwuguwwggwbuggurwbuwubwgurwruuwbrurgurwuwurggbbwurruugwbg +wrbrggrugurwgugwrggrguwrwugubwurwbrgrrbrbwgbrbuwuggbwbru +bbbgrbwwwurubrgwwwbwbrrbbrgrruggbwubgwuwurbugrburwgguurwgwgu +ggrrggwbrgguugbwbwugwrwuuruwubrbrbgwbbgrru +bwggwrbgrgrrwrgwrubggwwrgwwurbwrururubwuwbruwurwgwwuwu +urbrrugruuwbrwwrwurrwrrgbwgubuwwbwgggurrgugbwbrgbugwbggbwu +gwugbwrugrgbbwrrbwbwgbguwggrrurbbbbugrggbgb +brrgwrbwwbuurwuruwbwwwwrwbbbwggwgggugbguwuburr +ruuuwgbguurwgwugwggrwwrbbbwugrbururbwburwwruuwwrugrur +wrbuuwrwggwwrrbgwwrbuuggbgrugwrgugguruguwb +rbrrwwbuubgrrbuwurwwuwgwguubgrgrbubrwgugwrbgruburbrrug +gbwgugrbwbwgrwwbgbrrugwgruubwggbgruuwrwgbwrwrgbuw +rwgrbbbgwgubrbwuubrrubbrguubbuwbgrbguggwugurgbguwrrgbb +rwgbguwuuwgbrbrrgwgrrwuuuguuggbggggbwburugwurg +wgrggbbrbrrruwgguwggrgugbrrbrbwbugbwwrubbbbuwu +wrurbrubuuugugwggbugrubruwbburrrrwuuwgwuwggbbuguw +gbrrwbwruwrrbrruguuwgbwwbugrwwugwbrgubgrur +grrrgguwrrwwrwwgbbrgggwgbguwuuubbwugrrrugrggrb +uurgrwubwbrrgurrguuwrbgwrbrurwrugrgubwwgwbwgbrugbgwbuguwgu +bwbwwgbbgrwwbrbbbrgbrbwwwuruuubgrgguurbuuwgu +grggrwbwgggbrgugrwguwrubwbuwgurrruuwbgbrrgb +bbrruubuurbguubwuugrurbwrbgbwubwubwwrwguwug +uugbrugbgrbugguugwbwbgrgbuurwwbuubgrgrgbrw +wbgrbuuurbbruwwwgwrrbguugbuguggwwwuurruuurbbgwwrbgwg +ggrrbggbbgbgwrbgggrbbbrububuwrrbuwbbwrbgrgbgrwbb +bgwuguuubrwwuwgbbgbbbuurwwwrwwbrgbggrbbwguguwgu +rrbgwruwbbuubbuubrbggbugwwwgbgrwgugbubwbgbbbgbbrgug +rbwbrgbbggbburrrwguwwuwrugrgggggrwruuggrbrgubgwrwbrrubggwgu +guburwgburrgurggurgbgrwwwbuubbwwruwrubbrbbwrgwwrruubbwbu +uwbugwbuwrwurbrwrrrwrwwbrgrbbbwuwrrwrrrbbbwwrwrrbwgbrrgwg +bruwrgwrugwggrgrwgrrrwwgwwugbwurggwbrrwbgwgrgurru +gwuuruurwwguwugwurrgbuwuwwgrwgurgbbrgwurrwwg +wgrbrgurburugugbguwwgwbwwgggbuuugwgwrwbrrrbruburwrwwgwbbrb +uwggwbggwgggrgrbrubrbruubguuwgurggwbbrbbgrrbug +rurbgwgbwuwuwuuubwuguwrbwgbbrururruwbgwwbuwbrrwrrurwgg +ugwuuuurubbgbwrwgbuwrbbrwbwgwuugbrguggbubbggggubgrwuwrbbgg +wbbugbrbgbrruwguuruwwgwgwrguwubguuwurbgwbbguwrrrwwwburguuu +wuugrbbrrgurgbuuuruwbggrggbubwubbrgbuugrugwbgwguwrw +guuwwrbuuurwrrwrwrwrbuugwwbuuuuugugrgbguubrrbggbgu +rbwbbruuwwbwgwbwgugggbwwrwugguubrugubwgbbrgrbgu +bgrgbuugggbugwbbgwurgwguuuruubrubwbubwgwgwgurrgbubrguubr +rbggruugwbuwgugbuubugggwbrwuurgrrbwwbrurbgwbgguugbburgwgwg +guwuurbbwwbbuwwuwwggurguwuubuwwwgrugwrubgruurwgbwggb +gbrgbwwuggwuwgbgwbbgguwrwbwbwrwrwururbuwbgwgrrwrbuubwrrrbu +ggbbwgbbbrbwruggurwguubbwbguwguwgbrwrrruwubrurbuguwgurgu +bbwbwrugbwuwbwwbuugrgugugugrgwwuugwrurruwbgwwbwbwr +gbwwwuwrwwguwburwuggwbruuwbbrubgrbrwrgwrgrgugwgu +rrbwwbrrwgwruwwwrrgwubbugruwguggwwubrrbwwwwggg +urrrgwgggrrrurubwurgurwgugwgrugwbbwbwwgbbrwgurgwgwbubgwgu +rwgbwbrwwbgrbwggwbuuguuuwgbbubrgrggrwguwbrwrbrwrrwwurg +grbrwgbrwgwbwubgrbbgwrgrwuugwbuwuuwbwugrrwg +rgrurbbbggrrguburrwwugbgbbgbbbwuwbwrgwgwwbruuruww +wubbgwgbggwwggwrwubbrbwrwrbruburbgwwwurgguwgr +bbrbgbwrrbgwwwurggwgguwruwbuwbugbubbbbrwbggubuwuwgu +uwubbwwbrurwrrrwwurbgwwrubgugrbbgwbbbrwrrrgrbruubbbburrgg +rugwrbwugrgwwgwbbwguwbuwbugwwbugwwwurwbbguwgbgrwuwrggbgrr +rgwgwwwuwbgwbuuwubbuwbruwgugbbugbbwrbwggwbgbwurubbrrgbrw +urwwgrbbgbuwuubrubruburgugbgbwuurgguuwuwubwbuggbwbggwugwgw +guugrwbbwwbwbwbuguurubuwwwrrbggbrruwwwurwbbbrbbb +ggugbrwbgwrbrbbbrgguggwgrrggwgwrgruurgwurggwwgubgwgu +wruugbgugwwrgbwbrbbbgrubrwbgwwguwbbgubwrguwuuwubgur +bwuwubbugwgbrrwuuwrgbgbguwuurrbbwrwugwwwrbubgrrrwbw +buwrbrgwbgwurrrwguuurbrrbuuurwrgwubbgwbgggguruwbgbggb +uwbggrgwbubrbrwwwguguwrrugbbbugbbgwrrwwwgrwgbugurwrurr +ggurbuwrwgurrgurgbuwrguwbwbrugbgburwuwuuwuubgggwruubgubwgu +gwrrbbbgwbwuwgubbugguwurrwwbrugugwwrwbrgurrrwww +gwruwggwrubugwgubrruruurwrggbwgrubbuubgrruwgrburwbgrrbuwgu +gguugbgwrrbwwrrgrbrwuggrbwbgbgrwrbuwbbubwgubwuwubbg +rruburrrwguwrrgwwuuwwbrgwgrurwurwubrubuurbgbbggrgb +wbrgwrbgbrbwgwbuwurgrrruwbwrugwbbbgwbgwbruuuguwuwwbuguwrub +wwrgrgbuwbbbwwurgugrruuwwwbrrwuwugwwurwgrwurubguwwg +ruburgggurruugrubggwgugbuurgwbbrrggbwggwwrbbgrwb +wwggruwuwwguuwwrrgubgwgbwwbrrrwwuuggugwbuurub +gwrburbbgbrwugbwrbggrwwwwbrrgrrrurggwbbggbgbubgrrbuwrwu +wbuubrwbrgwwubrgrrggrrurwbbwrrgwbrguggwuwwugruw +ugbbuugguuwgwbubrwrwwrwgbbbwrwgburuwrbbuuwbw +uuuuwbwggrrbbwwrwgrwwbwrurrbruubwwwgbgrgrrwggwwuugbgrrb +gbbubwubwbgwubwwgruwbgrburbuwwbgwwgbwrwbwbrgwrrubwwbrug +rwbwwruwwwgurgurrgbgubuuguwbwrugbggrwurbbrbbrbuwwrrwww +wgwrubgwuubgwgwguguugggwwruurwwgguggbuugwbuuwrbr +wwgrwrrgrbbwwwbgbgbubuwrwrbbbrwrgrgguwgwwugggbbgbrbwrgug +urugwubwgubrwrbuubguggrbuuuuuwwurrgbrgbgbwwubruwuuwwwggugr +buwuburbrgugrubggbgbrburgwrgwwgbuuuuuwgbwbrbuugrwbbbwb +uuwgwwbwuurbbggbwrbwrbbruuururwgugwuuurwgrgrwbruwuwru +ugubbwgubrgwgwwurbuurwwrbrwggubbguwrggrubrrbuwuubbwbrbrb +grwwrrgwrubbwggwgwwuuuwwrwbbwbbguwubwgbrgbrgrgguugrrgrgw +wrbrgrgwrwbruruwuwurrbwgwwbrrrwwwwrgrbwgurgrwugwuwgu +uuguwwrbgguuwgubbwrwugbrwbbbrbugubbrbrgruugbggbwbrubwg +wwbwbbwugbggwbguwggwbgrgubgrbrrrgbrugrgwuggubbrrr +brgwbubggbrwbwuggububwbuuwgggrgggwgbwuwguwgwgu +gwbwuwuuwurwguggbrbbrrwubbrbrwuuwrbbbgrgurggrrwrg +ggugugbrgrrrwuurruuwrgbgbgugbbbrwuwbbgrggbwuggugugugb +bgwwurubbguruuuwbuuguwwbbuuggwgbbgrbbubgubruwbgbuwwurgu +uuguwgrrbubwrgruggubggwrgururbrruurwgrgbrgug +ggwubwbwwbwggguugurbwrrbwrrgwrgrgbubuwuurwgbruubbwgu +bwgbguwrgwubgrgbwuwgrggbwwrgbgwbruuwgguggu +wbgbuwrrggwgbubgrbuugrrrwrrwguurubuurbgbrb +wrbwbrurwrubugrrrbugrwugugrugbwuguubbrgrwwgbrruwbbwg +gbuguwgwwgwuggrbggwbrruuwubwrgwbrwgwguwrgbwgu +gggggbbururwbggwgwwrrguurwwgwugrrwuggbubrgrrugubgbugubwgu +wurbgwbuguwbbgubbgwbburbbrwbbubwrbrubgugbbugwuw +uugggbugbwwbrwuguwggrgwrbrgwwrugwgruruwgwubbbwwbbguuwugbr +brugggrwruuuggbgwguuurwubgwuuwbruguwwrgwgbugrrwbbrug +wurrrrbbbggrwurubbruurbrrbwwgrrrrgruubrrwwwr +rugugrwbubrgrwbwwbuugwurrwuuguugrwurwrbbbwrbg +rrurbgrgwrwuguggurbrbgwbgugwrbrugbggrugrrrggrw +ubwwwwbbguugrurbgrwwgruubggbrrwgbgwrwbrgbugbbbbugwbwbb +wwgubgrrruurgrguwrgwuwggbwbwruggrbgrbrbwgguruggwgwuurbbuu +ggguurwuuruguggrrwgrwurbwwbwwbwrbrugbgwrwugbruugbgg +urgbubgwbrwrgrbwgruguwugwbgrgugrgbwubrgrbwrr +uwbwbbbbrwggwrrggwbgbwrgugbrggbwuwgubrwbgbuuwugg +wwgbbgwrwrwrbgubgggbrbguguguubbrbbrurgbbgubbbbwgu +burwbbguggbwwubrbugbrwwbrgwgruwrrbuggugwgu +brrbrguwuwbrrrbuuubwwrbgbubugwwurwugrgrwurbugwwrbugbw +gburrrgwuwrbwugugrrrurwrrrbuugruurbbguggugubwgb +ruugrbbwbubuggbbuwgbbwgwurbrgrbgruwbrburggubrrwuburuugbur +wwbwrbwuwguguuuurwubrwbrburbggrugurwbrrrwwbgurwuwg +urggurrrgbbrgrwrwrbuuurbgwrugggrwbrwbgggrugg +gurrbgbbrugbwrgwwggrururbbgwgwwbwubgwrrbubwbuubggbrbrr +bbwwbgbrbwwrgwwrbgwbgugurugbugwubguwubruurru +wuurbgrrgrwurrguuwuurwbwubrbgwbbbbugrwwwwbbbwwgwgwru +uwgubbbwuwugwbrgwwguubwwugugwbubguugwgbuurgbrwbruuubuurruw +bbruwrwuubwbugbbrbgggbwbwbuwuuubrgugugwbwwrbuwgwuwgu +wgrgrbbgruwrgrwgbrwrwguggguwwwubgbwuwrgrbguwu +bwbrbbwggwrruuguwgwwgubrbgurrgburuuguuguuwggwwbu +ugrbrwugrwbwgbwbwbwrgbgugwurwwgrurrrugbwbggu +grwrwbuuwbbrbbbuwrwubbugbbbwwgbwgruwbgrgbwguwwbwuww +ugrgbwburbwbgrgubbuurwubrgrwubbrrruwubrugrwrwbggb +wwrwwrwrgurgggbrubuuuuurbbrgwrgggwgrwbuwrggruru +gwwbbrburbuuuguruubbbggwgrgrubwgruwwrbrgrgruugwrrww +ugwrwguggubrrwwurwwwbwbwbbwwwwwguubbwwurrgwwgwbwubwb +wburwbggrbgurbwubwubggubrwurguwbbbggbwrbbguwbwbwuurgbgg +rwwgggwwwbubgugbubuuwwrbbuwrwwgwggbbbugwbrgbwuuuuw +brggrwbbwrubburgwwrbburuwuugwrrwuuwgrrrbwwwgguubwwbbbbuwgu +wuwrbwuwbwrugbrwubbbgugbgwgwbubwuurbggwwrrgrbggbw +uwrrgrrwwugrburbbwbwbwbwuurgrgubbwwuwrgrwgbugg +gbuwgwrwbgbgrruwrgugwuwbgwruwrbgbrrwububbrbrrbgugr +bgbbbwwwwbbubwrgwbwrrbgggrwggwgwgbgrbbgggugwru +wwgwwbguuwrbwuuwugwrwbgrwbururbugrrrgwbuuwrwwuuu +brgruuuugrgwuuguwbbwgrwgbggbgrugrwwbbugrwwrrubwgu +wburbrwbwrbwrbrrgggurruuguggwuwbrgwbgbwgbrwubgubugbur +rgurgwgrubuuwwrugugbbggurbbgwwrrubgurwbwbbbrurburwrwwub +wguuuubwubwgwrwuwwuururbggbgwgbubwwrwrwuuwgwbbbrgr +uugubgbguwbggguuggrbwgwwrrguwuwbubwwrgggwgbwgrb +gbubrbggrwwgurbbbbbuwbbwggbuwbuwurrgruwwgub +buwrrwbuwwgwbuwuurguuwbwrbuugwwwuwgrrbubbrgrbubguruwgu +ubruwgrwbwuurrruwbbwwwgrbbbburgwwbbuuwrgwrguburwbuggguw +gwuuuuwgbbgbwgggubuugrbbwrrurbbrburrrgwgbwguwubwuww +rugugrbbwuggrgbbubggubbggbrgwrbrbgubbwgu +uuubbbggurgubgrbguuwwrgbrgrbbrbrubwguwbubwrgwwbugg +gbwrrgubbrwgbugbrrruwubwgrwurrwwurwgwrwbrguwrgwwbrwwuwgu +wwwbwugurwwguugrbwgruurwwrgguwuggwurugrggwguwg +ugbrwwbwwwuwwrgrwuwbuwbgwurubwuwuuwguwubwbburwrwubuw +grwgrggggbgwgbgbrwguugwrwbgrrurwbbwburgrwwbbwwgggrwwgugwgu +gbrbbgbwgburbbbrwbgbuuguuurrrrwwbggbgrubuuwwwwrb +brbugwubbrgbuubwbuguguwuugbrubgbrwwugbuwbgbwuwwbrgubrbwruu +rbwrwurbbwubwrgrwrggrwugbbuwburwuggwgwbgbwrgwbgw +brurwruuubwwruuwuwwwuggugrbruwbgwbugrrwurugrgubrggbwwr +gugrwgubbwbuugwgrgrrrgwbbrguwubruwugbugrbbruuurwgbgur +ggbrgubuwwururggrburuuguguurgubbrugurbwrggrrwbwgu +rwuugubrrurrbguuugguwwwugrrgwgbrguubgrwbrrwguwbw +uwuwrrruwrwwgrwgrbbwwwggwgubgrrrwggubuuuuuubrbbwgu +ruurrrgrugrgrgwwugrwwgrbuuguurgrbrbgrwbwgwu +buubbwwbwwrwbwwbgurgwbbrrgbwbwbuwwbwbggguburrbrrbwgurgu +bgrurgbrrurwwbbrrwbrrrwrgrwbbrugrwbwrrgubbubrrbrgbuuwrgww +rwbbwbgwbggwwgugrguwgbuwwubwuwwwwuwbugrwgrgguu +bggbubgugwbbrurrubwgwbwwwuubbrguuurwruruwrwwubuurr +buwuwbrrubbwuurwbrgwwwwrrgruwggruruggbrgwbwwwbwugrwgr +ubbuguurburrrwggwgbwuwwrgwurgruwwwwbwwgruwbugbuugrrggbu +ubuwrbwgwrbgugrwubbgrbwrggwrgrubbbbgurwrrwuubwbrgbbbbuggww +uruwwuubrbgubrurwbguwrugbwruggbbwwuwuggbrwuwbuggbrbrgrbr +uubuuruwrbbwguugwgubbwgwubbruggrgwrrgruuwuwbgwrrrgr +gwbububbgwbwgggwrwurugrrruwuwurgbrwbgbwuwuggwgbwuwbur +ruguuwwuurgwggbbwgggugugbbuuggwbwbbwgrruuubwrguwrruugwrbb +bwwrugwwrgwruubbwwgbwwrwuwubbwurrrubrwwwubbubugugbuwb +rrbwwggurwuuubgurbbwgbrbruuwbuuwwrbugggugw +rwggguuuwbwuwwubwuuurrubgrguwuwbrgbuwbgugbbbbrwuruuurgrw +uugubuwwwrwwuwguubgrrbrrrwrrgwubbwwbwrbgguguuguuwru +rwugwruubgurrwrbgubuwrwuwugrwggrwwwugbubugwbbwgwburbbubwu +bubbbrgrgbwgubwwruurgrbrbbwgbgrwgggwrbburubwb +brwgbbwrbruggwrrbuuuuuuuuwrgbwuggrrrugwuwgr +wggbubwgwruwrbgrguugwbruuggwbrrwbgwuwrgwwurgugwurbwbb +gwwbrgrrrwrbgwubrwgwrwbgbburgrrwbuwgwgrgwgubbgr +rurgrubwgwrrubburwurgrbrgurbrguwugwurrbbbbwwbbuw +wgwugubruuugbrgrgwgbrurwbgbwbrbuwgrwurrgruwgu +gguwggbrwwugugrbwrbrwgwwgruggurgurwrrrrwbwgu +wwgbrrgwwuwubbuuuggbgwgrwbbrgubwwuwurwrbubggrgguurgw +wrrrgwrubggugwgwburgbbwguguwwgurrwwgggrguguggrugwwwgu +ruwwbrburrrrwgurruwbwgruggrbwuwuurrgbuuwbgbg +rbugurbwgurwwrbwrruwgbgwwrwgwggrrguugrbrgwwgwwurubbrubrg +bbbbguuuwwurwbwbggbrgwwugwbugrugubwuuwggwbwuwwrgbrguuwr +buwubggbrwruburgbubwgbwwrwrgbwgwrwuuurrgrrwwbrrrgubb +ggurrgbrbggggrbgwbuwurwbrguugrbuurwrgubwwubbbbwrwuwbur +ubbwubgbrwwgrgbgrwbrruuurbwrwrgwbgrrgrbgrgwuuwwururrbr +rrugruuwgbwuwgwuwruuwwuuguurrwbwrgugbgwwubbg +gubuubrbbrrurrbrrwguguwrwgbbubrbuwwbuwwgubguburuggrgwr +wguwrwrwruwbbbbwuubwbguuwurwbubgwwwwrbuugww +bbggggggbuwgurgwurbubwubgbgburbwrrbrrrwbwubwwruwuwbggrrugg +ggwrgbwruubwwuurgbbwrgbbgwrubwgbrbbbggbrurgugbbwgbgrugu +ubuwugruwbrwwbbwbbuwwubgrbgbgggurrrrgbbgwbbwuu +rrgwwggwgurgurbbbwubuugbbbgwwrrwrburubgwgu +ugrgugbrgrwuugbuwgugrwrbwbugbwggwbwubgbruuuwbrrwrbwuu +urgwwubwuubruguwwgurgbwgubgggbbwruwrurwwgbuwrrrbwwuw +bgrgubruwrurggrbwuwbbwwugwburbubrrwurwubwrruuurgubrrgub +rgbrrrwwbbuwrbruuurggurubggwbbrrbwbbrbgwrbuwgbgg +rgguwggugruwwwbrbgrrbwugururguwuuubgruubbwwwu +bwwbrrwuurgrruwgrguwwbgrrwrbwuuurgggbrwgbuwbguuuwggwbrrgwgu +rbwwwrbubwggrugguugwwgwbuurburbrubuwgbururwgrgwwb +wwwgubbwbwbgwubrrgbubuwbbbgrrgrwwrbbuwbubrrguuugruwwruwwb +ubrbggrwgrwugwwgrugubrburgggbugwbggbburgugggwbugugguguguw +rrrgrgrwgbgwgrgwrurwuwgurrbwwwgbgrgwwbwbubrrubrru +wbwgrgbwbgwgbuugburrwburbuwrbwgburrgwuwrggwbwuwgbbbguwrbgr +rwgburgwgubuugurwbwbwbuburrrbburgwwwwguwgwwbwbbwwwuwbwgwug +rwbuuguuwrrgrwrrgruruuguwwwgbbruwbbwrbrguwgu +guwbggbgrbbbbuwrwguwguwgrwurrwrbuurrrgruwwurrw +wbwuuuggwbgrwggbrggwbwburgbbrwrrugbbrugurbgwgu +wrrubbwrrwbruruwggugwwgrrwugugrgrguuggrubrggugggbrwu +rugrgguuuubbuugbbrrwuuwgrbrgbgrbbrbugururrg +ugggrgrwgbgwbwwrrgggbwwgbgbwrwwgwubbbrbbbuuwgwbbubbbwubw +gwgwuwuuwgbuubbwwwrrurrbgbubuuguwwbrgwubuuwbgwwuwbg +rurggguuubuuwrbrgwgguurwgrwugruugwwggrbuuugwbwgu +gbburubbgbggrwubgrgrurbwgrrubuwrrbbgrgrwgg +wgrrgwurbguwgbuwrbrurruwrbgrrbrgggguugrbwgwrbwwbrgwgu +rgbwbrwguubrwwrwugbbbwugwurwwgurbbrgwwugbbbwgb +ruwwgugrgrgrwgrwrbrrggwurrrwubrrbbrbwubrbwgu +brbwrrrggrgrggbwbgubgrrugwgwuubrbwwurbwbru +wrbrwgbwbbguburgrrgwrbrwwurugruggwgrrrurggur +gggwrgwwbuwwbrbgbrbbgbbubbuggrgrggbwugugggrbub +urgbwrgbgwwrgbwurgggrwgbbgwbwgrwwuuuguggbrbggw +wwubrgbwrguwrbrurrwwwgrwrbrbrrbrrwwgbbuwwwbbbwbg +rrgugrbrbuwwwuuwwurgubgwbbruuggbbbruuwubur +urguwgrrrgbrrwbggbgurrrrrwggrggrrburrrgggbu +ruwgguwurbbrgbgwgrrubwbwurwrbwgburrbbgrgburgubwwgb +wggwubbrwwwububuugwbwbubrubuguwguwrbbrwbgwgurgu +uubggrubwgrgbrurgbuwubgbuuwugwbuururrururgggrurwwrrgrrgbgwgu +brrwrbrbggggrwrburbrurbuwuuguwbbrgrruwbugwwburuuugubwgu +gbwrruugrgwbgrbruwwgrurbgwwubgwwbbggubgrwubrrburrgwuw +uburgbbwrgrwurwbuwrrwbbbggrruwrugubruwbgwubggurbuwwbbuwgu +wwrwguuwubrbbruguuruugbwwwrbbuubbuuubbbgrgr +uuwgbbgguuggrwwrrrubbbbgurgrruuubwwugwgu +guggrgrbrburubbugbugrgrggggugwgwggrrwwgbbwgu +rbgbbwrbwggugurgubbwwwrggwgwuwgrbrrbgubbbbruw +uuuwgrrrubbrwrbggwgguubbwbrbrwbgrgwbubwggwubgrub +rurwruuwwgwrguwugruburbgbuugugwuubrbbwurgrbrbugwubr +urrruurwuwbbbwububwrgguwbrgrbuubgrwuguwurwrbubrugu +gugwgrrrbrrrgrrwwgrggbuggbwbwgbburbwwggguwrub +wguwwwgwggwwurrrguwuwbgrgbrgwugbwbwwggbugbggr +gwgrwrgwbbburggrbwwurrrgbguurrrgrbrugwgbwurwguwbgbgrbug +rbbrrrbuuurgugwgrrbuwrbrrurwuwgrrrgbugbwgu +urwgwbuuwrgwwrrggwwubbrbwguuwbwrggbbwwwwbwrrrwwgbwwurbrrg +wwbguurugruuwuubugbgrwgwwggrbubrggwrwruubwrgwub +ubgruruguugrwbwbuwbbwruubwgrrurwwruwugwbruuurrwwrrgruugw +grbubwruwubgugggrrgrbwgurbgwugwwggrrbrgrbuwbbbrbwgu +wrgrrubgggrurgwguurubwgggbwuwrrubrugbrgbrbggwgg +gwgbrgrrbbrgubgrubrwrwrugrgubrgruuguwrwubwwwrgbubwwggbbwgu +bwbwgbgwbwwbuuwbrubggggbugwgbgbuuwggrwuwrbr +wugrwurwgrbugrwrwrwrrgwwuugrrwgrgbgbuwgu +urbbubruuggrugwwrbrrguugguuwuuwuuubrbgbbggrgbug +rrugubrbbgbwrbggguugrbrrrbruugruuggrbgwbuuwuururugwruug +burwbgbgruwrurbrwuwrgurgrrbrbbguwwbbrwgbwbgwrwbruuwbgwgww +wbubuuwbrwuwwruggbbugbrrrgbgwguwwgrgurgwrugrguurrrrbbgrbbwgu +rbwrbubggwuubugbrubuurruguwrrwgubwrwwububwrgrguw +gbrgubrugbwrgwwwwrbugwwgwgwrbrgwuuggrubwrbrugwbbruubwgu +wbgrubbrgwgrbrbuuuubuugwubbugwbuggwrburgwugw +grwgrbgwwrubruuubburwgbwgugwugwwrbwbwwrguwbbubuuwguwr \ No newline at end of file