From 5f08adc3cbb8a56b0d0cd5ba996077c799c358a6 Mon Sep 17 00:00:00 2001 From: Eveldee Date: Fri, 24 Jan 2025 10:19:12 +0100 Subject: [PATCH] Add day 12 --- Days/Day12.cs | 155 +++++++++++++++++++++++++++++++++++++++++++++++ Inputs/Day12.txt | 140 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 295 insertions(+) create mode 100644 Days/Day12.cs create mode 100644 Inputs/Day12.txt diff --git a/Days/Day12.cs b/Days/Day12.cs new file mode 100644 index 0000000..3aeb14f --- /dev/null +++ b/Days/Day12.cs @@ -0,0 +1,155 @@ +using System.Collections.Frozen; +using System.Numerics; +using Spectre.Console; + +namespace AdventOfCode.Days; + +public class Day12 : Day +{ + public override int Number => 12; + public override string Name => "Garden Groups"; + + private const int GridSize = 140; + + public override void RunPart1(bool display = true) + { + var areas = ParseAreas(); + + var visited = new HashSet(); + var totalPrice = 0; + + var currentArea = 0; + var currentPerimeter = 0; + + for (var y = 0; y < GridSize; y++) + { + for (var x = 0; x < GridSize; x++) + { + // Skip already visited points + if (visited.Contains(new Point(x, y))) + { + continue; + } + + var id = areas[x, y]; + + ComputeAreaPrice(new Point(x, y), id, ref currentArea, ref currentPerimeter); + + // Add price of fencing this area + totalPrice += currentArea * currentPerimeter; + + currentArea = 0; + currentPerimeter = 0; + } + } + + if (display) + { + AnsiConsole.MarkupLine($"[green]Total pricing: [yellow]{totalPrice}[/][/]"); + } + + return; + + void ComputeAreaPrice(Point position, byte id, ref int area, ref int perimeter) + { + if (!visited.Add(position)) + { + return; + } + + // Update area and perimeter + area++; + perimeter += 4; + + var left = position with { X = position.X - 1 }; + var right = position with { X = position.X + 1 }; + var up = position with { Y = position.Y - 1 }; + var down = position with { Y = position.Y + 1 }; + + if (left is { X: >= 0 and < GridSize } && areas[left.X, left.Y] == id) + { + perimeter--; + + ComputeAreaPrice(left, id, ref area, ref perimeter); + } + + if (right is { X: >= 0 and < GridSize } && areas[right.X, right.Y] == id) + { + perimeter--; + + ComputeAreaPrice(right, id, ref area, ref perimeter); + } + + if (up is { Y: >= 0 and < GridSize } && areas[up.X, up.Y] == id) + { + perimeter--; + + ComputeAreaPrice(up, id, ref area, ref perimeter); + } + + if (down is { Y: >= 0 and < GridSize } && areas[down.X, down.Y] == id) + { + perimeter--; + + ComputeAreaPrice(down, id, ref area, ref perimeter); + } + } + } + + public override void RunPart2(bool display = true) + { + + } + + private byte[,] ParseAreas() + { + var areas = new byte[GridSize, GridSize]; + + int y = 0; + + foreach (var line in Input.AsSpan().EnumerateLines()) + { + int x = 0; + + foreach (var area in line) + { + areas[x, y] = (byte)(area - 'A'); + + x++; + } + + y++; + } + + return areas; + } + + private readonly record struct Point(int X, int Y) + : IAdditionOperators, + ISubtractionOperators, + IMultiplyOperators + { + public static Point operator +(Point left, Point right) + { + return new Point(left.X + right.X, left.Y + right.Y); + } + + public static Point operator -(Point left, Point right) + { + return new Point(left.X - right.X, left.Y - right.Y); + } + + public static Point operator *(Point left, int right) + { + return new Point(left.X * right, left.Y * right); + } + + public static Point operator *(int left, Point right) + { + return new Point(right.X * left, right.Y * left); + } + + public static implicit operator Point((int X, int Y) point) + => new(point.X, point.Y); + } +} \ No newline at end of file diff --git a/Inputs/Day12.txt b/Inputs/Day12.txt new file mode 100644 index 0000000..a094bfc --- /dev/null +++ b/Inputs/Day12.txt @@ -0,0 +1,140 @@ +MMNNPPPPGGGGAGGPPPPPPPPPZZZZZZZLLLLLLLEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAMMMMNNMMMMMMMMMMMMMMMMAARRRRRRRRRRRRRRRRRRHHHHHHHHHHHHHAAAAAAAAAAAA +MNNNPNPPGGGGGGGPPPPPPPEPZZZZZZZLLLLLLLWWEEEEEEEEEEEEEAPAAAAAAAAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMAMMAARRRRRRRRRRRRRRRRQRHHHHHHQHHHHHHHWAAAAAAAAAA +NNNNNNNPGGGGGGGGPPPPPPPZZZZZZZZZLLLLLLLEEEEEEEEEEEEEEPPPPAAAAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMMMAAAAAAAAAVRRRRRRRRRQQQQHHQQHQQQHQHHHHWWWWAAAAAAA +NNNNNNNNGGGGGGGPPPPPPPPPZZZZZZLLLLLLLLLLEEEMEEEEEEEEEEPPPPAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMMMMMMAAAAAAVVVVRRRRRRRQQQQXQQQQQQQQQQQQHHHWWWWWAAAAA +NNNNNNNYYGGGGGGPPPPPPPPPZZZZZZZLLLLLLLLMMMMMEEEEEEEEEPPPPPPAAAAAHAAAAMMMMMMMMMMMMMMMMMMMMMMMMMMAVVVVVVVRRRRRQQQQQQQQQQQQQQQQQQQHHWWWWAAAAAAA +NNNNNNNXYYYCCCIPPPWZPPPPPZZZZZZLLLLLLLSSMMSSEEEEEEEPPPPPPPPPPAAHHAAAAHMMMMMMMMMMWWMMMMMMMMMMMMMMMDDVVVVRRRRRRQQQQQQQQQQQQQQQQQQHHWWWWWAWAAAA +NNNNNNXXYCCCCCIPPPPZZPPPZZZZZZZZLSLSSSSMMMSSEEEEEEEPPPPPPPPPPPAAHHAAAHHMMMMMMMMMMWMTTMMMMMMMMMMDDDDVVVVRRIIMRMMMQQQHTTQQQQQQQQQQQWWWWWWWWWWA +NNNXXXXXXCCCCCCXPZPZZZPZZZZZZZZZZSSSSSSSSSSSEEEEEEEEPPPPPUUXXXHAHHHAHHHMMTMMMTMMMMTTTMMMMMMMMMDDDDDVIIIRIIMMMIMZQQQHTHQQQQQQQQQQAAWWWWWWWWAA +NNNNXXXXCCCCCCCZZZZZZZZZZZZZZZSSSSSSSSSSSSSSSSEEFFPPPPPUUUXXXHHHHHHHHHHHTTMMMTMMMMTTTTTMMMMMMDDDIDDVIIIIIIIMMMMMQQQHHHQQQQQQQQQQAAAWWWWWAWAA +NNNNNXXXXCCCCCAVVZZZZZZZZZZZUUUSSSSSSSSSSSSSSFEFFFFPPPPUUUXXXXHHHHHHHHHHHTMTTTTTMMTTTTTTMMMDMDDIIIVVIIIIIIIMMMMMMQQHHQQQQQQQQGGGQAAAWWWAAAAA +NNNNNXXXCCCCCVVVVVVZZZZZZZZUUUUSSSSSSSSSSSSSFFFFFFFPPPUUUUXUXHHHHHHHHHHHHTTTTTTTMMTTTTTTMMDDDDDDIIIIIIIIIIIMMMMMMQIHAQQQQQQQQQQQQAAAAAWAAAAA +NNNNNNXCCCCCCCVVVVZZZZZZZZZUUUUSSSSSSSSSSSSSSFFFFFFPPPUUUUUUXHHHHHHHHHHHHHTTTTTTTTTTTTTTTTTDDDAAAAIAIIIIMMMMWMMDDGGGAQQQQQQQQQQQQQAAAAAAAAAA +NNNNNNNCCCCCCCCVVZZZZZZZUZZUUUUSSSSSSSSSSSFFFFFFFFFFPPUUUUUUUHHHHHHHHHHTTTTTTTTTTTTTTTTTTTDDVVAAAAAAIIIIIIIMMTTDDGGGAQQQQQQQQQQWWWUUUAUUUAAA +NNNNNNNNCCCCCCCCVVZZZZZZUUZUUUUSSSSSSSSSSSSSFFFFFFFFPPUUUUUUHHHHHHHHHHHHHHTTTTTTTTTTTTTTTTTDVVXAAAAAIIIIIIIMTTTTTTTGGQQQQQQQQQQWWWUUUUUAAAAA +NNNNNNNNNNNCCCCCCCZZZZZZUQUUUUUUUSSSSSSSSXSSOFFFFFFFFPPPPUOOHHHHHHHHHHHTTTTTTTTTTTTTTTTTTTTDVVVAAAAAAIIIIIIMTTGTTGGGGQQQQQQQQQQWWWUUUUUUAAAA +NNNNNNNNNNCCCCCCCCZZZZZUUQUUUUUUUSSSSSSSSSSOOOOFPFPFPPPPPPPPPPHHHHLHHHHTTTTTMMMTTTTTTTUTTTTDDVVVVAAAAIIIIIIMTTTTTGGGGQGGGQQCQQWWWWUUUUUUUUUA +NNNNNNNNNNNNCCCCCBBMZZZUUUUUUUUUUSSSSSSSSOOOOBBPPPPFPPPPPPPPPPXHHHHHHHHTTPTTMMMTTTTUTUUUUUUUVVVVVVVAAAIIIIIITTTTTGGGGGGGGQFFWWWWWWUUUUUUUUUU +NNNNNNNNTNCCCCCCBUBBHCCCUUKUUUUUSSSSSSSSOOOOOBBPPPPPPBPPPPPPPPHHHSSSSHPPPPPMMMMMTTTUUUUUUUUOUVVVVVVAAIIIIIIITTTTGGGGGGGGGFFFWWWWUUUUUUUUUUUU +NNNNNNNWCCCCCCCBBBBBBCCCCCUUUUUUSSSSSRRRROROOOBBBBBBBBBBPPBBBBHSSSSSSSPPPPPMMMMMTTUUUUUUUUUUUVVVVVVVVVVVVXIITTTGGGGGGGFFFFFFSSKWUUUUUUUUUUUU +NNNNNWWWWCCCCCCCBBBBHCCCCCUUUUUUUSSTGRRRRRRRRBBBVBBBBPPPPPBBBBSSSSSSSSPPPPPPMMMMMTTUUUUUUUUUUVVVVVVVVVVVVXXUUGGGGGGGGGFFFFFNSSKKJUUUUUUUUUUU +MMMWWDWWIWWCCCCBBBBBBCCCCCCCCCCCCCGGGGRRRRRRRVVVVBBXXXXXPPBBSSSSSSSSSPPPPPPPMMMMMUTUUUUUUUUUUUUVVVVVXXXXXXXUUGGGGGGGGGFFFFFSSKKKJUUUUUUUUUUU +MMMMWWWWWWWCCCCBQBBBBCCCCCCCCGGCGGGQGGRRRRRRRVZZZZZXXXXXBBBSSSSSSSPSPPPPPPPPPMMMMUUUUUUUUUUUUUUFVVVVXXXXXXXUUUUGGXGGGGGFFFFAAAKKJUUUUUUUUUUU +MWWWWWWWWWCCCCCCQBQBCCCCCCCCCCGCGGGGGGRRRRRVVVVVZZZXXXXXZBBSSSSSSSPPPPPPPPPPPMMMMMUUUUUUUUULFFUFFVXXXXXXXXXUUUUGXXGGGEFFFKKKKAKKKKKUUUUUUUUU +WWWYWWWWWWKCCCQCQQQCCCCCCCCCCGGGGGGGGGGGGGGVVVVVVZZXXXXXZZBBSBBSSSPPPPPPPPPEEMMMMMGUUUUUUUULFFFFVVXXXXXXXXXUUUUUBBUUGEFFFKKKKKKKKKUUUUUUUUUU +WWWWWWWWWWWQQQQQQQQCCCCCCCCCCGGGGGGGGGGGGGGVVVVVVVZXXXXXKKKBBBBSSSSUUPPPPPPEMMSMMGGVAAAUUQFFFFFFVVVVVXXXXXUUUUBBBUUREEEMMKKKKKKKKKKKUUUUUUUU +RWWWWWWWWWWQQQCQQQCCCCCCCGGGGGGGGGGGGGGGGGVVVVVVVVVXXXXXKKKKKBBBBBSSUPPPPPSMMMSSMMGVVVVVVQFFFFFFFFVVVXXXXXUUBUBBBBBREEEMMMMKKKKKKKKKUHUUUUUU +WWWWWWWWWWWQCCCQQQQCCCCCCCCCGGGGGGGGGGGGGGGVVVVRVVRXXXXXKKKKBBBBBBBBPPPPPPSSSSSSMMMVVVVVVVFFFFFFFFFFFXXHXUUBBBBBBBRRREMMMMMKKKKKKKKKKHHHUUUU +WWWWWWWWWWWCCCCQQQCCCCCCCCCIGIIGGGGGGWGGGGVRRRRRRRRXXXXXKKKKKKKBPBBPPPPPPSSSSSSSSMVVVVVVVVVVFFFFFFFFFHHHUUBBBBBBBRRRMMSMMMKKKKKKKKKKKUHUUUUU +WWWWWWWWWWWWCCCCCCCCCCCCCCIIIIGGGGGGGWGGGVVRRRRRRRXXXXXXKKKKKBBBPPBPPRPPPPPSSSSSSVVVVVVVVVVVAFFFFFFFFFHHHHIBBBBBRRRRMMMMMMSKKKKKKKKVVUUUUUUU +WWBBWWAWWUUUCCCCCCIQQCCCCIIIIRRRRRRRWWWGGVRRXXXXXXXXXXXXKKKKBBBBPPPPPPPPPPPPSSSVVVVVVVVVVVVVAFFFFFFFFFHHHBBBBBHHHRRRMMMMMMMKKKKKKKKVUUUUUUUU +WWWAAAAWUUCCCCCCCIIICCCCCIIIIRRRRRRRWWGGVVVVXXXXXXXXXXXOBKBBBBBPPPPPPPPPPPPPPPPPLVVVVVVYVVVEFFFFFFHHHFFHHHHHBBBBHHHMMMMMMMMMKKKKKUUUUUUUUUUU +WWWAAAAUUUUCCCCCCIIIIIIIIIIIURRRRRRRRRGGXXXXXXXXXXXXXXXRBBBBBBBBPQPPPPPPPPPUPPXEEVEVVVVVVVEFFFFFFFHHFFHHHHHHHHBHHMMMMMMMMMMMKKKKKKKKUUUUUUUU +WWWAAAAUAUUCCCCCCLLIIIIIIIIUURRRRRRRRRGGXXXXXXXXXXXXXXXRRBBBBBBBPPPPPPPPPPPUPVEEEEEVVVVEVEEEEEFFFFHHHHHHHHHHHHHHHHMMMMMMMMMKKKKKKKKUUUUUUUUU +WWAAAAAAAAUEEEOOOLIIIHIIIIIIURRRRRRRRRXXXXXXXXXXXRXXXXXXRBBBBBBBBPPPPBPPPBEBBBEEEEEVVVEEEEEEEEEEFHHHQHHHHHHHHHHHHHMMMMMMMMMMMKKKKKUUUUUUUUUU +OOAAAAAAAAUOOOOOOLLLLIIIIIIIURRRRRRRRRXXLLLLXXXXXRXXXXXXRRMBBBBPBPPPPBBTPBBBBEEEEEEEEVEEEEEEEEEEFQQQQHHHHHHHHHMMMMMMMMMMMMMMMMMKKKKUUUUUUUUU +OACCAAAAAGAOOOOOOELLLLIYIIRRRRRRRRRRRRXLLLLLXXXXXRRRRXXXRRRBBBBJKKPPPBBBBBBBBBEEEEEEEVEEEEEEEEEEEQQQQQHHHHHHHHHMMMMMMMMMMMMMMMMKKKUUUUUUUUUU +AAAAAAAAAAAOOOOOEEELLLIYYVRRRRRRUUUUXXXLLLLLXXXXXRRRRXXXRMRBBBBJKJUBBBBBBBBBBBCEEEECEEEEEEEEEEEEQQQQQQHHHHHHHHHMMMMMMMMMMMMMMMWDDDWUUUUUUUUU +AAAAAAAAAAAOOOOOUULLLYYYRRRRRRRRUUUUXXXXLLLLXXXXXXXXXXXXXMMCCBLJJJUBBBBBBBBBBQCCCCCCEEEEEEEEEEEEEFQQQHHHHHHHHMMMMMMMMMMMMMMMMWWWWWWWUUUUUUUU +AAAAAAAAAAROOOOORRRRRRRRRRRYYDUUUUXXXXXXXLLLXXXXXXXXXXXXXCCCCCJJJJUUUUUBBBBCCCCCCCCCCEEEEEEEEEEEEEQQQEEHHHHHHHMMMMMMMMMDDDDDMWWWWWWUUUUUUUUU +ZZAAAAAXAAROOOOORRRRRRRRRRRDDDUOUUAAXXXXWWLLLLRRXXXXXXXXXCCCCJJJJJJJJJJBBBLLLLLCCCCCEEEEEEEEEEEEEEEEEEEHEEEHHHMMMMMMMDDDDDDWWWWWWWWWWUWUUUUU +ZZZAAAAOOOOOOOOORRRRRRRRRRRYDUUOUUUAXXXXXAAAALRRXXXXXXXXXCCCCCCCJJJJJLLLLLLLLLCCCCCCEEEEEEEESEEEEEEEEEEEEEHHHMMHMMMMDDDDDDDWWWWWWWWWWWWWWUUU +ZZZAAAUOOOOOOOOORRRRQYYYYYYYYOUOUUAAAAAAAAAAALRRXXXXXXXXXCCCCCCJJJJJJLLLLLLLLLCCCCCCCCEEWWEEEEEEEEEEEEEEEEEHHHHHMHHHQQQQQQQQWQWWWWWWWWWWWWUU +ZZAAXAUOOOOOOOOORRRREYYYYYOOOOOOOOAAAAAAAAAAAARAAAAAZXXXCCCCCCCJJJJJJJLLLLLLLLCCCCCCCCEEWWWEEEEIEEEEEEQQHHHHHHHHHHHQQQQQQQQQQQWWWWWWWWWWWWUU +ZZAAXAUOOOOOOOOORRRROOYYREOOOOIOOOAAAAAAAAAAAARAAAAAZZZYYCCCCCCJCJJJJLLLLLLLLLCCCCCCCCCWWWEEEEIIEEEEEEEQQHHQHHHHHHQQQQQQQQQQQQWWWWWWWWWWWWUU +ZZAAUUUOOOOOOOUUEEEEEEEEREOOOOIOOOAAAAAAAAAAAAAAAAAAZZZYYYYCCCCCCCCLLLLLLLLLLLLLCCCCPCWWWWEEEEIIIIEEEEEQQQQQHHAQQQQQQQQQQQQQQQWWWWWWWWWWWUUU +PPPPPYUOOOOOOOEEEEEEEZEEEEOOOIIIIOAAAAAAAAAAAAAAAAAYYYYYYYYCCCCCCCCLLLLLLLLLLLLLCCCPPCWWWWWEEEIIIIEEEEQQQQQQQJJJJQQQQQQQQQQQQQQQQWWWWWWWUUUU +PPPZYYYOOOOOOOOOOOEEEEEEEEIIIIIIIIAAAAAAQQAQAAAAAYAYYYYYYYYCCCCCCCLLLLLLLLJJLFLFFCTFFWWWWBBEEIIIIIKQQEQQQQQQJJJJJQQQQQQQQQQQQQQQQQWWWWWWUUUU +PPPZYYYYYYYYYOOOOOEEEEEEEIIJIIIIIIACAAQQQQQQQAAYYYYYYYUYYYYCCCCCCCCLLLLLLLFFJFMFCCFFFSBBBBBBIIIIIIIQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQQWWKWWWUUU +PPPYYCYYYYYYYOOOOOOEEEEEEIIIIIICCCCCCCCCCQQQQQYYYYYYYYYYYYYCYCCCCCCCLOOOLLFFFFFFFCFFFSSBBBBBIIBIIIBBQQQQQQQQQQQJJJQQQQQQQQQQQQQQQQQWLWWWWUUU +PPYYYYYYYYYYYOOOOOOEEEEEEEIIIIICCCCCCCCCCQQQQQQQQYYYYYYYYYYYYCCCCCCOOOOOLHHFFFFFFFFFFFSSBBBBBBBIBBBQQQQQQQQQQQQQJJJQNQQQQQQQQQQQQQHHHHWWWWUU +PYYYYYYYYYYYYOOOOOOEEEEEEEIICCCCCCCCCCCCCQQQQQQQQYYYYYYYYYYCCCICKITOOOOOHHHFFFFFFFFFFFFFBBBBBBBBBQQQQQQQQQQQQQJQJJJOQQQQOQQQQQQQQQQHHHHWWWHH +PYYYYYYYYYYYYOOOOOOEEEEEIIIICCCCCCCCCCCCCQQQQQQQQYYYYYYYYZYSCCIIKIIOOOOOHHFFFFFFFFFFFFFFFFBBBBBBBBQQQQQQQQQQQQJJJJOOOQQQOQQQQQQQQQHHHHHHWWHH +PYYYYYYYYYYYYOOOOOOEEIIIIIIICCCCCCCCCCCCCQQQQQQYYYYYYYYYYYYIIIIIIIIOOOOOHHFFFFFFFFFFFFFFFBBBBBBBBBQCQQQQQQQQXXXJJKKOOQQQQQQQQQQQQQHHHHHHHHHH +PPPPYYYYYYYYYOOOOOOIEIIIIZZZCCCCCCCCCCCCCQQQQQQQPYYYYYYYYBYBIIIIIIIOOOOOIHHFFFFFFFFFFFFFFBBBBBBBBBBQQQQQQQQQXXXKKKKKKKKKKKQQQQQHHHHHHHHHHHHH +PPPYYYYYYYYYYOOOOOOIIIIIIZZZCCCCCCCCCCCCCQQQQQQPPPYYYYYYYBBBIIIIIIIOOOJJIIFFFFFFFFFFFRFFFBBBBBBBBBBBQQQQQQQQXXXKKKKKKKKKKKQQQQQHHHHHHHHHHHHH +PPPPPYYYYYYYYOOOOOOIIIIIIZZZCCCCCCCCCCCCCMQQQQQQQYYYYYYYYYYBBIIIIIIOOOOOOFFFFFFFFFFRRRFBBBBBBBBBBBBBBBQQQQQQQXKKKKKKKKKKKKQQQKQKHHHHHHHHHHHH +PPPPPYYYYYYYYIIIIIIIIIIIIIZZCCCCCCCCCCCCCCCCCCCCCGGYYYYYBBBBIIIIEEIIOOOOODFFFFFFVBBRRRRBBBBBBBBBBBBBWBQQQQQQQQIIIKKKIKKKKKKKKKKKDDDDDDHHHHHH +PPPPYYYYYYYYYIIIICIIIIIIIIIZCCCCCCCCCCCCCCCCCCCCCGGYYBBBBBBIIIEEEEEEOOOOOFFFFFFBBBBBRRBBBBBBBBBBBBBBWWWWQQQQPQIIIIIIIKKKKKKKKKKKKKDDDDHHHHHH +PPPYYYYYYYYYYICIICCIIIIIIIZCCCCCCCCZZZCCCCCCCCCCCYYYYBBBBBBBIIEEEEEEOOOOOEEFFFFCBBBBRRBBBBBBBBBWWWWWWWWWQWWIIIIIIIIIPIKKKKKKKKKKKKDDDDDHHHHH +PPPPYYYYYYYZYZCCCCIIIIIIIIZZCCCCCCCZZZCCCCCCCAQQAGLYBBBBBBBBBBEEEEEEOOOOOEEEFFWBBBBBBBBBBBBBBBBBWWWWWWWWWWIIIIIIIIIIIIIKKKKKKKKKKDDDDDDDDHHH +PPPPYYJJYZZZZZCCCCIIIIIIIIIFZZZZZZZZZZCCCCCCCAAAAGGGGGGBBBBBBBEEEEEEOOOOOEEEEFWWBBBBBKKBKKBBBBBWWWWWWWWWWWWIIIIIIIIIIIKKKKKKKKKKKDDDDDDHHHHH +PPZPPYJJYZZZZZZCCCCIIIIIFIIFFBFFZZZZAACCCCCCCAGAGGGGGGGGGBBBBEEEEEEEOOOOOEEEEWWHZZZBBWKKKKKBBWWWWWWWWWWAWWWWIIIIIFIIIIKKKKKKKPKKKDDDDNDHHHHH +ZPPPPPZZZZZZZZZCCCCCCUIIFIIFFFFOOZZZAAACCCCCAAGGGGGGGGGGBBBBBEEEEEEEOOOOOEEEXHHHZWWWWWKWWKKWWWWWWWWWWWAAAWWWIIIIIFFIKKKFFFKPKPKKKKDDDDHHHHHH +ZZZPZZZZZZZZZZZCIIRCUUUIFFFFFFFOFBZAAAACCCCCAAGGGGGGGGGGGGBEEEBEEEEEDEDDEEEEXHHHHHHWWWWWKKKKWWWWWWWWWWAAARRWIIIIFFFIFKFFFFPPPPKKKKKPHHHHHHHH +ZZZZZZZZZZZZZZZIIIIIUUUFFFFFFFFFFZZZNANCCCCCAGGGGGGGGGGGGGBBBBBEEDDDDDDDDEEEEEHHHHHWWWWWWKWWWGWWWWWWWWAAARRRIIIIFFFFFFFFFFFPPPKPKKKPPPHHHHHH +ZZZZZFZZZZZSSZZRIIIIUUUFFFFFFFFFFFFFNNNCCCCCGGGGGGGGGGGGGBBBBBBBDDDDDDDDDDEEEEHHHHWWWWWWWWWWWWWWWWWWAAAAARRRIIIIIFFGFFFFFFFFPPPPKPPPPPPHHHHH +FFFFFFZZZZZZSSSIIIIIUUUUUUUFFFFFFFWNNNNNNANGGGGGGGGGGGGGBBBBBBBBDDDDDDDDDDDDEHHHHHWWWWWWWWWWWWWWWWWWAAARRRRRIRIIFFFFFFFFFFFWPPPPPPPPPPPHHHHH +GFFFFFLZZZXZSSSSSSSIUUUUUUUFFFFFFFFFNNNNNNNNNGGGGGGGGGBBBBBBBDBDDDDDDDDDDDDDHHHHHHWWWWWWWWWWWWJJJWAAAARRRRRRRRRIFFFFFFFFFFFWWPPPPPPPPPPPHHHH +GFFFFFFFFZFQFSSSSSSUUUUUUUUUFFFFFLFYNNNNNNNNGGGGGGGGGGBBBBBBBDBDDDDDDDDDDDDDHHHHHHHWWWWWWWWWWWWWJAAAARRRRRRRRRRQFFFFFFFFFFFFWPPWWPPPPPPPHHHH +GGFFFFFFFFFFFSSSSSSUUUUUUUUUUFFFZNNNNNNNNNNNUUUGGGGGHIIBBBBBDDDDDDDDDDDDDDDDHHHHHHHWWWWWWWWWWWWUAAAAAAIRRRRRRRQQFFQRFFFFFFFFWWWWWPPPPPPUIISS +FFFFFFFFFFFFIFSSIIIIUUUUUUUUFFFFINNNNNNNNNNNNNUGGGGIIIIIIIIIDDDDDDDDDDDDDDDHHHHHHHHWWWWWWWWWWWWWCACCCQQQRRRQQQQQQFFRCFFRRFFWWWWWWPPPPPPUUIIS +QQQFFFFFFFFFIFIIIIIIUIUUUUUUUIIIIIINNNNNNNNBNNUUGGGIIIIIIIIIDDDDDDDDDDDDDOEHEHHHHHHWWWWWWWWWWSWCCAACQQQQQQQQQQQQQQQRRRRRRRRWWWWWWPPPPPPPPIIS +QQQQFQFFFFFFFFPIIIIIIIUUUUIIIIIIIIINNNNNNNNNNUUUUUIIIIIIIIIIAADDLDDDDDDDDOEEEHHHHHWWWWWWWWWWHHCCCCCCQQQQQQQQQQTTQQRRRRRRRRRWWWWPPPPPPPPPIIIS +KQQQQQFFFFFFFFFIIIIIIIUUUUIIIIIIIIINNNNNNNNNNUUUUUUIIIIIIIIIADDDLDDDDXXEEEEEEHHHHHHHWWRQQQHHHHCCCCCQQQQQQQQQQTTTTTRRRRRRRRRRPPPPWPPPPPPIIIII +KKKQSSSSFFFFFFFIIIIIIIUIIIIIIIIVIIIVVVNNNNNNNNUNUUUIIIIIIIIDDDDDLDXDDXXEEEEEEEHHHHHHWRRQQQHHHHCCCCCQQQQQQQQQQTTTTRRRRRRRRRSSSPPPPPPPPIIIIIII +SKVSSKSSALLLNLLRIIIIIIIIIIIIIIIVVVVVNNNNNNNNNNNNUUUIIIIIWWDDDDDDDDXXXXXEEEEEEEEHHHHHHRRQQQHHHHHHHCCCQQQQQQQQQTTTTRYRRRRRRRSSSSSSPPPPPIIIIIII +SSSSSSSSLLLLLLLRIIIIIIIIIIIIIIIVVVVVVVNVNNNNNNNUUUUIIIIIDDDDDDDDDDDXDXXEEEEEEEESAHHHHRRQQQQQHHHHHHHHHHHQQQQQQTTTTYYYRRRRRRSSSLLLPPPIIIIIIIIW +SSSSSSSSLLLLLLLLIIIIIIIIIIIIIVVVVVVVVVVVNNNNNNNNNUUIIILDDDDDDDDDDDDDDDDEEEEEESSSSQQIFFFFFFFFUHZHHHHHNNHQQTQTTTTTTYYYYRRVLLLLLLLLBIIIIIIIIIIW +WWWSSSSSLLLLLLLLINNIIIIIIIIIVYVVVVVVVVVVNNNNNNNNUUUUUUUBBDVDDGDDDDDEEEDEEEEESSSSSQQQFFFFFFFFQZZZZHHHHNNNTTTTTTTTYYYYYRRLLLLLLLLLBBIIIIIIIIIW +WWSSSSSSSSLLLLLNISNIIIIIIIIIVVVVVVVVVVVVVNNANNNNNUUUUUULLMLDDGGDDDDEEEEEESSSSSSSQQQQFFFFFFFFQQZZHHHNNNNTTTTTTTTHHYSYYYYLLLLLLLLLBIIIIIIIIIII +WWWSSSSSSSSSSSNNNNNNIIIIIVVVVVVVVVVVVVVVAAAANNNNNUUUUUUULLLDDDLLDDDDEEEEESSSSSSSSSQQFFFFFFFFFFFZZZHNNNNTTTTTTTTHYYYYYYYLLLLLLLLLBIIIIIIIIIIX +WWWSSSSSSSSSSSNNNNNIIIIIIVVVVVVVVVVVVVVVAAANNNNTTTUUUUULLLLLLLLNDDDDMEESSSSSSSSSSQQQFFFFFFFFFFFZJJJJNNNNNTTTTFFFFYYYYYYLLLLLLLLLLLBIXIIIIIXX +WZWZSSSSSSSSSSNNNNNNIIIIIVIVVVVVVVVVVVVVAAAAANNTUUUULLLLLLLLLLLLQDLDEEESSSSSSSSSSQQQFFFFFFFFFFFJJJJNNNFFNTTTTFFFFKKYYYYRLLLLLLLLTTTIIHHIIMMX +ZZZZSSSSSSSSNNNNNNNNIIIIIIIIVVVVVVVVVVVVAAAAETTTQUUUULLLLLLLLLLLLWLLEEESSSSSSSSSSQQQFFFFFFFFFFFJJJJJJJFFFFFFFFFFKKKYYYRRRLLLLLTTTTTHHHHIMMMM +ZZZZSSSSSCCCNNNNNNNNNIIIIIIIVIVVVVVVVVAAAAAEETTTQQUUULLLLLLLLLLLLLLLEESSSSSSSSSSSQSQFFFFFFFFFFFFFFFJJWFFFFFFFFFFKKKKYRRRRRLLLLTSTTTTHHHHMMMM +ZZZZSSSCCCCCYNNNNNNNNIIIIIIIIIVVVVVVAAAAAEEEETTQQQUUULLLLLLLLLLLLLLLEEQSSSSSSSSSSSSQFFFFFFFFFFFFFFFJJFFFFFFFFFFKKKKKKRRRRRLLLLTTTUTTTHMMMMMM +ZZKKCCCCCCCCCCNNNNNNIIIIIIIIIIIIRVVVVAAAAAEEEEEEEQUQLLQLLLLSSSSLLQQLQQQSSSSSSSSSSSSCFFFFFFFFFFFFFFFTJTFFFFFFFFPFKKKKKKRRRLLLLLLLTUTTTHHMMMMM +KKKKCCCCCCCCCCNNNNNNIIIIIIIIIIIIIIAAAAAEEEEEEEEEEQQQQQQLLLLLESSSSQQLQQQSSSSSSSSSSSSSFFFFFFFFFFFFFFFTTTTFFFFFFFFFFKKKRRRRRRLLLLLLTTTTTTHHMMMM +UKKKCCCCCCCCCNNRYYIIIIIIIIIIIIIIIIAAAAAEOEEEEEEEEEQQQLLLLLLLESSSQQQQQQQQSSSVSSSSSSSJFFFFFFFFFFFFFFFTTFFFFFFFFFFFKKKKKRRRRRLLLLLLLLTTTTHHMMMM +UKKCCCCCCCCCCCNCYYIIIIIIIIIIIIIIIIAABAAAEEEEEEEEEQQQQQLLLLLLEEQQQQQQQQQQSSVVSSSSSSSSFFFFFFFFFFFFNNNNTNNFFFFFFZKKKKKKKRRRRLLLLLLLLLTTTTHHMMMM +UKKCCCCCCCCCCCCCYYIIIIYYYYYIIIIIAAABBBBEEEEEEEEEQQQQSSLLLESSEQKQQQQQQQQQSVVVVSSSSPPSFFFFFFFFFFFFNNNNANNNFFFFFFKKKKKKKIIRILBULLLLLLTTMMMMMMMM +UKKKCCCCCCCCCCYYYYYIIIYHYYYYYYIAAAABBBBBEEEEEEQQQQQQSSSSSSSSEQQQQQQQQQQQQQVVQPPPPPSSSYFFFFFFFFFFNNNNNNNNNNFFFFKKKKKKKIIIIIUUUULUTTTTTTMMMMMM +UUKKKCCCCCCCCYYYYYYIYIIHHHYAAAIAAAABBBBBBEEEEEEESSSSSSSSLLSSQQQQQQQQQQQQQQQQQPPPPPSYYYYJFFFFFFFFNNNNNNNGNMMMFFKKKKKKIIIIIIUUUUUUUTTTTMMMMMMM +UKKCCCCPCCCSSYYYYYYYYYYHHFAACAAAAAAABBBBBEEEDDSSSSSSSSSSLSSSHVQQQQQQQQQQQQQQQQQPPPYYYYEEEEEJJJJNENENNNNNNMMMMFKKKKKKIIIIUUUUUUUUUTUTMMMMGMMM +UKKKKKCCCCCYYYYYYYYYYYYHHHAAAAAAABBBBBBBBEEBSSSSSSSSSSSSSSSHHVQQQQQQQQQQQQQQQQQPPPYYYYYEEEEEEEEEENENNNNNNMMMMMKKKKKKIEEIIUUUUUUUUUUUDMMMGMMZ +UKKKKKKKCCCAAAYYYYYYYYYHHHTAAAAAAAABBBBBBBBBBBBSSSSSSSSSSSSVVVQQQQQQQQQQQQQQQXXPPYYYYYYHEEEEEMEEEEEENNNNNMMMMKKKKKIIIEEEEUUUUUUUUUUUMMMMMMMZ +KKKKKKKKTTCCCYYYYYYYYYHHHAAAAAAAAAJJBBBBBBBBBBBBSSSSSSSSSSSSVVQQQQQQQQQQQMQDQXXPYYYYYYEEEEEEEEEEEEEENNNNMMMMMMMMKKEIEEEEEEEPUUUUUMMMMMMMMZZZ +KKKKKKKTTTMMKBYYYYYYYYHHHHHAAAAAAAJJBBBBBBBBBBSSSSSSSSSSSSSVVVVVQQQWQQQQMMXDQXXPYYYYYYYYEEEEEEEEEEEENNMMMMMMMMMKKKEEEEEEEEEEUUZUIMMMMMMMMZZZ +KKKKKKTTTTTMKKYYYYHHHHHHHHHUAAAAAAJJBBBBBWWBBSSSSSSSSSSSSSVVVVVVQTQWQMMMMMXXQXXXXYYYYYEEEEEEEEEEEEEENNNNMMMMMMMKRKEEEEEEEEEEUZZZMMMMZMMMZZZZ +KKTTTTTTTTTTKKYYKKKKKHBHHHHZLAAAAAAJJBBBNWWWRWWSSSSSSSSVVVVVVVVVVVVVQMMMMXXXXXXXPXXYYYYYEEEEEEEEEEENNNNNMWMMMMSSRRREEEEEEEEZZZZZZMMMZMMMMZZZ +KKTTTTTTTTTTKKKKKTKKKHBHHNZZLLLAAAJJJJBJWWIWWWWWSSSSSSSVVVVVVVVVVVVMMMMMMXXXXXXXXXXXYYYYEEEEEEEEEEEEEWWWMWWMMMSSRSSSEEEEEEEEZZZZZZMZZZMZZZZZ +TTTTTTTTTTTTJTTTTTTKKKKHHHZZZZLAAAAAAJJJJWWWWMMMMSSSSSVVVVVVVVVVVVVMMMMXXXXXXXXXXXXXYYYYYYEEEEEEEOWWNWWWWWWWWMSSSSSQESEEEEEEZZZZZZZZZZZZZZII +TTTTTTTTTTTTTTTTTTTKKKKKHHZZZAAAAAAJJJJJWWWWWMMMMSSSSSSVVVVVVVVVVVVVMMMMXXXXXXXXXXXXYYYYYIIIIEIHEOWWWWWWWWWMMMSSSSSSSSSEEEEEYYZZZZZZZZZZZIII +TTTTTTTTTTTTLTTTTTTKKKKKKKKKAAAAAAAAAJJJJJWWWMMMMSSSSSSSVVVVVVVVVVVVVMMXXXXXXXXXXXXXXYYYIIIIIIIWWWWWWWWWWWWMMMSSSSSSSSSEEEDEYYYYZZZIIIIIZIII +TTTTTTTTTTTTTTTTTTTKKKKKKKKAAAAAAAAAJJJJWWWWWMMMMSSSVSSVVVVVVVNVVNNNVMMXXXXXXXXXCXYXXYYIIIIIIIIIWWWWWWWWWWWWMMMSSSSSSSSEEYDYYZZZZZIIIIIIIIII +TTTTTTTTTTTTTTTTTTTTTKKKKKKAAAAAAAAAWWWWWWWWWMMMMCVVVVVVVVVVVNNNNNNNXNNXXXXXXXXXYYYYYYYIIIIIIIIIGWWWWWWWWWWWMMSSSSSSSSSYYYYYYKKZZIIIIIIIIIII +TTTTTTTTTTTTTTTTTTTTTKKKKKKKKAAAAAAAWWWWWWWWWMMMMCVVVTVVVVVVVNNNNNNNNNNKKXXXXXXXYYYYYYIIIIIIIIIIWWWWWWWWWWWWSSSSSSSSSSSZZYYYYYYZJIIIIIIIIIII +TTTTTTTTJTTTTTTTTTTTTTYKKKKKKAAAAAAAWWWWWWWWWMMMMWVVVTVVVNVVNNNNNNNNNNNNKXXXXXYYYYYYYYYYIIIIIIIIWWWWWWWWWWWWSSBSSSSSSZSZZZYZYYZZIIIIIIIIIIII +ZTZTTTTTTTTYYTTTTTTTAAYKKKKKKAAAAAAWWWWWWWWWWMMMMMMMMMMMMMVVNNNNNNNNNNKKKXXXKKYYYYYYYYYIIIIIIIIIIIWWWWWWWWWWSASSSSQSZZZZZZYZYZZZZIIIIIIIIIII +ZTZTTTAYYYYYYTTTTTTTTYYYYTTAAAAAAAAWWWWWWWWWWMMMMMMMMMMMMMNNNNNNNNNNNNNKKKKKKKKYYYYYYYYKIIIIIIIIIIWWWWWWWWNWAASSSSSSZZZZZZYZZZZZZIIIIDIIIIII +ZZZZTHAAAYYAYYTTTTTTTTYYYYYUUAAAAAAUWWWWWWWWWMMMMMMMMMMMMMNNNNNNNNNNNNNKKKKKKKKYYYYYYYKKKIIIIIIIIIWWWWWGNNNNNNSQSSZZZZZZZZZZZZZZZZIIDDIIIIII +ZZZZZZAAAAYAYYYYTTTTTTYYUUUUUUAUUUUUWWWWWWWWWMMMMMMMMMMMMMNNCNNNNNNNNKKKKKIIIKIIIYYYYYYYKIIIIIIIIWWWWWWWNNNNNNPPSSPPZZZZZZZZZZZZZZZDDDIIIIII +ZZZZZAAAAAAAAAYTTTTTYYYYYUUUUUAUUUDUWWWWWDWWWMMMMMMMMMMMMMNNNNNNNNNNNKKKKIIIIIIIIIRYYYYKKIIIIIIIINWUWIWNNNNNNNNPPPPPZZZZZZZZZZZZZZDDDDDIIIII +ZZZZZAAAAAAAAAAANTTTTYYYYYUUUUUUUDNNNNDDDDWWDMMMMMMMMMMMMMTTNNNNNNNNNKKKKIIIIIIIIIIIYYKKKKIIIIIINNNNIIIINNNNNNPPPPPPPPZZZZZZZZZZZZDDDDDDIIII +ZZZZZAAAAAAAAAAAAJJTTYYYYUUUUUUUAAAAAAAAADDDDMMMMMMMMMMMMMTTNXXXNNNNRKKKKKIIIIIIIIIIJYYKKKKIIIINNNNNXXXIINNJJNPPPPPPPZZZZZZZZZZZZDDDDDDDDIII +ZZZZZAAAAAAAAAAAAYYYYYYYYUYYUUUUAAAAAAAAAAADDMMMMMTTTTTTTTTMMXXXXNNNRRKKRROIIIIIIIBBYYYKGKIIIINNNNNNXXXXNNJJJNPPPPPPPZZZZZZZZZZZDDDDDDDDDDII +ZZZZZAAAAAAAAAAAAAYYYYYYYYYYUUULAAAAAAAAAAADRMMMMMMTTXXTXTTTPPXVVNNNRRRKRIIIIIIIIIBGGGGGGKIIIBNNNNNXXXXXXNNJXNPPPPPPPPPPPPSSZSSZSDDDDDDDDDII +ZZZZZAAAAAAAAAAAAAAAYYYYYYYLLLLLUDNNNNNAAAADURRRRMMTTTXXXTMTBPPPPPRRRRRRRRIIIIIIIIBGGGGGKKKIIBBNNNXXXXXXXXXXXPPPPPPPPPPPSYSSSSSSSUDSDSDDIIII +ZZZZAAAAAAAAAAAAAAAAYYYYYYYYLLLLLDNNNNNAAAADURRRRRMTTXXXTTTPPPPPPPVRRRRRRRRLIIIIIIIGGGGGKKNYIBBNNNNEXXXXXXXXXPPPPPPPPPPSSSSSSSSSSUDSSSIIIIII +ZZZZZAAAAAAAAAAAAAAXYYYYYYYYYLNNNNNNNNNAAAARRRRRRRRRXXXXXTTPPPPPPRRRRRRRRRRLLIIIIIIGGGGKKNNYNNNLNNNXXXXXXXXXXPPPPPPPPPPPPSSSSSSZZZZZIIIIIIII +ZZZZZAAAAAAAAAABBBAXYYYYYYYYLLNNNNNNNNNAAAAAAARRRRRRRXXXXPPPPPPPPRRRRRRRRRRLLIIIINIGGGSKSXNNNNNNNKKXXXXXXXXXXPPPPPPPPPPPKSSSSSSZZZZZZIIIIIII +ZZZZZZZZEAAAABBBBYYYYYYYYYYLLLNNNNNNNNNAAAAAAARRRRRXXXXXXXPPPPPPPRRRRRLMRRLLLLLIINNGGSSSSSNNNNNNKKKXXXXXXXXXXPPPPPPPPPPSKSSSSSSZZZHHHLIIZIIU +ZZZZZZZZEEEEAABBYYYYYYYYYLLLLLNNNNNNNNNAAAAAAARRRRRXXXXXXXXPPPPPPRRRRRLLLLLLLLLLLLLLLLSSSANNNNNNNKKXXXXXXXXXPPPPPPPPPPPSSSSSSSSZZHHHHHHIHHIH +ZZZZZZZEEEEEEBBBYYYYYYYYYLLYRLNNNNNNNNJAAAAAAARRXXRXXXXXXXXXPPPPPRRRRRRRLLLLLLLLLLLLOSSSSANNNNKKKKKKKKXXXXXPPPQQPPPPPIISSSISSSSSZHHHHHHHHHHH +ZZZZZZEEEEEEGGBBYYYYYYYYYYYYRRNNNNNNAAAAAAAAAAXXXXXXXXXXXXXXXXPPPPRRRRRRRLLLLLLLLLLLLRRNNNNNNNNKKKKKKXXXXKKPPPQQQPPPPIIIIWISSBSSSSSHHHHHHHHH +ZZZZZZEEEEEEGYYYYYYYYYYYYYYYRRNNNNNNAAAAAAAJRXXXXXXXXXXXXXXXXXPPPRRRRRLRRLLLLLLLLLLLLLLKNNNNNNNNKKKKKKKKXKPPPQQQQQQQPIIIIIIIIBSSSHHHHHHHHHHH +ZZZEEEIEEEGGGGGYYYYYYYYYYYYYRYYRRJJJAAAAAAAWXXXXXXXXXXXXXXXXXXXPPRRRRRLLRLLLLLLLLLLLLLKKNNNNNNNNKKKKKKKKKKKQQLQQQQQQPIIIIIIIIBBBSHHHHHHHHHHH +ZZZZZEEEEEGGGGGYYYYYYYKKKKYYYYYRRRJJAAAAAAAAAAXXXXXXXXXXXXXXXXJPRRRRROOLLLLLLLLLLLLLKKKKKNNSNNKKKKKKKKKKKEEQQQQQQQQQQIIIIIIIIIIIIHHHHHHHHHHH +ZZZZZEEEEEZZGGGGYGYYYYKKKKKKKKRRRRJJAAAAAAAAAAQNNXXXXXXXXXXXBXJPBRRROOOOOQQQQLLLLLLKKKKKKNNNNNKKKKKKKEEEKEEEQQQQQQQQQIIIIIIIIIIIIIIHHHHHHHHH +ZZZZZZZEZZZZZZGGGGGGGYKKKKKKKRRRRJJJJJJJAAAAAAQNNXXXXXXXXXXXBBBBBBBOOOOOOOOQLLLLLLQKKKKKKKKKKKKKKKKKKKEEEEEEQEQQQQQIIIIIIIIIIIIIIIHHHHHHHHHH +ZNZZZZZZZZZZZZZGGGGGGKKNKKKKKKRRRRJNNNNNAAAAAANNNNXXXXXXXBXBBBBBBBAOOOOOOOOQLLLLLQQQKKKKKKKKBKKKKBKKKEEEEEEEEEEQQQQIIIIIIIIIIIIIIIHHHHHHHHHH +NNZZZZZZZZZZZZZZGGGGKKKKKKKKKKKKNNNNNNNNAAAAAANNNNSSSSSBXBBBBBBBBBOOOOOOOQQQQQLLQQQQQKKBKKKBBBBBBBBKEEEEEEEEEEEQQQQIIIIIIIIIIIIIDIHHHHHHHHHH +NNNNZZZZZZZZZZZZGGGGKKKKKKKKKKKNNNNNNNNNNNNNNNNNNNSSSSBBBBBBBBBBBBOOOOOOOQQQQQQQQQQQQKKBKKKBBBBBBBBBMEEEEEEEEEEQQQQIIIIIIIIIIIIIDHHHHHHHHHHQ +NNNNZZZZZZZZZGGGGGGGKKKKKKKKKKKNNNNNNNNNNNNNNNNNNNSSSSBBBBBBBBBBBBIOOOOOOOQQQQQQQQQQKKKBBBBBBBBBBLBEEEEEEEEEEEEQQQQIIIIIIIIIIIIIDHHHHHHHHHHH +NNNNNNNNZZZZZGGGGGKKKKKKKKKKKKKNNNNNNNNNNNNNNNNNNXSSSSBBBBBBBBBBBBIOOOOOOOOOQQQQQQQQQBBBBBBBBBBBBEEEEEEEEEEDEQQQPQQFSSIIIIIIISIIDDHHHHEHHHDD +NNNNNNNNNZZZGGGGGGGKGKQKKKKKKKXNNNNNNNNNNNNNNNRNSXSSSBBBBBBBBBBBBBIIIIIOOOLQQQQQQQQQOBBBBBBBBBBBBEEEEEEEEEEDEFQQPQFFSSIIIIIISSSSDDDHHEHHHHDD +NNNNNNNNNZNNGGGGGGGGGKKKKKKKKXXNNNNNNNNNNNNNNNSSSXXSSSBBSBBBBBBBBBBBBIIOOOQQQQQQQQQQQBBBBBBBBBBBBBEEEEEEDDDDFFQQQFFFSSSSSSSIISSSSSDDDHHHDHDD +QNNNNNNNNNNGGGGGGGGGGKGGKKKKKKXXNNNNNNNNNNNNSSSSSXSZSSZBBBBBBBBBBBBBBIIIOIQQQQQQQQQQKBBBBBBBBBBBBBBDDEEDDDDDFQQFFFSSSSSSSSSSSSSSSSDDDDDDDDDD +NNNNNNNNNNNNNGGGGGGGGGGGKKIKKXXXXNNNNNNNSNSSSSSSSSSZSZZZZZBBBBBBBBBBBBIIOIIIQQQQQQABBBBBBBBBBBBBBBBBDDEEDDDFFFFFFFSFSSSSSSSSSSSSSDDDDDDDDDDD +NNNNNNNNNPNGGGGGGGGGGGGGGKKXXXXXXNNNNSSSSSSSSSSSSSSZZZZZZZBBBBBBBBBBBIIIIIQQQQQQQQQBBBBBBBBBBBBBBBDDDDDDDDDFFFFFFFFFSSSSSSSSSSSSDDDDDDDDDDDD \ No newline at end of file