diff --git a/AdventOfCode/AdventOfCode.csproj b/AdventOfCode/AdventOfCode.csproj
index a308fbc..e8d85e4 100644
--- a/AdventOfCode/AdventOfCode.csproj
+++ b/AdventOfCode/AdventOfCode.csproj
@@ -43,6 +43,9 @@
+
+
+
diff --git a/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs b/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs
new file mode 100644
index 0000000..11d77e1
--- /dev/null
+++ b/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs
@@ -0,0 +1,136 @@
+using AdventOfCode.Runner.Attributes;
+
+namespace AdventOfCode.Problems.AOC2023.Day3;
+
+[ProblemInfo(2023, 3, "Gear Ratios")]
+internal class GearRatios : Problem
+{
+ private string[] _data = [];
+ private int _width;
+ private int _height;
+
+ public override void LoadInput()
+ {
+ _data = ReadInputLines();
+ _width = _data[0].Length - 1;
+ _height = _data.Length - 1;
+ }
+
+ public override void CalculatePart1()
+ {
+ var partNumbers = new List();
+
+ for (int y = 0; y < _height; y++)
+ {
+ for (int x = 0; x <= _width; x++)
+ {
+ var cell = _data[y][x];
+ switch (cell - '0')
+ {
+ case '.' - '0':
+ continue;
+ case < 0 or > 9:
+ FindNumbers(x, y, ref partNumbers);
+ break;
+ }
+ }
+ }
+ Part1 = partNumbers.Sum();
+ }
+
+ public void FindNumbers(int x, int y, ref List results)
+ {
+ var seen = new HashSet<(int x, int y)>();
+
+ var n = GetNeighborPoints(x, y);
+ foreach (var (xN, yN) in n)
+ {
+ var c = _data[yN][xN] - '0';
+ if (c >= 0)
+ {
+ var num = GetNumber(xN, yN, out var idx);
+
+ if (seen.Contains(idx))
+ continue;
+ seen.Add(idx);
+ results.Add(num);
+ }
+ }
+ }
+
+ public int GetNumber(int x, int y, out (int iX, int iY) index)
+ {
+ var row = _data[y];
+
+ var numStart = 0;
+ var numEnd = _width + 1;
+ for (int i = x; i >= 0; i--)
+ {
+ switch (row[i] - '0')
+ {
+ case < 0 or > 9:
+ numStart = i + 1;
+ goto leftDone;
+ }
+ }
+ leftDone:
+ for (int i = x; i <= _width; i++)
+ {
+ switch (row[i] - '0')
+ {
+ case < 0 or > 9:
+ numEnd = i;
+ goto done;
+ }
+ }
+ done:
+ index = (numStart, y);
+ return int.Parse(row[numStart..numEnd]);
+ }
+
+ public List<(int x, int y)> GetNeighborPoints(int x, int y)
+ {
+ var points = new List<(int x, int y)>();
+ if (x > 0)
+ points.Add((x - 1, y));
+ if (x < _width)
+ points.Add((x + 1, y));
+ if (y > 0)
+ points.Add((x, y - 1));
+ if (y < _height)
+ points.Add((x, y + 1));
+ if (x > 0 && y > 0)
+ points.Add((x - 1, y - 1));
+ if (x > 0 && y < _height)
+ points.Add((x - 1, y + 1));
+ if (x < _width && y < _height)
+ points.Add((x + 1, y + 1));
+ if (x < _width && y > 0)
+ points.Add((x + 1, y - 1));
+
+ return points;
+ }
+
+ public override void CalculatePart2()
+ {
+ var ratios = new List();
+ var curNums = new List();
+ for (int y = 0; y < _height; y++)
+ {
+ for (int x = 0; x <= _width; x++)
+ {
+ var cell = _data[y][x];
+ switch (cell)
+ {
+ case '*':
+ curNums.Clear();
+ FindNumbers(x, y, ref curNums);
+ if(curNums.Count == 2)
+ ratios.Add(curNums[0] * curNums[1]);
+ break;
+ }
+ }
+ }
+ Part2 = ratios.Sum();
+ }
+}
\ No newline at end of file
diff --git a/AdventOfCode/Problems/AOC2023/Day3/input.txt b/AdventOfCode/Problems/AOC2023/Day3/input.txt
new file mode 100644
index 0000000..75a5208
--- /dev/null
+++ b/AdventOfCode/Problems/AOC2023/Day3/input.txt
@@ -0,0 +1,140 @@
+.242......276....234............682.......................958..695..742................714......574..............833.........159....297.686.
+.............*............................612*......304..*..........*.......@175...#...*...........*890...........*.............*..*........
+..........346......................997........923......*..253..........698........122.746.....-832..........766.432..229.....674....415.....
+...............#76...........332....*...............111...........785..............................=..720..*........*.......................
+........204............396..*.....357..438*694...............154.................................26...*....422...200.../201.................
+....859*......496.598.+....810........................816.......*713...........802#.........330......540...........................%344.....
+..............*.....*..........344.......................*.............671............994.................467...............................
+........$..388.........152*141..*......73.719...$526....830...759......%......943............541.624.781...*...$150.............966.........
+.....877.......................67.....*.....*.............................859..*..502+........$..*.....*.425........778.../........*........
+................142.....569..........563...57......786..........303.......*...255.......*638....979..704...........*.......181..............
+...........560.....%....+......................276...=..................939..........194.........................675..............741.......
+......681...*..................882..714................741......650.........&.................374...542/..........................*.........
+344*.....%.340......$.....%......=.....*.....799...990...*.........*733..811.....................-...............8........844...660.........
+....937.........301.227.775.24+....=.146..../.....*.......983...+.....................*822.898&.................*.....611*..............693.
+...........&.....................328............254..582.......528...359&..........536..........*889........%...........................#...
+..901.497.9.........473................193...........*....................168...........................382.450..@..........................
+..............................279..612..*..........795.......431......$............104....................*.......988....................920
+............614....478..430+....*..../...505...363...................195....642....-............493....852...612.........556................
+.............*................570....................961.....................=........178...23.$..................667...........=....415....
+...323*795....363.................414%.........$....@..................54.........680*.....*.....415.......34..........598.......74.........
+..................904.124....766.........-..546....................-........100........167.424..*.........%.........83*................*....
+..906@.+.....-......&..........*..951.342.......208...........887...711....*...........*........627...............................=597..478.
+.......323.187..+.............192...@......367.*.....107.........$......715.....923....103...........*991.....+....749..146.................
+.................170.....511...........-................*...........943.....95..............................215.........*.....126...........
+..166................809..*.........590...733.896.....575.333.......*......*...229...122.........................%.......860..-...315.......
+.....*856....4.....%.-...826.174............&...*............*..851..655...692..*......*....*................346..659.......................
+.............+...77............&.541$...........227.......329.....*............483..463...551....38......527.*...............168.....665@...
+....915..635.........960...209........710.....................538..449..........................*.........*..586......574...................
+..../.../.....61............*...........*...489..........510..@...........#.........254....52.411........894......932..*...206.121....=911..
+..................900..525.450.591...#..178.+..............%......125...433...362..*.......*.......................*..111.....*.............
+.........736*134...*....*..........720..........#...................*.........&.....197..450......................252...........=516........
+...................638.314.....................510.........*..475....629...............................................930..................
+...........................926......../....*.......776....798../................/..............982..............437.....@.....937...........
+....502-........-595..........*.....439.282.965...............................+..853..884.419..+......244*873....*........#....*.......309..
+...............................257..............937...413.199...@195..../....248.....+.....*..................100..585.....791..959.........
+...............*912.......410......@...........*.........*.............4....................321....................*........................
+......653..................*.......817..#511.131..=785.........468/......128........#144..............*170...559..146..........625/..976....
+......&..................997..............................711..............*.................792...450......$..............12..........#....
+..................412.....................33...............*................672...=........3...*.7.................739.567...........#......
+......................569#.#.......850....*......381........621.253+...............355....*..942../........371.....*....*....285*118.754....
+.....-......................899............327...*.....................+........*......575..........*892........618......511................
+...91............................958-..........532..................914......925.............=.457&..........#......948*..........27.....382
+...................771......857.......-..................79...............................156.........938....389........353...502*..........
+..............................*.......847...............*....238....................161..............*.............*................164.660.
+..995..........872.....690.....888...........69..=123..353......*..621..736*........+...87...887....518...........590...429....*254...&.*...
+....*.584.631.......$....................980.*...............569......*.....14..........*.....*...............399..........*.............199
+..446..-..%.........200.933...385*.........*..150..........=..........169........374#.322......806...........+.....*........553.............
+............@66.........*.........559...580.................120..147-..............................757..............933............644......
+.....................641...943................143..634.648................-...288...................*.............+.........%....$...*......
+..........273.............-...............430....&......@.........*.......876./........826..........67.......801.86......121.....210........
+...842....=...................599*17..182*.....@...................902.............980*........................@.............826............
+....*.......238................................769.....-.......................124......763...........98.491.....420....@901.*.........84...
+...564.......&...........296........................503...591..967......162...=.........*...238..386........#.........#......629.26.........
+...................423......*723........559$...................*..................849...342........./...............521............@........
+..833*.....3*974..+..............718..........884.#.............503..........284.....*.........223......................................*...
+......................532....=.....*..........*....255.............................287..................31...........*....757%.977.......753
+640.....846...............252.....351.....372.258......................................871.........@33..*..149....624..........*.....537....
+...=.........495.....846..............526*..............622....*899.....870......81......%...&.........786...............891...668..........
+................*......*.....................+.........*....211.....498....*......-.654....368.....................916.................698..
+986......629....115..749.........=....925.858..........233............*.151....78......@.......593..684........916...@......................
+.........&....@................@.500.%.........681..+.........431...488..........*932....291=.#.......*........*.........782....$799........
+.....131.....319.944.........577...............*.....777.....................448................614..901..287..722.....&...*................
+....*....157.......*........................966...........442#....472..925...#...359..519......*.........*............937.39..........%639..
+..388......*..266..703...........................................*........@.........*....*......109....424......672...............601.......
+...........89...=.................911...949.....#.............487....61.......*491.822.113.................250........*34............*9.....
+..15...............345....703..%....*...-....673....239...191........*........................26.130.......*........20........393...........
+....*991..%..........*.......*..453.70...............#.....-..597.491...328.....122..........*..........492....701......508....*..274.......
+...........838........893...............53..658.865........................#....*.....-....570........$...........&........*........./...486
+................438.............71.............*.....854..+..107*647...200......575...932...........573....606...........850................
+................../.........838...*674..............#....69.............*......................534.........*..................235*..........
+.....877*8............184...*.................................*.........191...........*707........*...198..363......305.*338......392..657..
+.................98...=....953...362......148...335.........781.............484....608............207.*..............*......................
+................................*........*........@...............584@......%................418.......675.......520..260.............639...
+41.$....952....133@.999......953..*.....64...792.................................$....111.......*...................*.................*.....
+...572....*.........+............18............+.494..694.......+.....93.......443....#......861..................304...696....+487...89....
+...........3............................................+.....461.868...*........................596...#.710..793.......%...................
+................362.................%684.........716...................420...............53......*...706.......*../.......@142......*.......
+........@...696...*......489....434...............*........................670.......187*......992...........730.48..............443.986....
+.......904.....*.260....%..........#.139.....850..592..187.....137..987.......=.195................366..%.............596.427/..............
+............284.............*141...../...739...............131......*...........@..........510......*..112...-........*.....................
+......192................313.......*........*.......43*......*.....309......557......669.....+.....386.......765.....567......758.287.......
+..139...........................535.848..#..519........277....778..........*.........*...................526...................*......968...
+.....*....-........664..45..............426..........................603.560..&558...909...................%....934......392.395............
+......755..928......-......197....126..................227.......689.+....................170.....@805.............*122.....................
+..........................*.........*........909.......*...........*............263..475......201......193..................689..799.../2...
+...407..977.........918%...109...332.........*.......910.........730...170.........*....*428....*.....$........185..637......&..............
+...../...$....713....................501......842.........258............*.........872.......822..879....*626....*....*........255.......229
+................*.....633*631.....=....*..................................722.....................*...736........339.171..........-..279....
+...531*393......714............828......384.830.....90..............................683.........647............&...........820@.......*.....
+...........3...........965.........153........*.....................552.-.....709....*......413..........503....831.............289....138..
+..........*...906......*......................34..692.........941..+....205.....@..73..........*................................+...........
+.........830./........473..388.648........563....*..............*.....................589.....345.....276..........=.471.931........854.....
+135*315..........-604.........*....$.......&......134...=....565.......65.............../.............+.........866....=.%.....908.....*....
+....................................446......751.........437.....@.......*.140.....495....607#..783........625.............734*.......758...
+...........141......915.....................*.....*...............137.664....&..29.+............/.....113#.*......118.290........715........
+..614.396...........*......................459.....368..........................*...........352.............254..*....*............@...168..
+.....*............746....859..........650........%.....735....../....../198......619..718......-..................147.909..826.......*......
+.........79.............*.............=..........808...*........306.....................@.618......659..3...................*.....852.714...
+...157....*.901...957...422...369.......................236.............289........893.......*..............184*399..........958............
+...*........*.......................370.../....................2.990.62..../..........*......992...91.................816...................
+...419..731..546..868*10..726........*..13..@........................./.........326.94..829.......%.............@...................354.....
+..........*....................868..377.....319.....122=.787................463.........*...*.311...384..........418....774........*........
+..........762.#...&906........*..........................*........464.....*....*.....242..324.+...........444..............*..821.128.......
+..............918..........375.........%825....&.........27...227*.........711.239.........................*..............838.-........496..
+....783............................$...........661.....&.............................839.................508.........%......................
+.....*.....106........138....50.....237..............776...&............................*..&825......337......*...550.......337..587#.......
+..878.....*....391...=........*.733.......................32....353+..................265.......944..*...516..635...........*.........761...
+........212................716................444=...........*.......73....469............=..#.$....823..@...............105................
+...................68..=.............626...............@...88.531..............981......139.37.....................................522......
+.........898.......*..255........969*.......593*886....222.........860.497*168....*.150..................................586..........*.....
+............*177..58......681...........928..................131.....*..........560..#............................536......*...........860..
+..613......................*....-.......#.....363........701....*.116...565.....................-348....874...953..$..671..748..............
+......................$..408.....139.........*.............*............=..............615............*....+..*..........*............41....
+.....710..343....@...391.............$.....181..778........795..........................*.............201......875.....22...............*...
+629...*..*......769........482.....511.........*......699..........366...%510........518....101...424.......................................
+....374...875.........804...*...................395......*.........*.............162.......*.........*..........959............298$.........
+..............74.834.........345.....=..540.248.........401....977..454.695.....*....................17........*......536...@...............
+......807.......*........780.........54....*....................*........*...294...720...14&.................245........%....773......960...
+.........$..132..........*.......652..........$....907.....@.344....848=.397..........*......747............................................
+....541*....&...*.....663...146...........364..611....*.440.....................455.336.209.......751....539................................
+........408.....377...........*..............*......541.........&.......988*150...*.......-........=....*.........#...../..39..306+.........
+...%325..................*49...37.............922........344#...717.............179.400...............617.874...943...232...................
+...........424........569............865.............978...................978......-......+....23=..........*..............................
+..........=....................782..*.........755........41......823.......@...............427............484.......-.....310.......401.....
+...........................&..*....704....168*......264.............@...............240*...........................190................*..384
+617*.........710.....28.492..425............................-....4......=...757*283.....674....467....680......775.............$.....826....
+....975.....+........*...........100..........795..........67..........91...........946...........................*......138...390..........
+..........*.........808.............*474.....+.....141.........156.....................*..........194...........273.473..*...@.....86..+....
+.......589.919..........452.....842.......*.......*....472........*..................765...........*........$.........$..79.644.........905.
+................452.....%.........*....223........121.*............816.-949..837..............-830...818.451.....703........................
+.527..934.625.....*..........461...........842-.......455.....................@...866..97...........*..............$..819...............*919
+................472.........*..........930............................208.........*...&.........767.563....%..../......*..422...............
+.......%.389..............993..325.650..............344...*................651.379..............+.......516......607.142..+....284%.........
+....575.............498...........*.....760...+.........47.385....#.91......*...........957.......@.........................................
+.............588....*......./389.........*..839................567..*.....607..............*......377..460=...............260......491.282..
+.....137.........340................961.................383*.......295........................506...........*.....................*....*....
+......../..670..............52.....*.......802..950.........207..........334..377.625.....871...*........622..160.130..#.....295.30...216...
+.............*............=.*.......34.941.=.......*............&.12......*....*...........*...20..356...........*......804.*...............
+..........335..........562...258........*..........761.......758...*.....................602................................955........512..
+.........................................882........................730..........................566..............................202.......
\ No newline at end of file
diff --git a/AdventOfCode/Problems/AOC2023/Day3/sample.txt b/AdventOfCode/Problems/AOC2023/Day3/sample.txt
new file mode 100644
index 0000000..624ea4f
--- /dev/null
+++ b/AdventOfCode/Problems/AOC2023/Day3/sample.txt
@@ -0,0 +1,10 @@
+467..114..
+...*......
+..35..633.
+......#...
+617*......
+.....+.58.
+..592.....
+......755.
+...$.*....
+.664.598..
\ No newline at end of file
diff --git a/AdventOfCode/Problems/AOC2023/Day3/sara.txt b/AdventOfCode/Problems/AOC2023/Day3/sara.txt
new file mode 100644
index 0000000..9f8e0bf
--- /dev/null
+++ b/AdventOfCode/Problems/AOC2023/Day3/sara.txt
@@ -0,0 +1,140 @@
+........................................................862...........20.............453...619......58........694...312.................292.
+...846................132.49........308..........................=............50.....*..............*........+.....+...............59.......
+........../46....140.......*............735......852&..706.....860...............297.459..........998................661..418.883.......+...
+....*...............*....727......613..#.....517..........-........*..............*.......................888.......*......*...*.........982
+.828.865....395......163......................*......381............312....34...533..............................291.....440.488..370.......
+.................+............122.....598*....400....+......................+.=.......451........746*...............................*.......
+......864......279........203....*731.....335.....41....23..365.&.......659...817.......*.............89.931......672....661*92....72.......
+943.....%..................*....................../..............455.....*...........155................*............*......................
+........................966.......823.................%702..881........874...494..........................364+..$.......#587....&....157....
+.......701.621......................%........%....93...........*................*.........*.&273.................497............814.........
+.........*..+............201.863-.........113...-.+...*363....900.............111......586.......289........898.......306....*..............
+...*...894.....&...754...*........#803........609...80...............52....................246..=.............#....../....118..........633..
+...321.......642...*...764...644/......980..............$726.........*...306........787...*...................................550...........
+.......666........902..............946*..........230...........45.245.......%...481*.......203......433......+.........294...%..............
+..........*862..........261...184..........744...*...................................................*........782........&...........984....
+....992*........678&.....$.....*..................229......60..........239.........*437...*...681....809......................541#...&......
+........812.................704........+......*.......33.......434....*...................840...*..................@300...../...........257.
+.37..................-.17.......26..793.....71.486...............*..240........261.............605........*..............953................
+...............65.724....*..6....*......446.........#854.318...86................*........+922.........546.762.......................137....
+........279....*........382...925............*323........................364.....616.&.........................597.......-419..985*...*.....
+..........@.370....................735+...597......@....*966.........................699.874/............446...%............................
+..................798.........%..................711.........905........*694.........................700*............................492....
+......706............+...%....536.$417................913$......@.....39.......+.......................................-................*...
+......*........77.......975..................876..........................-954..443.804....&......36*..............51.369..247..........244.
+..787.639......../.................$........./.........49..482.........*............/......952.......365....$.......*......*................
+....................................377....$.......603*...........&.....540.......$......................369..215.276.....397.856......-....
+...........&.........959...81............370..958..............768..............41..853......................*..................*.473..737..
+...802$...560...........*...*....................*......286................/596.....#............+..........490...............411...........
+..............817.791...101..727.....404.689....606.......*.718.+...233...........=.......59..202..&...............61..................420..
+.....+..730...%.........................*............328@.......90....*..........460......-.......155........913..*...881...................
+....928.............285....142......../............................819......755..........................609*.....927.*.....................
+..........408..816...*......*.........539..850..21.....&...699.............+......#....952..&844.....88................952..................
+......................409...539..674.............=.....337...*....59...........+..698./..............*.....67....930.....................185
+......775/....726+.................+..259...141*............471...%..........172.....................185.....*.............670...411....*...
+...............................=.......*........246.................447....................554...951........201...723...67.#....*......914..
+....................482...../...777.78.507..................$..................918............%...@.../..........&...........688............
+.457............40..*....564........$..................29...199..%537.............*....................489.....*........730.................
+.......220..239....16........269..........220....#782......................592....857.......................435.343.....%...............913.
+.............*.................$...487....$..............183=.........481...-..........118..........419....................286......163.*...
+.........../..752.....................*...............#...........933....*.........10.....*........*......................*....735..*....315
+.........958.........934.............882............51....512....*....769....$.......$...533.....264............$...6....720.........550....
+..408...........366...$......................132.........=.....794........615...........................297...60....*.......................
+....$.........6...*........&.....292.....&.................%..........106........889.......@..............@.........468.......$...239.......
+.......314.........831.130..48......+.655.....757..976......594...924*......932....*....99..759.2.............750.*..........236.....*251...
+..451....*................*......................*....*..........................274....*.................868*.....939......................
+....*..477....580..........739...743..346..802#...91...531......739*661..................925..........#................894.55...995.........
+.178.........@..........90........*.....*....................................139.....855.............583..#....377........*....../..........
+........588.............*...65...261....28..10.............22....697+.812.....*.........&..141.............342.*....710.....................
+.......*..............255......*............*.....@155..................@..254......#........*.................516................777.......
+......876......364..............453.......745...................216..............187...&..686..............782............936...............
+...........579....*...#.......................736................*...@..................9.........797..809....*...........=.....983.....*448
+............../.700.152....587..........444...&...375%.744#....21.....140.......=.........576........*..*.....420..............*.....399....
+........822...............*............./...................#.....377........657....$.856..*...811.658............111..+.....718............
+...689...*..............764....................758..........40...*................632.*...574.....................*...850.........626.......
+........112.......................833.........*.......&........456.345..707.....*.....35......96..*.............891.......@218.....#........
+................714............................850.....131.................@.334.776.....896..*....878.....729.......846...............641..
+............121*.....736....737......742.....&..............429.125..104................*......397................................389.......
+....................*.........*...............441....$......*...*...@....841*363...*...103.............*......#.....820....306...$..........
+.......772..........851.......580...................750...601....38...............715......./........54.832....226..-.......*............861
+.282/....*......264.....-.................63*...........................655...223..........360...........................887................
+........130......*....208....................2......976.............241...............969......588...........942.....................542....
+............782...208.....+....255........................918...476*......606*464....*.....447....=......674......979........+..............
+..............*...........979..........@..........@..........%.....................302........*...../...*..........@.......642........937...
+.....200...837....=..109.......525..476...../..564.......#......571..........129........295..623...647...825..........*385......-.....*.....
+.....*..........275.#....354....+........492............2...............303............+...........................991.......290...830......
+...246....912......................-.........104..940......440*931.595=../..........$.........741*......977....272......778*...../..........
+.........+.........@.......507.....803.........*...-.........................559*....328..........966.............%.........516..494.=......
+....*842..........464.........*........%750...338........253....386=..656........529......662............/..........757...............868...
+.258........................843...................413...*.............*.....513......359.%........588*16.359.........@.........#...%........
+..........498.......$..555......@....................*.....*10.....145........%........+......*.............................136.....980.....
+.....681......625.147.....*.....588..82%.397........376.677....633.........................523...607.372................................855.
+.....*.......*........439..311..............*.....................-.96.......938*815.839...........-.$....................%.........286.....
+...830........115......*.......908.........351...850....290..959/...*...................*.....*453................392......750.........*954.
+.....................-.627.......................+..................120............50.900..........818.....668......*.............848.......
+.....979*.....603.863......250.......*507.*751......411..../350...........@......../.........702...*...292..*........615...........*........
+...........................#......676...........140....*..................800.........$..895....#..93..*....51..295.........=....59.........
+...............594.801.84................335.....*..521...883.......=33.......801....917....&..........667.....*.........893..........485...
+........................+......................55........*....................-................#................895..................*......
+.........315.574..168...............................%.215.....123...........................966.........+...........774...526......11.......
+...........*...*...-........533...&766...........709............$....931....624......275.............@..189......$....*......#..........=836
+..........342..551.........+...........178..621...........561..................&.....*..............214.......207...822.....................
+.................................63...+......=......615..*.............499*825....167...................870.....................265.891.....
+......................758..........%.....+................953......&...................727/.....273............413...............=.....*818.
+....275..........81.....*.447.506/...67..242............+.........793...531*885...18...............*710........*...#....906.................
+.......-..645.....-.........*......#.........98*520.565..958.....................*............88..............66..911.............44*.......
+.........%.................455...@..298.......................=....510......-...366..162......*..........306.............354.........153....
+..................@....53......689...........#.....690.......318..*.........701............156....%519..*....386..917..........#............
+......718..754....606...............164.....28.303....*...........921..............342.558..................*......$..67.......682..........
+..............*.........586.....541*...........#.....756..931.....................*.......*.....92.......826..........-.....................
+662...........775.........*................../.............*...................419........510..$....................*........-822......-....
+...*..........................690.398....98...9...999....617............681.........360.............&......*508..594.437..............385...
+..647...709...............71....*...*.............$......................*..........*...539*864......826..................@.................
+.......$......529...........$.260..672.538+........................996.560.........639....................867.......922....891........695...
+..........$..*................................376..............922*............................875...........*.......*...........%....*.....
+....331.542..........932..409$..........815..*......................888.322..............205.....=.940..2#.......................411.635....
+....................*..........698*119.......65.511................*....+....-......34......=........*......$..574...971.85.*630............
+...104.311.....561#..556...........................*514.............663.....416.......................243.728.....&.....*...................
+...........521...........*131...979....227..556...........499....-..............895...42.........%..............=.........../............898
+............*..........*........../...*.....*........=....*.......614.....498..*......*...........612.205...138.664........190..............
+.........834...348..887.730...........475.404.....474..168..620.............$..175...549...............*.....*...................11..459....
+.....320........-................401..........261....................................................267......676..=629....-487.............
+......./..%142...............................*....................551................-......961.751.........&......................360......
+.............................41&.504......416.............144........+..........&.....438.......*...385....635.330................*.........
+....544.369..349..&.....=479..........995......566.80......*....595-....=..468..507............301..&.............*619...383.....498........
+.......*......*....950................*..........*..=....484.........258...-..............926..............=................*...............
+...............224..............*394...81.....904..............................*.........*................537......521...882...231.....*837.
+.......370...........625.....116................../11.866..288.........311.....375.708..67...*......380........170../...........&...........
+...600*..........811..*....=...........287................................*211......=.......987....*.......448......................-....92.
+............408.....+.405...17....32...+.................180...81................*.....*.........315......*..........-..............148.....
+.......*401...-....................&.....713.67......475*......*....707.852*...830..484.77.............902........505..=273.................
+..837...........................33........*...............492/.80...&......................203...686..........722...............178.........
+...*......191.791..........433....$....342..................................689........988..*....#.........@.....#.923*622......*...........
+.850.679.%....*.......376.-.....................308.812...742.........-.148....@.........$.663.........818..177..................839...388..
+......./...269...496...*........-....274*............*.....*........791..*........@....%.......*190.............*..241....127.........*.....
+.74.................*........912.........435..107..790...640...200......578.112..83....252..269...........970.823.....................875...
+...%..787.........515.305..........274.&.........*............*.......................................261...*..............+........&.......
+...........136.-........*.564.......*..635.....26../....438.469.................@............193.......*.....55.....244#...185..258.287.....
+............*...556...............245......855....928....*.................*61.370..74......-.........488...................................
+.....970....315...........999.65..........=...........928.....164.......431.........*...........370.....................#...909...468...471.
+.961..@..................%......../350.............*................746.............38....261......*.......301...278..750.....*......*.*....
+....*.................7.....................%...860.900....300.........*410..............*.........209.+98..*...............801....313.491..
+...845......%160.......=......=.....*......313.............*............................547...986............139.331../401..................
+........513........362...540..913..655.510..............483......@...#..670..651..433/...........*264.....43.....*............176...........
+211.892....*..253.....%...*...............*.....................645..16..................116...............%...309......*569....*.......+...
+.........402....*.83$...884......618.......465.............989..........................=....505..%..................101......974....871....
+...4..........565...................*....&.......297&.......*...........@....179..637...........*.199...924...-..713........&.....@.........
+...................@.367&.#308.....752...997.23...........396..........883....&..............306...........*.148../.........76.979...382-...
+.................677..........................*..933..................................637...............659...........678...................
+.....*...............445..........952...837.....*............755........795.....#.....=.....178*731..............855.....=..................
+......173.15.417......./.....180....*....*....328...607.........*.392...-.....495.546...............183...&.....-..................224......
+..........*.....*.............*......16...65.................772...*..............+........937...........981......92.....+.....164......833.
+.116.....149.225....*....287....................136..............240..242.749.............*....688.................=......49...-.......*....
+...&.............202.985..-...732*812.......................-../.....=......-.798.......533........468...30%.........................228....
+.........94...................................+798..&.....431...425............................929*............+............................
+.........*.......................704...982...........332.................447............307%................704...775%.......$973...90..424.
+..........711..253.....#...........*......*119..............486........#...........89...........438..666...............487..........*.......
+.....947..........*.....823..544....883............291.....@..........813............*.425..659*..........28..491.....+..........896........
+.............../...943......................590...*....145....414*969..............896....*.........622.........*.938.........=.............
+....@...#184.935.............................*.....71......$................84*.........825.....637...*.......528...*......990..............
+..745...............534..............58....901...........974...................637.....................87..........361......................